Phase 8: bomb juice — the explosion is finally FELT
- Camera shake (G.shake, decays over 0.35s; HUD stays steady via transform reset) - One white flash frame (G.boomFlash overlay) - Scorch crater: near-black stain the boys mop 10x slower — the lawn scars - Hitstop 0.1 -> 0.18 - Umpire loses composure: 'Order. Order, please.' (new order.m4a), rate-limited so bomb chains don't spam him Verified: explode kills cluster of 4 (MASSACRE x4 chains), shake/flash set and decay clean, 2nd bomb order-call suppressed, 1s of mopping erases blood (0.9->0) but not the crater (1->0.84); screenshot mid-shake; no console errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5a7f71fdba
commit
a3bd45e2f1
5 files changed
+19
-3
No files matched your search
@@ -233,6 +233,10 @@ function drawMgRacket() { // horde: the player braces the racket forward and up-
|
||||
// ------------------------------------------------------------------ frame ----
|
||||
export function render() {
|
||||
ctx.setTransform(RES, 0, 0, RES, 0, 0); // logical W x H coordinates at RES density
|
||||
if (G.shake) { // bomb kick: jitter the whole world (transform is reset before the HUD)
|
||||
const m = G.shake.mag * G.shake.t / 0.35;
|
||||
ctx.translate((Math.random() * 2 - 1) * m, (Math.random() * 2 - 1) * m);
|
||||
}
|
||||
|
||||
const pal = palette();
|
||||
// stands: tiered crowd from top of screen down to just above the far court
|
||||
@@ -271,7 +275,7 @@ export function render() {
|
||||
// gore decals: what remains of the visiting team (flat ground layer, then far-side mounds)
|
||||
for (const d of gore) {
|
||||
const p = proj(d.x, 0, d.z);
|
||||
ctx.fillStyle = `rgba(140,18,18,${d.a})`;
|
||||
ctx.fillStyle = d.scorch ? `rgba(28,22,16,${d.a})` : `rgba(140,18,18,${d.a})`; // craters burn black-brown
|
||||
ctx.beginPath(); ctx.ellipse(p.x, p.y, p.s * d.r * 0.4, p.s * d.r * 0.16, 0, 0, 7); ctx.fill();
|
||||
}
|
||||
drawPiles(false); // far-side piles (occluded by the net); near-side piles drawn after the net
|
||||
@@ -328,6 +332,9 @@ export function render() {
|
||||
if (G.mode !== 'eaten') drawChar(P); // there is no P anymore
|
||||
if (G.horde && G.mode === 'splatter') drawMgRacket(); // rambo racket over the player
|
||||
|
||||
ctx.setTransform(RES, 0, 0, RES, 0, 0); // un-shake: the HUD and overlays stay rock steady
|
||||
if (G.boomFlash > 0) { ctx.fillStyle = `rgba(255,255,255,${Math.min(1, G.boomFlash / 0.08) * 0.85})`; ctx.fillRect(0, 0, W, H); }
|
||||
|
||||
// HUD — scoreboard
|
||||
ctx.fillStyle = 'rgba(12,16,24,0.82)'; ctx.fillRect(6, 6, 132, 30);
|
||||
ctx.strokeStyle = '#5a6a85'; ctx.strokeRect(6.5, 6.5, 131, 29);
|
||||
|
||||
Reference in new issue
Block a user