Commit Graph
58 Commits
Author SHA1 Message Date
Eric WagonerandClaude Fable 5 36b3ffe9a6 Wire online multiplayer: game rooms, protocol, playable Svelte client
Server: room registry with 4-letter codes, host/join/start flow, the
authoritative command loop (seed + append-only command log per room —
the replay/async foundation), and per-player redacted views and events
broadcast after every change. Client: lobby, SVG board (floors, walls,
doors, homes, color-keyed treasures and wizard tokens matching the
physical set's six colors, warp arrows), click-to-move, click-to-punch,
card hand with tooltips from verified card text, cast flow with number
card attachment and waterbolt split, edge-click targeting for wall
spells, counteract-or-pass prompt, discard flow, end-turn draw
selector, and a humanized event log. Verified end-to-end over real
websockets with two clients: join, start, private deals, moves, turn
sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:52:10 -04:00
Eric WagonerandClaude Fable 5 7c607ad5c7 Implement casting layer: attack stack, counteraction chain, first effects
The attack/counteraction stack: casting an attack (or punching) opens a
stack; the defender counteracts or passes, the attacker may respond
(ANTI-ANTI nullifies a counter), and resolution runs the damage
pipeline in play order. First effect wave, encoded from verified card
text: Fireball (flat 5 + destroys carried magic stones if damage gets
through), Lightning Blast (number damage + stun unless fully stopped),
Powerthrust (2 + optional number), Waterbolt (caster-chosen
damage/knockback split with push-away movement), Blunt (halve, round
result up), Absorb (-3), Full Shield (spell-only stop), Reflection
(half to both), Full Reflection (redirect), Absorb Spell (nullify and
steal the attack card), Create/Destroy Wall (dynamic edge overrides
layered over the board; collapse deals 4 to adjacent squares), Speed
(extra turn), and TRAP! on draw (lose next turn, redraw). Lost turns
skip on advance; unimplemented cards refuse to cast with a clear
error. 35 tests passing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:47:06 -04:00
Eric WagonerandClaude Fable 5 a8884592a4 Implement engine core: board assembly, movement, turns, combat, victory
Pure deterministic game core in @wizwar/engine: seeded RNG (mulberry32,
state in GameState so seed+commands replays identically), sector
assembly with rotation, junction merging, and wraparound warps
(configurable pairings; the 2p diagram crosses its side openings),
movement (3 + one number card), geometric line of sight, deck building
from the verified card data (asserts 125/200 totals), and the
command-to-event reducer: setup with TRAP! redraw and die-roll first
player, punching (no combat round 1, no self-attack, once per turn),
damage/death with killer-takes-cards and forced discard, treasure
stealing with both victory conditions, pick-up-ends-turn, and
end-of-turn draw. Events carry full spatial detail for future replay
rendering; private card knowledge rides on visibleTo events with a
redaction helper. 21 tests passing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:39:50 -04:00
Eric WagonerandClaude Fable 5 11209cdc5d Add complete token inventory from photos of Eric's counter sheets
IMG_4684-4687: all 33 token types, six double-sided wizard standees
(front and back views), and 12 color-keyed treasure tokens documented
in research/tokens-6e.md. Verification checklist is now fully closed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:31:50 -04:00
Eric WagonerandClaude Fable 5 e62d4c118f Record board dimensions (7.5in square) and absence of errata sheet
Owner-measured: sector boards are 7.5in to a side (1.5in per space);
no errata sheet in the 6e box. Closes the physical checklist except
the optional counter-sheet inventory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:20:04 -04:00
Eric WagonerandClaude Fable 5 1a56da9712 Verify final card texts from photos of Eric's physical cards
IMG_4680-4683: Butt-Head and Mega-Monster (the last two cards with no
text from any source) transcribed verbatim; Force Field, Gift From
Above, Redirection, Dimensional Warp renames confirmed; Troll, Wraith,
Skeleton, Thought Steal, Warp Wand, Sticky Wand faces verified; number
cards confirmed to carry no rules text. cards.json is now 208 verbatim
/ 9 paraphrased / 3 uncertain (all Exp2, not owned). VERIFICATION.md
updated to v3 with all priority checks done.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:17:33 -04:00
Eric WagonerandClaude Fable 5 7a8aa62b65 Add verified engine data layer: cards.json, boards.json, rules reference
cards.json: 220 cards across base/Exp1/Exp2 with official 6E quantities
from Eric's rulebook (base = exactly 125, Exp1 = exactly 75), verbatim
text for all but two cards, FAQ rulings, and per-card verification
flags. boards.json: all six sector layouts, now physically verified
against Eric's board photos with zero corrections (research/
boards-verification.md), plus 2-8 player setup configurations.
rules-notes.md is the engine implementer's reference; VERIFICATION.md
tracks the few remaining spot-checks (Butt-Head and Mega-Monster card
text foremost).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 18:50:41 -04:00
Eric WagonerandClaude Fable 5 34ede9c44c Scaffold monorepo: engine, server, and web packages
npm workspaces with three TypeScript packages: @wizwar/engine (pure
game logic), @wizwar/server (Node websocket authority), @wizwar/web
(Svelte 5 + Vite client). Server handshake and client build verified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 18:20:16 -04:00