Fifty hertz is the physics

RP412PHYSICSHZ defaults to 50: the simulation advances in fixed 20 ms
steps whatever the display does, and every machine plays the same race.
The proof preceded the promotion - a scripted lap with a crash, a burn,
a tumble and two respawns runs bit-identical at 30, 60 and 144 fps, and
identical runs reproduce exactly, neither of which was ever true of
this engine at any frame rate.

Fifty because it is exact on the engine's millisecond clock (a rate
like 60 quietly becomes 17 ms steps wearing the wrong name), and
because its settled hover ride height measured closest to the
frame-coupled physics the game has always run - the least change of
feel for the most change of correctness. The pods' 25 and the smoother
100 stay one line away for the play testers, and 0 keeps the original
frame-coupled behaviour for comparison, where the frame rate is part of
the simulation.

Carried-over environ files do not mention the option, so existing
testers get 50 on their next build and rpl4.log names both the option
they have not heard of and the mode every launch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-09 22:05:45 -05:00
co-authored by Claude Fable 5
parent 67d57452ba
commit 34abf40e7f
2 changed files with 20 additions and 20 deletions
+9 -6
View File
@@ -653,13 +653,16 @@ static Scalar
*setting = getenv("RP412PHYSICSHZ");
//
// OFF until it is proven. The accumulator below is correct in
// isolation but measured WORSE than the frame-coupled path it
// replaces - at 30 fps the pod climbs, at 144 it barely moves -
// so something else is still rate-dependent and feeding it. Not
// a default until the trace says two frame rates agree.
// 50 Hz is the default: a 20 ms step, exact on the millisecond
// clock, and the rate whose settled hover ride height measured
// closest to the frame-coupled physics the game has always run.
// Proven before it was defaulted - a scripted lap with a crash,
// a burn and two respawns runs bit-identical at 30, 60 and 144
// fps, and identical runs reproduce exactly. 0 restores the
// original frame-coupled behaviour, where the frame rate is
// part of the physics.
//
int rate = (setting != NULL) ? atoi(setting) : 0;
int rate = (setting != NULL) ? atoi(setting) : 50;
//
// Guard the arithmetic rather than the taste: a rate below the