The reaction lands where the ball does

- praise was firing at RELEASE, half a second before impact (measured:
  32-frame flight, word on frame 0) — it now arms on the ball and pops
  on the first body it meets, or its first bounce
- DOUBLE KILL / MASSACRE / RETURNED rise off the thing that earned them,
  as world-anchored pop texts — the announcement band is for milestones
- the band got rows: a card can no longer print over the flash line
- GAME N flash deleted (the scoreboard bar already says it), CHANGEOVER
  folded into the countdown panel

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-08 20:50:46 +02:00
1 parent 9476f354c2
commit 1337048a85
7 files changed
+91 -30

No files matched your search

+17
View File
@@ -425,6 +425,23 @@ strategic answer, so the run keeps feeding it.
**The umpire triple-tap cheat is deleted** — the test group found it. `T.forceZombies()` remains.
**Third batch, same day — REACTIONS LEFT THE BAND (option C, settled in discussion).** Oliver's
"reactions play after shooting, not when the ball hits" was MEASURED and real: `praise()` fired in
hitServe at RELEASE while the ball flew for another half second. The word is now ARMED on
`ball.praise` and pops at the IMPACT — first body the ball touches (zombies.js contact branch) or
its first bounce (onBounce); a rally hit pops at the racket, where contact and praise are the same
moment. Verified: a 32-frame flight popped its word on frame 32.
Reactions are **world-anchored pop texts** now (`pops`/`popText` in zombies.js, drawn in the world
pass before the un-shake): DOUBLE/TRIPLE KILL and MASSACRE rise off the corpse, RETURNED off the
parry, praise off the impact. Small (Bangers 13), rise-and-fade in 0.85 s, capped at 10.
**The band got ROWS**: flash line 68..90, countdown under it, and `bandTop` floors a card at 96 so
a tall icon card can no longer print over the flash — that collision was the "spamming over each
other" report. **Cuts, per Oliver**: the GAME N flash is deleted (with the whole `pendingGame`
latch — the scoreboard bar prints the number permanently) and the CHANGEOVER flash is folded into
the countdown panel ('CHANGEOVER · RESUMING IN n'). He kept the burst-arm weapon label and the
praise words. **A bottom/above-rack message slot was proposed and REJECTED**: that is thumb
territory — covered by the hand mid-pull and outside where the eyes are.
**Second batch, same day — THE MESSAGE BAND.** Oliver: transient messages need "a definite space
… over the crowd". `AD_TOP()`/`bandTop(h)` in render.js pin the whole family there — below the
scoreboard block, above the ad strip, never on the court: