2026-08-31 · STARFALL: AFTERSHOCK · BUILD 3.0.0

The arcade seat, and eight bosses that would not move

Empty seats now blink INSERT COIN like a cabinet, and after three attempts every boss in the game finally moves during its own fight — the worst freeze dropped from 34 seconds to under one.

Project pageMore STARFALL: AFTERSHOCK updates

Seven levels, each with a boss, and a finale that runs past the seventh. Up to four players, local.

The whole game is generated in code — every sprite, tile and sound is baked at boot. There is no build step and there are no dependencies.

INSERT COIN

Empty seats drew nothing at all, which tells a player standing at a cabinet that this is a one-player game. They now draw the same chassis a live player gets, in white rather than a seat colour, with INSERT COIN blinking inside.

The blink is a hard 0.7s-on / 0.3s-off cycle, not a fade. An attract mode blinks; a smooth sine reads as a modern UI element rather than an invitation.

Both HUD layouts now draw four seats instead of however many are occupied. Centring only the live plates made a solo player's HUD slide sideways the moment somebody joined — and hid the fact that there was anywhere to join in the first place.

It stays quiet in watch mode and on AI seats.

Left undone: pressing start does not actually join. The squad is built once, when the world is. For a cabinet, that is the next thing.

The bosses were standing still for most of the fight

Three passes, and only the third worked. The first two are the instructive part.

Pass one — tighten the gap between attacks

Eight separate copies of the same recovery timing were centralised into one tuning file, the gap was made to tighten with phase, and a floor was added so a five-phase boss cannot reach a negative recovery and skip the state entirely.

Attacks per fight rose 17–30% on three bosses. One boss did not move at all, and nothing felt different.

Pass two — measure instead of guessing

A motion probe now samples the boss every frame: what share of the fight it spent stationary, its mean speed, and the longest unbroken freeze.

The Leviathan held one position for thirty-four seconds at two pixels per second. It was scenery that shoots.

The state census said why. Walking was 2–7% of any fight, while attacking was 42–49% and telegraphing 22–28%. The bosses were never idling — they were planted inside their own attacks.

No amount of shortening the pause between moves could reach that, which is exactly why pass one did nothing.

Pass three — put them in motion during recovery

BossStillSpeedLongest freeze
Siege Walker71 → 35%38 → 48px/s6.9 → 3.5s
Leviathan85 → 19%6 → 66px/s7.5 → 0.7s
Caldera Titan91 → 31%4 → 40px/s9.1 → 1.6s
Ice Crab93 → 54%7 → 52px/s10.1 → 3.5s
Sovereign62 → 39%50 → 68px/s1.5 → 1.4s
Prismatic Colossus85 → 52%7 → 24px/s9.5 → 2.2s
Core Guardian75 → 29%12 → 56px/s4.6 → 1.7s

Not one telegraph moved. Every tell value was verified byte-for-byte against the previous code. The contract holds:

It fires again sooner. It does not warn you less.

The Ice Crab finally repeats itself. Immovable at 22 attacks across three fights in both earlier passes, its eight-move vocabulary no longer consumes the whole fight one move at a time. Knockdowns went 1 → 3. It also hops now.

Two blocking defects caught on the way

The Sovereign rematerialised from its network jump twelve pixels inside a standing player, dealing contact damage every frame.

Its hover height is deliberately greater than its own body height: standing in that machine's shadow is meant to be safe, and the gap in its nova points down to steer you there. The change had turned a rewarded position into a trap.

The Ice Crab's charge rebound fired its damaging shockwave pair twice. The avalanche beside it was correctly gated with a comment saying a second one "would be a damage spike, not mobility" — the reasoning was right, and had been applied to the wrong half of the package.

The honest read

The bosses now move a lot. They do not yet attack much more often — rate rose only about 6% across the set.

Going further means per-attack work: deciding which moves can travel while firing, since an aimed beam that drifts fires from where the animation is not. That is the next pass.