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:
1 parent
586e8d4e4b
commit
abd6d4f789
6 files changed
+193
-137
No files matched your search
+6
-1
@@ -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 —
|
||||
|
||||
Reference in new issue
Block a user