2026-10-11 · KURO KISHI

A game that tests itself, and a ship that fights back harder

The Unreal version became a complete game with menus and saves, then learned to play itself and report what breaks. Its first self-checks found four real save bugs, and a power-based difficulty curve changed how a fully armed ship plays.

Since the last update the Unreal version has gone from a stage runner to something you can start, play through and quit, with a title screen, ship select, results with stars, a pause menu and a local high score table. This day was mostly about how to test all that without a person watching.

The autopilot plays forever and writes the report

Double-click AIwatch.bat and the autopilot plays stage 1 to stage 8, watches the ending, then starts a fresh campaign with the next ship and keeps going. Nothing it does touches a saved game, and if the game crashes or freezes the watcher relaunches it.

While it plays, the game keeps a journal and flags slowdowns and their cause, missing models or materials, a stage that never ends, a boss that never appears, sounds that fail to load, and memory or frame rate that worsens from one loop to the next. It then writes a short report that groups each problem with how often it happened, where it first showed up, the lines just before it and the likely cause. The same logging runs when a person plays, so a play report can show where you died most, which bosses took the most tries and where you quit.

The first full run cleared stages 1 to 6 with no deaths and five stars, so the autopilot is no measure of difficulty. That led to the balance change below.

Self-checks found four real bugs

The groundwork for a console version (saving that survives a power cut, signing in and out, trophies, suspend and resume) had never run. So the game now checks itself before stage 1: 35 checks that save and reload a file, feed in six kinds of damaged save, simulate signing out, switching users, suspending and losing a licence, and confirm that all 80 data files it needs exist. It works in a throw-away folder, never a real save.

A first run gave 28 passes, 0 failures and 7 skipped. The skipped ones cannot be tested on a PC: a full disk, an unplugged memory device, controller vibration and the console classes themselves. The checks still found four bugs before any player could:

  • A damaged save file crashed the game on start-up instead of being set aside.
  • Two quick saves of the same file fought each other and one was lost, with a false "save failed" message. This would have happened at the end of every stage.
  • A save from a newer version of the game was reset to defaults instead of being kept read-only.
  • A late answer from the platform after a user switch could have landed in the next user's profile.

Difficulty that follows your power level

The laser is now one beam, then two parallel beams, then three, and levels 4 and 5 keep three beams and hit harder. The old lightning bolts are gone.

Classic arcade shooters use a hidden difficulty score that rises with each power-up and makes enemies faster and more aggressive rather than tougher. We blended that idea with what we had. A ship with weapons at level 4 and 5 now sees:

changemaximum
Enemies fire more oftenup to 27 percent
Enemy bullets are fasterup to 18 percent
Extra shots per volleyup to 2
Enemy healthup to 75 percent more
Boss healthup to 52 percent more
Wave sizeup to 37 percent more

A ship with nothing above level 3 plays as before. Enemies also can no longer be hit before they are on screen, so you always see something before it dies. None of this had been played yet.

Ships that die like ships

Every capital ship now blows up with a fire and smoke plume, and the intact wreck sinks slowly through the bottom of the screen trailing smoke.

A crash that was not the game

The first long run crashed on stage 7. The cause was not the game: its files were being rebuilt while it was running, so the build tool now refuses to start while the game runs. The frame rates from that run, about 20 to 36 on integrated graphics, were measured while a build was running on the same machine, so they are not a real measurement.

Rules still hold

Re-checking the game's rules after all this, the full suite compares 26,588,329 results and only 51 differ, all in one rounding function that the browser itself does not round perfectly. All 72 recorded playthroughs still match exactly, 706,493 frames.

A record for every file

Every asset the game ships now has a record of where it came from and what licence covers it: 189 records across the web files, cooked Unreal assets, packaged files, code and the categories of generated art. An automated check fails if a shipped file has no record, and the credits screen now reads its text from a data file instead of being hard-coded. A few items still need a person to confirm them, and nothing has been invented to fill the gaps.