Repository navigation
Releases: mstan/SuperMarioRPGRecomp
Release list
v0.0.5 - packaging update
Super Mario RPG 0.0.5 — packaging update.
Rendering
Stock 4:3 is the default. The experimental adaptive widescreen renderer is
opt-in through the Mods page, and enabling it turns on the enhanced field
renderer with it — adaptive view is never applied to the stock renderer.
Mods
Both packages now ship in the archive (the widescreen enhancement and the
coverage-proof diagnostic), staged and verified by the build.
Packaging
Windows packaging no longer copies a hand-written list of runtime DLLs into the
zip. That list was a snapshot of the build's dependencies on the day it was
written, and it silently went stale whenever a newer SDL3 pulled in something
new — which is exactly how a sister project shipped a zip that could not start
at all (0xc000007b / 0xc0000135).
The package is now derived from the executable's real dependency graph, and the
finished zip is re-checked: every dependency must resolve inside it, and every
binary must be 64-bit. Anything missing or wrong-architecture fails the build
instead of shipping. This release was verified by launching it with PATH
stripped to C:\Windows\system32;C:\Windows.
Install
Extract the whole folder and run the executable. Supply your own
legally-obtained Super Mario RPG (USA) ROM when prompted — the ROM is never
redistributed.
Linux: not rebuilt for this release; the v0.0.4 AppImage remains current.
Super Mario RPG v0.0.4 - Experimental widescreen renderer
Stock 4:3 rendering remains the default. This release replaces the previous
widescreen implementation with an opt-in custom renderer, visibly labeled
Widescreen (Experimental) in Mods.
What's new
- Adaptive custom rendering. Enable Widescreen (Experimental) and choose
Fit to window, 16:9, or 21:9 to reveal additional horizontal field scenery
and actors. The guest PPU and game logic retain their native viewport. - Original renderer when disabled. Turning the mod off restores the
original PPU renderer at 4:3. The playtest launcher no longer enables
widescreen automatically, and old environment overrides cannot bypass the
Mods selection. - Authored backgrounds beyond the camera. Bowser's Keep's red-cloud sky
now fills the expanded view. Standard battle backdrops expose only existing
artwork: the first castle arena has eight extra SNES pixels per side. The
title has no additional horizontal artwork and stays native. - Safer packaged defaults. Release archives include the mod catalog
without developer mod selections. Linux updates preserve saved mod choices.
Validation
- Windows and Linux release builds and renderer tests passed.
- Both packaged builds passed fresh stock, enabled widescreen, and disabled
again launch checks. Stock images matched before and after the toggle. - The packaged launcher visibly labels the widescreen feature Experimental
and leaves it unchecked by default. - Linux AppImage layout checks passed for writable state placement and
preservation of saved mod choices. Castle exterior and battle capture
replays matched the Windows renderer output exactly. - Earlier renderer validation covered 32 captured scenes and matched
native/widescreen guest-state traces through the first castle battle.
Known limitations
The widescreen renderer is experimental. Some actor transforms, shadows,
effects, unusual overlaps and map boundaries remain incomplete in the added
area. Unsupported scenes keep their native view. The full game has not been
verified end to end, and existing audio timing issues remain under investigation.
Install and upgrade
Extract the complete Windows ZIP, or make the Linux AppImage executable.
Supply your own verified Super Mario RPG (USA) ROM; no ROM is included.
Use Mods to enable Widescreen (Experimental), or leave it disabled for 4:3.
Existing mod choices are preserved when updating. If an earlier build had
widescreen enabled, disable it once in Mods to return to the original renderer.
v0.0.3
Patch release for the built-in Mods catalog, opt-in coverage proof bundles,
and the first merged early-route user coverage profile. This is still
preview quality: an early-game replay segment has been checked against the
regenerated build, but the full game has not been verified end to end by a
human playthrough.
What's new
- Built-in Mods tab support. Release builds now ship a preloaded SMRPG mod
catalog so recomp-ui's Mods page shows game-owned entries. - Widescreen moved to a mod. Adaptive widescreen is no longer a Display
setting. Enable the built-in Widescreen mod from the Mods tab; its HUD option
selects split-edge or authentic centered HUD placement. - Coverage proof capture mod. Enable
Coverage proof capturefrom the Mods
tab to write acoverage_bundles/smrpg_<timestamp>_p<PID>/folder with the
merge-ready manifest, append-only journal, summary, and saves when present. - Merged early-route coverage. The first user-provided early-game coverage
bundle was imported intorecomp/tier2_coverage.json, raising the profile to
1,939 discoveries and 5 RAM routines. - Analyzer scaling fix. The shared native analyzer now reads large coverage
root sets from temporary files instead of expanding them onto the process
command line, avoiding Windows/MSYSArgument list too longfailures during
regeneration. - SDL3 release path. SDL3 is the default desktop backend and was used for
the validated Windows build.
Validation
- SMRPG coverage merge tests passed.
tools/regen.shsucceeded with the merged coverage profile.- Windows SDL3 release build succeeded and smoke-booted with 2 Mods-tab
features loaded. - A user replayed roughly the same early-game segment against the regenerated
build and reported it played correctly.
Known limitations
- Static recompilation coverage remains small: the generated manifest has 2
AOT-eligible variants and 8 LLE-only variants. Other code continues through
the correctness-floor interpreter. - The imported coverage proves the profile is mergeable and rebuildable; it
does not prove every observed target is trusted native/static code. - The full game still needs a completed end-to-end human playthrough.
- Gamepad bindings remain fixed in code. The launcher and
keybinds.iniedit
keyboard bindings only.
Install
Extract the Windows zip or make the Linux AppImage executable, place your own
verified Super Mario RPG (USA) ROM beside it, and run it. The ROM is not
included; expected hashes are documented in the README.
Super Mario RPG v0.0.2 - coverage QA patch
Patch release for a full production playthrough and coverage/QA pass. This is
still preview quality: automated qualification is strong, but the game has
not yet been verified end to end by a human playthrough.
What's new
- Loss-resistant dispatch-miss capture. Production builds now record the
complete recompiler-actionable miss key(site, target, M/X, kind): direct
dispatch/bank misses and call/jump gaps discovered while interpreting. - Append-only crash recovery. Each distinct miss is appended to a JSONL
journal and flushed before its missing target executes. A crash or forced
termination can therefore leave useful coverage even when the final report
was never written. - No cross-run overwrite. With the default settings, every launch creates
a unique timestamp-and-PID.jsonmanifest and matching.jsonljournal.
The in-memory set grows as needed instead of silently stopping at the former
4,096-tuple ceiling. - Merge tooling and guardrails.
tools/merge_tier2_coverage.pyaccepts
clean-exit manifests and recovery journals, preserves pending outcomes, and
rejects torn journal lines. The new behavior has dedicated automated tests. - Current shared dependencies. The game pins the validated capture runtime
(snesrecomp4fa1b57), current launcher (recomp-uica27c83), and its
current networking dependency (recomp-net6d848d6).
Playthrough artifact checklist
- Use this unmodified Production release and leave
SNESRECOMP_TIER2_MANIFESTandSNESRECOMP_TIER2_JOURNALunset. - Keep every
tier2_super_mario_rpg_<UTC>_p<PID>.jsonand matching.jsonl
file produced beside the executable/AppImage. Do not rename files into one
another or discard earlier sessions. - For a normally ended session, submit its final
.json. If the session
crashed or was killed before that file appeared, submit its same-stem
.jsonlinstead. Do not submit both files from the same session for merging
because the final manifest already contains the journal's evidence. - Keep crash reports and
last_run_report.jsonseparately as ordinary QA
evidence;g_dispatch_logis diagnostic-only and is not a coverage input.
A complete collection should report overflowed_tuples: 0 and
journal_write_failures: 0. If either counter is nonzero, retain all files and
report it with the run diagnostics.
Validation
- Framework C harness: all tests passed, including 4,354 distinct synthetic
tuples (beyond the old fixed cap), pre-execution journaling, unique output
paths, and abnormal-exit recovery behavior. - SMRPG merger tests: all passed, including union/deduplication and rejection
of a torn JSONL record. - Native Windows Production desktop and headless builds succeeded. Three
normal runs produced exact manifest/journal sets with zero capture failures;
a forced termination preserved all 104 flushed records without a final
manifest. - A deterministic one-count audio underrun in the 3,600-frame headless gate is
unchanged from v0.0.1's framework pin and is tracked separately; the
599-frame smoke gate passes.
Known limitations
- The video output and full game flow still need the human playthrough this
release is intended to support. - Static recompilation coverage remains small (2 qualified exact AOT variants);
other code continues through the correctness-floor interpreter. - Gamepad bindings remain fixed in code. The launcher and
keybinds.iniedit
keyboard bindings only. - The game has no repo-owned
config.ini; launcher settings androm.cfglive
beside the executable.
Install
Extract the Windows zip or make the Linux AppImage executable, place your own
verified Super Mario RPG (USA) ROM beside it, and run it. The ROM is not
included; expected hashes are documented in the README.
Super Mario RPG v0.0.1 - first release
Audio: family-wide crackle fixed
The shared engine retired a hardcoded 534 output samples per audio callback
regardless of how many the host actually asked for, so consumption tracked the
callback rate and ignored the callback size. Any host not asking for exactly
534 drove the DSP output ring permanently out of balance.
Measured on the Super Mario Kart port before the fix: 17.8 k samples/s consumed
against 32.04 k/s produced, the ring pinned at its cap, and 43% of every audio
sample generated was discarded - 384,032 of them carrying audible music - in
64,935 separate drop runs. Tempo survived because the drops landed as thousands
of very short runs per second, which is why this was heard as static rather than
as obviously wrong pitch.
The consumer now retires exactly as many samples as it emits frames, converts
the SPC's native 32040 Hz onto the device rate with continuous-phase
interpolation, and steers ring occupancy with a +/-0.5% servo (about 8 cents,
well below audibility) so the guest and the audio device can no longer drift
apart. Starvation fades over 64 frames instead of cutting to silence.
After the fix, same measurement: 0 samples dropped, 0 audible drops, 0 drop
runs, occupancy stable, consumed/produced 0.999, no steady-state underruns.
Engine: snesrecomp 1c271f9 + ad7860b. Launcher: recomp-ui 58e9d72.
Known limitations
- The video output has not been verified by a human playthrough. Qualification
to date is automated attract-loop and headless soak metrics only. - No config module: this build does not read or write config.ini.
- The launcher's rebind page can save keybinds.ini, but the game does not read it
back; key bindings are currently fixed.