The toss is the server's ball — the real death loop

"still when I lost a single point and try to serve again every further tap
does hurt me more until I am dead". Reproduced tap-for-tap this time, and the
serveNum fix was a red herring — a real bug, but not this one.

tossBall never stamped ball.lastHit. After any rally the zombie touched last,
the freshly tossed ball still said lastHit 'O' — and the previous pass moved
the server behind the baseline, past the passing-shot line. So the moment the
toss went up, the game saw an opponent ball beyond your baseline: "its
passing shot ends the duel", point to them, blood. Every tap = a toss = an
instant lost point, faster the more he panicked. Two fixes composed into a
death loop; the stale field was harmless while serving happened inside the
court.

One stamp in tossBall — ball.lastHit = sv.side — fixes every caller. The duel
and the gore mode carried the same latent bug for anyone tossing deep behind
the line after a racket-zombie touch.

Verified with the exact field shape: lose a rally the zombie touched last,
then eight badly-timed panic taps — one honestly lost point, zero
toss-bleeds. Before the fix every single toss bled.

41 tests, 15 seeds clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-11 22:54:13 +02:00
1 parent f67411e330
commit 24be613c61
4 files changed
+52 -2

No files matched your search

+23
View File
@@ -889,6 +889,29 @@ again and again until i die"*.
seven straight games: **it now loses the match** (2-3, then blooded out in game two). That may
even be too hot — `matchSpeedBase`/`matchFlub` are the two dials, and Oliver's thumb is the judge.
**SIXTEENTH PASS — the REAL death loop, and my serveNum fix was a red herring.** Oliver, again:
*"still when I lost a single point and try to serve again every further tap does hurt me more until
I am dead"*. Reproduced tap-for-tap this time before touching anything, and the previous diagnosis
was wrong — serveNum was A bug, but not THE bug.
**`tossBall` never stamped `ball.lastHit`.** After any rally the zombie touched last, the freshly
tossed ball still said `lastHit: 'O'` — and the fourteenth pass moved the server BEHIND the baseline
(z 24.3, past the passing-shot line at COURT.L + 0.3). So the moment the toss went up, the game saw
"an opponent ball beyond your baseline": *its passing shot ends the duel* -> point to them -> blood.
Every tap = a toss = an instant lost point, faster the more he panicked. Two of my fixes composed
into a death loop: the stale field was harmless while serving happened INSIDE the court.
One stamp in `tossBall` (`ball.lastHit = sv.side` — the toss is the server's ball) fixes every
caller. **The duel and the gore mode carried the same latent bug** for anyone tossing from deep
behind the line after a racket-zombie touch; it never fired only because splatter serving used to
happen from inside the court. Verified in the browser with the exact field shape: lose a rally the
zombie touched last, then eight badly-timed panic taps — one honestly lost point, zero toss-bleeds.
**The lesson for this file: when a report survives a fix, the fix was wrong — reproduce before
re-diagnosing.** The serveNum reset was real and stays, but it was found by reading code, not by
reproducing the report, and the actual loop needed the exact field conditions (a zombie touch, the
new serve position, panic-speed taps) to show itself.
**Open, and every one of them is Oliver's call after he plays it:**
1. ~~**A ball that carries through the lane can complete two steps at once.**~~ Largely CLOSED by
the slice removal (seventh pass) — a cut ball picking its own next victim was the main way this