The length of the flick is the strength of the aim, and you can see it leave
The rally flick was read as three lanes: sideways past 0.38 of its own length took the whole corner, a hair under it took dead centre, and nothing lived in between — "sometimes applied very strong, sometimes it barely does anything", with no way to tell which one you had asked for. swayOf reads the swipe's LENGTH as a continuous strength, exactly as the serve already did, and doHit spends that instead of the lane vote. Keys keep the full lane; the opponent's aim has no length and is untouched. That is also what hands the OUT back: going out was never a choice, because every aimed shot took the full width and then the scatter on top. Below about 0.7 of a full swipe — the line minus aimError, over the width timing can earn — the worst mistiming in the game cannot sail it now, and above it the old risk curve is exactly as tested. And the aim is drawn while the thumb is still moving: the placement ring is a receipt that arrives with the ball already gone, so the same ring is shown live with a ray from the player's feet, cream while the ask is safe and hot once the sway crosses that derived threshold. The receipt goes red when the shot really is out, so the two rings together are the lesson. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99b2dec3bf
commit
f3d6f71144
8 files changed
+144
-14
No files matched your search
@@ -79,6 +79,16 @@ export const TUNE = {
|
||||
// top, or the flick goes out — which is exactly the bug this fixed:
|
||||
// 3.3 * 0.45 + 2.4 = 3.89 against a 4.11 m line. Raise it and the flick
|
||||
// gets punchy again AND starts sailing wide on sloppy timing.
|
||||
// THE LENGTH OF THE SWIPE IS THE STRENGTH OF THE AIM (px of finger travel; see gameplay.swayOf).
|
||||
// The rally flick used to be read as three LANES: 0.38 of its own length sideways bought the whole
|
||||
// corner, a hair under it bought dead centre, and nothing lived in between — so the same gesture
|
||||
// came out "very strong" or "barely anything" and which one you got was invisible (Oliver: "a lack
|
||||
// of agency, the player can't really tell if there was skill or luck"). The serve already read its
|
||||
// flick as a continuous strength; the rally does now too, on the same shape of numbers.
|
||||
flickMin: 28, // px before a drag counts as a flick at all — input.js's own threshold
|
||||
flickFull: 130, // ...and px of travel that buys the FULL width. About a third of a phone
|
||||
// screen: a short swipe is a safe half-court ball, and only a committed
|
||||
// one goes hunting the line, which is what makes going OUT a chosen risk.
|
||||
perfectMs: 45, // |offset from window center| for PERFECT
|
||||
// The tennis CPU only exists in the OPENING match (after the transition, tennis never comes
|
||||
// back — duels use racket* dials), so these three are the "how long until the first game is won"
|
||||
|
||||
Reference in new issue
Block a user