Stop back-dating flicks, and give the half-volley rescue the right deadline

Oliver's v367 log: every 62-64 ms flick landed 76-92 ms early and a 97 ms
one whiffed — v366's touch-down timing for flicks was wrong; a flick is
timed by its swipe (flickLead now 0, the age is still logged). The
early-swing half-volley rescue checked the bounce against the long volley
window and then expired on the bounce frame; it now uses the shorter
groundstroke window. The log also records where he stood when the
opponent struck and where the auto-run was taking him on a miss. v368.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 13:13:08 +02:00
1 parent dfdb699f9d
commit fe090f2fba
5 files changed
+37 -11

No files matched your search

+19
View File
@@ -5466,6 +5466,25 @@ in the same test.
The swing log's HIT line now also says which way the timing missed: `late 40ms` (the ball was already
there when the window opened) or `early 40ms`. That was the question his first loss could not answer.
### His v367 log: the flick back-dating was wrong, and the half-volley rescue used the wrong window (v368)
- **v366's flick back-dating made slow flicks EARLY.** Every 62-64 ms flick landed 76-92 ms early (q
0.05-0.2). A 97 ms flick whiffed "14 ms after the window closed" and cost a point. The 31-45 ms
flicks were fine. A flick is timed by its SWIPE, not by its touch-down. `TUNE.flickLead` is now 0
(knob kept). The touch's age is still logged for both gestures, and taps keep their touch-down timing.
- **The early-swing half-volley rescue judged its deadline against the swing's current, VOLLEY-length
window.** After the bounce the shorter groundstroke window applies, so it decided to wait and then
expired on the bounce frame. That is his 8.98 s "waited for the bounce": the Brute had come in and
dug his drop out weakly (q 0.3, 15 m/s), so it was a sitter, lost. The deadline is now the
post-bounce window, less a frame.
- **Point 3 (a 32 m/s topspin return of his serve into the left corner):** he ended up 1.5 m FORWARD and
only 1 m left. Rebuilt headless twice (from the baseline, and after his own serve); the auto-run
reached the ball both times (5-15 cm). Not reproduced. THEM lines now carry where the player stood
(`px,pz`) and MISS lines where the auto-run was taking him (`runTo`), so the next one explains itself.
- Observed, not changed: the CPU's "heavy topspin" carries its extra gravity THROUGH the bounce, so it
skids low afterwards and nearly every contact in his logs is 0-25 cm off the grass. Real topspin
kicks UP. Resetting `ball.g` at the bounce would fix the picture but moves every timing in the
rally (all four planners), so it is a decision to put to him.
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.