Rev 19: a dust cloud blinds whoever stands in it (CPU7)
The automaton stood in Kestrel's DUST CLOUD and filled a square with stone three rows away. The cloud blocked only sight lines passing through it; the square a line began or ended in was never asked. The FAQ is plain: no LOS spell may be cast by a wizard in a cloud, nor at one, though a spell upon oneself still works, and VISIONSTONE does not see through dust. From rev 19 the engine's sight and the view's — the targeting aid the client and the automaton both read — refuse a line with dust at either end. Older games keep their sight. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
3d4bf1fa6d
commit
f859d90af8
@@ -145,6 +145,29 @@ describe("expansion terrain", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("a wizard in a dust cloud casts no LOS spell out, and none reaches them (rev 19)", () => {
|
||||
for (const deckRev of [19, 18]) {
|
||||
let { state } = createGame({ playerIds: ["alice", "bob"], seed: 42, sets: ["basic", "expansion1"], deckRev });
|
||||
const me = activePlayer(state);
|
||||
const spot = emptyNeighborCell(state, me.position);
|
||||
state.squareContents[cellKey(spot.cell)] = { kind: "dust", damage: 0, createdBy: me.id };
|
||||
me.position = { ...spot.cell };
|
||||
// An empty square beside the cloud, in plain sight but for the dust.
|
||||
const outside = emptyNeighborCell(state, spot.cell).cell;
|
||||
const blind = deckRev >= 19;
|
||||
expect(gameLos(state, me.position, outside, me.id)).toBe(!blind);
|
||||
expect(gameLos(state, outside, me.position)).toBe(!blind);
|
||||
expect(gameLos(state, me.position, me.position, me.id)).toBe(true);
|
||||
const sighted = sightedCellsFor(viewFor(state, me.id));
|
||||
expect(sighted.has(cellKey(outside))).toBe(!blind);
|
||||
expect(sighted.has(cellKey(me.position))).toBe(true);
|
||||
// FILL SQUARE WITH STONE from inside the cloud: refused when blind.
|
||||
const stone = giveCard(state, me.id, "fill-square-with-stone");
|
||||
const r = applyCommand(state, me.id, { type: "cast", instanceId: stone.instanceId, target: { kind: "cell", cell: outside } });
|
||||
expect(r.ok).toBe(!blind);
|
||||
}
|
||||
});
|
||||
|
||||
it("glue pins a treasure to the floor until it wears off", () => {
|
||||
let { state } = newGame();
|
||||
const me = activePlayer(state);
|
||||
|
||||
Reference in New Issue
Block a user