quarrel07 78a012ce06 Fix the reset button doing nothing or looping the start screen when pressed repeatedly (#719)
* Make the reset button reliable from any screen

Pressing reset repeatedly near app start could do nothing, fade the music
with no reset, or bounce the press-start screen back to itself. Three
defects in the old handler:

- It ran from the ImGui widget, racing the menu state machine; a press
  landing mid-fade was re-advanced by the in-flight transition (the
  press-start loop).
- It always wrote gGamestateNext = MAIN_MENU_FROM_QUIT; once the game was
  already in that state a repeat write is swallowed by the != guard in
  main.c, so nothing happened.
- CM_ResetAudio ran unconditionally, so the music faded even when the
  reset was swallowed.

The widget now only sets an atomic request flag; ApplyPendingReset (top of
push_frame, on the game loop) performs the reset. It alternates between
the two identical FROM_QUIT gamestates so every press trips the gamestate
switch, and re-enters the menus through the intro's own transition
protocol (FADE_MODE_LOGO -> setup_menus rebuild + fresh fade-in), which
replaces any in-flight transition. Audio only fades when a reset actually
executes. The dead gSkipIntro switch in the old handler (an unconditional
override below it always won) is gone; behavior is unchanged: reset lands
on the logo intro, or the start menu in debug mode.

Play-verified: hammering reset during the splash screens restarts the
logo every press; reset mid-fade after press-start no longer loops back;
resets from the main menu and mid-race work as before.

* Honor gSkipIntro when picking the post-reset screen

Review feedback on #719: restore the gSkipIntro switch from the old
handler instead of hard-coding the logo intro, keeping the debug-mode
override on top (no else), matching the boot-time logic in main().

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
2026-07-23 12:21:36 -06:00
2026-07-22 18:02:58 -06:00
2026-07-22 18:02:58 -06:00
2026-05-03 02:13:30 +02:00
2026-02-26 12:36:21 -07:00
2026-05-03 02:13:30 +02:00
2025-05-14 18:30:32 -06:00
2025-02-07 23:48:36 -07:00
2026-07-22 18:02:58 -06:00
2025-12-22 14:48:07 -07:00
2024-08-27 17:47:39 -06:00
2022-05-14 15:12:32 -07:00
2022-06-15 17:26:03 -07:00
2026-04-07 13:10:53 -06:00
2025-06-16 16:33:31 -06:00
2026-07-22 18:02:58 -06:00
2025-12-30 11:36:08 -07:00
2025-06-20 16:54:31 -06:00
2025-03-07 18:32:15 -06:00
2024-04-12 19:16:13 -06:00
2026-03-24 12:34:15 -06:00
2026-02-26 12:36:21 -07:00
2025-06-20 16:54:31 -06:00
2025-05-14 18:30:32 -06:00
2025-06-20 16:54:31 -06:00

Spaghetti Kart Spaghetti Kart

Discord

Official Discord: https://discord.com/invite/shipofharkinian

If you're having any trouble after reading through this README, feel free ask for help in the SpaghettiKart Support text channels. Please keep in mind that we do not condone piracy.

Quick Start

SpaghettiKart does not include any copyrighted assets. You are required to provide a supported copy of the game.

1. Verify your ROM dump

The US ROM is the only supported version. You can verify you have dumped a supported copy of the game by using the SHA-1 File Checksum Online at https://www.romhacking.net/hash/. The hash for a US ROM is SHA-1: 579C48E211AE952530FFC8738709F078D5DD215E.

2. Verify your ROM is in .z64 format

Your ROM needs to be in .z64 format. If it's in .n64 format, use the following to convert it to a .z64: https://hack64.net/tools/swapper.php

2. Download SpaghettiKart from Releases

3. Generating the O2R from the ROM

Windows

  • Extract every file from the zip into a folder of your choosing.
  • Run "Spaghettify.exe" and select your US ROM.

Linux

  • Extract every file from the zip into a folder of your choosing.
  • Ensure zenity or kdialog package is installed.
  • Run "spaghetti.appimage" and select your US ROM. You may have to chmod +x the appimage via terminal.

Nintendo Switch

  • Run one of the PC releases to generate an mk64.o2r file. After launching the game on PC, you will be able to find these files in the same directory as Spaghettify.exe or spaghetti.appimage.
  • Copy the files to your sd card

4. Play

  • Launch Spaghettify.exe Congratulations, you are now sailing with SpaghettiKart! Have fun!

Configuration

Default controls configuration

N64 A B L R Z Start Analogue stick C buttons D-Pad
Keyboard Shift Ctrl Q Space Z Enter Arrow keys TGFH (↑ ↓ ← →) Num 8 2 4 6
SDL Gamepad A X LB RB LT Start L-Stick R-Stick Up, B, Y, R-Stick Right (↑ ↓ ← →) D-Pad

Other shortcuts

Keys Action
F11 Fullscreen
Tab Toggle Alternate assets
Ctrl+R Reset
Esc Settings

Graphics Backends

Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (macOS). You can change which API to use in the Settings menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the spaghettify.cfg.json file by finding the line "Backend":{... and changing the id value to 3 and set the Name to OpenGL. DirectX 11 with id 2 is the default on Windows. Metal with id 4 is the default on macOS.

Modding

Custom assets are packed in .o2r or stored .zip files. To use custom assets, place them in the mods folder.

There is an official gamebanana page.

If you're interested in creating and/or packing your own custom asset .o2r files, check out the documentation page.

Note that .otr archives are not supported in SpaghettiKart!

Development

Building

If you want to manually compile SpaghettiKart, please consult the building instructions.

Playtesting (nightly)

If you want to playtest a continuous integration build, you can find them at the links below. Keep in mind that these are for playtesting only, and you will likely encounter bugs and possibly crashes.

Maintainers: MegaMech, Coco, Kirito

Powered by libultraship
S
Description
No description provided
Readme 628 MiB
Languages
C 83.8%
C++ 13.7%
Python 1.1%
CMake 0.8%
Assembly 0.3%