Skip to content

Super Mario Odyssey (0100000000010000)

State: plays on macOS (intro, menus, Cascade Kingdom); start menu on the iOS Simulator (a touch A did not visibly advance).

What it needs

  • The same fonts/libvpx as LAS; the shader archives register thousands of programs at once (so shader speculation is off by default).
  • Command-list recordings must stay callable while the game can still call them (it records ~112 k display lists and replays them for minutes): NAPPLE_REC_BUDGET_MB (default 1024) bounds memory instead of the old 30 s idle release.
  • Render scale: its G-buffer passes mix attachments; pass_unify_scale lifts them (fixes the half-scale duplicate view).

What is open

  • Exploded geometry after a long idle (parrot after ~2 min): command lists now live as long as their command memory (no idle or budget release, gfx-correctness, t_cmdlife); the 215 s repro at frames 8000/9000 was not re-checked with the fresh-boot route because on the 2026-10-26 base the guest stalls at about 7 500 frames (a priority-47 worker holds core 0 in a long CPU loop and the priority-44 main thread waits in core_take; kernel scheduler, not gfx). Re-check the shattered cap brim and white ribbons on the title menu, grass blade streaks, purple sky, dithered dark Mario silhouette (probably separate programs; bisect with NAPPLE_DEBUG_SKIP_VS). See symptoms and the hand-over note smo-title-screen-visual-bugs.md in the session notes folder.
  • A 400x228 mipmapped pass is not scale-unified on purpose.
  • A phantom MFi pad showed the settings sheet once on the Simulator (not reproduced).

Build and test

Data as in README. Headless 45 s: exit 0, 0 CRASH (1921-2232 frames; 3571 frames in 80 s with scripted input and no orphan pick). Repro of the idle bug: NAPPLE_INPUT_SCRIPT="30:A:0.3,45:A:0.3,60:A:0.3" boots the first kingdom (frames ~7000-9000); run about 215 s and screenshot frames 8000 and 9000. Re-run 2026-10-26 on integrated main (budgeted recordings, in-place data, default save root): not fixed. 12441 frames, exit 0, 0 CRASH, but the 1024 MB budget was hit at ~frame 5900 (185095 lists alive, LRU release) and from ~frame 7600 the game calls two released lists (handles 0x100001d31, 0x1000026db): 18 CallCommands: stale or invalid command handle warnings. Frames 8000 and 9000 show the scene broken (a large black triangle and a striped mesh over a washed-out sky). The LRU release frees lists the game still replays; a budget alone does not fix it. Corpus guard: t_smo translates and compiles 128 of 128 shaders.

Numbers

  • Live play: steady 60 fps, GPU 6-12 ms, 4 of 51 five-second windows stalled (worst 990 ms at the scene change, 656 pipelines built in one window). Peak RSS 2.0 GB.
  • Live recordings peak at ~112 k (265 k at 215 s without any release, about +1.7 GB).

Timing (fps-unlock-timing, 2026-10-27)

Guest cadence 60 Hz: trace at all fps modes: vsync 60.00 Hz, game clock 1.000, presents ~57/s. Windowed 60 s soak vsync on: p99/median 1.009, drift -0.10 frame. Odyssey's logic runs on a variable delta time (clock-driven) with 60 Hz vsync-paced presents, so a faster present rate shows repeated images; a timestep/delta patch would be needed for real extra game frames (not done here). (How each title ties its logic to vsync is inferred from its cadence and engine class, not verified by patching; the per-title timestep package confirms it.)

Tie-up status (end-to-end, 2026-10-27)

From tools/e2e/run.sh (testing guide): built through Studio, launched through the launcher, 45 s headless. - Mii: mii:u not opened in the route. amiibo: nfp:user opens at boot, but the route never reaches StartDetection, so the scripted amiibo (placed at the first StartDetection) did not fire; nfp itself is covered by test_svc_nfp / test_svc_amiibo. - Boot 100 s headless: exit 0, 5396 frames, audio non-silent from the title screen on (the first 45 s are silent). Golden route: 15451 frames in the last end-to-end run, frames 8000/9000 reached (no golden approved for them yet); the threads.c stall after ~7,500 frames did not reproduce in the last two runs (known flaky). - Overlay Game/System renders. Camera/IR: not used. Online: NullProvider.