Drop the dots, and stop handing back the dodge
"what are the dice dots for?" -> "drop them", and "the dodge swipe should not reset to the middle when firing". The pips were colourblind redundancy so the mode did not rest on hue alone, but they were noise to everyone who can separate the colours and they shrank to nothing on a body at distance — exactly where the channel had to work. Gone from the bib and the chip. Recorded in PROJECT.md as a known gap rather than pretended away: if the mode ships, the answer is bibs that differ by shape at sprite scale, not dots. The dodge one was never a drill bug. The auto-assist recovered toward HOME.P including its x, so firing walked you back to the centre line: measured, a step out to 1.94 m was dragged to 0.77 m over one ball's flight — most of a dodge, handed back for free, which is the welded-in-place complaint the sidestep exists to answer arriving slowly instead of all at once. Splatter recovers in DEPTH ONLY now and holds whatever lane you stepped to. Tennis keeps the full recovery: recovering to centre is the real sport's footwork and there is no sidestep there to protect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
57357c7865
commit
586e8d4e4b
5 files changed
+49
-42
No files matched your search
+1
-12
@@ -5,7 +5,7 @@ import { TUNE, UI, EATEN_BURST, EATEN_SUMMARY, EATEN_RESTART, COURT, P_BOUNDS, P
|
||||
import { P, O, ball, score, crowd, G, court, tour } from './state.js';
|
||||
import { predictLanding, previewServe, slotId, slotStock } from './gameplay.js';
|
||||
import { zombies, gore, piles, parts, pellets, extras, shots, pops } from './zombies.js';
|
||||
import { DRILL_COLS, PIP_FACES } from './drill.js';
|
||||
import { DRILL_COLS } from './drill.js';
|
||||
|
||||
// ---------------------------------------------------------------- palette ----
|
||||
// tennis palette -> drained splatter palette; the transition lerps between them.
|
||||
@@ -707,16 +707,6 @@ function drawBib(zb, hMeters, bob) {
|
||||
ctx.closePath(); ctx.fill();
|
||||
ctx.fillStyle = 'rgba(0,0,0,0.30)'; // a seam, so it sits ON the body
|
||||
ctx.fillRect(cx - wTop, Math.round(y0), wTop * 2, Math.max(1, h * 0.012));
|
||||
pips(C, cx, (y0 + y1) / 2, Math.max(0.8, h * 0.024), h * 0.055);
|
||||
}
|
||||
|
||||
// The redundant channel, as a DIE FACE (PIP_FACES). A row of five dots has to be counted; a die is
|
||||
// recognised. Shared by the bib and the HUD chip so the two can never disagree.
|
||||
function pips(C, cx, cy, r, spread) {
|
||||
ctx.fillStyle = C.ink;
|
||||
for (const [ux, uy] of PIP_FACES[C.pips - 1]) {
|
||||
ctx.beginPath(); ctx.arc(cx + ux * spread, cy + uy * spread, r, 0, 7); ctx.fill();
|
||||
}
|
||||
}
|
||||
|
||||
// THE CALLED LIST, on screen. Oliver's call: the umpire reads it aloud AND it shows as a pattern —
|
||||
@@ -734,7 +724,6 @@ function drawDrillHud() {
|
||||
ctx.globalAlpha = done ? 0.28 : 1;
|
||||
ctx.fillStyle = 'rgba(6,4,6,0.8)'; ctx.fillRect(x - 1, y - 1, w + 2, h + 2);
|
||||
ctx.fillStyle = C.col; ctx.fillRect(x, y, w, h);
|
||||
pips(C, x + w / 2, y + h / 2, 2.2, 6); // the same die face as the bib
|
||||
if (i === d.step) { // the one you owe them right now
|
||||
ctx.strokeStyle = UI.cream; ctx.lineWidth = 2;
|
||||
ctx.strokeRect(x - 2, y - 2, w + 4, h + 4);
|
||||
|
||||
Reference in new issue
Block a user