diff --git a/config.js b/config.js index 137549c..8b8e6d4 100644 --- a/config.js +++ b/config.js @@ -27,6 +27,7 @@ export const TUNE = { gameBeatT: 1.6, // s the game-end beat lasts on even (non-changeover) games eatenR: 0.9, // m a shambler must close to eat you — matches the visual sprite overlap zSnap: 1.4, // m free-aim magnetism: a zombie this close to your flick's landing point is the target + killsPerPoint: 3, // splatter: zombie kills to score ONE tennis point (1 = every kill scores, old behavior) zSplatQ: 0.5, // min shot quality to splatter; below = stagger pushback zPushback: 1.4, // m a staggered zombie is knocked back splatterOverT: 0.1, // s the spent-ball 'over' beat lasts before the next serve is armed diff --git a/gameplay.js b/gameplay.js index c46f72b..b60df32 100644 --- a/gameplay.js +++ b/gameplay.js @@ -221,6 +221,8 @@ function pointTo(side, reason) { // The scoreboard IS the progression: games drive spawn pressure, 6 games = a set = a horde, // odd games end in a changeover breather. export function splatPoint(side, quiet = false) { + if (side === 'P' && ++G.killCount < TUNE.killsPerPoint) return; // K kills bank one point; the rest just splatter + if (side === 'P') G.killCount = 0; const gameOver = advancePoint(side); if (gameOver) { G.runGames++; diff --git a/state.js b/state.js index 4379402..bafdd81 100644 --- a/state.js +++ b/state.js @@ -44,6 +44,7 @@ export const G = { interlude: false, // sudden-death duel vs the racket zombie: falsy, or {introT} while announcing duelLerp: 0, // 0..1 — how far the court has returned to tennis colors for the duel horde: null, // active horde wave {t, spawnT, mgT} — machine-gun racket, no serving + killCount: 0, // splatter: kills banked toward the next point (see TUNE.killsPerPoint) runGames: 0, // games finished this run (either side) — the difficulty director sets: [0, 0], // splatter sets won [you, them]; 6 games = a set = a horde changeover: false, // the odd-game breather: no spawns, no serving, the boys mop