Skip to content

Releases

v0.2.5

Choose a tag to compare

@mstan mstan released this 01 Nov 02:40

Owner approved all five NES title builds after the final combined technical gate. This release includes the qualified native execution/presentation optimization package. Exact scoped measurements and limitations: https://github.com/mstan/nesrecomp/blob/886692b/docs/validation/2026-10-31-final-campaign-handoff.md

Updated nesrecomp pin, qualified per-title optimization policy and verified Windows runtime dependencies. Final standard-game comparisons are neutral/inconclusive; gains from separate scoped workloads are not attributed to every title.

SHA256 (MetroidNESRecomp-0.2.5-USA-NTSC-windows-x64.zip): b030656354aefce66a44267d7c1be50731665e38db3a0530c2a99267d191f059. No ROM is included; use your own supported dump. Native saves/settings are preserved.

Metroid 0.2.4

Choose a tag to compare

@mstan mstan released this 27 Oct 16:55

Updated to NESRecomp 0.4.3 at 721c68c313e729710203f6825e9bcb9042eb5bcc. This Windows x64 build retains the qualified native PPU/APU services and packed PPU path. The matched stock workload has a 13.94% median CPU reduction.

Performance figures describe five alternating 1,200-frame gameplay pairs with independent pre/post baseline controls on the same host, SDL software rendering and emulated/mixed/queued audio through dummy output. Expanded custom-mode timing is unverified; no every-mode performance claim.

All 124 generated C units across the release suite match the qualified generator output. This exact shipping executable passes 720-frame old/new hardware, PCM, picture and current-build save/load replay comparisons, in addition to the earlier full 13-profile feature gate and owner visual approval. Native in-game saves remain separate from disposable build-specific execution snapshots.

One archive contains the game, required runtime libraries and optional mod catalog. No ROM, owner settings or saves are included.

Full validation and measured scope.

Title commit: caccee62a67daea083fac8af36b1d0065b902071.

v0.2.3 - cartridge header compatibility

Choose a tag to compare

@mstan mstan released this 19 Oct 18:26
f33f6d4

Fixes launcher verification succeeding but Play rejecting equivalent original ROM headers. This build uses the shared cartridge correction and regenerated native code. Legacy iNES, NES 2.0 and multi-region containers are accepted for the matching game data and resolved board; board/RAM/console/program-data checks and qualified regional timing remain enforced. No player setting is required.

Validation: 900-frame native/interpreter/header comparisons and real launcher Play pass. Extracted production ZIPs pass dependency and header-boot checks. Existing UI pin, renderer, enhancements and normal player audio defaults are retained. Automated tests use muted output. These checks cover header/startup regression, not a new complete mechanics audit. Native Linux x86_64 recheck passed under Ubuntu/WSL with system SDL2 selected explicitly: released-source game builds, 900-frame legacy/NES 2.0/multi-region native/interpreter comparisons with matching Windows state hashes and pixels, and real SDL/recomp-ui launcher Play under private Xvfb/software OpenGL. Linux GCC/Clang header contracts and source CLI generation/static-library checks also pass. The published Windows archives are unchanged. Default SDL2 discovery is fixed on current engine/game source branches (mstan/nesrecomp#77). For immutable release-tag source, explicitly set SDL2_DIR to the native system SDL2 CMake package, or build the latest source branch for automatic detection.

Extract the entire Windows ZIP and select your own matching original ROM. USA retail inputs are preferred where available. No ROM, player settings, saves, logs or dumps are included. CD Speed and Fast Loading packages are absent. SHA256SUMS.txt covers every archive.

The published download is USA/NTSC. Explicit Europe/PAL source builds also passed the header/interpreter/launcher checks.

Source changes: #3.

v0.2.2 - Metroid startup diagnostics

Choose a tag to compare

@mstan mstan released this 19 Oct 15:37
294e096

Windows startup diagnostics are now automatic, starting before the launcher opens. After reproducing a failure, send the diagnostics folder beside the executable, including the timestamped .log and matching .dmp if created. Read-only installations fall back to %LOCALAPPDATA%\NESRecomp\diagnostics. Nothing uploads automatically.

If the executable cannot start at all, run Collect-Diagnostics.cmd from the extracted folder and send its diagnostics output. This also records loader exit codes, GPU driver details and stdout/stderr before the game can create its own log. See DIAGNOSTICS.md in the ZIP.

Fixed packaging: include the required Microsoft C++ runtime DLLs. The previous Windows ZIP relied on the VC redistributable already being installed; missing runtimes can prevent startup before the launcher.

Validation: clean-extraction launcher and real Play-to-game startup; exact previous-release and interpreter hashes/picture over a 900-frame gameplay route; runtime dependency inventory; matching retained crash-analysis symbols; missing-ROM logging; actual pre-main DLL-loader failure collection; LOCALAPPDATA fallback. Windows crash-handler drills include access violation, abort, stack overflow, and a fault before launcher initialization. The reporter's specific crash was not reproduced on this host.

Windows x64, USA/shared NTSC ROM required. No ROM, player settings/saves or generated diagnostic files are included. Normal audio defaults and existing renderer/mod defaults are retained.

Source: 294e096bce8acb8ab5508f3fffeced56cb53dc23. Changes: #2.

v0.2.1 — Metroid coverage update

Choose a tag to compare

@mstan mstan released this 18 Oct 12:07
6c281f2

USA cycle coverage adds 8,664 observed native starts across five areas, original room loaders, combat, ending and credits. The retained legacy source also includes its qualified music/enemy continuations and save-state tail-resume correction.

All 232 retained replays remain exact against prior native/interpreter hashes, pictures and full states; interpreted ROM cycles fall from 428,886,431 to 804, with zero RAM fallback. Seven enhancement modes and fresh-process replay also pass. Assisted original Kraid/Ridley victories, final-chamber Zebetite/glass/Mother Brain damage and escape timer, ending-elevator collision, visible ending and credits pass stock and 32:9. Actual widened crawler packets have 56 aligned tiles and nine visible margin residents. The final-chamber checkpoint contains one active Zebetite; the full approach and escape traversal are separate. Use matching renderer/actor settings for visual state QA; stock-origin snapshots can lack widened room metadata until a room streams. Expanded progression qualification covers USA; PAL retains its earlier corridor scope.

Windows x64. Matching North American/shared NTSC retail ROM required; no ROM is included. Extracted production package launcher/settings and representative gameplay replays pass. Audio is enabled at normal volume by default; optional enhancements retain their existing defaults. ZIPs exclude ROMs, BIOS files, saves, settings and debug artifacts.

Source: 6c281f253c9b4ac80b3c2fa18bb0ef3f78a1b7ec. Source changes: #1.

v0.2.0 — cycle CPU default

Choose a tag to compare

@mstan mstan released this 05 Oct 06:06

The cycle CPU backend is now the default. The former backend remains available through explicit source-build selection.

Includes separate USA/NTSC and Europe/PAL Windows archives with adaptive widescreen and optional voxel/first-person Mods. USA widescreen, PAL widescreen and USA first-person passed the owner playtest.

Validation covers the recorded short owner playtests and focused automated checks. Full-game completion and new Linux/macOS runtime qualification are not claimed by this Windows release.

Game archives contain no ROM or personal save data. Select the matching original ROM at first launch. Legacy binary save states require the retained legacy backend; they do not load in cycle mode. Existing cartridge battery/password progress is preserved through the documented storage/import workflow.

Source default: main at 189578954624b6a1f248481d6728baf10cedf359.

v0.1.0 — Password Save System

Choose a tag to compare

@mstan mstan released this 18 Jun 07:07

Metroid (NESRecomp) v0.1.0 — Password Save System

A native PC build of Metroid, statically recompiled from the NES ROM's 6502 code
to C with the NESRecomp framework. No ROM is
included — select your own legally-obtained Metroid (USA) ROM on first launch.

Headline: password save system (synthetic SRAM)

Metroid saves with a 24-character password, not battery SRAM. This build gives it
the same save UX as a battery game:

  • Save-anywhere capture — as you play, the game's own password encoder is run
    to produce a valid password for your current progress, saved to metroid.srm
    next to the exe (plus a timestamped history in metroid_password_log.txt so you
    can roll back to an earlier point).
  • Auto-prefill — on the "PASS WORD PLEASE" screen, your saved password is typed
    in for you; just press Start to resume. No more copying 24 characters by hand.
  • Launcher SAVE panel — the pre-boot launcher shows your current password and
    lets you edit it (or paste an older one, with a confirm step).

The captured/edited password is a real Metroid password (correct checksum), so it
round-trips through the game's own decode.

Also in this release

  • Fix: out-of-band capture is stack-balanced. The save-anywhere capture calls
    the game's encoder out-of-band; it now snapshots/restores the full CPU + stack so
    it can never perturb live state. (An earlier in-development version leaked stack
    corruption → garbled health, a stray "TIME" display, eventual lockup — fixed.)
  • Regression tests (tests/password.test.ts) that pin the capture as
    side-effect-free and deterministic.
  • Rolled the nesrecomp framework pin forward to pick up the shared save_ram
    backend + launcher password panel.

Controls

Arrow keys = D-Pad, Z = A, X = B, Enter = Start, Tab = Select.
F5 turbo, F6 save state, F7 load state. Gamepads supported; all bindings are
configurable in keybinds.ini.

Notes

This is an early (pre-1.0) recompilation and a work in progress; some gameplay/
hardware behaviors may still differ from original hardware.

Metroid — Linux (AppImage, initial/experimental)

Choose a tag to compare

@mstan mstan released this 14 Jun 22:09

Initial experimental Linux release — x86_64 AppImage.

Bring your own ROM. Place your legally-dumped Metroid (.nes) ROM in the same folder as the AppImage; it's auto-detected at launch. No ROM is included.

Run it

chmod +x Metroid-x86_64.AppImage
./Metroid-x86_64.AppImage          # add --appimage-extract-and-run if FUSE is unavailable

Steam Deck / controllers — the AppImage reads the controller natively. In Desktop mode, launch through Gaming Mode (or set a Gamepad controller layout) so face buttons aren't remapped to keyboard keys (otherwise B can register as Esc and quit).

Production build — no debug server / tooling. This is an early, experimental Linux port; expect rough edges. Source: this repo.

v0.0.2

Choose a tag to compare

@github-actions github-actions released this 07 Apr 22:06

Full Changelog: v0.0.1...v0.0.2


macOS (Apple Silicon) build — MetroidNESRecomp-macos-arm64.zip

Native arm64 .app (SDL2 bundled, ad-hoc signed). ROM not included.

Status: Largely untested / experimental. Please report any bugs by filing an issue on the repository.