Zombie mode: kills-per-point knob so a game isn't 4 pot-shots
1 kill = 1 point made a tennis game trivially short (4 kills). Gate player scoring behind TUNE.killsPerPoint (default 3) — K kills bank one point, the rest just splatter. Opponent breaches stay 1-for-1, so the asymmetry is where the pressure comes from. Live-tunable in the T panel; set to 1 to restore the old behavior. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
5d815a4fc8
commit
aa8d2fff36
3 files changed
+4
No files matched your search
@@ -27,6 +27,7 @@ export const TUNE = {
|
|||||||
gameBeatT: 1.6, // s the game-end beat lasts on even (non-changeover) games
|
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
|
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
|
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
|
zSplatQ: 0.5, // min shot quality to splatter; below = stagger pushback
|
||||||
zPushback: 1.4, // m a staggered zombie is knocked back
|
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
|
splatterOverT: 0.1, // s the spent-ball 'over' beat lasts before the next serve is armed
|
||||||
|
|||||||
@@ -221,6 +221,8 @@ function pointTo(side, reason) {
|
|||||||
// The scoreboard IS the progression: games drive spawn pressure, 6 games = a set = a horde,
|
// The scoreboard IS the progression: games drive spawn pressure, 6 games = a set = a horde,
|
||||||
// odd games end in a changeover breather.
|
// odd games end in a changeover breather.
|
||||||
export function splatPoint(side, quiet = false) {
|
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);
|
const gameOver = advancePoint(side);
|
||||||
if (gameOver) {
|
if (gameOver) {
|
||||||
G.runGames++;
|
G.runGames++;
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ export const G = {
|
|||||||
interlude: false, // sudden-death duel vs the racket zombie: falsy, or {introT} while announcing
|
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
|
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
|
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
|
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
|
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
|
changeover: false, // the odd-game breather: no spawns, no serving, the boys mop
|
||||||
|
|||||||
Reference in new issue
Block a user