The match walks back to centre — "unreachable" was the player, not the CPU
"every second ball is basically unreachable by an auto-run player.. are there some hidden gestures I don't know about or is it just a very strong cpu?" Neither. The match inherited gore-splatter's depth-only recovery — the sidestep-protection rule — by being G.mode 'splatter'. One wide return pulled you off centre and you stayed there, so the next ball to the opposite corner was lost before it was struck. A player who never walks back experiences every rally as unreachable, and it reads as CPU strength because the balls keep landing where he isn't. The match recovers to centre now, like tennis: real footwork, and in a rally there is no artillery lane to protect. Gore splatter keeps depth-only — the sidestep it protects has no role inside a rally. matchSpeedBase 1.4 -> 1.25: it was calibrated against a player who couldn't move. The full attacking vocabulary is recorded in PROJECT.md — nothing else is hidden. The placement flick (aim during the swing) is taught nowhere on touch; flagged as a ghost-hand lesson if the mode ships. 42 tests, 12 seeds clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
24be613c61
commit
d6df582cd4
5 files changed
+55
-11
No files matched your search
@@ -570,6 +570,25 @@ test('THE DEATH LOOP: a fault before a lost point must not arm second-serve fore
|
||||
assert.equal(G.serveNum, 1, '...whoever won it');
|
||||
});
|
||||
|
||||
test('the match recovers to CENTRE between shots — a wide return must not strand you', () => {
|
||||
// The match inherited gore-splatter's depth-only recovery (a sidestep-protection rule) by being
|
||||
// G.mode 'splatter' — so one wide return pulled you off centre and you STAYED there, and the next
|
||||
// ball to the opposite corner was unreachable before it was struck. "Every second ball is
|
||||
// basically unreachable" was this, not CPU strength.
|
||||
const assist = TUNE.autoAssist; TUNE.autoAssist = 1.15; // headless matchMedia reports desktop: assist off
|
||||
try {
|
||||
startMatch();
|
||||
for (let i = 0; i < 2.0 * 60; i++) update(DT);
|
||||
G.phase = 'rally';
|
||||
P.x = 4.2; P.z = 22.8; // stranded wide by the last return
|
||||
ball.active = true; ball.lastHit = 'P'; ball.vz = -8; ball.z = 8; ball.y = 1; // your ball, outbound: not chasing
|
||||
const x0 = P.x;
|
||||
for (let i = 0; i < 60; i++) update(DT);
|
||||
assert.ok(Math.abs(P.x) < Math.abs(x0) - 0.5,
|
||||
'auto-run walks back toward centre: ' + x0.toFixed(1) + ' -> ' + P.x.toFixed(1));
|
||||
} finally { TUNE.autoAssist = assist; }
|
||||
});
|
||||
|
||||
test('THE REAL DEATH LOOP: a toss after their rally touch is not their passing shot', () => {
|
||||
// tossBall left ball.lastHit stale. After any rally the zombie touched last, the fresh toss still
|
||||
// said lastHit 'O' — and the match serves from BEHIND the baseline (z 24.3), past the passing-shot
|
||||
|
||||
Reference in new issue
Block a user