Skip to content

Releases: john-steinmeyer/sc64-savestates

Save states 2.0 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 30 Sep 00:17

Save states for the 64 MB games! Conker's Bad Fur Day, Resident Evil 2 and Pokemon Stadium 2.

  • These three fill the cartridge's memory, so their states go straight to the SD card. A save takes about five seconds and a load about three.
  • The hotkeys, the slot panel and screenshots work in all three, and FreeCam in Conker and Stadium 2. Resident Evil 2's rooms are pre-rendered pictures, so FreeCam there says NO FRAME TO FLY and just loads the state.
  • Switch Save States on in the game's options, as for any other game. I tested the US versions, and the European Stadium 2 saves and loads too.
  • No virtual Controller Pak for these three (none of them uses one), and no Slow motion in Resident Evil 2 or Stadium 2 (the menu says why).

Favorites and History

  • Favorites hold up to 256 games now, one line each, in the order you choose: press Z on one to pick it up, move it, and A to put it down. New favorites go to the end of the list.
  • Add a ROM to your favorites straight from the file list: R on it, then Add to favorites.
  • History keeps your last 50 games. R removes a game from either list, after asking.

Reset button

  • A new setting in Menu settings, Reset Button. On Restart game, the console's reset button starts the game you're playing again, save states and all, instead of going back to the menu. It takes a few seconds while the menu loads the game again. Hold Start while pressing reset to get the menu.
  • The save-state routine is what notices the reset button, so it works in games with Save States, the virtual pak or a screenshot button on, while the game is running. In other games, or with the panel or FreeCam open, reset goes to the menu. Switching the console on never counts as a reset.
  • It's set to Menu by default, so nothing changes unless you switch it.

Smaller changes

  • After a game from another region (a PAL game on an NTSC console, or the other way round), Exit to menu brought the menu back in the game's video mode. It keeps your console's now.
  • With a ROM set to autoload, Exit to menu now reaches the menu instead of starting the game again.
  • A second bar under Loading ROM shows the save states being set up, which takes longer for a game with lots of them.
  • On the panel's Game page, the hint line no longer sits over FREECAM HERE, and the Delete slot hint fits the box.
  • When FreeCam can't fly a moment it now says NO FRAME TO FLY with Slow motion off too.

Upgrading

  • Copy sc64menu.n64 to the root of the card, as before. Your states, virtual pak saves, settings, favorites and history carry over. If you go back to an older menu later, it keeps only your first eight favorites and history entries.

Save states 1.9 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 27 Sep 23:51

FreeCam! Fly through any saved moment.

  • Press C-right on a state in the slot panel. The console redraws that frozen frame from wherever you point the camera: the world stands still and you fly through it. Press B and the game carries on from the state, as a normal load would. FreeCam here on the panel's Game page does the same on the live game, no state needed.
  • Works on most 3D games. It does not work on a 2D screen, on games with their own rendering microcode (Jet Force Gemini, Rogue Squadron) or on a frame drawn in pieces (Perfect Dark): the game says so and simply loads the state.

FreeCam controls

Key What it does
Start A screenshot of the view, saved like any other
Stick Look around
C-up, C-down Move forward, back
C-left, C-right Move sideways
D-pad up, down Move up, down
D-pad left HUD layer off and on (health bars, text); some games keep part of theirs
D-pad right Distance fog off and on
L held Movement and look four times faster
Z held Movement and look four times slower, for lining up a shot
R tapped Far plane four times further out, and back: scenery the game cut off in the distance appears
R held, stick forward or back Zoom in or out
R held, stick left or right Roll: tilt the picture
R held + A Resets the lens only: zoom, roll, far plane; the camera stays put
A Resets everything back: camera, zoom, roll, far plane
B Resumes the game from the state, as a normal load would

Sound after a load: fixed.

  • A load could leave the audio faintly stuttering for good. Clear in GoldenEye 007, now and then in other games. Every existing state gets the fix, nothing to redo.

Screenshots in the menu, without the wait.

  • The image viewer and the file browser's preview show a picture in a fraction of a second instead of four to eight seconds of a bare progress bar. Moving to the next screenshot keeps the current one up until the next is ready.

Upgrading

  • Copy sc64menu.n64 to the root of the card, as before. Your states, virtual pak saves and settings carry over unchanged.

Save states 1.8 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 23 Sep 02:32

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.8: unlimited save states!

Well. 256 per game. Which at 8 MiB a state is 2 GiB of card for one game, so the card gives out long before the list does. A long list costs a little at launch, about a tenth of a second a slot at most.

  • The list of save-state slots grows. It lives on the card, one file per slot with no fixed count, and the cartridge's own slots (by ROM size, as before) hold the states in use: a save goes to the cartridge and to the card right after, a load of a state not in the cartridge reads it from the card first, about a second, and the state used longest ago makes room. Asked for by Acurrz.
  • Every launch keeps six empty slots beyond the last one used and gives back empty ones past that. Empty slots to keep, in a game's Save States options, raises the six to 12, 24 or 48 for a game where you lay down many states in one sitting.
  • The panel scrolls, eight rows at a time (C-up and C-down page), fetches the thumbnail of a state that is on the card, asks before the last empty slot is used, says when none is left, and its Game page has Delete slot.
  • Your files are the first slots, untouched; nothing changes until a game saves past the old count.
  • Set ROM to autoload saves the game whose page is open, from every tab and for a game in the card's root folder; before, it could save the file browser's highlighted entry, or a path the next boot could not open. Other games' pages opened after a set show their own game now, a failed autoload no longer leaves the next page to crash, and a box confirms the setting with the file name and the way back to the menu.
  • A state saved with Slow motion on is refused with a message when it is asked for with the option off, and the panel marks such states SLOW. Loaded that way, a state saved while the game was busy froze it; with the option on it loads as before. A state saved with the option off loads either way.
  • States and pak files do not change; the file format gains one word, the slot a state was saved into. Hook version 13 as in 1.5.

sc64menu.n64 goes on the card as before. Built on N64FlashcartMenu 0.3.4.

Save states 1.7 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 20 Sep 04:25

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.7.

  • Hotkeys for every game at once. On a game's Hotkeys and Screenshot page, after the hold, A keeps the buttons for that game and Z gives them to every game: the ones you set up one by one before included, and any game you add later. A game's own set after that still wins for it. The screenshot button works the same way, and the menu's Save State Hotkeys page has it now too. DEFAULTDNB asked for this one.
  • A game's options menu stays open after a setting, and comes back after the Hotkeys and Manage saves pages, so several changes go in one visit.
  • The Virtual Controller Paks view no longer crashes on a real pak holding a note with a byte outside the pak's character set in its name; the byte shows as a ? now. Reported by Tom Scro, with the dump that named it.
  • He also found that a controller whose pak cannot come out (a Switch Online controller through a BlueRetro adapter) launches with the virtual pak once it is in its Rumble Pak mode; that is in the notes now, as is when a game's pak writes reach the card (about a second and a half after the last one, the LED blinking; keep the console on for that).
  • A hand-copied pak file of the wrong size in the paks folder is left alone, with a message, instead of being replaced.
  • States and pak files do not change; hook version 13 as in 1.5.

sc64menu.n64 goes on the card as before. Built on N64FlashcartMenu 0.3.4.

Save states 1.6 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 19 Sep 23:52

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.6.

  • The vertical jitter with the virtual pak on is fixed: Tony Hawk's Pro Skater 3 at its boot and in its menus, Perfect Dark at its logos, in their high-resolution modes. With Slow motion off the routine runs from the cartridge, slowly, and three things it did around a pak transaction held the console's interrupts too long there, so the game's video interrupt came up to 3 ms late, past the vertical blank of a high-resolution mode: a walk over the memory after the game's controller block, looking for buttons that were not there; the checksum of every pak read, computed a byte at a time; and a wait for the game's own cartridge transfer to end before the read could be answered.
  • The walk is gone, the checksums come from a table the menu prepares when it loads the pak, the wait is a hand-off (the transfer's end brings the read back), and a pak presence check, which some games make a hundred times a second, is answered without the rest of the machinery. Reads are cheap now, so the logos and the menus hold still.
  • A write to the pak still costs the routine about a millisecond from the cartridge, so a game that writes to its pak as it starts keeps a mild jitter for a second or two there and nowhere else: THPS3 tests the pak with fifty writes at its legal screens, Perfect Dark touches its save at its logos. With the virtual pak off for the game that goes too. THPS3 adds one late frame of its own at its pak check, by switching interrupts off there.
  • Tony Hawk's Pro Skater 3 refuses Slow motion, as the other games that use all of the Expansion Pak do: its high-resolution mode did not boot with it on.
  • States and pak files do not change; hook version 13 as in 1.5.

sc64menu.n64 goes on the card as before. Built on N64FlashcartMenu 0.3.4.

Save states 1.5 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 19 Sep 18:59

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.5.

  • The freeze after a load is fixed. Since 1.2 a state could be saved while the RDP was still finishing the frame: the test that picks the save moment had stopped counting the RDP's pipe flag, a change made for libdragon homebrew, whose frames never clear it, but applied to every game. In such a state the frame's final interrupt was still owed to the game, and a load never delivered it, so the game waited forever: Wave Race 64 on about one load in three, Banjo-Kazooie on one in five.
  • The flag counts again for games that clear it, so the moment comes once the frame is done, as in 1.1; libdragon games are unchanged.
  • States saved by 1.2 to 1.4 at such a moment load as well: the load runs the frame's closing command itself and the interrupt arrives. The files do not change; hook version 13 marks the states written with the new rule.
  • The Menu information screen (Start, then Menu information) now opens with the save states release, this repository and the base menu's version, so a report can quote that line; the build timestamp below it pins the build.

sc64menu.n64 goes on the card as before. Built on N64FlashcartMenu 0.3.4.

Save states 1.4 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 19 Sep 06:50

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.4: ROM autoload is back, a fix for Banjo-Kazooie, and the video reset switches the VI off.

Install: copy sc64menu.n64 to the root of the SD card (keep your current one somewhere, putting it back is the whole uninstall). Then highlight a ROM, press R, and switch Save States on for it.

New in 1.4:

  • ROM autoload is back. In a ROM's information screen, R, then "Set ROM to autoload", and the console boots straight into that game from then on, with the routine armed as on any launch. Hold Start while switching the console on to get the menu back; that switches autoload off as well. Upstream dropped it in 0.3.0 for Fast Reboot and has brought it back on its develop branch; this build follows, and the Fast Reboot setting is gone with it, as there.
  • Banjo-Kazooie booted with a black sky and a thin strip of ground in 1.2 and 1.3, with Save States on and Slow motion off. Since 1.2 the routine kept a counter on a word in low memory that the game's copy protection checks against its boot code, and a wrong word there makes the game sabotage its own perspective setup. The counter lives elsewhere now. With Slow motion on the routine is placed differently and the game was fine, which is how it went unnoticed here. Reported by Acurrz, who also confirmed the fix.
  • The video reset before a game boots switches the VI off as well, the state it is in at power-on, for every ROM that gets the reset. libdragon homebrew built on the stable branch before it shipped its own boot code carries Nintendo's, so 1.3 gave it the full reset and its display setup waited forever for a vblank. With the VI off it does not wait.

Known, not fixed here: a load can freeze the game when its state was saved while the RDP was still finishing a frame, which a load cannot reproduce. Wave Race 64 hits it most (about one save in three in its attract demo in testing), Banjo-Kazooie once in five, Super Mario 64 never. The cause is understood; the fix, a better choice of the save moment, needs the full survey behind it and comes next.

Everything else is 1.3: states saved with 1.3 or 1.2 still load and every setting carries over. What 1.3 brought is in its notes; the setup, the compatibility list and how it all works are in docs/savestates.md.

Built from commit fe3e662. sc64menu.n64: 1884160 bytes, SHA-256 f5c727f3271b7a38d0e5f90115c54738f6fd6c6662884a03f3261b098bb5dece.

Save states 1.3 for N64FlashcartMenu 0.3.4

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 19 Sep 00:01

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.4. Version 1.3.

Video: https://www.youtube.com/watch?v=ZGR4FXc2xOI (the 1.2 video; the 1.0 video, with a load, slow motion and suspend and resume: https://www.youtube.com/watch?v=yBQcb5c4tq0)

Install: copy sc64menu.n64 to the root of the SD card (keep your current one somewhere, putting it back is the whole uninstall). Then highlight a ROM, press R, and switch Save States on for it.

If you're coming from 1.2: states saved with 1.2 still load and every setting carries over. One thing the menu refuses now that 1.2 let through: launching a game whose virtual Controller Pak sits in a port holding a real Controller Pak, since the game's writes would land in the real pak too. Take the pak out, or move the virtual pak to another port.

New in 1.3:

  • Saves move between a game's virtual Controller Pak and a real one, from the menu: single notes either way, or whole paks, from any port. Start in the file browser (Virtual Controller Paks) or in a game's options (Virtual Controller Pak, Manage saves). The real pak is backed up to sd:/cpak_saves before it is first changed. Asked for by Tom Scro on Discord.
  • The virtual pak's port list shows what is plugged into each port, live, and refuses a port holding a real Controller Pak. A Rumble Pak there is fine.
  • A fix for the screenshot button: a tap at the wrong instant could stop the game's sound, or the game, and quick taps in a row found that instant before long. A screenshot is taken at the same kind of moment as a save now.
  • Built on N64FlashcartMenu 0.3.4, whose one change fixes crashes in Ocarina of Time by resetting the video registers before a game boots. Games built with libdragon skip that reset: libdragon's display setup waits for a vblank when it finds the VI switched on (the stable branch since August 2023, the preview branch until April 2025), and with every timing zeroed that vblank never comes, so FlappyBird stayed on a blank screen. Newer preview builds cope. A ROM with Nintendo's boot code still got the full reset, so a stable-branch build from before October 2024 stayed blank; 1.4 covers those.
  • AeroGauge, BattleTanx, BattleTanx: Global Assault and Cruis'n World work; the compatibility list said otherwise.

Still there: the virtual Controller Pak on the SD card, suspend and resume across a power cycle, slow motion, screenshots, configurable hotkeys, libdragon homebrew. Needs an Expansion Pak. 280 of the 298 games I've tried work; the list, the setup and how it all works are in docs/savestates.md.

Built from commit da123af. sc64menu.n64: 1884160 bytes, SHA-256 0fc87463aff5e0d7352ddbec4c508c6767d1ac1fb0a4bc67da1ee8df8791a13e.

Save states 1.2 for N64FlashcartMenu 0.3.3

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 18 Sep 01:42

Save states for the SummerCart64, built on N64FlashcartMenu 0.3.3. Version 1.2.

Video: https://www.youtube.com/watch?v=ZGR4FXc2xOI (the 1.0 video, with a load, slow motion and suspend and resume: https://www.youtube.com/watch?v=yBQcb5c4tq0)

Install: copy sc64menu.n64 to the root of the SD card (keep your current one somewhere, putting it back is the whole uninstall). Then highlight a ROM, press R, and switch Save States on for it.

If you're coming from 1.1: the panel opens with R + Z + Start now. L + R + Start never worked on an original controller, which takes it as the stick reset. Thanks to drumstix576 for the report and the fix. Every hotkey can be changed, in the menu settings or per game.

New in 1.2:

  • Save states for libdragon homebrew. I've tested about forty ROMs: FlappyBird, Kraken64, Legend of Elya, Junk Runner 64, Cathode Quest 64, VoidStrider64, Driving Strikers 64, nineteen of the N64brew Game Jam 2025 entries and most of the SDK examples. Games with the pre-2023 entry code run without the routine.
  • The virtual Controller Pak's port is yours to pick (Port 1 to 4, or Off), and the panel can pull the pak out and put it back in any port mid-game. Beetle Adventure Racing gets its Controller Pak for saving and its Rumble Pak for racing that way, and Perfect Dark takes a Rumble Pak in port 1 with the pak in port 2.
  • Hotkeys are configurable, one button or more each, for all games or per game.
  • Screenshot button, per game. A tap writes a PNG to sd:/screenshots/<game>/. Hundreds per launch.
  • Frame step without the lag: one press, one frame. Hold to step ten a second.
  • The image viewer steps through a folder, the file browser previews images, and a background image fills the screen.
  • Slow motion is refused for the four games that use all of the Expansion Pak, since they never booted with it on.
  • Fixes: the panel in interlaced modes, a hotkey tap leaking to the game, the RDP's pipe-busy flag blocking saves, games that poll a masked interrupt, resuming on the vblank, a state saved with Slow motion off not loading after a power cycle with it on, and a few libdragon ones. The changelog has the full list.

Still there: the virtual Controller Pak on the SD card, suspend and resume across a power cycle, slow motion. Needs an Expansion Pak. 276 of the 298 games I've tried work; the list, the setup and how it all works are in docs/savestates.md. States saved with 1.1 still load.

Built from commit 13e89fb. sc64menu.n64: 1851392 bytes, SHA-256 091ad159a7ff5fcaad43b1f42a84a26768103991a955e3ef6433043a9e3bfdc5.

Save states 1.1 for N64FlashcartMenu 0.3.3

Choose a tag to compare

@john-steinmeyer john-steinmeyer released this 15 Sep 06:30

Save states for the SummerCart64, as a build of N64FlashcartMenu 0.3.3.

Demo video: https://www.youtube.com/watch?v=yBQcb5c4tq0

Install: copy sc64menu.n64 to the root of the SD card (keep your current one somewhere; putting it back is the whole uninstall). Then select a ROM, open its options and switch Save States on for that game.

What it adds:

  • Save states: L + R + D-pad Up saves the current slot, L + R + D-pad Down loads it, L + R + Start opens a slot panel with thumbnails. States persist on the SD card.
  • A virtual Controller Pak (memory pak) that lives on the SD card, on by default for the games known to use one.
  • Suspend and resume: suspend a game to a slot from the panel, switch off, and the next launch of that game picks up where you left it.
  • Slow motion and frame step, as a per-game option.

Needs an Expansion Pak. Works with 276 of the 298 games tried so far; the list, the setup and how it works are in docs/savestates.md.

Built from this repository at commit d6df4f3. sc64menu.n64: 1835008 bytes, SHA-256 81807eb10b02f7d1689dedce348dbd19bde6722ff1061ac5e65ed1568f32719b.