diff --git a/.claude/skills/wizwar-duel/SKILL.md b/.claude/skills/wizwar-duel/SKILL.md index c04df1a..5141d5f 100644 --- a/.claude/skills/wizwar-duel/SKILL.md +++ b/.claude/skills/wizwar-duel/SKILL.md @@ -93,6 +93,25 @@ probing legality is free, so when unsure, try it and read the error. - 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 `dimWarps` EVERY SINGLE VIEW** — Kestrel has won two games + with quietly-placed wormholes ending beside his home. The client now + 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. + ## Playing well - Kestrel (Eric) is EXCELLENT: he baited my thief, saved anti-anti for diff --git a/tools/claude-seat.mjs b/tools/claude-seat.mjs index 2fd3ec0..289ea65 100644 --- a/tools/claude-seat.mjs +++ b/tools/claude-seat.mjs @@ -72,6 +72,10 @@ function renderView(v) { out.push(`ROOM ${seat?.roomId} — you are ${v.you} (round ${v.turn.round}, ${v.activePlayerId}'s turn)`); out.push(lines.join("\n")); out.push("WARPS (rim passages): " + B.warps.map((w) => `${cellK(w.from.cell)}${w.from.side}→${cellK(w.to.cell)}`).join(" ")); + if (v.dimWarps.length) { + out.push("!! DIMENSIONAL WARP TOKENS (player wormholes — CHECK EVERY TURN): " + + v.dimWarps.map((w) => `${cellK(w.a)}↔${cellK(w.b)}`).join(" ")); + } for (const p of v.players) { const t = p.carriedTreasureId ? " CARRYING TREASURE" : ""; out.push(` ${p.id === v.you ? "ME " : " "}${p.id}: ${p.life} life @${cellK(p.position)} home@${cellK(p.home)} hand:${p.handCount}${t}${p.alive ? "" : " DEAD"} displayed:[${p.displayed.map((c) => c.cardId).join(",")}]`);