Three pieces of harness, all env-gated and inert in normal play, that
turn "do two frame rates play the same race?" from an argument into a
number:
- RP412PHYSTRACE=1 samples the player vehicle's position on the
SIMULATION's own clock - the vehicle's lastPerformance, which advances
in whole fixed steps - so two runs sample at identical step counts and
their traces compare exactly. Frame-time sampling compares different
instants and calls the difference physics; an earlier version of this
trace did exactly that, and its noise was chased as if it were drift.
At the green light it stops the vehicle dead, because the pod
simulates on its pad while the mission loads and a load is never the
same length twice: two runs reached the start 776 and 599 steps in,
same position, different velocity.
- RP412SPAWNZONE pins which drop zone is tried first. The pick is
Random(), and Random() is seeded - but a seed only repeats a run if
the same NUMBER of draws precedes the pick, and that count rides on
load timing. Same seed, different pad, incomparable traces. Pinned,
the zone is tried first and falls back to the random walk if taken,
so it cannot wedge and changes nothing unless set.
- The trace prints the global step counter, which is what caught the
force-accumulator bug: the position columns can look plausible while
the step column says the physics ran a different number of times.
With these three and RANDOM= (which already existed), a race is
repeatable to the bit, and the determinism matrix - rates by frame
rates by repeats, run as parallel sandboxed instances - is a regression
suite: any mismatch in any cell is a real bug.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Imports the current Win32 source for the pod-racing game 'Red Planet',
built on the MUNGA engine and its L4 (Win32/DirectX) platform layer:
- MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend
- RP / RP_L4: Red Planet game logic and Win32 application
- DivLoader, Setup1: asset loader and installer project
- lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies
Removed stale Subversion metadata and added .gitignore/.gitattributes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>