BLOBBO/src/paint
type-two 190a6e27d3 feat(paint): METEOR blend + yellow ZAP — the palette is complete
Three GDD §6 features land together, plus the design bug their verification
exposed.

METEOR (red+orange both >=20%): "smash light barriers" made literal. New
createSmashWall part — a brick-seamed light barrier, solid to everyone, but a
METEOR blob that RAMS it (>=5 u/s) shatters it into 8 real dynamic brick
shards that carry your momentum; rebuilds on race:respawn. Spec kind
'smashwall' with needColors for data courses. HUD shows "☄ METEOR" replacing
the pair's BURN/BOUNCE rows (GDD: the blend replaces its pair) and the ember
trail burns 2.2x while blended.

ZAP (yellow >=20%): "trigger colour-keyed machinery at range". New
machine/zap.ts — a charged blob pulses every 3s and fires any declared zap
target's machine:signal within radius, with an expanding arc ring. Breakfast
declares the fork's spring boot: purple earns it by WEIGHT on the plate,
yellow HOTWIRES it — verified the full arc: pulse -> boot telegraph -> kick
vy 10.6 -> lands on the finish podium. Yellow bubbles by the fork are the
source. Spec courses declare `zapTargets`. HUD shows " ZAP".

THE BUG THE WALL EXPOSED: the finale gate sat at z-59, but the finish box
reaches z-57.2 (podium-face bonks must count) and the podium collider face is
at z-58 — so in a LIVE race you finished before ever touching the gate; it
only ever blocked test blobs with the race idle. The whole gauntlet now lives
at z-56, in FRONT of the line: centre = green gate, left = METEOR smash wall,
right gap plugged (the MINI tunnel roof already gates x3..10), far left = open
detour. The cleanse arch moves to x-6.5/z-54.5 — at x-4.5 its zone overlapped
the METEOR approach and stripped the blend one step before the wall.

Verified in-browser (atomic calls; the wall-clock coverage cache and the
background sim poisoned split observations): clean blob bonks with race
running; METEOR blob shatters (8 shards, signal, drives through rubble to
"you finished 29% ORANGE"); wall rebuilds on R; zap fires exactly once per
cooldown. hasMeteor/hasZap are pure + unit-tested (58 assertions, 10 suites).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 22:22:24 +10:00
..
buffs.ts feat(paint): METEOR blend + yellow ZAP — the palette is complete 2026-07-28 22:22:24 +10:00
cannon.ts harden asset runtime: guard the swap path, bound the boot, reconcile slots 2026-07-19 12:12:07 +10:00
coverage-math.test.ts feat(paint): METEOR blend + yellow ZAP — the palette is complete 2026-07-28 22:22:24 +10:00
coverage-math.ts feat(paint): METEOR blend + yellow ZAP — the palette is complete 2026-07-28 22:22:24 +10:00
hud.ts feat(paint): METEOR blend + yellow ZAP — the palette is complete 2026-07-28 22:22:24 +10:00
index.ts feat(paint): METEOR blend + yellow ZAP — the palette is complete 2026-07-28 22:22:24 +10:00
puddles.ts Lane I: asset runtime — manifest, registry, slot hooks, IndexedDB overrides 2026-07-19 11:37:08 +10:00
skin.ts Lane B (Paint): splat pipeline, coverage compute, buff/threshold framework 2026-07-17 20:13:30 +10:00