HARD hunts the corner you are not standing in
"the hard mode is still too easy — make it really challenging." The dial that was missing is aim: the CPU rolled a random lane on every shot, so a third of everything came politely back to your racket regardless of the other six numbers. DIFFS grows `smart` — the probability the CPU plays the OPEN court, the corner away from P.x — and HARD sets it to 0.8: four shots in five now make you run. EASY and MEDIUM keep random aim (MEDIUM pinned by test), so the shipped classic is untouched below the top chip. The rest of HARD tightened in the same pass: reaction 0.22 s, speed 1.30, reach 1.85 m, quality floored at 0.70 under a cap of 1.0, serve 1.15, flub one ball in a hundred. It reads your shot almost instantly, covers what it reads, and places its reply where you are not. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
77bc68043d
commit
1facc954e2
4 files changed
+18
-5
No files matched your search
@@ -1126,6 +1126,8 @@ test('classic wears the match feel, and the difficulty table is a ladder', () =>
|
||||
assert.ok(e.reach < m.reach && m.reach < h.reach, 'harder swings a longer racket');
|
||||
assert.ok(e.qMin <= m.qMin && m.qMin < h.qMin, 'harder raises the quality floor');
|
||||
assert.ok(e.serve < m.serve && m.serve < h.serve, 'harder serves better');
|
||||
assert.ok(e.smart <= m.smart && m.smart < h.smart, 'harder plays the open court');
|
||||
assert.equal(m.smart, 0, 'MEDIUM aims at random, as the shipped classic did');
|
||||
assert.equal(m.flub, TUNE.classicFlub, 'MEDIUM flub IS classicFlub');
|
||||
assert.equal(m.quality, TUNE.classicQualityMax, 'MEDIUM quality IS classicQualityMax');
|
||||
assert.equal(m.speed, 1.0, 'MEDIUM leaves aiSpeed alone');
|
||||
|
||||
Reference in new issue
Block a user