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
+20
-28
@@ -16,41 +16,33 @@
|
||||
//
|
||||
// THE MODE TRANSITIONS ARE NOT HERE — startDrill/endDrill live in beats.js with every other one
|
||||
// (CLAUDE.md rule 3). This file is the stream, the round and the rules. It imports no renderer:
|
||||
// render.js reads DRILL_COLS/PIP_FACES and draws.
|
||||
// render.js reads DRILL_COLS and draws.
|
||||
|
||||
import { TUNE } from './config.js';
|
||||
import { G } from './state.js';
|
||||
import { zombies, spawnZombie } from './zombies.js';
|
||||
import { voice, blip, sfx } from './audio.js';
|
||||
|
||||
// The bib colours. Six, and every entry carries `pips` as well as a hue: roughly 8% of men cannot
|
||||
// separate the red from the green, and a mode whose whole input is "which colour is that" is
|
||||
// unplayable for them on hue alone.
|
||||
// `tone` is the colour's PITCH — see the arpeggio in newRound. **The recorded umpire reading the
|
||||
// list aloud is DELETED**: at ~0.8 s a word he took four seconds to get through a list of four, and
|
||||
// with rounds running continuously that is a man talking over the entire mode. Oliver: "daniel
|
||||
// announcing is maximum annoying". A rising four-note figure says the same thing in half a second
|
||||
// and does not wear out. (`drill_*.m4a` stay in assets — cheap to keep, and the call could come
|
||||
// back for a slower variant of the mode.)
|
||||
// The bib colours. Six, and a colour is on court at most once, so a colour always names exactly one
|
||||
// body. `tone` is its PITCH — see the arpeggio in newRound. The recorded umpire reading the list
|
||||
// aloud is deleted (Oliver: "daniel announcing is maximum annoying"): at ~0.8 s a word he needed
|
||||
// four seconds to get through a list of four, and with rounds running continuously that is a man
|
||||
// talking over the entire mode. A rising figure says the same thing in half a second and does not
|
||||
// wear out. (`drill_*.m4a` stay in assets — cheap to keep, and a slower variant could want them.)
|
||||
//
|
||||
// THERE IS NO REDUNDANT CHANNEL ANY MORE, and that is a known accessibility gap rather than an
|
||||
// oversight. Die-face dots rode on the bib and the HUD chip so the mode could be played without
|
||||
// separating red from green (~8% of men cannot) — but they were noise to everyone who can, and they
|
||||
// shrank to nothing on a body at distance, which is exactly where the channel had to work. Cut on
|
||||
// Oliver's call. If the mode ships, the answer is bibs that differ by SHAPE or marking at sprite
|
||||
// scale, not dots: a channel that fails at the far baseline is not a channel.
|
||||
export const DRILL_COLS = [
|
||||
{ key: 'red', col: '#e5342c', ink: '#2a0806', pips: 1, tone: 392, name: 'RED' },
|
||||
{ key: 'blue', col: '#2f6bff', ink: '#050f2c', pips: 2, tone: 440, name: 'BLUE' },
|
||||
{ key: 'yellow', col: '#f2c318', ink: '#2e2202', pips: 3, tone: 494, name: 'YELLOW' },
|
||||
{ key: 'green', col: '#27bd4a', ink: '#04240f', pips: 4, tone: 587, name: 'GREEN' },
|
||||
{ key: 'purple', col: '#9b3fd8', ink: '#1c0530', pips: 5, tone: 659, name: 'PURPLE' },
|
||||
{ key: 'white', col: '#f2f0e8', ink: '#20201c', pips: 6, tone: 784, name: 'WHITE' },
|
||||
];
|
||||
// The redundant channel is drawn as a DIE FACE, not a row of dots: five dots have to be counted, a
|
||||
// die is recognised — and a redundant channel is pointless if reading it costs more than the hue.
|
||||
// Unit coords in a -1..1 box, scaled onto the bib and the HUD chip by the same table so the two
|
||||
// readouts cannot drift.
|
||||
export const PIP_FACES = [
|
||||
[[0, 0]],
|
||||
[[-0.6, -0.6], [0.6, 0.6]],
|
||||
[[-0.65, -0.65], [0, 0], [0.65, 0.65]],
|
||||
[[-0.6, -0.6], [0.6, -0.6], [-0.6, 0.6], [0.6, 0.6]],
|
||||
[[-0.7, -0.7], [0.7, -0.7], [0, 0], [-0.7, 0.7], [0.7, 0.7]],
|
||||
[[-0.7, -0.7], [0.7, -0.7], [-0.7, 0], [0.7, 0], [-0.7, 0.7], [0.7, 0.7]],
|
||||
{ key: 'red', col: '#e5342c', tone: 392, name: 'RED' },
|
||||
{ key: 'blue', col: '#2f6bff', tone: 440, name: 'BLUE' },
|
||||
{ key: 'yellow', col: '#f2c318', tone: 494, name: 'YELLOW' },
|
||||
{ key: 'green', col: '#27bd4a', tone: 587, name: 'GREEN' },
|
||||
{ key: 'purple', col: '#9b3fd8', tone: 659, name: 'PURPLE' },
|
||||
{ key: 'white', col: '#f2f0e8', tone: 784, name: 'WHITE' },
|
||||
];
|
||||
|
||||
// ---- THE RAMP. One number, 0..1 off time survived; everything else is a lerp on it. The stream is
|
||||
|
||||
Reference in new issue
Block a user