A burst fires for its whole window, and the countdown is the tile itself

The gun, beacon, flamer and rocket fell silent the moment they cleared the court:
firing and steering were both gated on phase 'rally', and every beat raised by the
kill that empties the court (a point, a won game, the mop-up) parks the phase in
'over'. A burst is its own control mode for its whole len, like a horde — its own
clock is the only thing that ends it. Not fixed by forcing the phase back to rally:
a parked 'over' beat that never expires is how pendingHorde gets stranded.

The countdown moved off the tile's bottom edge (the rounded frame, and the bottom of
the screen) into the tile: the armed slot's well drains as a gold wash, clipped to
its own rounded path, under the icon and labels.

16 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-11 16:49:02 +02:00
1 parent 5ea84f8511
commit c659b6882f
6 files changed
+59 -7

No files matched your search

+19 -1
View File
@@ -409,10 +409,28 @@ announced, so it was over before it registered.
you in the same CONTROL MODE a horde does — racket auto-fires, the finger steers you absolutely,
no serving — so a flamer or gun genuinely feels like a horde starting. Nothing in the weapon paths
touches `startHorde`; with the horde announced again the two are told apart by the announcement.
- Three tests added (15 total): the wave may not land on the frame of its own announcement, a mode
- Three tests added: the wave may not land on the frame of its own announcement, a mode
that steals the court during the warning re-arms the latch, and the boss overlay names the boss
and hands the court back without a tap.
**Same round, the burst weapons.** *"When firing a burst tin the weapon stops when it has destroyed
all visible enemies. It should just fire on."* It did, and the cause had nothing to do with enemies:
both the auto-fire and the steer were gated on `G.phase === 'rally'`, and every beat raised by
clearing the court parks the phase in `'over'` (a point, a won game, the mop-up). So the moment the
flamer killed the last body it went silent AND the player froze — worst possible timing, and it read
as the weapon jamming. **A burst is its own control mode for its whole `len`, exactly like a horde:
its own clock is the only thing that ends it.** The fire block in `updateZombies` has no phase guard
at all now, and the movement block runs on `G.phase === 'rally' || G.mgT > 0`. The settled "the
player only walks during rally" rule is untouched — nothing arms a burst except the player.
Deliberately NOT fixed by forcing the phase back to `'rally'` during a burst: that would stop `overT`
ticking, and a parked beat that never expires is how `pendingHorde` gets stranded (see the mgT lock).
**And the burst countdown is the TILE now, not a bar.** It was 1.5 px along the tile's bottom edge —
which is both the rounded frame and, on a phone, the very bottom of the screen. The armed slot's
WELL drains instead: a gold wash across the whole tile, emptying leftward, clipped to the tile's own
rounded path (`panel` leaves it as the current path) and drawn under the icon and labels. Measured
lit vs empty on the live tile: rgb(88,125,68) against rgb(31,84,49).
## Session log: beats.js, the rename, and the build gate (2026-08-11, same day)
Oliver's structural question ("framework? smaller files?") answered with a deliberate NO on both —