7284ca08f8837cfd75564b53439b3a45bb6c284d
PACE 1.3x -> 1.2x on all four numbers: 19.2 / 14.4 rally, 22.8 / 26.4 serve. The strength-to-velocity relationship you suspected was already there is: a splatter serve runs 26 m/s at the minimum pull, 36 at the kill threshold and 49.2 at a full draw. The draw very nearly DOUBLES the pace (1.89x), because serveQualitySpeed carries more of the pair than serveSpeed does. Nothing to change unless you want it steeper, and that is the one knob. THE RACKET-ALWAYS-UP LOOK WAS A LATCH, not the art. hitServe sets pose 'serve' with poseT 0; that only expires after POSE_TIME (0.38 s); and p_pull, the wind-up frame, is only ever selected from pose 'idle'. So firing faster than 0.38 s reset the timer before it could expire, he never returned to idle, the pull frame was never drawn once, and he stayed welded into p_smash — arm extended overhead with balls appearing out of the strings. Exactly the late game, because that is where the fast successions are. serveToss now clears a stale 'serve' pose: a new wind-up ends the last shot's follow-through. At ~4.6 shots/sec the cycle is now pull x5 frames, smash x8, pull x5 — a real swing. Slow fire still plays the whole ritual: bounce, pull, smash, idle, bounce. Caveat: past roughly 8 shots/sec each pose gets 1-2 frames and will read as a flicker rather than a swing. There is no fix for that short of drawn follow-through frames; the poses are stills. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Languages
JavaScript
75.2%
Python
15.8%
HTML
7.3%
Shell
1.4%
Swift
0.2%