End a shot's topspin dip at the bounce, so a kicking ball kicks up

A shot's extra gravity is its dive in flight, but it was carried through
the bounce: heavy topspin skidded away low and Oliver met nearly every
ball 0-25 cm off the grass. After its bounce a ball now falls under plain
gravity (tennis modes only), and every planner that rolls a bounce
forward switches at the same moment. The higher bounces pushed the
auto-run into volleys, so it now takes a kicking ball at the top of its
bounce, up to chest height. Median contact rises from 0.42 to 1.13 m at
the bottom of the ladder. v369.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 13:38:01 +02:00
1 parent fe090f2fba
commit e25047ed0c
5 files changed
+40 -8

No files matched your search

+17
View File
@@ -5485,6 +5485,23 @@ there when the window opened) or `early 40ms`. That was the question his first l
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.
### The dip ends at the bounce: topspin kicks UP (2026-10-14, v369, Oliver: "ja, bau den topspin-fix")
A shot's extra gravity (quality topspin `spinFactor`, the serve's `serveSpin`) is its DIVE IN FLIGHT,
and it used to be carried THROUGH the bounce: a "heavy topspin" ball skidded away low and nearly every
contact in his logs was 0-25 cm off the grass. `gAfter()` hands a ball plain gravity at its bounce
(tennis modes; gore's balls keep theirs). The kick itself was already `bY`/`bXZ`'s spin factor. Every
planner that rolls a bounce forward switches at the same moment (physics, `intercept`, `bounceContact`,
`ringCue`, `matchOutOfReachFlight`); one left on the old gravity would predict a ball that is not there.
- **Side effect, caught by the probe:** higher bounces fell outside the auto-run's 0.45-1.3 m comfort
band, so it found no point behind the line and ran forward to VOLLEY (38-42% volleys). The player
now takes a kicking bounce at its top, up to `rallyTop` 1.7 m. Volleys are back to 8-18%.
- **Measured** (probe, median player contact): rung 1 0.42 -> 1.13 m, rung 6 0.53 m, and against the
big hitter still 0.35 m. The cause there is no longer the bounce. A contact fires on the FIRST frame
the ball is in reach, so against hard pace it is met as it enters reach, just off the bounce. Waist
high contact against pace would need the contact model itself changed: contact at the closest
approach, quality by distance from the sweet spot. That is a separate decision. The timed ring still
returns 92-98%. 162 tests, nine seeds.
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.