Let the player take the net and come back, and smash a lob he gets under

Oliver: "Steuerung ans Netz gehen", option (1), and "einen Lob vom Gegner
als Volley annehmen soll derb schmettern".

- A long up-flick (90 px or more) is the attack: the deep ball, and he
  follows it in. A long down-flick is the lob, and he goes back behind
  it. Short flicks keep the deep ball / the drop and leave him where he
  is. Length only, never context.
- The net costs him what it costs the CPU: he split-steps (netReact)
  before reading the pass, and a CPU facing a net man passes at the
  line. Without both, the attacker won 78-95% of his net points.
- The smash: a ball taken out of the air at 1.9-2.5 m is struck harder
  and to the open court, read late by the opponent, and pops "SMASH!".
  It wins ~80% of its points.
- Lobbed at the net, he decides once whether he can get under it. If he
  can, he smashes. If not, he runs it down and only blocks it back, even
  if he meets it in the air. Re-deciding every frame smashed every lob.

Measured at level 26: the base ladder is unchanged. Attacking pays
against pushers and touch players and costs against big hitters,
slicers and rushers. Three new tests; v374.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-14 20:05:59 +02:00
1 parent 4406aeafdb
commit 599d5b0506
8 files changed
+201 -17

No files matched your search

+52 -1
View File
@@ -5627,6 +5627,55 @@ Oliver: *"b"* (options above). Two halves, each useless alone (both were measure
the air legitimately), and synthetic returns in the suite now carry `pow: 1` (a stale `pow` from the
previous test read as a sitter).
### The player's way to the net and back, and the SMASH (2026-10-14, v374)
Oliver: *"Steuerung ans Netz gehen, wie machen wir das?"* Offered: (1) a long up-flick is the attack and he
follows it in, (2) a separate up-swipe while his own ball flies, (3) automatic after a strong ball (breaks
the one-meaning rule). He picked **(1)**, asked *"wie kommt man wieder zurück?"*, and added *"wenn man einen
Lob vom Gegner als Volley annimmt, soll man derb schmettern"*.
- **The gestures, by LENGTH only** (never context — the 2026-08-22 lob rule):
- up, short (< `attackMin` 90 px): the deep ball, you stay;
- up, long: **the attack**, the deep ball and you follow it in (`ball.approach = 'P'`), even onto a
man at the net — it is his call;
- down, short: the drop, you stay (a drop volley keeps the net);
- down, long: **the lob, and you go back behind it** (`ball.retreat`, `rallyHome`). That is the way back.
It is also automatic when you are lobbed and cannot get under it, and when the point ends.
Keys: up = attack, down = lob, as before. Both of your own runs go at full pace, and while the attack
flies `P.rushing` makes the reply a net man's plan from wherever he has got to (the CPU's rule).
- **The net has a price, as the CPU's does.**
- At the net (or rushing) the player split-steps for `netReact` (0.22 s, `ball.heels`) before he reads
the pass.
- The CPU, facing a net man and not lobbing, plays the PASS at the line away from him (`aim.pass`,
`punishX`, still bounded by the rung's width).
- Measured without both: an attacker won 78-95% of his net points. His volley reach is ~2.5 m and he
read instantly.
- **THE SMASH** (rally modes, player):
- A ball taken OUT OF THE AIR at `smashMinY` 1.9 m or higher, up to `smashMaxY` 2.5 (above
`CONTACT.maxY` 2.3, but under the ~2.8 m a CPU lob clears a net man by).
- Extra pace `smashPace` 0.8 × q on top of the forward flick's. Aimed at the line (`punishX`) on the
flicked side, else away from the body. The opponent reads it for `smashRead` 0.3 s. It pops "SMASH!",
and the log says `HIT q=1 SMASH`.
- Aimed deep down the middle (the first cut), it came back to the baseliner and won ~40%. At the line it
wins ~80%. The ring shows it (`ringCue`'s volley band is the smash band).
- **Under the lob, or not — DECIDED ONCE** (`plan.over`, latched with the plan). When the player at the net
is lobbed, `intercept` looks for the first point the lob comes down into the smash band that he reaches
at `smashRun` 0.25 of his legs. Found: he goes there and smashes. Not found: he turns and runs it down,
and whatever he meets on that run (in the air included) is a capped defensive ball, not a smash.
- Re-asked every frame, his backpedal brought the overhead into reach on the way, and every lob was
smashed.
- Measured (attacker, rungs 7/14/18, 3 seeds): smashRun 0.35 → 131 smashes for 141 lobs; 0.25 → 62 for
130, won 82%; 0.18 → 49.
- **Measured** (Climb, level 26, σ60, 8 seeds; `ATTACK=0.3` = the bot plays 30% of its baseline balls as
the attack): the base ladder is unchanged within the noise. Attacking is a real choice:
- better against the pushers and touch players (Steward 49 → 60, Mascot 42 → 49, the bottom rungs);
- worse against the big hitters, slicers and rushers (Roller 66 → 57, Seller 43 → 37, Club Pro 53 → 47);
- level against the Champion (33 / 28).
Points get short (4-6 shots).
- Tests (170, nine seeds): the long up-flick follows the ball in and the short one stays; the long
down-flick from the net goes back and a drop volley holds the net; a short lob is smashed hard into the
open court and a deep lob is not (blocked back if reached).
- `tools/rally-sim.mjs`: `ATTACK=0.3`, `NETX=1` (attacks, lobs faced at the net, smashes, smashes won), and
`T_<knob>=<value>` sets any TUNE dial for a sweep.
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.
@@ -5637,7 +5686,9 @@ Nothing here is broken; these are known gaps and unverified risks.
opponent styles (v364) followed; the swing-log fixes ran to v371. Step 4: v372 measured why the ladder
could not climb (points decided by the player's whiffs); Oliver picked (b), shipped v373 (the follow-
through, put-aways, on his heels). Awaiting the phone verdict on v373, especially the half-second
flat-footed read and the net rushers. See "Step 4 (b)" above. Fallback tag `rally-baseline-v360`.
flat-footed read and the net rushers. See "Step 4 (b)" above.
v374 adds the player's own net game: long up-flick = attack and follow in, long down-flick = lob and
go back, and the SMASH. See "The player's way to the net and back" above. Fallback tag `rally-baseline-v360`.
1. **`RES` 4 is unverified on a real phone under load.** It nearly doubled the fill rate (810 -> 1080
device px across). Oliver has not reported stutter, but he also has not played a late horde since.