Revert splatter rapid-fire serve; fix horde pose + re-trigger
Oliver's feedback on the feel pass: 1. Rapid-fire serving was way too easy. Reverted splatter serving to the proper model: a tap does the toss ritual (apex timing = quality), a flick is a quick aimed serve. Dropped the multi-ball barrage and removed the extraBalls plumbing (array, update, render, hooks). Melee swish and zombie homing stay. If multi-ball is wanted back, it should require a proper serve per ball. 2. The player was stuck in the serve/swing pose when a horde started (the triggering shot's pose lingered) — startHorde now clears it. 3. A horde re-triggered immediately: machine-gun kills scored points, so games were won mid-horde and the next kill after it ended won another game → instant new horde. A horde is now survival: it doesn't score (splatPoint skipped while G.horde), so it can't chain. After a horde you must win a full game again to summon the next. Verified via window.T: a tap tosses (not an instant serve) and the full toss→serve→rally completes; melee still kills adjacent shamblers; pose is idle/-1 at horde start; no scoring during a horde and the next kill after scores 15 without restarting it; tennis 11/12, bomb consume, homing all still green; no console errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
38035738ac
commit
bfaafe6727
4 files changed
+25
-49
No files matched your search
@@ -8,7 +8,7 @@ import { P, O, ball, score, G, setupPoint } from './state.js';
|
||||
import { update, keyPressed, solveShot, inServeBox, inCourt, forceZombies } from './gameplay.js';
|
||||
import { fitViewport, render, proj } from './render.js';
|
||||
import { voice } from './audio.js';
|
||||
import { zombies, spawnZombie, piles, gore, parts, pellets, extraBalls } from './zombies.js';
|
||||
import { zombies, spawnZombie, piles, gore, parts, pellets } from './zombies.js';
|
||||
import { cv } from './dom.js';
|
||||
import './input.js';
|
||||
|
||||
@@ -54,6 +54,6 @@ cv.addEventListener('pointerdown', e => {
|
||||
requestAnimationFrame(frame);
|
||||
|
||||
// exposed for in-browser sanity checks and simulated playtests
|
||||
window.T = { TUNE, ball, P, O, score, G, zombies, spawnZombie, piles, gore, parts, pellets, extraBalls, solveShot, inServeBox, inCourt, proj, setupPoint, forceZombies,
|
||||
window.T = { TUNE, ball, P, O, score, G, zombies, spawnZombie, piles, gore, parts, pellets, solveShot, inServeBox, inCourt, proj, setupPoint, forceZombies,
|
||||
step: dt => update(dt), render, press: keyPressed,
|
||||
get phase() { return G.phase; }, set phase(v) { G.phase = v; } };
|
||||
Reference in new issue
Block a user