Skip to content

Releases: mstan/SuperMarioWorldRecomp

Super Mario World Recomp v0.12.0 - opt-in Lua playground

Choose a tag to compare

@mstan mstan released this 11 Sep 08:01
5fc466c

Optional Lua playground

This release adds opt-in Lua scripting over a localhost TCP server and a bundled 100-fireballs-per-second example. Hold A or S on the default keyboard layout (SNES Y/X) to produce the stream; release to stop firing. Movement and jumping still work.

Normal play is unchanged until you explicitly enable the server and load a script. The framework build option defaults OFF; these Windows/Linux packages include support, activated only by SNESRECOMP_LUA_PORT.

The lua/ folder contains 100_fireballs.lua, the Python TCP client, SMW helpers, instructions, and Lua's MIT license. On Linux, first launch copies writable examples beside the AppImage and preserves existing scripts.

Try it

On Windows, start the extracted game from PowerShell:

$env:SNESRECOMP_LUA_PORT = '4380'
Start-Process -FilePath .\SuperMarioWorldSNESRecomp.exe

After starting the game through the launcher, use Python 3:

python lua/lua_tcp.py load lua/100_fireballs.lua

Full Windows/Linux instructions: lua/README.md. TCP reset disables the script. To return to ordinary play, close the game and launch without SNESRECOMP_LUA_PORT.

Integration and validation

  • SMW is pinned to snesrecomp 266804e860560ff7084ed74258d803204b7d7bd0, merged in framework PR #71. Game integration: SMW PR #14.
  • Framework CI passed on Windows, Linux and macOS, including Lua build opt-out and real TCP tests.
  • Full gameplay tests passed from the extracted Windows ZIP and Linux AppImage: entity spawning/hits, exactly 100 projectiles in 60 frames, hold/release, standalone example, and reset.
  • Packaged launchers were visually checked. Windows also passed with the 16:9 mod enabled. AppImage state relocation and preservation of user Lua/config edits passed. Both binaries ran with Lua inactive.

Scope

The experimental stream uses a separate 256-projectile pool with native SMW movement/collisions. Extra shots use the native 256-pixel camera bounds and draw above the finished frame; SNES foreground priority/windows/color math are not reproduced for them. Lua and extra projectile state are not included in savestates. Stock USA single-player only; Lua is not enabled for co-op.

Supply your own Super Mario World (USA) ROM; no ROM is included. Linux users should mark the AppImage executable with chmod +x.

Super Mario World Recomp v0.11.1

Choose a tag to compare

@mstan mstan released this 25 Aug 05:35

What's new

This is a dependency refresh release for the public Super Mario World build.

  • Updated snesrecomp to include the latest host/runtime fixes, including
    scheduler-deadline unwind handling.
  • Updated recomp-ui to the current launcher, including the hidden disabled-mod
    feature cleanup and recent SNES gamepad binding UI.
  • Removed the obsolete game-local tools/sync_funcs_h.py; regen now uses the
    framework v2_sync_funcs_h.py tool.
  • Kept the stock title demo on the interpreter path to avoid the known generated
    bounce instability there.

Validation

  • Windows release build completed.
  • Linux AppImage build completed.
  • AppImage layout test passed: config, saves, ROM cache, and mods anchor beside
    the AppImage.
  • Smoke launch confirmed the Linux AppImage loaded the ROM, initialized SDL/audio,
    entered the main loop, and simulated the first frame.

Notes

  • A legally-obtained Super Mario World (USA) ROM is required and is not included.
  • Widescreen remains available from the launcher and defaults off.

v0.11.0 — experimental Smash Bros 64 mod catalog

Choose a tag to compare

@mstan mstan released this 12 Aug 02:37

Super Mario World Recomp v0.11.0

Highlights

  • Adds the default-off Mods catalog path for Super Mario World.
  • Adds Smash Bros 64 (Experimental) with Captain Falcon as the first character option.
  • Keeps Widescreen as an opt-in mod, defaulting to fixed 16:9 when enabled.
  • Includes MSU-1, Widescreen, and Captain Falcon in the release mod catalog without shipping local enabled-state.
  • Syncs the snesrecomp runtime with owner-resource support needed by opt-in external-ROM-backed mods.

Captain Falcon status

Captain Falcon is experimental and default-off. It requires the user to provide a verified Super Smash Bros. 64 US v1.0 owner ROM/resource and the approved Falcon owner cache path. Stock Mario remains the default supported experience when mods are off.

Release validation

  • Stock/no local mod state: launches 4:3 at 768x672 with no Falcon activation.
  • Mods enabled locally: launches fixed 16:9 at 1194x672.
  • Falcon activation trace: approved runtime cache loaded, audio active, controller handoff.
  • Windows package verified to include only mods/packages, not local mods/state.toml.
  • Linux AppImage layout test passed: state anchors beside the AppImage and payload stays read-only.

Artifacts

  • SuperMarioWorldRecomp-windows-x64-v0.11.0.zip
    • SHA-256: 10891CAFC63A6723D515E44692000DA6193104E0F49309A5B402C13C3FEFB79C
  • SuperMarioWorldRecomp-linux-0.11.0-x86_64.AppImage
    • SHA-256: 186763D4A1FB1868BE9F99388062B11B61717AA4E155B1E5A9FDD56E13CB877C

Super Mario World v0.10.1 - audio crackle fixed

Choose a tag to compare

@mstan mstan released this 06 Aug 01:58

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.

Super Mario World v0.10.0 — widescreen as a mod, Proton-safe zip, reworked AppImage

Choose a tag to compare

@mstan mstan released this 05 Aug 07:20

What's new

This release moves Super Mario World onto the current shared engine and
launcher, and brings its release packaging up to the same standard as the
Mega Man X builds — a Proton-safe Windows zip and a proper Linux AppImage.

Packaging

  • Fixed the Windows release archive so nested files use portable ZIP
    paths. Linux and Steam Deck extractors now rebuild the bundled
    assets/ hierarchy correctly, so a Windows build running through
    Proton finds the launcher's fonts and images instead of coming up
    blank. Previously 11 of 18 archive entries carried literal Windows
    backslashes.
  • Added release-packaging validation that rejects Windows-only ZIP entry
    names, and that refuses to package an executable which is not stamped
    with the version being released.
  • The Linux AppImage is now built and packaged the same way as Mega
    Man X's:
    • config.ini, keybinds.ini, rom.cfg, saves/ and mods/ live
      next to the .AppImage, never inside the read-only mount, so
      settings and saves survive an AppImage update and re-anchor if you
      move the file;
    • the recomp-ui launcher's assets/ are staged into the image, so the
      pre-boot launcher actually renders (previously missing);
    • drop your ROM beside the .AppImage and it is picked up
      automatically;
    • Steam Deck controller hints are exported so the built-in pad reads as
      a real gamepad rather than Steam's keyboard remap;
    • linuxdeploy/appimagetool are fetched and SHA-256 verified into the
      build tree, making packaging reproducible;
    • packaging fails the build unless a layout test proves state never
      leaks into the payload, a user config.ini edit survives a relaunch,
      and a moved .AppImage re-anchors its state.

Fixes

  • Fixed a Linux link failure: the MSU-1 environment export used the
    Windows-only _putenv on one code path. All environment exports now
    route through a single portable helper.
  • Crash diagnostics from CMake-built releases are now stamped with the
    real release version instead of dev.

Under the hood

  • Engine (snesrecomp) advanced 65 commits; launcher (recomp-ui)
    advanced 62 commits. Notable inherited work: SA-1 and DSP-1 support,
    hardened coverage-guided AOT promotion, Mode 7 widescreen margins, HUD
    anchor bands, production builds that omit developer observability rings,
    and a large launcher pass (setup wizard, video filters, controller gyro,
    netplay lobby work).
  • The launcher now stages only SNES controller art rather than every
    console's, and the widescreen override hooks are injected by CMake on
    both platforms, so the Windows and Linux builds are generated from an
    identical tree by construction.

Notes

  • A verified Super Mario World (USA) ROM is required and is not
    included.
  • Windows: extract the full archive, then run
    SuperMarioWorldSNESRecomp.exe. The bare .exe will not run without
    the bundled SDL3.dll, MinGW runtime DLLs and assets/.
  • Linux: chmod +x the .AppImage and run it. Keep it in a writable
    folder — that folder is where your config and saves live.
  • Widescreen (16:9) is a runtime toggle in the launcher, default off.

Super Mario World Recompiled v0.9.7 - fullscreen setting

Choose a tag to compare

@mstan mstan released this 21 Jul 04:47

What's new

  • Fullscreen setting restored in the launcher — Settings → Display → Fullscreen now cycles Off / Borderless / Exclusive (was lost in the RmlUi→ImGui launcher migration). The choice persists in config.ini and applies at boot; Alt+Enter still toggles at runtime.
  • Guest-timed SPC uploads and turbo audio recovery (PR #9).
  • Engine updated to latest main (widescreen HUD anchoring, interpreter coverage diagnostics, guest-frame-time APU coupling).

Notes

  • Windows zip only; unzip and run the exe. Settings are stored in config.ini next to the exe.

Super Mario World Recompiled v0.9.6 - shared ImGui launcher

Choose a tag to compare

@mstan mstan released this 20 Jul 16:22

Super Mario World Recompiled v0.9.6 — shared ImGui launcher

This release replaces the old launcher path with the current shared Dear ImGui
recomp-ui launcher. The pre-boot UI is now a self-contained SDL/OpenGL ImGui
window with DPI-independent controls, addressing the missing full launcher
reported under Steam Deck/Proton in issue #6.

  • Shared SNES launcher profile with ROM selection and verification.
  • Accessible controller, hotkey, audio, display, widescreen, and MSU-1 options.
  • Current launcher fonts, controller art, and game box art bundled in the
    Windows package.

Gameplay behavior is otherwise unchanged from v0.9.5 plus the current main
branch fixes.

v0.9.5 — Turbo / level-transition audio dropout fix

Choose a tag to compare

@mstan mstan released this 17 Jun 19:28

What's fixed

Audio no longer drops out at level transitions. Entering or exiting a level could silence all audio — music and sound effects — for the rest of the level. It was reliably reproducible with Turbo and happened occasionally at normal speed.

Root cause was in the APU sound-chip communication: when the game ran faster than real time, back-to-back commands to the same sound port collapsed together and the sound engine never saw the earlier one (e.g. the "play this song" command got lost behind a fade-out, leaving everything silent). The scheduler now guarantees the engine observes every distinct command, with no effect on normal-speed timing.

No gameplay or save changes. The game is authentic 256-wide by default — flip Widescreen 16:9 in the launcher (Settings).

ROM not included — provide your own legally-obtained dump.

Super Mario World — Linux AppImage (v0.9.5, beta)

Choose a tag to compare

@mstan mstan released this 17 Jun 19:28

Experimental Linux AppImage (Steam Deck / desktop Linux) — beta.

Includes everything in the v0.9.5 Windows release (the turbo / level-transition audio-dropout fix), plus Linux-specific fixes:

  • config.ini is now read correctly. Settings placed next to the .AppImage are now honored. Previously the AppImage looked inside its own read-only mount and silently ignored your file — so e.g. Widescreen = 1 never took effect on Linux. Fixed.
  • Native ROM file picker on Linux — uses zenity or kdialog if installed (otherwise pass the ROM path as an argument, or it's remembered in rom.cfg).

Enabling 16:9 widescreen

Put a config.ini next to the .AppImage containing:

[Graphics]
Widescreen = 1
WidescreenHud = 1

On launch the app logs where it reads config from: [Launcher] Config/saves anchored to '<dir>'.

ROM not included — provide your own legally-obtained dump.

v0.9.4 — Save migration runs before the launcher

Choose a tag to compare

@mstan mstan released this 14 Jun 22:38

Minor follow-up to v0.9.3: the legacy-save migration (saves/smw.srmsaves/save.srm) now runs before the launcher opens, so the launcher's SAVES panel shows your carried-forward save on the first launch after upgrading (previously it appeared from the second launch). Behavior is otherwise identical.