Releases: mstan/SuperMarioWorldRecomp
Release list
Super Mario World Recomp v0.12.0 - opt-in Lua playground
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.exeAfter starting the game through the launcher, use Python 3:
python lua/lua_tcp.py load lua/100_fireballs.luaFull 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
What's new
This is a dependency refresh release for the public Super Mario World build.
- Updated
snesrecompto include the latest host/runtime fixes, including
scheduler-deadline unwind handling. - Updated
recomp-uito 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
frameworkv2_sync_funcs_h.pytool. - 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
Super Mario World Recomp v0.11.0
Highlights
- Adds the default-off Mods catalog path for Super Mario World.
- Adds
Smash Bros 64 (Experimental)withCaptain Falconas 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
snesrecompruntime 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
768x672with 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 localmods/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
- SHA-256:
SuperMarioWorldRecomp-linux-0.11.0-x86_64.AppImage- SHA-256:
186763D4A1FB1868BE9F99388062B11B61717AA4E155B1E5A9FDD56E13CB877C
- SHA-256:
Super Mario World v0.10.1 - audio crackle fixed
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
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/andmods/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
.AppImageand 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/appimagetoolare 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 userconfig.iniedit survives a relaunch,
and a moved.AppImagere-anchors its state.
Fixes
- Fixed a Linux link failure: the MSU-1 environment export used the
Windows-only_putenvon 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 ofdev.
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.exewill not run without
the bundledSDL3.dll, MinGW runtime DLLs andassets/. - Linux:
chmod +xthe.AppImageand 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
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
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
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)
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.iniis now read correctly. Settings placed next to the.AppImageare now honored. Previously the AppImage looked inside its own read-only mount and silently ignored your file — so e.g.Widescreen = 1never took effect on Linux. Fixed.- Native ROM file picker on Linux — uses
zenityorkdialogif installed (otherwise pass the ROM path as an argument, or it's remembered inrom.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
Minor follow-up to v0.9.3: the legacy-save migration (saves/smw.srm → saves/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.