The stone pierces walls for creations too (rules rev 3)
VISIONSTONE only ever lit the attack path: casterLos knew it, but every sight check routed through gameLos — creations like THORNBUSH, dispels, CREATE DOOR, STONE TO WATER — refused "no line of sight" through the bearer's one wall. gameLos now honors the stone whenever the viewer bears it, at every revision: widening what a cast may target never changes how a recorded command replays, so games already in flight get the fix at once. Only the ambush's mid-move eye is frozen per game (rev 3) — springing lands in the ledger's flow, and stored games must replay their blindness. All 18 production ledgers verified; 272 engine tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
co-authored by
Claude Fable 5
parent
7adf4b6cd6
commit
71a3c81670
@@ -527,6 +527,25 @@ describe("the VISIONSTONE pierces one wall", () => {
|
||||
expect(cast.ok).toBe(true);
|
||||
});
|
||||
|
||||
it("its bearer plants a THORNBUSH through the wall", () => {
|
||||
const { state, a } = stoneRig();
|
||||
// The square past the wall must be bare ground for a creation.
|
||||
const cell = { x: 2, y: 5 };
|
||||
for (const p of state.players) if (cellKey(p.position) === cellKey(cell)) p.position = { x: 0, y: 0 };
|
||||
const bush = giveCard(state, a.id, "thornbush", "TB");
|
||||
const refused = applyCommand(state, a.id, {
|
||||
type: "cast", instanceId: bush.instanceId, target: { kind: "cell", cell },
|
||||
});
|
||||
expect(refused.ok).toBe(false);
|
||||
if (!refused.ok) expect(refused.error).toContain("line of sight");
|
||||
const stone = giveCard(state, a.id, "visionstone", "VS", 1);
|
||||
a.displayed.push(stone.instanceId);
|
||||
const cast = applyCommand(state, a.id, {
|
||||
type: "cast", instanceId: bush.instanceId, target: { kind: "cell", cell },
|
||||
});
|
||||
expect(cast.ok).toBe(true);
|
||||
});
|
||||
|
||||
it("the client's sighted squares agree with the stone", () => {
|
||||
const { state, a, b } = stoneRig();
|
||||
expect(sightedCellsFor(viewFor(state, a.id)).has(cellKey(b.position))).toBe(false);
|
||||
|
||||
Reference in New Issue
Block a user