Steady the gold ring, and move the praise word off the ball
Oliver: the target ring twitches sometimes, and "shot of the day", "textbook" etc. cover the ball. The timed ring re-solved every frame and a small shift in the auto-run's target moved its moment by up to 158 ms in a frame; the drawn cue now counts down on its own clock and eases toward each solve (p99 jump 100 -> 17 ms). The rally's praise word rose straight into the struck ball's path (and a serve's sat on the far bounce, where the return comes back); it now lands under the player, behind his feet, and stays put. Same moment, out of the way. v371. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8e4b298d92
commit
d561050af8
7 files changed
+50
-8
No files matched your search
+3
-3
@@ -4,7 +4,7 @@ import { cv, ctx } from './dom.js';
|
||||
import { BENCH, BENCH_STAGES, ZFAMS, famFrames, racketStage, TUNE, UI, EATEN_BURST, EATEN_SUMMARY, EATEN_RESTART, DONE_RESTART, COURT, P_BOUNDS, PLAYER_H, BOY_H, UMP_H, UMP_X, MACH_H, BOSS_ART, ZWOUND, woundStage, BOUNCE_IDLE, SPRITE_H, zombieH , WEAPONS, RACK_ROW, TOSS, HEAD_CROP, TINT, SHOT_DEPTH, matchFoe, cupFixture, cupRoundName } from './config.js';
|
||||
import { P, O, ball, score, crowd, G, court, tour, kit, skin } from './state.js';
|
||||
import { RAISERS, FRAMES } from './crowd.js';
|
||||
import { predictLanding, previewServe, slotId, slotStock, serveApexY, rallyFeel, swayOf, ringCue } from './gameplay.js';
|
||||
import { predictLanding, previewServe, slotId, slotStock, serveApexY, rallyFeel, swayOf } from './gameplay.js';
|
||||
import { drillQueue, drillLegal, drillMult } from './drill.js';
|
||||
import { zombies, gore, piles, parts, pellets, extras, shots, pops } from './zombies.js';
|
||||
import { runDelta, progress, prof, cupBest, hasPromo } from './profile.js';
|
||||
@@ -1075,7 +1075,7 @@ function drawApproachRing() {
|
||||
const rSweet = Math.max(6, p.s * 0.055); // the fixed target ring
|
||||
let inBand, r;
|
||||
if (TUNE.ringTime) { // TIMED (gameplay.ringCue): kiss = touch now
|
||||
const c = ringCue();
|
||||
const c = G.ring; // gameplay's STEADY copy of ringCue
|
||||
if (!c || c.eta > TUNE.ringLead || c.eta < c.sweet - c.band) return; // not yet, or the moment has passed
|
||||
inBand = c.gold;
|
||||
r = rSweet * (1 + Math.max(0, c.eta - c.sweet) * 4); // closes onto the target as the moment nears
|
||||
@@ -2883,7 +2883,7 @@ export function render() {
|
||||
ctx.save();
|
||||
ctx.globalAlpha = Math.min(1, f * 3); // holds, then a quick fade at the end
|
||||
ctx.font = B(13); ctx.textAlign = 'center'; ctx.textBaseline = 'top';
|
||||
shadowText(p.text, Math.round(pr.x), Math.round(pr.y - (1 - f) * 14), p.col || '#ffffff');
|
||||
shadowText(p.text, Math.round(pr.x), Math.round(pr.y - (p.still ? 0 : (1 - f) * 14)), p.col || '#ffffff');
|
||||
ctx.restore();
|
||||
}
|
||||
// (a PERFECT-contact spark ring lived here for one build — Oliver's verdict: too much. The
|
||||
|
||||
Reference in new issue
Block a user