From a286c390fa6299dd6027999c3980fcc15fb2c934 Mon Sep 17 00:00:00 2001 From: Matthew Stanley <1379tech@gmail.com> Date: Sun, 23 Aug 2026 00:22:02 -0700 Subject: [PATCH] Prepare v0.4.3-alpha test release --- CMakeLists.txt | 2 +- README.md | 39 +++++++------ docs/RELEASE-0.4.3-alpha.md | 58 +++++++++++++++++++ launcher/recomp-ui/launcher_main.cpp | 25 +++++--- .../tests/launcher_mod_provider_test.cpp | 13 +++++ ndsrecomp.pin | 2 +- 6 files changed, 112 insertions(+), 27 deletions(-) create mode 100644 docs/RELEASE-0.4.3-alpha.md diff --git a/CMakeLists.txt b/CMakeLists.txt index ae3ba49..18561db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.20) -project(MetroidPrimeHuntersRecomp VERSION 0.4.2 LANGUAGES C CXX) +project(MetroidPrimeHuntersRecomp VERSION 0.4.3 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/README.md b/README.md index 6f1793c..8a3af96 100644 --- a/README.md +++ b/README.md @@ -20,41 +20,43 @@ Click the image to watch the gameplay preview on YouTube. ## Current Release Latest release: -**[v0.4.2-alpha](https://github.com/mstan/MetroidPrimeHuntersRecomp/releases/tag/v0.4.2-alpha)**. +**[v0.4.3-alpha](https://github.com/mstan/MetroidPrimeHuntersRecomp/releases/tag/v0.4.3-alpha)**. Downloads: - Windows: - `MetroidPrimeHuntersRecomp-windows-x64-v0.4.2.zip` + `MetroidPrimeHuntersRecomp-windows-x64-v0.4.3.zip` - Linux: - `MetroidPrimeHuntersRecomp-linux-v0.4.2-x86_64.AppImage` + `MetroidPrimeHuntersRecomp-linux-v0.4.3-x86_64.AppImage` This is the first release line in the ndsrecomp ecosystem and it is still very early. Campaign entry, widescreen output, Prime-style controls, gamepad support, and Wiimmfi lobby connectivity have all seen active bring-up, but this should still be treated as an alpha test build rather than a polished game release. -New in v0.4.2: the developer Tab turbo shortcut is disabled in public builds -by default so it no longer conflicts with MPH's default virtual stylus binding. -The v0.4.1 Nintendo WFC reconnect and same-machine local Multi-Card runtime-bank -fixes remain included. The v0.4.0 HD Rendering mod is still available on the -Mods page: it raises the 3D engine above one sample per DS pixel (up to 4x) and -filters decoded textures, while the 2D layers stay native. It is off by default; -enable it under Mods and pick the internal resolution and texture upscaling that -suit your GPU. +New in v0.4.3: the launcher now passes the selected fullscreen and stacked/ +separate window settings through to the runner, and the pinned framework +contains compute-renderer fixes for native-HD presentation, high-resolution +vertex coordinates, and an Intel OpenGL uniform-update crash. The v0.4.2 Tab +turbo fix and the v0.4.1 Nintendo WFC reconnect and same-machine local +Multi-Card runtime-bank fixes remain included. The v0.4.0 HD Rendering mod is +still available on the Mods page: it raises the 3D engine above one sample per +DS pixel (up to 4x) and filters decoded textures, while the 2D layers stay +native. It is off by default; enable it under Mods and pick the internal +resolution and texture upscaling that suit your GPU. ## Quick Start Windows: -1. Download and fully extract the `v0.4.2-alpha` Windows ZIP. +1. Download and fully extract the `v0.4.3-alpha` Windows ZIP. 2. Put your own Metroid Prime Hunters USA revision-0 `.nds` ROM next to `MetroidPrimeHuntersRecomp.exe`. 3. Run `MetroidPrimeHuntersRecomp.exe` and press Play. Linux: -1. Download the `v0.4.2-alpha` AppImage. +1. Download the `v0.4.3-alpha` AppImage. 2. Put your own Metroid Prime Hunters USA revision-0 `.nds` ROM next to the AppImage. 3. Run the AppImage. @@ -180,11 +182,12 @@ console. If you move or delete one without the other, the game will report that the WFC ID from the Nintendo DS and the Game Card do not match. Keep them together, or back them up together. -The v0.4.2 patch disables the public default Tab turbo shortcut, which could -conflict with MPH's virtual stylus binding when focus moved between the two DS -screen windows. The v0.4.1 reconnect fix remains included: the validated -reconnect probe reaches Nintendo WFC three times in one run without error 52200. -Online play remains experimental beyond that and may still disconnect or desync. +The v0.4.3 patch keeps the v0.4.2 public Tab turbo default disabled, and also +fixes launcher fullscreen/layout argument forwarding plus several compute +renderer HD/Intel compatibility paths. The v0.4.1 reconnect fix remains +included: the validated reconnect probe reaches Nintendo WFC three times in one +run without error 52200. Online play remains experimental beyond that and may +still disconnect or desync. The Wi-Fi implementation is built on [melonDS](https://github.com/melonDS-emu/melonDS)'s Wi-Fi work in the shared diff --git a/docs/RELEASE-0.4.3-alpha.md b/docs/RELEASE-0.4.3-alpha.md new file mode 100644 index 0000000..7d1aa31 --- /dev/null +++ b/docs/RELEASE-0.4.3-alpha.md @@ -0,0 +1,58 @@ +# MetroidPrimeHuntersRecomp v0.4.3-alpha + +Patch release after `v0.4.2-alpha`. + +## Included + +- Pins ndsrecomp to `9f2f8f3f531fb084a15f4d924e875334d9d8209d`. +- Passes the launcher Fullscreen setting through to the runner as + `--fullscreen off|borderless|exclusive`. +- Honors the launcher's Stacked/Separate window setting instead of forcing + separate windows whenever Adaptive Widescreen or Prime Controls are enabled. +- Guards the compute renderer's texture-size uniform update so Intel OpenGL + drivers do not receive `InvTextureSize` writes while a no-texture raster + program is current. +- Enables melonDS high-resolution vertex coordinates when internal resolution + is above 1x, reducing native-grid wobble in HD rendering. +- Allows the direct OpenGL top-screen presenter for native-HD output even when + Adaptive Widescreen is off. +- Keeps native-width direct-presenter output at 4:3 with black bars instead of + stretching it across wide/fullscreen windows. +- Retains the v0.4.2 public Tab turbo default-off fix and the v0.4.1 Nintendo + WFC reconnect and same-machine local Multi-Card runtime-bank fixes. + +## Validated scope + +- ndsrecomp Windows runner build succeeded; all 15 runner tests passed. +- ndsrecomp Linux runner build succeeded; all 15 runner tests passed. +- MPH launcher `mph_mod_provider_test` passed on Windows and Linux. +- Windows release package built with `tools/build-windows.ps1 -Version 0.4.3`. +- Linux AppImage built with `tools/build-linux.sh --version 0.4.3`; AppImage + layout validation passed. + +## Validation Needed + +- Affected Intel OpenGL users should retest the startup crash / blank-screen + path. +- HD-rendering users should visually compare native-HD upscaling, texture + wobble, mission briefing/FMV aspect ratio, and Adaptive Widescreen behavior. +- Window-setting reporters should retest Stacked, Separate, Borderless + fullscreen, and Exclusive fullscreen from the launcher. + +## Known limits + +- Steam Deck / older-glibc compatibility is not fixed by this release. +- European ROM support is not included. +- Online cross-machine play remains unvalidated. +- Local wireless has been validated on one machine only. +- Several renderer compatibility, adaptive-widescreen visibility, and + performance issues remain under active investigation. + +## Artifact + +- `MetroidPrimeHuntersRecomp-windows-x64-v0.4.3.zip` +- SHA-256: + `0684C524816CD8874571B5E54EC7BA1CED6594924C6CEED7877D34B883497018` +- `MetroidPrimeHuntersRecomp-linux-v0.4.3-x86_64.AppImage` +- SHA-256: + `18d60c3fd26f2812aa808f64309f5b1e33614bcbcd62128561d4cbe486d9fb0e` diff --git a/launcher/recomp-ui/launcher_main.cpp b/launcher/recomp-ui/launcher_main.cpp index f5833f7..f1a5cd5 100644 --- a/launcher/recomp-ui/launcher_main.cpp +++ b/launcher/recomp-ui/launcher_main.cpp @@ -1236,8 +1236,20 @@ void show_launch_error(const char* message) { #endif } +const char* runner_screen_layout_arg(int display_layout) { + return display_layout == 1 ? "separate" : "stacked"; +} + +const char* runner_fullscreen_arg(int fullscreen) { + switch (fullscreen) { + case 1: return "borderless"; + case 2: return "exclusive"; + default: return "off"; + } +} + bool launch_runner(const std::filesystem::path& game_dir, const char* rom, - int display_layout, bool adaptive, + int display_layout, int fullscreen, bool adaptive, const ModState& mods, int supersampling, int antialiasing, const char* expected_sha1) { @@ -1327,10 +1339,8 @@ bool launch_runner(const std::filesystem::path& game_dir, const char* rom, quote(runner.wstring()) + L" " + quote(bios.wstring()) + L" --interactive --rom " + quote(rom_wide) + L" --config " + quote(config.wstring()) + - L" --screen-layout " + - (adaptive || mods.prime_controls || display_layout == 1 - ? L"separate" - : L"stacked") + + L" --screen-layout " + widen(runner_screen_layout_arg(display_layout)) + + L" --fullscreen " + widen(runner_fullscreen_arg(fullscreen)) + L" --adaptive-widescreen " + (adaptive ? L"top" : L"none") + // Inert unless the HD mod is on, so the faithful native output stays @@ -1406,8 +1416,8 @@ bool launch_runner(const std::filesystem::path& game_dir, const char* rom, append_arg(args, "--rom", rom); append_arg(args, "--config", config.string()); append_arg(args, "--screen-layout", - adaptive || mods.prime_controls || display_layout == 1 - ? "separate" : "stacked"); + runner_screen_layout_arg(display_layout)); + append_arg(args, "--fullscreen", runner_fullscreen_arg(fullscreen)); append_arg(args, "--adaptive-widescreen", adaptive ? "top" : "none"); append_arg(args, "--internal-resolution", std::to_string(mods.hd_rendering @@ -1630,6 +1640,7 @@ int main(int argc, char** argv) { save_mod_state(mod_state); } return launch_runner(exe, selected_rom, settings.display_layout, + settings.fullscreen, mod_state.adaptive_widescreen, mod_state, settings.supersampling, diff --git a/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp b/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp index fd209cb..cbecf01 100644 --- a/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp +++ b/launcher/recomp-ui/tests/launcher_mod_provider_test.cpp @@ -13,6 +13,19 @@ bool require(bool condition, const char* label) { } // namespace int main() { + if (!require(std::strcmp(runner_screen_layout_arg(0), "stacked") == 0, + "stacked layout arg")) return 88; + if (!require(std::strcmp(runner_screen_layout_arg(1), "separate") == 0, + "separate layout arg")) return 89; + if (!require(std::strcmp(runner_fullscreen_arg(0), "off") == 0, + "fullscreen off arg")) return 90; + if (!require(std::strcmp(runner_fullscreen_arg(1), "borderless") == 0, + "fullscreen borderless arg")) return 91; + if (!require(std::strcmp(runner_fullscreen_arg(2), "exclusive") == 0, + "fullscreen exclusive arg")) return 92; + if (!require(std::strcmp(runner_fullscreen_arg(99), "off") == 0, + "fullscreen invalid clamps to off")) return 93; + { const std::filesystem::path root = std::filesystem::temp_directory_path() / diff --git a/ndsrecomp.pin b/ndsrecomp.pin index e498386..caac88a 100644 --- a/ndsrecomp.pin +++ b/ndsrecomp.pin @@ -1 +1 @@ -9ddd3a35a8d96d374acb39497e40e6bce46b99ea +9f2f8f3f531fb084a15f4d924e875334d9d8209d