Rev 7: sight passes only through the aisle warps
The cards settle what the morning's feature got wrong. DIMENSIONAL WARP: "There is no L.O.S. through the warp." The AUTO WARP: "for all purposes, treat the connected board edges as though they are adjacent" — an explicit grant, for edges that physically meet at a corner. The lettered wraparounds get no grant at all: their rule is about walking. So the pattern is that warps carry movement, not sight, unless the text says otherwise — and only the aisle corners say otherwise. Warps now carry an aisle flag (the 3-player AUTO WARP and the 5-player corner arcs); hasWarpLineOfSight honors only those, with the adjacency geometry — diagonals through the corner mouth — unchanged from this morning where it rightfully applies. Games begun before rev 7 keep the wider sight their logged commands were validated against, via a legacy flag boardView stamps from the game's rules revision. Tests pin all three states: lettered mouths see nothing, aisle mouths see the corner fan, legacy games see everything they used to. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8af8962330
commit
493f3bc567
@@ -218,6 +218,8 @@ export interface GameConfig {
|
||||
* BIG MAN pushes occupants ahead, steps over floor hazards for 2 points,
|
||||
* and bars monsters from his square. Rev 6: ANTI-ANTI cannot pin a
|
||||
* teleport escape ("does not work against escape" — the card face).
|
||||
* Rev 7: sight passes only through aisle-warp corners, not the lettered
|
||||
* wraparounds ("no rule grants it; DIMENSIONAL WARP explicitly denies it").
|
||||
*/
|
||||
deckRev?: number;
|
||||
}
|
||||
@@ -290,8 +292,17 @@ export interface GameState {
|
||||
|
||||
/** The board with dynamic wall changes applied — use for movement and LOS. */
|
||||
export function boardView(state: GameState): AssembledBoard {
|
||||
if (Object.keys(state.edgeOverrides).length === 0) return state.board;
|
||||
return { ...state.board, edges: { ...state.board.edges, ...state.edgeOverrides } };
|
||||
// Rev 7 restricts warp sight to the aisle corners; earlier games keep the
|
||||
// wider sight their commands were validated against.
|
||||
const legacySight = (state.config.deckRev ?? 1) < 7;
|
||||
if (Object.keys(state.edgeOverrides).length === 0) {
|
||||
return legacySight ? { ...state.board, sightThroughAllWarps: true } : state.board;
|
||||
}
|
||||
return {
|
||||
...state.board,
|
||||
edges: { ...state.board.edges, ...state.edgeOverrides },
|
||||
...(legacySight ? { sightThroughAllWarps: true } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
export function sustainedOn(state: GameState, playerId: PlayerId, cardId?: string): SustainedEffect[] {
|
||||
|
||||
Reference in New Issue
Block a user