Game five's automaton stood four steps from a winning drop and instead warped across the board to chase the bot carrying its other treasure — two compounding brain faults. First, the thief-chase rung outranked delivery even while carrying; a carrier now never chases. Second, the pathing ladder fell back to "march on any enemy with a clean corridor" before trying the true objective through hazards, so one thornbush on the road to the thief rerouted the whole campaign toward a bystander. The objective now exhausts its hazard-waded route before any generic enemy march. Replayed the FRP3 moment: the brain marches E,N,E straight home instead of W through the warp. Brains ship ungated; ledgers verified. The duel skill gains game-five scars: the captured-treasures elimination clock, FEAR as a self-cast aura, key-cutters without keys, and Kestrel's two-players-per-card table play. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
9.3 KiB
name, description
| name | description |
|---|---|
| wizwar-duel | 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):
node tools/claude-seat.mjs join <ROOM> Claude # take a seat (token saved)
node tools/claude-seat.mjs view # board + hand + last events
node tools/claude-seat.mjs do '<command json>' # 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.
C2is you,P1etc. are opponents,$c/$1treasures,h?homes, two-letter codes are square contents (SA safe, RO rosebush, ST stone, DU dust).Don 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 usecreatureWarpStep.
Hard-won rules knowledge (each cost me something in game one)
pickUpTreasureENDS your turn's actions AND movement — arrive with the grab as your last act, never mid-plan.dropTreasureat 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 (
setAmbushinterrupt/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.
Game-two scars (each cost me the game or nearly)
- RECOUNT THE SCOREBOARD EVERY TURN: how many treasures does each player have banked AT HOME right now? I sprinted a "winning" delivery in game two that was actually my FIRST of two — Eric had un-banked me five rounds earlier and let me monologue. Banked counts, not vibes.
- A banked treasure is NOT safe: anyone can pick it up off your home square and carry it away. Guard the bank or count it as contested.
- LOS is FREE-ANGLE center-to-center (the rulebook's rule), not rows and columns: razor diagonals threading open gaps are legal for everyone — including at you. The board draws bent/straight traces.
- ILLUSIONARY ATTACK deals its imitated spell's damage if NOT countered; ANY counteraction dispels it entirely. Counter it with the cheapest thing you hold; never "call the bluff" by passing.
- Never trust your ASCII parse of the map for multi-step plans: run a
BFS over
view.board.edges(see tools/claude-seat.mjs view JSON, or write a quick router) before spending a number card on a sprint. I burned a 7-move turn bouncing off six misread walls. - Eric counter-plays YOUR bot upgrades: he summoned a troll bodyguard specifically against the archmage's exile-the-winner instinct, and relocated MY home sector mid-carry. Expect meta-warfare.
- In 4p with automatons: the bots are chaos agents — they stun, exile, disease, and con. Herd them at Eric; never assume they're on script.
Game-three scars (lost in four rounds)
- CHECK
dimWarpsEVERY SINGLE VIEW — Kestrel (Eric's wizard) has won two games with quietly-placed wormholes ending beside his home. The client prints a !! line for them; treat any new token pair as a five-alarm fire and recompute both players' delivery distances through it. - Never lead the attack against Kestrel. Three games, three saved counters sprung at the perfect moment (anti-anti, full-shield bait, full-reflection held three rounds for my lightning). Force his counters out with throwaways or positional threats before committing a real spell; his patience is perfect and he telegraphs nothing.
- DESTROY WALL showers the ADJACENT caster with rubble (4 damage) — cast it from range, never on your own square's edge.
- Wading a rosebush costs 3. A reflected LIGHTNING BLAST still stuns its caster even at 1 reflected damage — the stun is the payload, and a lost turn against Kestrel is a lost game.
- Grab-turn-one openings feel great and prove nothing: deliveries are the only score. He banked quietly both times while I showboated.
Game-five scars (eliminated by a rule I implemented myself)
- THE ELIMINATION CLOCK: the moment BOTH treasures you protect sit on living opponents' home bases, you are OUT — points, life, and position notwithstanding. In multiplayer this clock starts ticking the instant your second chest is picked up by anyone. From then on, every turn must either recover a chest or end the game first. I spent three turns optimizing deliveries while two bots quietly carried my death certificate.
- FEAR IS A SELF-CAST AURA — read the card, not your assumptions:
"no player or monster will move to within 3 spaces of you," walls
irrelevant, and anyone already within 3 MUST flee on their turn. It
is armor for carriers and a hearth-denial tool: a feared wizard
standing 2 from your home makes delivery impossible. I invented an
elaborate theory about enemy goalkeeping instead of reading my own
engine's card text. Check
data/cards.jsonwhen a rule surprises — it is one grep away and it is verbatim. - In four-player, Kestrel plays the TABLE, not the duel: his SWAP yanked a bot off its own doorstep mid-delivery and parked himself by unclaimed treasures — one card, two tempo hits. Expect every card he plays to hurt two players at once, and ask which two before deciding it wasn't aimed at you.
- CREATE WALL can sever your announced return route the turn after you telegraph it. If your road home is unique, either don't stand at the far end of it, or carry the picks/doors to re-open it. And CREATE DOOR makes LOCKED doors — it is a key-cutter, worthless without picks.
- Bot threat model: archmage automatons DO deliver, but their brains can dither inexplicably (one toured the map for two rounds carrying my elimination). Never count on bot incompetence — count turns to their delivery square as if they play perfectly, and treat every reprieve as a gift, not a pattern.
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
chatfor table talk at dramatic moments; it's half the fun.
Cadence
- On "go":
view, read HIS events since your last turn (the client prints only NEW events;viewshows a short history tail). - Think about the whole board — his timeline, yours, threats, LOS.
- Execute your commands one at a time, checking errors.
endTurnwith a draw that respects the 7-card hand limit.- 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".