diff --git a/assets/_sheet_pdeath.png b/assets/_sheet_pdeath.png new file mode 100644 index 0000000..3c98e8b Binary files /dev/null and b/assets/_sheet_pdeath.png differ diff --git a/assets/p_die1.png b/assets/p_die1.png new file mode 100644 index 0000000..1d9c619 Binary files /dev/null and b/assets/p_die1.png differ diff --git a/assets/p_die2.png b/assets/p_die2.png new file mode 100644 index 0000000..e6f2f04 Binary files /dev/null and b/assets/p_die2.png differ diff --git a/config.js b/config.js index 93b55a4..0856beb 100644 --- a/config.js +++ b/config.js @@ -253,7 +253,12 @@ export const TUNE = { // stand sitting back down while the applause was still audible. export const APPLAUSE_T = 4.2; -export const EATEN_BURST = 0.5, EATEN_SUMMARY = 1.6, EATEN_RESTART = 2.2; +// A: they drag you down and you fight it on your knees · B (EATEN_BURST): the crowd closes over you +// and what is left is the mound · C (EATEN_SUMMARY): the summary fades in over them still feeding. +// It is deliberately long. Oliver: "the movies surround and bite them, blood spills, and then the +// person basically drowns in the zombies" — that cannot happen in half a second. +export const EATEN_GRAB = 0.9, EATEN_BURST = 2.3, EATEN_SUMMARY = 3.6, EATEN_RESTART = 4.6; +export const EATEN_FEED_R = 1.15; // m — how tight the feeding ring packs around the body // UI accent colours, one place so the whole HUD can be re-tuned at once. Deliberately // desaturated from the original arcade primaries: they were shouting over the artwork. diff --git a/gameplay.js b/gameplay.js index 678e8e1..1ddfba8 100644 --- a/gameplay.js +++ b/gameplay.js @@ -5,7 +5,7 @@ import { P, O, ball, score, crowd, G, other, deuceSide, setupPoint, sendBoy } fr import { audio, pock, swish, whoosh, applause, voice, sfx, aww, zombieMusic, zombieDuck } from './audio.js'; import { axisX, axisZ, takeFlickAim, touchPX } from './input.js'; import { W } from './render.js'; // runtime-only cycle (render imports gameplay), same pattern as input/zombies -import { updateZombies, spawnZombie, spawnRacketZombie, spawnMachine, spawnChapterBoss, zombies, gore, explode, meleeSwipe, extras, parts, pellets, shots, playerGore } from './zombies.js'; +import { updateZombies, spawnZombie, spawnRacketZombie, spawnMachine, spawnChapterBoss, zombies, gore, explode, meleeSwipe, extras, parts, pellets, shots, playerGore, eatenBleed } from './zombies.js'; // ------------------------------------------------------------- ballistics ---- // Launch ball from (x0,y0,z0) so it lands at (tx, tz) with horizontal speed s under gravity g. @@ -913,6 +913,7 @@ export function update(dt) { if (G.mode === 'eaten') { // the match is over in the truest sense G.idleT += dt; const was = G.eatenT; G.eatenT += dt; + if (G.eatenT < EATEN_BURST) eatenBleed(dt); // phase A: they are still tearing at you if (was < EATEN_BURST && G.eatenT >= EATEN_BURST) playerGore(); // phase B: you become the gore if (G.shake && (G.shake.t -= dt) <= 0) G.shake = null; if (G.boomFlash > 0) G.boomFlash -= dt; diff --git a/index.html b/index.html index 4ef5baa..051f9d6 100644 --- a/index.html +++ b/index.html @@ -97,6 +97,6 @@
- +