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
+6
-2
@@ -101,6 +101,7 @@ function tickHorde(dt) {
|
||||
export function explode(x, z) {
|
||||
for (let i = zombies.length - 1; i >= 0; i--) // backwards: splatter() splices the array
|
||||
if (Math.hypot(zombies[i].x - x, zombies[i].z - z) < TUNE.bombRadius) splatter(i);
|
||||
gore.push({ x, z, r: 1.6, a: 1, scorch: true }); if (gore.length > 40) gore.shift(); // the crater — near-permanent
|
||||
gore.push({ x, z, r: 1.4, a: 0.9 }); if (gore.length > 40) gore.shift();
|
||||
const pl = piles.find(p => Math.hypot(p.x - x, p.z - z) < 0.6);
|
||||
if (pl) pl.size = Math.min(4, pl.size + 3);
|
||||
@@ -109,7 +110,10 @@ export function explode(x, z) {
|
||||
x, y: 0.6, z, vx: (Math.random() * 2 - 1) * 6, vy: 1 + Math.random() * 5, vz: (Math.random() * 2 - 1) * 6,
|
||||
t: 0.5 + Math.random() * 0.7, dark: k % 2 === 0,
|
||||
});
|
||||
G.hitstop = 0.1; boom();
|
||||
G.hitstop = 0.18; boom();
|
||||
G.shake = { t: 0.35, mag: 6 }; // camera kick
|
||||
G.boomFlash = 0.08; // one white frame
|
||||
if (G.idleT - G.lastOrderT > 3) { voice('order', 0.35); G.lastOrderT = G.idleT; } // the umpire loses composure
|
||||
}
|
||||
|
||||
export function updateZombies(dt) {
|
||||
@@ -200,7 +204,7 @@ export function updateZombies(dt) {
|
||||
const boy = G.boy; // the boy mops any gore he passes over
|
||||
for (let i = gore.length - 1; i >= 0; i--) {
|
||||
const d = gore[i];
|
||||
if (boy && Math.abs(boy.x - d.x) < 0.7 && Math.abs(boy.z - d.z) < 1.2) d.a -= dt * 1.6;
|
||||
if (boy && Math.abs(boy.x - d.x) < 0.7 && Math.abs(boy.z - d.z) < 1.2) d.a -= dt * (d.scorch ? 0.16 : 1.6); // craters scar the lawn 10× longer
|
||||
if (d.a <= 0) gore.splice(i, 1);
|
||||
}
|
||||
for (let i = piles.length - 1; i >= 0; i--) { // piles shave far slower than stains — net growth wins
|
||||
|
||||
Reference in new issue
Block a user