2026-10-04 · KURO KISHI

The same run, every time

Void Engine's simulation now steps at a fixed 60 times a second with seeded randomness, and 72 recorded runs repeat identically. The same day, a trailer render turned up white-out flashes, and the cause was a single charged shot.

Void Engine is the 3D rebuild of Kuro Kishi. Today it was made repeatable, and a trailer render showed why light needs a limit.

A game that can be replayed exactly

Before today the simulation followed the frame time of the display and used Math.random everywhere, so no two runs matched. Now it advances in fixed 1/60 second steps with an accumulator, up to 5 steps per frame, and a faster display just renders at 60 Hz. About 30 gameplay random calls moved to a seeded stream that is reseeded when the world is built. Cosmetic randomness stays unseeded.

Two things turned out to be quietly feeding back into combat:

  • Enemy ids came from a counter at module level that never reset, so a replayed stage had different aim jitter.
  • Cosmetic animation fed back into combat in two places. Hazard debris now collides on a rest pose instead of the animated one, and the boss muzzles are sampled without the hit shake.

To prove it, a recorder hashes every group of entities on every frame, each case in a fresh headless browser page. Recording with the cosmetic randomness still unpinned diverged: stage 5 at frame 174 and stage 2 at frame 4,073, with different final scores. After the fixes they match.

measureresult
Cases72 (8 stages, 3 ships, 3 pilots: god, normal, idle)
Frames recordedabout 706,000
Repeat identityevery case identical on repeat
Trace files kept53, 21 MB (identical normal pilot traces pruned)

The loop was checked at 30, 60 and 144 Hz and with jitter by calling the tick directly, because the browser pane was hidden. Nobody has watched the game run live after the loop change. Replaying a stage inside one play session is probably not exactly reproducible, because of warm-up state. That is not fixed.

The white-outs were one charged shot

A 61 second trailer is rendered frame by frame. It showed near-white blasts of 0.5 to 1 second at about 2, 17 and 33 seconds in. The first assumption was explosions, and it was wrong.

The cause was the Watch Mode pilot's fully charged shot from the Kestrel. It draws an additive glow of 128 by 105 units at HDR colour (3.0, 1.4, 0.3), plus a 66 by 60 fire sprite, covering two thirds of the 192 by 108 view. Bloom and tone mapping push that to near white. It fires at 3.4, 34.1 and 38.7 seconds of simulation, then every 1.5 seconds from 56.8 to 73.3, and again at 126.9 and 128.7. Hiding the additive effects layer made the white-outs disappear, which is how it was pinned down.

Nothing in the game changed. Instead the capture tool measures each rendered frame and, if it is over a cap (mean luminance 0.30, lit fraction 0.25, near-white fraction 0.04), re-renders it with a lower gain on large additive sprites, found by bisection. Frames under the caps are untouched.

beforeafter
Frames with more than half the screen lit548 (9.13 s, in 16 runs)0
Highest frame mean luminance0.6730.301
Highest lit fraction0.7180.250
Highest near-white fraction0.2050.030
Counted flashes190

786 of 3,660 frames were governed, with a median gain of 0.25. Rendering slowed from 8.2 to 3.5 frames per second, so a preview should run with the governor off. A simpler cap on glow size alone was tried and left off, because it only moved the first fireball's peak from 0.635 to 0.559.

This is an approximate check and not a formal flash-safety standard. Under a stricter setting (swing 0.10, area 0.10) both versions still count 30 flashes with at most 2 in a second, so ordinary explosions still flash. Other stages, ships and segments have not been checked.