feat(timing): opt-in whole-game high frame rate scheduler
Merged
NO
10d ago+8400+8400+0123456789012345678901234567890123456789-30-30-01234567890123456789
Stacked on #131, which adds the pause and frame-step hotkeys this layer uses. Review and merge after it.
Summary
An opt-in hand-written scheduler that runs the game's logic at its authored 60 Hz tick and presents interpolated frames between ticks. This is the whole-game alternative to split-rate presentation (#98).
RECOMP_GAME_HZ=120 (60..360; unset = original timing)
game_scheduler owns scene and frame-production fibers, input edges, elapsed time
per authored tick: menus, match logic, sound service, effects
per display pass: interpolate completed ticks (actors, camera, foliage sway), snap across camera cuts
presenter paces frames at the game rate, drops display passes that cannot fit
- Research and milestones:
docs/wayfinder/research/high-frame-rate-whole-game.md, now in the public export. - Always on: the draw adapter no longer runs the generated indexed-draw body (6842a72), and the presenter paces at the game rate.
Verification
- MSVC Debug build and
ctestat this layer: 39/39 passed. python tools/public_export.py verify --require-public-treepasses.- clang, macOS and Linux: covered by this PR's
public-cirun. - Player play tests: correct at 60 Hz. At 120 Hz characters and the ball show slight streaking. At 240 Hz animation timing and camera placement break. Split-rate remains the release path; this layer is research behind a flag.
- Agent runs: 60 Hz and 120 Hz matched at all 8,648 shared ticks and on every shared RNG event (see the research doc).
Merge danger
Two-way door, but large (about 8,400 lines, 27 commits, including a wip checkpoint). With RECOMP_GAME_HZ unset the scheduler stays off. The indexed-draw change is always on and touches every indexed draw.
Contribution checklist
- The change follows
AGENTS.mdandCONTRIBUTING.md. - No XBE, generated game C, retail instruction bytes, extracted assets or
filenames, saves, BIOS data, private paths, or run evidence are included. - Third-party material and its license are identified, if applicable.