Summary
SpaghettiKart crashes on track load with both Metal and OpenGL backends on an
Intel Mac. Metal renders a black screen and crashes with EXC_ARITHMETIC (SIGFPE).
OpenGL renders menus correctly but crashes on track load with the same exception.
Tested on both a source build (commit `f7aab65da (1.0.0-13-gf7aab65da)
crash-20260314-2337.zip
`) and the
official nightly CI build (macOS-intel-x64, downloaded 2026-03-14).
Both exhibit identical behavior.
Hardware & OS
- Model: MacBookPro16,2 (13-inch, 2020, Four Thunderbolt 3 ports)
- CPU: Quad-Core Intel Core i7, 2.3 GHz
- GPU: Intel Iris Plus Graphics (built-in, no discrete GPU)
- RAM: 32 GB LPDDR4X
- macOS: Tahoe 26.3.1 (25D2128)
- Xcode CLT: 17.0.0.17000604 (AppleClang)
Steps to Reproduce
- Download the macOS-intel nightly build from the README, or build from source:
git clone --recursive https://github.com/HarbourMasters/SpaghettiKart.git
cd SpaghettiKart
cmake -H. -Bbuild-cmake -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_PREFIX_PATH=/usr/local \
-DCMAKE_FIND_FRAMEWORK=LAST \
-DNON_PORTABLE=OFF
cmake --build build-cmake --target ExtractAssets
cmake --build build-cmake --config Release
- Place US ROM as
baserom.us.z64 in repo root (SHA-1: 579C48E211AE952530FFC8738709F078D5DD215E).
- Launch
./build-cmake/Spaghettify
- Select any track from the menu (e.g. Luigi Raceway, Mario Raceway)
Expected Behavior
Track loads and race begins.
Actual Behavior
Metal (Id 2, default on macOS)
- Window title shows "Spaghetti Kart (Metal)"
- Screen is completely black from launch — no menus visible
- Audio plays correctly (title screen music, menu sounds)
- Crashes with
EXC_ARITHMETIC (SIGFPE) when a track auto-loads or is selected
- Settings menu is greyed out (cannot switch backend from within the game)
OpenGL (Id 1, set via ~/spaghettify.cfg.json patch)
- Window title shows "Spaghetti Kart (OpenGL)"
- Menus render correctly (title screen, character select, track select all visible)
- Audio plays correctly
- Crashes with
EXC_ARITHMETIC (SIGFPE) at the moment a track begins loading
- Last log lines before crash:
Loading Track 8
[Game.cpp] Clean World
[Track] Loading... mk:luigi_raceway
[code_800029B0.c:192] [debug] Setup Race!
[code_800029B0.c:193] [debug] Game Speed: 2
Crash Report
Exception Type: EXC_ARITHMETIC (SIGFPE)
Exception Codes: 0x0000000000000001, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 8, Floating point exception: 8
Faulting Thread: 0
Full .ips crash report attached below.
Nightly Build Test
Tested the official nightly CI build (macOS-intel-x64, downloaded 2026-03-14)
with the same ROM and o2r files. Results are identical to the source build:
| Build |
Backend |
Menus |
Track Load |
Crash |
| Nightly CI |
Metal (Id 2, default) |
Black screen |
Crashes |
EXC_ARITHMETIC (SIGFPE) |
| Nightly CI |
OpenGL (Id 1, local config) |
Render correctly |
Crashes |
EXC_ARITHMETIC (SIGFPE) |
Source (commit [HASH]) |
Metal (Id 2) |
Black screen |
Crashes |
EXC_ARITHMETIC (SIGFPE) |
Source (commit [HASH]) |
OpenGL (Id 1) |
Render correctly |
Crashes |
EXC_ARITHMETIC (SIGFPE) |
All four combinations crash with EXC_ARITHMETIC (SIGFPE) on track load.
OpenGL renders menus correctly on both builds; Metal shows a black screen on both.
This confirms the issue is upstream and affects both CI and source builds equally.
Nightly config note: The nightly build is portable (NON_PORTABLE=ON) and
reads config from its own directory, not ~/spaghettify.cfg.json. To test
OpenGL on the nightly, the config file must be placed next to the binary:
{"Window": {"Backend": {"Id": 1, "Name": "OpenGL"}}}
Config File Notes
Findings during debugging that may be useful to other Intel Mac users:
-
Config location: With NON_PORTABLE=OFF, the config is written to ~/spaghettify.cfg.json, not the build directory. Patching the wrong file has no effect.
-
Backend enum values: The upstream README states backend ids as {OpenGL=3, Metal=4} but the actual enum in libultraship/include/ship/window/Window.h is:
enum class WindowBackend { FAST3D_DXGI_DX11, FAST3D_SDL_OPENGL, FAST3D_SDL_METAL, WINDOW_BACKEND_COUNT };
// DX11=0, OpenGL=1, Metal=2
-
Config key capitalization: The key is "Id" (capital I). Lowercase "id" is silently ignored by Config::GetInt("Window.Backend.Id").
-
Switching to OpenGL requires patching ~/spaghettify.cfg.json before launch:
"Window": {
"Backend": {
"Id": 1,
"Name": "OpenGL"
}
}
This cannot be done from in-game Settings because the Settings menu is greyed out when Metal fails to render.
Build Environment
cmake 4.2.3, ninja 1.13.2, sdl2 2.32.10, glew 2.3.1
nlohmann-json 3.12.0, spdlog 1.17.0, boost 1.90.0_1
libpng 1.6.55, libzip 1.11.4_1, tinyxml2 11.0.0
AppleClang 17.0.0.17000604
Attachments
Summary
SpaghettiKart crashes on track load with both Metal and OpenGL backends on an
Intel Mac. Metal renders a black screen and crashes with
EXC_ARITHMETIC (SIGFPE).OpenGL renders menus correctly but crashes on track load with the same exception.
Tested on both a source build (commit `f7aab65da (1.0.0-13-gf7aab65da)
crash-20260314-2337.zip
`) and the
official nightly CI build (macOS-intel-x64, downloaded 2026-03-14).
Both exhibit identical behavior.
Hardware & OS
Steps to Reproduce
baserom.us.z64in repo root (SHA-1:579C48E211AE952530FFC8738709F078D5DD215E)../build-cmake/SpaghettifyExpected Behavior
Track loads and race begins.
Actual Behavior
Metal (Id 2, default on macOS)
EXC_ARITHMETIC (SIGFPE)when a track auto-loads or is selectedOpenGL (Id 1, set via
~/spaghettify.cfg.jsonpatch)EXC_ARITHMETIC (SIGFPE)at the moment a track begins loadingCrash Report
Full
.ipscrash report attached below.Nightly Build Test
Tested the official nightly CI build (macOS-intel-x64, downloaded 2026-03-14)
with the same ROM and o2r files. Results are identical to the source build:
[HASH])[HASH])All four combinations crash with
EXC_ARITHMETIC (SIGFPE)on track load.OpenGL renders menus correctly on both builds; Metal shows a black screen on both.
This confirms the issue is upstream and affects both CI and source builds equally.
Nightly config note: The nightly build is portable (
NON_PORTABLE=ON) andreads config from its own directory, not
~/spaghettify.cfg.json. To testOpenGL on the nightly, the config file must be placed next to the binary:
{"Window": {"Backend": {"Id": 1, "Name": "OpenGL"}}}Config File Notes
Findings during debugging that may be useful to other Intel Mac users:
Config location: With
NON_PORTABLE=OFF, the config is written to~/spaghettify.cfg.json, not the build directory. Patching the wrong file has no effect.Backend enum values: The upstream README states backend ids as
{OpenGL=3, Metal=4}but the actual enum inlibultraship/include/ship/window/Window.his:Config key capitalization: The key is
"Id"(capital I). Lowercase"id"is silently ignored byConfig::GetInt("Window.Backend.Id").Switching to OpenGL requires patching
~/spaghettify.cfg.jsonbefore launch:This cannot be done from in-game Settings because the Settings menu is greyed out when Metal fails to render.
Build Environment
Attachments
crash-report-intel-mac.zip— crash reports (.ips) + system info + run logs.ipsavailable)