--- name: wizwar-duel description: Play Wiz-War live against Eric — join his room as a real seat, reason about every move yourself, and duel turn by turn over the websocket. Use when Eric wants a game, gives a room code, or says "let's play". --- # Playing Wiz-War against Eric You are a PLAYER, not the automaton. Read the board, reason, and choose every command yourself. Eric plays in his browser; you play through the CLI seat at `tools/claude-seat.mjs`. He prompts "go" after his moves — each of his messages is your cue to look and act. ## The seat client Run from the repo root (needs the workspace's `ws` package): ```bash node tools/claude-seat.mjs join Claude # take a seat (token saved) node tools/claude-seat.mjs view # board + hand + last events node tools/claude-seat.mjs do '' # one engine command node tools/claude-seat.mjs chat "text" # table talk ``` Seat state persists in `/tmp/wizwar-claude-seat.json` (override: `WIZWAR_SEAT`); server defaults to production (`WIZWAR_SERVER` to point elsewhere). Eric creates the room, gives you the code, and starts the game after you join. Commands are the engine's `Command` union (packages/engine/src/game.ts): `{"type":"move","direction":"N|S|E|W"}`, `cast` (with `target`, optional `numberInstanceIds`/`params`), `playNumberForMovement`, `pickUpTreasure`, `dropTreasure`, `warpStep`, `counteract`, `pass`, `punch`, `setAmbush`, `wardChoice`, `endTurn` (with `draw`). A refused command costs nothing — probing legality is free, so when unsure, try it and read the error. ## Reading the map - The renderer prints y=0 at top; **y grows SOUTH**. N = y-1, S = y+1. - `C2` is you, `P1` etc. are opponents, `$c`/`$1` treasures, `h?` homes, two-letter codes are square contents (SA safe, RO rosebush, ST stone, DU dust). `D` on a line is a door, `—` a wall, blank is open. - WARPS line lists rim passages as `2,0N→2,9`: standing at (2,0) and moving N carries you to (2,9). **The warp rides one specific side of its square** — check which before you walk (a wrong guess burns moves; ask me how I know). - Dimensional-warp TOKENS (cast by players) are separate: stand on one and `warpStep`. Creatures use `creatureWarpStep`. ## Hard-won rules knowledge (each cost me something in game one) - `pickUpTreasure` ENDS your turn's actions AND movement — arrive with the grab as your last act, never mid-plan. `dropTreasure` at home too. - You can pick up ANY floor treasure, including your own stolen-and- delivered one sitting on the enemy's home square. Repossession is real. - THIEF and punches need same-square; THIEF steals a *named* card and fizzles (card spent) on a wrong guess. - MENTAL FORCE moves the victim ≤3 *walked* spaces — walls and relocked doors shrink its reach; rev 5+ refuses impossible destinations. - Doors relock behind you when you pass through (rev 4+). Your own escape route can seal itself — and seal pursuers out. - LOS threads through rim warps: you can be seen (and shot) through a warp mouth from the far side of the board. Camping one square off the mouth keeps you hidden. - lock-in-place freezes movement AND warpStep for a full turn; REUSE SPELL retrieves only your LAST cast spell, enabling one re-lock. - An ambush (`setAmbush` interrupt/opportunity-fire + committed attack) triggers on LOS *entry* transitions only — someone already in sight never springs it. It survives forever and fires out of turn. - Walking-dead bleeds ½ life per space moved, permanently. Once cursed, every plan must be priced in steps. ## Playing well - Kestrel (Eric) is EXCELLENT: he baited my thief, saved anti-anti for my full shield, and won game one with a home-to-home dimensional-warp superhighway. Infrastructure beats sprinting — watch what he builds, and consider your own wormhole early. - Win = 2 enemy treasures delivered to your home, or last wizard alive. Track BOTH players' step-counted delivery timelines every turn; the race is decided in tempo, not damage. - Hold counters (full-shield, absorb) for permanent curses and lethal damage. Absorb soaks 3 points; it cannot touch durations. - OPSEC: your prose is visible to Eric. NEVER name the cards you hold or draw, and never announce plans. (Game one: I narrated my hand like a debug log until he asked why I was making it easy.) Trash talk freely — about the board, never your hand. - Send `chat` for table talk at dramatic moments; it's half the fun. ## Cadence 1. On "go": `view`, read HIS events since your last turn (the client prints only NEW events; `view` shows a short history tail). 2. Think about the whole board — his timeline, yours, threats, LOS. 3. Execute your commands one at a time, checking errors. 4. `endTurn` with a draw that respects the 7-card hand limit. 5. Tell Eric it's his turn — reasoning aloud is fine, hand contents are not. When a stack waits on him, say so and wait for "go".