Phase 2: multi-kill applause + umpire appreciation
A single shot that splatters ≥2 zombies now escalates: DOUBLE KILL / TRIPLE KILL / MASSACRE ×N flash, louder crowd, and a new umpire line (double_kill / triple_kill / unbelievable m4a, recorded say -v Daniel). ball.kills tracks the streak, reset on every fresh shot (doHit + hitServe). zombies.js imports cheer (now exported from gameplay). The splatter pace cut is now TUNE.zPierce (0.75, was hardcoded 0.5) so a hot ball plows through a lined-up lane instead of stalling on the first kill. Verified via window.T: a low ball down a one-side lane kills 3→TRIPLE and 5→MASSACRE ×5 with escalating flash, streak resets on the next serve, the three new lines serve 200 and match the existing m4a format, no crash when the ball dies mid-streak, no console errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
795ddeb425
commit
b6119c937b
7 files changed
+12
-4
No files matched your search
+3
-1
@@ -78,6 +78,7 @@ function doHit(ch, quality, aim) {
|
||||
ball.lastHit = ch.side; ball.bounces = 0; ball.firstLand = null;
|
||||
G.wasServe = false; // a serve volleyed back pre-bounce must not fault-check the return
|
||||
ball.pow = quality; // carried pace: zombies splatter only above zSplatQ
|
||||
ball.kills = 0; // fresh shot: multi-kill streak restarts
|
||||
if (ch.side === 'P') { // shot marker: where this will land — red means it's going out
|
||||
const ok = G.mode !== 'tennis' || (Math.abs(tx) <= COURT.W / 2 + 0.02 && tz >= -0.02 && tz <= COURT.netZ);
|
||||
G.outMarker = { x: tx, z: tz, out: !ok, t: 1.3 };
|
||||
@@ -118,6 +119,7 @@ function hitServe(sv, quality, aim = null) {
|
||||
ball.vx = v.vx; ball.vy = v.vy; ball.vz = v.vz;
|
||||
ball.lastHit = sv.side; ball.bounces = 0;
|
||||
ball.pow = quality;
|
||||
ball.kills = 0; // fresh serve: multi-kill streak restarts
|
||||
if (sv.side === 'P') G.outMarker = { x: boxX, z: tzs, out: G.mode === 'tennis' && !inServeBox(boxX, tzs), t: 1.3 };
|
||||
G.phase = 'rally'; pock(1, 1100);
|
||||
sv.pose = 'serve'; sv.poseT = 0;
|
||||
@@ -136,7 +138,7 @@ function scoreKey() {
|
||||
return N[s[0]] + '_' + N[s[1]];
|
||||
}
|
||||
|
||||
function cheer(seconds, vol) {
|
||||
export function cheer(seconds, vol) {
|
||||
applause(seconds, vol);
|
||||
crowd.cheer = Math.max(crowd.cheer, seconds);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user