Skip to content

Repository files navigation

FZeroSNESRecomp

A native PC build of F-Zero for SNES.

You bring your own legally dumped F-Zero (USA) ROM. No ROM is included.

BS F-Zero Deluxe Forest III race in 21:9
F-Zero title screen in widescreen BS F-Zero Deluxe Blue Thunder machine select
BS F-Zero Deluxe Forest III race in 16:9 BS F-Zero Deluxe Forest III course select

Features

  • Play F-Zero as a native app.
  • Widescreen modes: 16:9, 21:9, 32:9, and Fit.
  • High refresh presentation: 60, 90, 120, 144, 165, 240, or 360 FPS.
  • Display shaders: CRT Soft, LCD Grid, Sharp, Warm Composite, or your own GLSL shader.
  • Save states with a slot browser and thumbnails, opened with F7 or Select + R.
  • Rewind: step back through the last few seconds and drop back in.
  • Gamepad support through SDL.
  • Optional BS F-Zero Deluxe content.
  • Optional MSU-1 music packs for stock F-Zero and BS Deluxe (bring your own patch and audio).

Download And Play

On Windows:

  1. Download the Windows x64 ZIP from the Releases page.
  2. Extract the whole ZIP.
  3. Run FZeroSNESRecomp.exe.
  4. Pick your own F-Zero (USA) .sfc or .smc ROM when asked.

On Linux:

  1. Download the Linux AppImage from the Releases page.
  2. Put your own F-Zero (USA) .sfc or .smc ROM next to it.
  3. Make the AppImage executable.
  4. Run it.

The app remembers your ROM path after the first launch.

Settings

Open Settings > Display for:

  • Aspect ratio: 4:3, 16:9, 21:9, 32:9, or Fit.
  • Shader: None (default), CRT Soft, LCD Grid, Sharp, Warm Composite, or a custom shader.

Open Mods for:

  • Widescreen: makes races wider.
  • Presentation FPS: makes motion smoother on high refresh screens.
  • BS Deluxe: adds the Satellaview machines, leagues, and tracks.

When the Widescreen mod is on, its aspect setting wins over the normal Display aspect setting.

Importing CRT-Geom or another shader

In Settings > Display, use Browse beside Shader to select your own .glslp preset or .glsl shader. Keep the preset's accompanying files and subdirectories intact: for example, crt-geom.glslp needs shaders/crt-geom.glsl beside it. The app remembers the selected path; it does not copy the pack, so leave it in a permanent location. RetroArch Slang (.slangp) presets are not supported by this OpenGL path.

CRT-Geom is available upstream. It carries GPL-2.0-or-later terms. It is not bundled: redistribution compatibility with this app's differently licensed dependencies has not been established. User-selected CRT-Geom has been tested through the existing shader loader. An unreadable or invalid preset falls back to unfiltered output.

MSU-1 music

  1. Obtain the Conn/Cubear v11 patch from the authors' BS F-Zero Deluxe MSU-1 page.
  2. Extract f-zero_msu1.ips into your music pack's folder, alongside its numbered .pcm tracks. Keep the pack's original track numbering and common filename prefix. Use a pack made for this patch's track layout.
  3. Enable MSU-1 in Settings > Sound and select that folder.

Keep using your unmodified USA ROM. The app verifies the exact v11 patch (709 bytes, SHA-256 9019013f085ff16f5501c4516531a044bc5f36703aadb58844e67c5456413532) and applies it in memory, after BS Deluxe if enabled. No ROM file is rewritten. The patch and music are not included in downloads. Missing or unsupported patches produce a warning and leave the original soundtrack active. The patch handles missing PCM tracks through its original-audio fallback.

Stock and Deluxe have been exercised with synthetic tracks and a user-supplied JUD6MENT pack, widescreen, and high-refresh presentation. Compatibility is limited to these two supported cartridge layouts; arbitrary third-party ROM patches are not accepted or claimed compatible.

MSU sessions currently execute the patched cartridge through the interpreter, so compiled stock routines cannot bypass its audio hooks. Normal sessions retain native dispatch. Save states and rewind restore the selected song from its beginning, not its exact playback position. MSU saves are separate from non-MSU saves, as shown below.

For command-line use, SNESRECOMP_MSU1 can select a pack folder or filename prefix; off overrides a saved enabled setting. FZERO_MSU1_PATCH can point to the v11 IPS in another folder.

Save States And Rewind

The save-state menu

Press F7, or hold Select + R on a gamepad, to open the save-state browser. The game freezes while it is open, so a state you take is that exact moment.

  • Up / Down or the arrow keys pick one of 12 slots.
  • A on a pad, or X on the keyboard, loads the selected slot.
  • X on a pad, or S on the keyboard, saves to it.
  • B on a pad, or Escape, closes the menu without doing anything.
  • 1-9 jump straight to a slot.

Each slot shows a thumbnail of the moment it was saved, so you can tell them apart without loading them.

Rewind

Press F8, or hold Select + L on a gamepad, to open the rewind filmstrip. It shows the recent past as a strip of frames:

  • Left / Right scrub back and forward. Hold a direction to keep scrubbing.
  • A on a pad, or Enter / Space, jumps to the selected moment.
  • B on a pad, or Escape, leaves without changing anything.

Rewind is off by default, because it keeps whole snapshots of the machine in memory. Turn it on in the launcher under Settings, where you can also set:

  • Rewind depth: how many snapshots to keep (50, 100, 150, or 200).
  • Rewind interval: how many frames apart they are (1, 4, 8, 12, 15, or 30).

More snapshots make the history longer; a shorter interval makes it finer. Both cost memory: one snapshot of F-Zero is about 330 KB, so 100 of them is roughly 33 MB. At the default 50 snapshots every 15 frames you can step back about 12 seconds.

Changing the keys

Both keys are rebindable in the launcher's Controls page, as SaveStateMenu and Rewind. They are saved to config.ini next to the executable and take effect the next time you start the game. The rewind switch, depth and interval are remembered in the same file.

The quick-slot keys - F1-F12 to load a slot, Shift + F1-F12 to save one - still work. Where a binding above uses a key (F7 and F8 by default), that binding wins and the quick slot behind it is unavailable; both slots are still reachable from the menu. Rebinding SaveStateMenu or Rewind to another key hands the F-key straight back.

Where states are kept

Stock F-Zero and BS F-Zero Deluxe keep separate states, because they are different cartridges and their snapshots are not interchangeable:

Mode Slot files
Stock saves/fzero<N>.sav
BS F-Zero Deluxe saves/bs-deluxe/fzero-bs-deluxe<N>.sav
Stock + MSU-1 saves/msu1/fzero-msu1<N>.sav
BS Deluxe + MSU-1 saves/bs-deluxe/msu1/fzero-bs-deluxe-msu1<N>.sav

A thumbnail sits beside each as .sav.thumb. If a state from the other mode somehow ends up in a slot, loading it is refused and the game keeps running - the title bar says so and nothing is disturbed.

BS F-Zero Deluxe

BS F-Zero Deluxe is included with permission from its authors: GuyPerfect, Porthor, and PowerPanda.

The release includes two BS Deluxe files:

  • mods/bs-deluxe.dat is used by this app.
  • patches/bs-deluxe-usa.ips is the upstream v1.1 USA SNES patch for your own ROM.

No patched ROM is included.

If The Game Crashes

Send these files from the game folder:

  • crash_report_*.json
  • crash_minidump_*.dmp
  • last_run_report.json

Build From Source

Clone with submodules:

git clone --recurse-submodules git@github.com:mstan/FZeroSNESRecomp.git
cd FZeroSNESRecomp

Put your own USA ROM at fzero.sfc, then generate and build:

bash tools/regen.sh
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build

Local ROMs, generated files, saves, captures, and builds are ignored by git.

Run the ROM-free regression suites with ctest --test-dir build --output-on-failure. With your local ROM and the upstream patch ZIP, tests/test_msu_integration.py checks stock/Deluxe playback using generated test tones, missing-track fallback and invalid-patch rejection. On Windows, tests/test_desktop_integration.py additionally checks real launcher persistence, imported shaders, controller overlays and save/load. Both scripts accept --help and keep their test data under ignored captures/ directories; neither bundles music or a shader.

License

MIT License, Copyright (c) 2026 Matthew Stanley. See LICENSE. Bundled dependencies keep their own licenses under licenses/ in each release; BS F-Zero Deluxe content is included with its authors' permission and is not covered by this license.

F-Zero belongs to Nintendo. The game ROM is not included.

About

No description, website, or topics provided.

Resources

Contributing

Stars

35 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages