Make the down-flick the soft ball: a short one drops, a long one lobs

Step 3 of the rally rework, Oliver's pick: in rally modes the down-flick
is soft, always, and its length is how far — a dying drop just over the
net at one end, an attacking lob over a net man at the other. One gesture,
one meaning; not the context-armed lob that was cut.

Ballistics from the cut lob (pace derived from the apex); backspin lives
on ball.spin and every bounce planner reads it, netplay sends it. Against
the CPU it was returned ~100% until the real-tennis reasons went in: soft
balls are read late (disguise), a net man reacts to a pass and backpedals
from a lob, and a lobbed or dug-out reply is a weak block. Four new tests;
v363.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 11:17:25 +02:00
1 parent f9b0dd2efb
commit 72760a9d1e
7 files changed
+215 -28

No files matched your search

+15 -1
View File
@@ -87,11 +87,25 @@ export const TUNE = {
// in and takes it on the rise (serves never count)
netFrom: 7.0, // m from the net inside which a body is AT THE NET: it volleys, and it
// recovers to netStand instead of the baseline
netStand: 3.2, // m from the net a net player recovers to
netStand: 2.6, // m from the net a net player recovers to
rallyBack: 0.6, // m behind the baseline a baseliner recovers to
rallyBehind: 2.2, // m behind the baseline he will drop back to let a deep ball come down
rallyHit: 1.0, // m: a baseliner meets the ball falling through this height
lowVolleyQ: 0.3, // quality cap on a volley struck below the tape: you can only block it up
scoopY: 0.45, // m: a ball met lower than this after its bounce is dug out, same cap
// THE SOFT BALL (step 3): the down-flick, its length = how far. Drop at one end, lob at the other.
dropNet: 2.0, // m past the net a shortest down-flick lands
dropApex: 2.0, // m its arc peaks at
dropSpin: 0.3, // share of its pace a drop keeps through the bounce (backspin: it dies)
spinLow: 0.5, // ...and how much of that loss backspin also takes off the rebound HEIGHT
lobDeep: 1.6, // m inside his baseline a full-length down-flick lands
lobApex: 5.5, // m its arc peaks at: an ATTACKING lob — over a net man's racket (CONTACT.maxY
// 2.3) yet quick. A 7 m moonball hung 2.4 s and every net man ran it down
softSitter: 5.5, // m from his baseline a badly timed soft ball drifts toward (a sitter)
softErr: 0.8, // ...and how far toward it at quality 0
lobTurn: 0.6, // leg speed of an opponent lobbed at the net: he turns and backpedals
netReact: 0.22, // s an opponent at the net stands reading the pass before he moves
softRead: 0.35, // s any opponent stands reading a soft ball (drop, lob) — they are disguised
aimError: 2.4, // m of scatter at quality 0
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