Bring the swing log to every rally mode, and time the gold ring

Oliver wants to hand over a log of why he missed balls. It existed behind
a scoreboard tap but was gated on G.mode === 'tennis', so the Climb, the
cup and training (which run as 'splatter') logged nothing. It now writes
in every rally mode: hits with shot, tap age and any quality cap, misses
with the new let-it-bounce reason, and a WON/LOST line naming why each
point went. Tapping the open log copies all 200 entries with a header.

Its first catch: the gold ring went gold at a distance, which is too
early for the slow balls steps 1-3 brought in. It is now timed off the
ball's real path to his reach (against where his run is taking him):
gold means touch now. ringTime 0 restores the old ring. v365.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 11:41:05 +02:00
1 parent 180288ef8f
commit d110e12321
8 files changed
+225 -41

No files matched your search

+36
View File
@@ -5384,6 +5384,42 @@ rolling (seed 31337 found it).
**Not built:** the champion LEARNING whether the net works for him (Free Tennis's idea), a style for
classic's CPU, and a "DROP"/"LOB" word at contact.
### The swing log comes back for every rally mode, and the gold ring is TIMED (2026-10-14, v365)
Oliver: *"bitte bau nochmal die Funktion ein die protokolliert warum ich einen Ball nicht bekommen habe
(ich glaube das war ein Tap aufs Scoreboard).. ich würde dir das gerne mal zum Debuggen geben."*
- **The log existed but was gated on `G.mode === 'tennis'`.** The match runs as `'splatter'` under its
interlude, so the Climb, the cup and training logged nothing at all. `swingLog()` (tennis or
`rallyFeel`) now gates every site: whiff analysis, swing snapshots, closest approach, the HIT line.
- What a line now carries:
- **HIT:** `q=0.82 drop left volley · tap 120ms · capped: …`, i.e. the shot asked for, the tap's
age (keyPressed's `lead`, stored as `P.tap`), and which cap took the quality down (volley below
the tape, dug-out drop, lobbed).
- **MISS:** the old early/late/wide/high/low reasons, plus "waited for the bounce" when the
let-it-bounce gate refused it. The snapshot reach now includes `matchReach`; without it a near
miss in the match read as wide.
- **WON/LOST:** every point names why (`logPoint`, called by both `pointTo` and `resolveInterlude`).
A point lost with no swing adds how close the ball came. The old PASSED entry folded into this
line; the ghost hand's pass streak keeps its old classic-only trigger.
- The ring holds 200 entries. **Tap the scoreboard** to open the last nine. **Tap the open log** to
copy all of it (`copySwingLog`, main.js): a header with build, mode, opponent and style, then one
line per entry with its measured fields. It uses the clipboard, with the share sheet as fallback.
`render.logGeom` is the one geometry for drawing and hit test.
- **The log's first catch: the gold ring was a DISTANCE** (2.7 m ± 0.5). That is right for the
~20 m/s rally balls it was calibrated on, and too early for every slow ball steps 1-3 brought in:
moonballs, lobs, drops, deep balls braked by their bounce. A gold-ring tap on one missed "30 ms after
the window".
- `gameplay.ringCue` rolls the ball forward (the real bounce rule, reach, height band and
let-it-bounce gate) to the moment it enters the player's contact reach, measured against where
the auto-run is CARRYING him (`P.tgt`). Against where he stands, the cue jumped 50-180 ms a frame.
- Gold means a finger landing now centres that moment in the swing window (`ringBand` 0.35 of the
half-window, so the gold edge is q 0.65). The rings kiss at the sweet moment: a tap at the kiss
measured q 1.00 every time.
- Gold-tapping bot with a 100 ms lift: 92-98% returned at every style. The distance ring returned
75% against THE BRUTE's topspin.
- `TUNE.ringTime 0` restores the distance ring for A/B.
- Note: contact still fires on the first frame the ball is in reach, which right after a bounce is
often 15-25 cm off the grass. A visual half-volley, the old contact model; untouched.
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.