The card lies flat, and a popup owns its screen

- icon LEFT of the text: every card is 62px at a fixed top, fully over
  the crowd — the stacked layout hung its lower third over live court,
  and the art draws bigger this way, not smaller
- nothing draws or ticks under a modal: a card raised in the same beat
  used to burn out dimmed beneath it — it holds and plays after

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-08 21:10:11 +02:00
1 parent 1337048a85
commit 911035af00
4 files changed
+39 -26

No files matched your search

+8 -6
View File
@@ -1326,12 +1326,6 @@ export function update(dt) {
updateZombies(dt);
return;
}
// A card can wait before it shows. The chapter card used to land on the same frame as the boss
// died, so the biggest gore burst in the game happened underneath it and nobody ever saw it.
if (G.card) {
if (G.card.wait > 0) G.card.wait -= dt;
else { G.card.t -= dt; if (G.card.t <= 0) G.card = null; }
}
if (G.shake && (G.shake.t -= dt) <= 0) G.shake = null;
if (G.netRipple && (G.netRipple.t -= dt) <= 0) G.netRipple = null; // the tape settles
if (G.zoom && (G.zoom.t += dt) >= G.zoom.T) G.zoom = null; // scripted punch-in (render applies it)
@@ -1351,6 +1345,14 @@ export function update(dt) {
// late in a run — the weapon modal is first-sight-only, so once you have seen a tin the label
// flash IS the announcement, and the trainer's popup was eating it every time you were wounded.
if (G.flash) { G.flash.t -= dt; if (G.flash.t <= 0) G.flash = null; }
// A card can wait before it shows. The chapter card used to land on the same frame as the boss
// died, so the biggest gore burst in the game happened underneath it and nobody ever saw it.
// BELOW the modal return, like the flash: a card raised in the same beat as a popup used to
// burn its whole life dimmed-out underneath it — now it holds and plays AFTER the dismissal.
if (G.card) {
if (G.card.wait > 0) G.card.wait -= dt;
else { G.card.t -= dt; if (G.card.t <= 0) G.card = null; }
}
for (let i = pops.length - 1; i >= 0; i--) if ((pops[i].t -= dt) <= 0) pops.splice(i, 1); // reaction pops decay
crowd.cheer = Math.max(0, crowd.cheer - dt);
G.idleT += dt;