The band became one axis: fitted plates, and cards that travel

Every transient message — milestone card, RESUMING clock, one-line flash — now
centres its ink on CARD_MID and only one is ever up. Three shared pieces do all
of it: inkSpan measures, plate() sizes the fill to what it holds, slideDraw
swipes it in from the left and off to the right with a four-ghost smear sampled
back along its own easing curve.

- weapon card is icon + name + count, one centred row, no prose
- plain cards centre as a block instead of hanging off the band's top edge
- the clock left the net for the band; it takes over when a card or flash clears
- band moved up 20px into the flash's old row, which it can now that they never
  draw together
- hold times +0.8s: the swipe eats ~0.55s that the old numbers didn't budget for

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-09 12:55:04 +02:00
1 parent 8658a93dc7
commit f352612de3
3 files changed
+144 -52

No files matched your search

+5 -3
View File
@@ -184,7 +184,9 @@ export const TUNE = {
zPushback: 1.4, // m a staggered zombie is knocked back
splatterOverT: 0.1, // s the spent-ball 'over' beat lasts before the next serve is armed
stuckT: 6, // s the deadlock watchdog waits before letting go of a frozen latch (see update)
tinCardT: 2.0, // s the won-duel weapon card holds (it does NOT wait for a tap)
tinCardT: 2.8, // s the won-duel weapon card holds (it does NOT wait for a tap). The swipe-in
// and swipe-out eat ~0.55 s of this, so every card number below is REAL time on
// screen minus that — 2.0 left the old static hold, and read as a flicker.
// the slingshot: the pull's DIRECTION picks a lane, its LENGTH is power. Deliberately DECOUPLED —
// reaching a far shambler must not cost a longer drag than the screen has room for. The old
// mapping (pull length = reach) is why you had to drag off the bottom of the phone.
@@ -342,8 +344,8 @@ export const TUNE = {
burnBallR: 2.4, // m — the flame ball also lights anything it FLIES PAST. Without this the ball's
// full pierce simply killed the whole lane outright and nothing was left to catch fire.
burnPanic: 1.0, // walk-speed multiplier while burning (1 = off; crank it for panicked sprinting)
setCardT: 2.0, // s the centered SET card holds (the 'kurze unterbrechung' before the horde)
bossWinT: 3.6, // ...and s the EPIC! card holds after a chapter boss. Its OWN number: a boss is
setCardT: 2.8, // s the centered SET card holds (the 'kurze unterbrechung' before the horde)
bossWinT: 4.4, // ...and s the EPIC! card holds after a chapter boss. Its OWN number: a boss is
// the longest fight in the game and the win was over before it registered, but
// stretching setCardT would have made every routine set announcement drag too.
modalIn: 0.34, // s the modal swooshes in — icon+title from the right, body cascading from the