Phase 9: weapons ride the new-balls rule — kill meter retired
- Deliveries are scheduled by the rules of tennis: game ballChangeFirst (3), then every ballChangeEvery (4) games; the tin lands at the NEXT changeover (a due tin survives hordes and even-game endings until a changeover comes) - Fresh tin = bombMax (3) bombs; boy run + 'new balls, please' + NEW BALLS flash - Shame rule: zombies took a game since the last delivery -> NO NEW BALLS, slate wiped either way - killMeter/bombEvery deleted from state/config/zombies Verified: delivery at game 3 (bombs 3); due-but-even games hold the tin until the next changeover; NO NEW BALLS withholds and clears shame; bomb serve still arms and detonates; killMeter gone; no console errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a3bd45e2f1
commit
eb66376033
4 files changed
+15
-10
No files matched your search
+11
-2
@@ -186,7 +186,11 @@ export function splatPoint(side, quiet = false) {
|
||||
const gameOver = advancePoint(side);
|
||||
if (gameOver) {
|
||||
G.runGames++;
|
||||
if (side === 'O') G.shameGame = true; // they took a game — Oliver pays at the next new-balls delivery
|
||||
if (side === 'O') G.shameGame = true; // they took a game — the next new-balls delivery is withheld
|
||||
// the new-balls rule arms you: deliveries land at the changeover that follows the scheduled game
|
||||
if (G.runGames === TUNE.ballChangeFirst ||
|
||||
(G.runGames > TUNE.ballChangeFirst && (G.runGames - TUNE.ballChangeFirst) % TUNE.ballChangeEvery === 0))
|
||||
G.tinDue = true;
|
||||
voice(side === 'P' ? 'game_set_massacre' : 'game_opponent', 0.5); // game-win lines always speak
|
||||
cheer(2.2, 0.5);
|
||||
const i = side === 'P' ? 0 : 1;
|
||||
@@ -206,7 +210,12 @@ function startChangeover() {
|
||||
G.changeover = true;
|
||||
G.phase = 'over'; G.overT = TUNE.changeoverT;
|
||||
sendBoy();
|
||||
G.flash = { text: 'CHANGEOVER', t: 1.4 };
|
||||
if (G.tinDue) { // the boys arm you — unless they took a game since the last delivery
|
||||
G.tinDue = false;
|
||||
if (G.shameGame) G.flash = { text: 'NO NEW BALLS', t: 1.6 }; // the umpire withholds
|
||||
else { G.bombs = TUNE.bombMax; voice('new_balls', 0.6); G.flash = { text: 'NEW BALLS', t: 1.6 }; }
|
||||
G.shameGame = false; // the slate is clean either way
|
||||
} else G.flash = { text: 'CHANGEOVER', t: 1.4 };
|
||||
}
|
||||
|
||||
// retire the splatter ball; a running changeover's long beat must not be clobbered short
|
||||
|
||||
Reference in new issue
Block a user