The longer racket
Third recorded session. The previous fixes did their job and exposed the last gap: he ran onto every ball (2.9-3.9m per point, was 0.2-0.5), the ball reached him (died at z 22.5-24, was 18-20), he swung every single time — and the closest approach clustered at a sampled 1.3-1.6m, centimetres outside the 1.3m post-bounce reach, point after point. The assist delivers you NEAR the ball but not inside a phone-tuned contact radius, and that also explains "not really better or I played worse": every point suddenly looked makeable and still died. matchReach 1.35 widens the contact test in the match only — the gore modes' "tight contact radius: the tap must be honest" rule stands untouched. A rally mode lives on contact feeling fair. Recorded for future sessions: a 20Hz sampler overstates closest approach by up to ~0.5m on a 20 m/s ball. The recorder samples at 60Hz now. 49 tests, 12 seeds clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f37fb93875
commit
ac588ec6a7
5 files changed
+25
-2
No files matched your search
+10
@@ -1010,6 +1010,16 @@ vignette. just a slight red pulsing from below"*. Three distinct defects:
|
|||||||
- **Test-measurement trap for the log**: reading `P.z` after the chase loop proves nothing — the
|
- **Test-measurement trap for the log**: reading `P.z` after the chase loop proves nothing — the
|
||||||
point reset teleports him home. Measure the minimum DURING the chase.
|
point reset teleports him home. Measure the minimum DURING the chase.
|
||||||
|
|
||||||
|
**TWENTY-SECOND PASS — the longer racket.** Third recorded session, and the previous fixes did
|
||||||
|
their job while exposing the last gap: he ran onto every ball (2.9-3.9 m per point, was 0.2-0.5),
|
||||||
|
the ball reached him (died at z 22.5-24, was 18-20), he swung every single time — and the closest
|
||||||
|
approach clustered at a sampled 1.3-1.6 m, centimetres outside the 1.3 m post-bounce reach, point
|
||||||
|
after point. The assist can deliver you NEAR the ball but not inside a phone-tuned contact radius.
|
||||||
|
`matchReach` 1.35 widens the contact test in the match only (gore modes untouched — their "tight
|
||||||
|
contact radius: the tap must be honest" rule stands). A rally mode lives on contact feeling fair.
|
||||||
|
Note for future recorder sessions: **a 20 Hz sampler overstates closest approach by up to ~0.5 m**
|
||||||
|
on a 20 m/s ball — the recorder now samples at 60 Hz.
|
||||||
|
|
||||||
**Open, and every one of them is Oliver's call after he plays it:**
|
**Open, and every one of them is Oliver's call after he plays it:**
|
||||||
1. ~~**A ball that carries through the lane can complete two steps at once.**~~ Largely CLOSED by
|
1. ~~**A ball that carries through the lane can complete two steps at once.**~~ Largely CLOSED by
|
||||||
the slice removal (seventh pass) — a cut ball picking its own next victim was the main way this
|
the slice removal (seventh pass) — a cut ball picking its own next victim was the main way this
|
||||||
|
|||||||
+1
-1
@@ -400,6 +400,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="module" src="src/main.js?v=174"></script>
|
<script type="module" src="src/main.js?v=175"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -394,6 +394,9 @@ export const TUNE = {
|
|||||||
matchFlub: 0.08, // the match's own whiff base — the duel's 0.2 gives away a fifth of all
|
matchFlub: 0.08, // the match's own whiff base — the duel's 0.2 gives away a fifth of all
|
||||||
// returns, which across a game is an opponent that beats itself
|
// returns, which across a game is an opponent that beats itself
|
||||||
matchFlubKeep: 0.82, // ...and it keeps only this much per rung — the ladder now that hp is flat
|
matchFlubKeep: 0.82, // ...and it keeps only this much per rung — the ladder now that hp is flat
|
||||||
|
matchReach: 1.35, // contact reach multiplier in the MATCH. The recorder showed swings missing by
|
||||||
|
// centimetres point after point — the assist parks you near the ball, not inside
|
||||||
|
// a 1.3 m reach. A rally mode lives on contact feeling fair. Match-only
|
||||||
matchAssist: 1.15, // auto-run floor DURING A MATCH, any device. autoAssist keys off pointer:coarse,
|
matchAssist: 1.15, // auto-run floor DURING A MATCH, any device. autoAssist keys off pointer:coarse,
|
||||||
// so desktop had no legs at all — the match is a tap-timing game and footwork
|
// so desktop had no legs at all — the match is a tap-timing game and footwork
|
||||||
// is the game's job. Held keys still override
|
// is the game's job. Held keys still override
|
||||||
|
|||||||
+6
-1
@@ -953,7 +953,12 @@ function trySwing(ch, isAI, qCap = TUNE.aiQualityMax) {
|
|||||||
// Contact happens if the ball is inside reach while the swing window is open.
|
// Contact happens if the ball is inside reach while the swing window is open.
|
||||||
// Player volleys (pre-bounce) get wider reach + window: full-speed ball, no bounce cue.
|
// Player volleys (pre-bounce) get wider reach + window: full-speed ball, no bounce cue.
|
||||||
const volley = !isAI && ball.bounces === 0;
|
const volley = !isAI && ball.bounces === 0;
|
||||||
const reach = isAI ? TUNE.aiReach : TUNE.reach * (volley ? VOLLEY.reach : 1);
|
// The MATCH plays with a longer racket. The flight recorder's third session: he ran onto every
|
||||||
|
// ball (2.9-3.9 m per point) and swung every time, and the closest approach clustered at a
|
||||||
|
// sampled 1.3-1.6 m — centimetres outside the 1.3 m post-bounce reach, point after point. The
|
||||||
|
// assist can deliver you NEAR the ball but not INSIDE a phone-tuned reach; a rally mode lives or
|
||||||
|
// dies on contact feeling fair, and the gore modes are untouched.
|
||||||
|
const reach = isAI ? TUNE.aiReach : TUNE.reach * (volley ? VOLLEY.reach : 1) * (G.match ? TUNE.matchReach : 1);
|
||||||
const win = TUNE.swingWindow * (volley ? VOLLEY.window : 1);
|
const win = TUNE.swingWindow * (volley ? VOLLEY.window : 1);
|
||||||
const t = ch.swingT;
|
const t = ch.swingT;
|
||||||
if (t < TUNE.swingWindup || t > TUNE.swingWindup + win) return;
|
if (t < TUNE.swingWindup || t > TUNE.swingWindup + win) return;
|
||||||
|
|||||||
@@ -684,6 +684,11 @@ test('REACHABILITY: an auto-run player can cover the first opponent\'s returns',
|
|||||||
} finally { TUNE.autoAssist = assist; }
|
} finally { TUNE.autoAssist = assist; }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('the match racket is longer, and only the match racket', () => {
|
||||||
|
assert.ok(TUNE.matchReach > 1.2, 'match contact reach is widened — the recorder showed misses by centimetres');
|
||||||
|
// the gore modes' contact stays untouched: matchReach only multiplies inside G.match
|
||||||
|
});
|
||||||
|
|
||||||
test('the ladder pace dial exists and starts below full pace', () => {
|
test('the ladder pace dial exists and starts below full pace', () => {
|
||||||
assert.ok(TUNE.matchOppPace < 1, 'opponent one returns slower than the physics maximum');
|
assert.ok(TUNE.matchOppPace < 1, 'opponent one returns slower than the physics maximum');
|
||||||
assert.ok(TUNE.matchOppPacePer > 0, 'and earns pace back per rung');
|
assert.ok(TUNE.matchOppPacePer > 0, 'and earns pace back per rung');
|
||||||
|
|||||||
Reference in new issue
Block a user