The table's reading prevails: open sides carry sight
An hour of rules archaeology, summarized: DIMENSIONAL WARP denies LOS explicitly (its tokens stay sightless); the AUTO WARP describes how to trace sight across a join; and on the lettered wraparounds the texts are silent — no grant, no denial. The FAQ's Permawarp rulings even have area effects counting distance through warps. Where the texts are silent, the edition's own table breaks the tie, and the table says the open sides see. Board openings carry sight in every revision (a permissive change: every stored game's log replays clean); the brief rev-7 restriction and its legacy flag are gone, along with the sophistry that justified them. The adjacency geometry stands. The friend's sticky-wand shot through the C opening was legal after all. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
493f3bc567
commit
4833a229e1
@@ -218,8 +218,10 @@ 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").
|
||||
* Rev 7 briefly restricted warp sight to aisle corners; the table's
|
||||
* reading prevailed and all board openings carry sight in every revision.
|
||||
* DIMENSIONAL WARP's tokens never do ("There is no L.O.S. through the
|
||||
* warp." — the card face).
|
||||
*/
|
||||
deckRev?: number;
|
||||
}
|
||||
@@ -292,17 +294,8 @@ export interface GameState {
|
||||
|
||||
/** The board with dynamic wall changes applied — use for movement and LOS. */
|
||||
export function boardView(state: GameState): AssembledBoard {
|
||||
// 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 } : {}),
|
||||
};
|
||||
if (Object.keys(state.edgeOverrides).length === 0) return state.board;
|
||||
return { ...state.board, edges: { ...state.board.edges, ...state.edgeOverrides } };
|
||||
}
|
||||
|
||||
export function sustainedOn(state: GameState, playerId: PlayerId, cardId?: string): SustainedEffect[] {
|
||||
|
||||
Reference in New Issue
Block a user