Kuro Kishi still plays in the browser today. This week the work was on a second copy of the game: its rules rewritten in C++ and run inside Unreal Engine. The test for it is simple to state. It has to play exactly like the game that already exists.
The same game, in a different language
Enemies, bosses, capital ships, hazards, debris, scoring, power capsules, checkpoints, lives and respawn all run in C++ now. That is 15 bosses and 14 capital ships, with every attack, phase, breakable part and death sequence.
The check is the 72 recorded playthroughs from the determinism work: 8 stages, 3 ships, and pilots that include one that sits idle and dies. Each recording was replayed in the C++ version, and every one matched the browser game frame for frame, 706,493 frames in total.
Smaller suites sit underneath that one:
| area | scenarios | frames |
|---|---|---|
| Bosses | 150 scripted fights | 587,499 |
| Enemies | 142 across all 42 kinds | 210,400 |
| Capital ships and hazards | 126 and 65 | about 375,000 together |
The full run now compares 11,312,348 results between the two versions. Only 51 differ.
Why 51 results differ
All 51 are one maths function. The browser, Node and the C++ compiler each round the last digit of sine, cosine and similar functions differently, and the game's rules amplify that tiny gap over time. So the C++ version carries its own maths library, written to match Chrome exactly. The 51 misses are 0.037 percent of the 136,929 cases tested for that function, and they come from the browser itself, whose version is not perfectly rounded.
Testing the tests
A test that never fails proves nothing, so the code was broken on purpose, one line at a time, to see whether the tests noticed. They caught all 22 changes in the enemies, 25 of 27 in the bosses (the other two cannot change the game), and all 26 in the hazards.
Two gaps remain. The recordings cannot say how a stage behaves when it starts from a checkpoint, or when the browser window is narrower than widescreen. Neither is tested yet.
The first stage, in Unreal
All 76 ships, bosses and capital ships are imported into Unreal 5.8: 1,267 meshes and 1,140 materials, with triangle counts, part counts and positions checked against the browser export. Their animation was ported separately. 861 moving parts and 185 animated material values now run from C++, and 15,275,326 checked values match the browser game exactly.
Later in the day Stage 1 played in Unreal for the first time, flown by the Watch Mode autopilot on the same verified rules, with the real ship models. It ran at about 62 frames per second at 1280 by 720 on integrated graphics, dropping to 25 to 35 when other programs were using the graphics chip. Enemy positions, shots and glow matched the browser to within a few pixels.
It is early. The background is plain black, the moving parts of ships sit at rest, and the rings around the player, engine trails, smoke and sparks are missing. The capital ship also looks darker and flatter than it does in the browser.
Getting it to draw at all turned up a handful of material bugs. Three materials had fallen back to a default look, a post process drew garbage, and the camera was flat when it should have been perspective. All are fixed.
