The flick aims relative to the player: a full sweep from where you stand, not from the court's centre
Third round of the flick report, and this was the core all along: 'when the opponent and the player are both standing in the left service box it is virtually impossible to flick the ball into the left out. no matter how hard/good I flick.' The lane was absolute — a full flick asked for flickWidth off the court's CENTRE — so the gesture saturated near a sideline: from x -2 a perfect left flick moved the ball under 2 m and could never pass the line, and the better the timing the firmer the cap, because scatter was the only thing that could cross it. 'Left is impossible, right works' was never left-vs-right: it was toward-the-near-sideline vs across-the-court. TUNE.aimAnchor: the anchor slides from the court centre to the player's own x as the swipe commits (ch.x * |sway| * aimAnchor), so a flat tap is exactly what it always was and a full flick is a full sweep from where you stand — including past the line. Out-by-aim is a choice now, per Oliver's explicit direction; the placement ring already turns red for it. 0 restores the absolute lane, blendable live in the panel. Player rally lanes only; the opponent's lanes and the centre-stated pOut invariants are untouched. Verified in his exact scene: full left flick from the left box lands -5 (the alley), half swipe -3.07, full right +1.93. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
60127436a0
commit
7e5c3ab399
5 files changed
+75
-2
No files matched your search
@@ -64,6 +64,14 @@ export const TUNE = {
|
||||
// send the ball longer — solveShot still lands it on the same spot — it
|
||||
// gets there flatter and sooner, which is what a smash is.
|
||||
aimError: 2.4, // m of scatter at quality 0
|
||||
aimAnchor: 1, // how much the flick's lane follows the PLAYER instead of the court.
|
||||
// 0 = the old absolute lane (a full flick asks for flickWidth off the
|
||||
// court's centre — saturates near a sideline: from x -2 a perfect left
|
||||
// flick moved the ball under 2 m and could never find the line). 1 = the
|
||||
// anchor slides to your own x as the swipe commits, so a full flick is a
|
||||
// full sweep from where you stand — including past the line: out-by-aim
|
||||
// is a choice now, and the ring already turns red for it. Blendable so
|
||||
// the panel can A/B the feel live. Player's rally lanes only.
|
||||
aimTrust: 0.3, // an aimed rally shot TRUSTS its flick: the scatter may still push the
|
||||
// ball further OUT (the chosen out-risk keeps its exact shape) but only
|
||||
// this fraction of an INWARD roll survives, so a mistimed left flick
|
||||
|
||||
+14
-1
@@ -189,7 +189,20 @@ function doHit(ch, quality, aim) {
|
||||
// symmetric scatter is its width mechanic (matchWide clamps it, not this).
|
||||
let e = err();
|
||||
if (ch.side === 'P' && sway && e * Math.sign(sway) < 0) e *= TUNE.aimTrust;
|
||||
tx = sway * (toFar ? TUNE.flickWidth : 2.7) * reach + e;
|
||||
// THE FLICK AIMS RELATIVE TO YOU, not to the court (2026-08-20, third round of the same
|
||||
// report: "when the opponent and the player are both standing in the left service box it is
|
||||
// virtually impossible to flick the ball into the left out. no matter how hard/good I flick").
|
||||
// The lane was ABSOLUTE — a full flick asked for 3.95 m from the court's centre — so standing
|
||||
// near a sideline saturated the gesture: from x -2 a perfect left flick moved the ball under
|
||||
// 2 m and could never pass the line, while the same swipe from centre swept the court. The
|
||||
// anchor now slides from centre to the player's own x as the swipe commits (|sway|), so a
|
||||
// flat tap is exactly what it always was and a full flick is a full sweep FROM WHERE YOU
|
||||
// STAND — including past the line: out-by-aim is his explicit ask ("not about the possibility
|
||||
// of the ball going out but rather the aiming itself"). TUNE.aimAnchor blends it (0 = the old
|
||||
// absolute lane, 1 = fully relative) so the panel can A/B the feel live. Player only; the
|
||||
// opponent's lanes and every pOut invariant are stated from centre and unchanged there.
|
||||
const anchor = ch.side === 'P' ? ch.x * Math.abs(sway) * TUNE.aimAnchor : 0;
|
||||
tx = anchor + sway * (toFar ? TUNE.flickWidth : 2.7) * reach + e;
|
||||
const tzBase = aim.az < 0 ? SHOT_DEPTH.deep : aim.az > 0 ? SHOT_DEPTH.short : SHOT_DEPTH.mid;
|
||||
tz = (toFar ? tzBase : COURT.L - tzBase) + err() * 0.8;
|
||||
// A FORWARD FLICK IS A SMASH. Up-screen is the far court, so flicking INTO the court asked for
|
||||
|
||||
Reference in new issue
Block a user