The court keeps no score: the landing ring is gone
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8307a05f79
commit
9fab26eec9
4 files changed
+6
-19
No files matched your search
+3
-15
@@ -163,17 +163,9 @@ function doHit(ch, quality, aim) {
|
||||
ball.bomb = false; ball.flame = false; ball.wid = 'ball'; // only a consuming serve arms these; any other hit clears them
|
||||
ball.chain = 0; // ...and the slice dies with the shot that earned it
|
||||
ball.praise = null; // a re-hit is a new shot: a stale armed word must not pop on ITS impact
|
||||
if (ch.side === 'P') { // shot marker: where this will land — red means it's going out
|
||||
// TENNIS ONLY. It answers "did that land in?", and splatter does not ask: `out` could never be
|
||||
// true there, so it was a permanent yellow ring on the grass carrying no information — and
|
||||
// sitting under the shambler for 1.3 s, which is longer than the gap before you aim again.
|
||||
// That ring, not the new mark, is the circle that seemed to live under their feet.
|
||||
if (G.mode === 'tennis') {
|
||||
const ok = 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 };
|
||||
}
|
||||
G.aiReactT = 0; // CPU hasn't read the shot yet
|
||||
}
|
||||
// (the landing ring that used to be stamped here confused testers — the umpire calls the ball,
|
||||
// the court stays clean)
|
||||
if (ch.side === 'P') G.aiReactT = 0; // CPU hasn't read the shot yet
|
||||
sfx(ch.side === 'P' ? 'tennis-player' : 'tennis-opponent', 0.9, { reverb: true }); // recorded racket strike, per side
|
||||
if (quality > 0.999 && ch.side === 'P') { // the rally hit: a real 45 ms window (perfectMs)
|
||||
G.hitstop = 0.05; pock(0.5, 1600);
|
||||
@@ -367,9 +359,6 @@ function hitServe(sv, quality, aim = null, perfect = quality > 0.999) {
|
||||
}
|
||||
}
|
||||
// (spendSlot already hands you back plain balls when the last one goes)
|
||||
// tennis only, same reason as doHit's: a splatter serve lands at a shambler's feet, and the ring
|
||||
// sat there in yellow for 1.3 s saying nothing — right where the aim mark is trying to be read.
|
||||
if (sv.side === 'P' && G.mode === 'tennis') G.outMarker = { x: boxX, z: tzs, out: !inServeBox(boxX, tzs), t: 1.3 };
|
||||
G.phase = 'rally'; sfx(sv.side === 'P' ? 'tennis-player' : 'tennis-opponent', 0.9, { reverb: true }); // recorded serve strike, per side
|
||||
sv.pose = 'serve'; sv.poseT = 0;
|
||||
if (sv.side === 'P') G.tossDrops = 0; // a served toss ends the apex lesson
|
||||
@@ -1657,7 +1646,6 @@ export function update(dt) {
|
||||
// ball boy: sprint across, scoop the ball in passing, despawn off the far side
|
||||
const boy = G.boy;
|
||||
if (boy) boy.mop ? mopRound(boy, dt) : fetchRound(boy, dt);
|
||||
if (G.outMarker && (G.outMarker.t -= dt) <= 0) G.outMarker = null;
|
||||
|
||||
if (G.phase === 'over') {
|
||||
G.overT -= dt;
|
||||
|
||||
Reference in new issue
Block a user