2026-10-10 · KURO KISHI

A whole game around the stages, and sound that was measured rather than copied

The Unreal version got its full game flow, from the title screen to the high score table, and its complete sound. The web build's compressor was measured and fitted rather than copied, because copying its settings would have come out about 3.5 dB too hard.

From a stage runner to a game

Until this day the Unreal version was a stage runner: one stage, played by the autopilot, restarted at its end. It now has the whole game around the stages:

  • a title screen with a live Stage 1 demo playing behind it
  • ship select, with three ship cards
  • a prologue that plays the first time a campaign starts, and can be skipped
  • briefings, results with stars, and a game over screen
  • arcade-style initials entry for the high score table, driven by a controller
  • achievements, options, pause with a confirm before quitting, controls and credits

One running game now carries a run from stage to stage: score, lives and loadout pass across. Each new stage reloads the level, because the lights, bloom and exposure are set up once per level. That reload is the one structural change, and it worked on the first stage change tried.

Built for a television

The menus are controller first, with keyboard and mouse as well. Every label is at least 24 pixels tall at 1080p, and everything sits inside a fixed 5 percent safe area on every side, so nothing is lost at the edge of a TV. Every piece of visible text comes from string tables rather than the code, and a check confirms all 124 text keys the screens use are present.

Looking at screenshots of each screen found six layout bugs, all fixed: menu buttons stretched across the whole column, the title menu ran off the bottom of the screen, the quotes on the ship cards were cut off, the controller disconnect message had no panel behind it, the achievement pop-up sat under the dimmed background, and long titles wrapped.

Sound

The Unreal version had no sound at all. It now has the music, 42 sound effects, the 17 synthesized cues of the web build, the charge loop and the menu sounds.

Resampling without clipping

The nine music masters come in at 96 kHz or 44.1 kHz and the game runs at 48 kHz, so each was resampled with a high-quality filter. On a test tone its error was about 3 in a million.

Two tracks are mastered right up to full scale, and a resampling filter can overshoot slightly on sharp peaks. Without a correction, 1,919 samples in one track and 105 in the other would have clipped. Those two tracks get a single whole-file trim of about 0.32 dB, which keeps every peak just under full scale.

The same sounds, exactly

The 17 synthesized cues were not rebuilt by hand. The web build's own sound code was run offline and its output recorded, so the cues are the same sounds the web version makes. Three of them use a random value, so they were recorded in four variants each, 26 files in all. A second full render came out bit for bit identical for all 77 audio files.

Measured, not copied

The web build runs its sound effects through a compressor with set numbers: threshold -10 dB and a ratio of 4. The obvious move is to type those numbers into the new mixer. It would have been wrong.

The browser's compressor was measured with a 1 kHz tone stepped from -60 to +12 dBFS, and it does not behave like its settings suggest. It quietly adds its own makeup gain:

Input levelGain applied
Up to -10 dBFS+2.43 dB
0 dBFS-1.54 dB
+12 dBFS-10.35 dB

A standard compressor curve fitted to those 19 measured points matches it within 0.03 dB, with a threshold of -5.5 dB, a ratio of 3.7, a 10 dB knee and 2.45 dB of makeup gain. Copying the web numbers directly would have been about 3.5 dB too hard at full scale. The attack and release timing still use the nominal values.

What was checked

A self-check loaded every effect, cue and music track and confirmed each one has two channels, the right length, the right looping and the right routing: 0 problems. Three short launches with the output muted ran the whole sound path. In one, a bare Stage 3 run played 281 sounds in about 24 seconds of play, with no audio errors.

That is the honest limit of this round: the sound system is built and checks out, but nobody has listened to it yet. The balance of music and effects still uses the web build's formulas, not a mix tuned by ear.