Turn the praise down, and stop the footnotes shouting
The band made PERFECT earnable, which was the fix — but you learn a band, and then the HUD is talking on every other serve again whatever the word says. So the praise goes behind a shared cooldown (TUNE.praiseEvery, 14s), the same model the umpire's asides have used all along for exactly this problem. Eight band-perfect serves back to back now yield one word. The bright click in the pull is the reliable feedback for a good draw; the word was only ever garnish, and garnish on every plate is just food. And the free-floating slot drops 24 -> 18. It shares that slot with CLEAR THE COURT, DOUBLE KILL, RETURNED and GAME N — half of which are a footnote to something you already watched happen. Sharing the loud FACE with the milestone cards is right; sharing their SIZE made every footnote read as a milestone. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9c7ee42bfa
commit
ebce08199f
6 files changed
+26
-4
No files matched your search
+9
-1
@@ -43,7 +43,14 @@ export const pullPerfect = mag => mag >= TUNE.pullFull && mag <= TUNE.pullFull *
|
||||
// running is what made one word read as a stuck HUD element rather than as praise.
|
||||
const PRAISE = ['PERFECT', 'TEXTBOOK', 'IMMACULATE', 'OH, LOVELY', 'UNPLAYABLE', 'SHOT OF THE DAY'];
|
||||
let praiseN = 0;
|
||||
const praise = () => { G.flash = { text: PRAISE[praiseN++ % PRAISE.length], t: 0.7 }; };
|
||||
// ...and he does not say it every time. Same cooldown model as the asides (aside()): once you have
|
||||
// learned the band you hit it constantly, and a HUD that talks on every other serve is noise
|
||||
// whatever the word is. The bright click in the pull is the reliable feedback; this is the garnish.
|
||||
function praise() {
|
||||
if (G.praiseT > 0) return;
|
||||
G.praiseT = TUNE.praiseEvery;
|
||||
G.flash = { text: PRAISE[praiseN++ % PRAISE.length], t: 0.7 };
|
||||
}
|
||||
|
||||
export function flickTarget(ch, aim) { // exported: render draws the live reticle with it
|
||||
const q = pullQuality(aim.mag), f = pullFrac(aim.mag);
|
||||
@@ -1213,6 +1220,7 @@ export function update(dt) {
|
||||
crowd.cheer = Math.max(0, crowd.cheer - dt);
|
||||
G.idleT += dt;
|
||||
if (G.asideT > 0) G.asideT -= dt; // the asides' shared cooldown (see aside())
|
||||
if (G.praiseT > 0) G.praiseT -= dt; // ...and the praise words' (see praise())
|
||||
// the fired band unravels behind the ball. It also goes the moment the ball does — a shambler
|
||||
// eating the shot ends the band with the splat, which is a cut you want.
|
||||
if (G.trail && ((G.trail.t += dt) >= G.trail.T || !ball.active)) G.trail = null;
|
||||
|
||||
Reference in new issue
Block a user