The flick fires the moment it is a flick: the swing launches at the crossing, and the aim rides the thumb to contact
Oliver's service-line report: flicking the incoming ball LEFT was near impossible mid-court at the service line while RIGHT worked, easing toward the baseline. The lane math was symmetric to the centimetre — the defect was latency. The swing waited for the RELEASE, so the whole gesture ran as dead time on top of the windup: ~120 ms of lateness drops contact quality 1.0 -> 0.08, where flickReach halves the width and aimError drowns the rest. A left swipe is a right thumb's slowest direction, the service line leaves ~700-870 ms of budget (measured), and any swipe over FLICK_MS was silently dead. Left + service line was the slowest gesture meeting the shortest budget. Now, in rally modes: crossing flickMin fires the swing (once per gesture, rally phase only) and the vector stays LIVE — trySwing reads G.swipe at contact, with the released flickAim carrying the aim only when the ball arrives after the finger lifts. The FLICK_MS deadline goes with it where the crossing can fire; it survives where it cannot (gore free-aim, the serve strike). Serve gesture, duel, gore and keys untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
532dd3b83e
commit
6f9dea4ffc
5 files changed
+82
-15
No files matched your search
+24
-3
@@ -552,12 +552,33 @@ The threshold is not a flip: the colour is already gold before you reach it, so
|
||||
something you watch coming. **It is OFF as of its first playtest** (*"hide the indicator for now"*)
|
||||
— `TUNE.aimCloud` gates the whole block and the tuning panel can flip it back live. Kept rather than
|
||||
deleted: it is the only thing that shows the gesture's strength before the ball leaves, and the
|
||||
lesson it teaches has no other teacher. Only inside the window where a release would still BE a flick (`FLICK_MS`/`TUNE.flickMin`, the same
|
||||
gate `endTouch` uses) — past that the gesture is a run and a target hanging off it would be a lie.
|
||||
Rally modes only (`rallyFeel`); gore's flick free-aims at a body, not at a lane. The placement ring
|
||||
lesson it teaches has no other teacher. Shown from `TUNE.flickMin` for as long as the drag lives —
|
||||
since the crossing-fired flick (below) the vector stays live until contact, so there is no release
|
||||
deadline for it to lie past. Rally modes only (`rallyFeel`); gore's flick free-aims at a body, not
|
||||
at a lane. The placement ring
|
||||
turns `UI.bad` when the shot really is out, so the two rings together ARE the lesson: what you asked
|
||||
for, what your timing gave you, and the difference between them.
|
||||
|
||||
**...and the flick fires the moment it IS a flick** (2026-08-20, Oliver: *"trying to move the
|
||||
approaching ball with a flick to the left is almost impossible ... standing closer to the grundlinie
|
||||
and more right from the center eases this restriction"*). The aim math was symmetric to the
|
||||
centimetre — the defect was LATENCY. The swing waited for the RELEASE, so the whole gesture ran as
|
||||
dead time on top of the 60 ms windup, and ~120 ms of lateness drops contact quality 1.0 -> 0.08,
|
||||
where `flickReach` halves the width and `aimError` drowns what is left. A LEFT swipe is the slowest
|
||||
direction a right thumb has (~250-350 ms vs ~150 for right), the service line leaves only ~700-870 ms
|
||||
of budget against even the slowest rung (~1.1-1.3 s at the baseline — measured), and any swipe over
|
||||
`FLICK_MS` (300 ms) was silently DEAD: no swing, no feedback, ball passes. Left + service line was
|
||||
exactly the slowest gesture meeting the shortest budget. Two changes, rally modes only
|
||||
(`rallyFeel`), input.js + one line in `trySwing`: **the swing fires when the drag crosses
|
||||
`flickMin`** (in `G.phase === 'rally'`, once per gesture) rather than at release, and **the aim
|
||||
stays LIVE** — `trySwing` reads `G.swipe` at contact, so the ball takes the vector under the thumb
|
||||
NOW; the released `flickAim` only carries it when the ball arrives after the finger lifted. The
|
||||
FLICK_MS deadline is gone with it where the crossing can fire — it survives only where it cannot
|
||||
(gore's free-aim flick, the serve-phase strike), where a late release must stay a rescue drag. The
|
||||
serve gesture, the duel and gore are untouched; keys unchanged. Verified with real touch events:
|
||||
held-swipe contact aims exactly `swayOf`, a 360 ms swipe (previously dead) swings and aims, and a
|
||||
release-before-arrival still aims through `takeFlickAim`.
|
||||
|
||||
**The umpire and the boy.** `aside()` refused during any interlude and the match runs on a permanent
|
||||
one, so he was silently muted for the entire mode — the one mode that is literally a tennis match he
|
||||
is sitting over (`G.interlude && !G.match` now, the same shape as `sendBoy`). Six dry lines: two on
|
||||
|
||||
Reference in new issue
Block a user