Every colour you are asked for is already on the far side

"make the game that it is actually winable meaning that all required colors
are visible on the far side before when a color combination is shown.. for
now no colors that are not in the current combination but occasional zombies
which don't have a color and are converging to the player trying to eat him".

Two rules define the file now. Every colour on court is IN the current
combination — no coloured decoys, so the strip can never name a body that is
not there. And a combination is only shown once its bodies are all on the far
side, which is free because the batch is BORN there: it is a property of the
construction rather than a check that could be wrong.

The pressure moved to the eaters: plain unbibbed shamblers on their own
clock, deliberately not flagged `drill` so they keep the gore mode's homing
and converge on you while the bibbed batch walks its lanes. Killing one is
never a fault; letting one reach you is the ordinary caught. The puzzle plays
fair and the danger arrives separately, which is a better trade than a puzzle
that cheats.

The batch is the round: kill the last of it and the next walks in on the same
frame with its combination already called.

One real bug, caught by the new test: killZombie resolved the drill BEFORE
splicing the body, so a combination drawn on the spot could name the corpse —
a round asking for a colour that is not on court, i.e. exactly the unwinnable
state this pass exists to prevent. Splice first, resolve second.

28 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-11 19:29:04 +02:00
1 parent 586e8d4e4b
commit abd6d4f789
6 files changed
+193 -137

No files matched your search

+6 -1
View File
@@ -477,7 +477,12 @@ function killZombie(i, quiet) {
const zb = zombies[i];
// The drill's ONE rule, read at the single point every weapon routes through — hooking the ball
// path instead would have the swish, the pellets and the blast silently exempt from the order.
if (G.drill && zb.bib !== undefined) { drillKill(zb); zombies.splice(i, 1); return; }
// SPLICE FIRST, THEN RESOLVE. drillKill can draw a new combination on the spot (a double fault
// re-calls the survivors, an emptied batch brings in the next one) and it draws from whatever is
// standing in `zombies` — so running it before the splice let the new combination name the body
// that was in the middle of dying. That is a round asking for a colour which is not on court,
// i.e. exactly the un-winnable state this mode is built to make impossible.
if (G.drill && zb.bib !== undefined) { zombies.splice(i, 1); drillKill(zb); return; }
const mul = GORE_MUL[zb.variant] || 1;
// BEFORE the early returns below: the ball machine is furniture but it is still a thing you put
// down, so it earns a row. The barrel is loot and scores nothing anywhere else in the game —