Skip to content

Releases: mstan/SuperMarioRPGRecomp

v0.0.5 - packaging update

Choose a tag to compare

@mstan mstan released this 22 Sep 01:46

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

Choose a tag to compare

@mstan mstan released this 19 Sep 19:17

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

Choose a tag to compare

@mstan mstan released this 12 Aug 00:31

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 capture from the Mods
    tab to write a coverage_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 into recomp/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/MSYS Argument list too long failures 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.sh succeeded 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.ini edit
    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

Choose a tag to compare

@mstan mstan released this 09 Aug 03:36

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 .json manifest and matching .jsonl journal.
    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.py accepts
    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
    (snesrecomp 4fa1b57), current launcher (recomp-ui ca27c83), and its
    current networking dependency (recomp-net 6d848d6).

Playthrough artifact checklist

  1. Use this unmodified Production release and leave
    SNESRECOMP_TIER2_MANIFEST and SNESRECOMP_TIER2_JOURNAL unset.
  2. Keep every tier2_super_mario_rpg_<UTC>_p<PID>.json and matching .jsonl
    file produced beside the executable/AppImage. Do not rename files into one
    another or discard earlier sessions.
  3. For a normally ended session, submit its final .json. If the session
    crashed or was killed before that file appeared, submit its same-stem
    .jsonl instead. Do not submit both files from the same session for merging
    because the final manifest already contains the journal's evidence.
  4. Keep crash reports and last_run_report.json separately as ordinary QA
    evidence; g_dispatch_log is 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.ini edit
    keyboard bindings only.
  • The game has no repo-owned config.ini; launcher settings and rom.cfg live
    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

Choose a tag to compare

@mstan mstan released this 06 Aug 01:59

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.