slaywithfriends/docs/roadmap.md

6.8 KiB

slaywithfriends roadmap

overall progress tracker. references existing plans and design docs.

key docs:

  • docs/plans/2026-02-23-single-combat-plan.md (implementation plan)
  • docs/plans/2026-02-23-single-combat-design.md (design decisions)
  • docs/rules-web-mvp.md (what we're building toward)
  • docs/rules-canon.md (board game source of truth)
  • docs/rules-web-delta.md (known differences)

phase 0: foundation [done]

project scaffold, core engine, first playable encounter.

  • bun + biome project setup
  • card data module (cards.js, starter deck)
  • state module (combat init, draw, play, end turn)
  • effect resolver (hit, block, status, draw, lose_hp)
  • die roll + enemy action resolver
  • combat orchestration (turn flow, win/loss)
  • html shell + css layout + dev server
  • render module (state to dom)
  • main module (event handling, game loop)
  • ironclad starter card image mapping

phase 1: data pipeline [in progress]

extract all board game data into structured json.

branch: data-pipeline-merge-and-assets

  • extract ironclad cards from board game sheets
  • extract silent cards
  • extract defect cards
  • extract watcher cards (in progress - 8/~120 done)
  • extract colorless cards
  • merge per-character files into unified cards.json (410 cards)
  • map card images: ironclad (118), silent (108), defect (106), watcher (8)
  • extract enemy data (57 enemies across acts 1-4)
  • switch cards.js to load full cards.json
  • add data validation tests (cards + enemies schema)
  • 70 cards still missing image paths (28 ironclad, 20 silent, 22 defect)
  • potion data extraction
  • relic data extraction

phase 2: multiplayer state model [in progress]

restructure engine for multiple players and enemies.

branch: engine-multiplayer-state

  • indexed players[] and enemies[] arrays
  • backward-compat aliases for single-player code
  • getEntity/setEntity abstraction in effects
  • per-player draw/play/endTurn
  • per-enemy combat resolution
  • fix draw effect player index bug
  • fix lose_hp semantics (damages caster)
  • playersReady duplicate guard
  • refactor playCard to options-based API
  • enemy instanceId for multi-enemy encounters
  • enemy targeting logic (currently always player 0)
  • turn order for simultaneous play

phase 3: board game assets + ui

use board game visual assets for an authentic feel.

icons (manual extraction needed - jared doing this)

the Reference.png has all the game icons. plan:

  • extract individual icons from reference card (jared, manual)
  • try svg versions of icons
  • evaluate emoji as slottable icon alternatives
  • text version of reference card for image-free mode (see docs/reference.txt)

board game art for ui

StS_BG_assets/ has a wealth of material:

  • player boards (Player_Board_Ironclad.png etc) - character select / stats
  • playmats (Playmat.jpg, per-character variants) - combat background
  • boss art (front + back, normal + A9 variants) - encounter screens
  • enemy/elite card sheets - could crop individual enemy art
  • map tiles + tokens - for map navigation screen
  • hp tracker (HP_Tracker.png) - compact tens/ones component
  • status tokens (Token_Vulnerable.png etc) - inline status display
  • potion sheet (Potions.png) - potion inventory
  • relic sheets (Relics_Common.png, Relics_Boss.png)
  • shop image (Shop.png) - merchant screen
  • card back (Cards_Back.png) - draw pile / face-down cards
  • mini character portraits (Mini_Ironclad.png etc) - player indicators

card images

  • decide: crop individual cards from sheets vs use video game card images
  • or: combine all into single spritesheet for efficient loading
  • image-free fallback mode (text + icons only)

phase 4: full combat

complete combat mechanics per rules-web-mvp.md.

  • all keywords: exhaust, ethereal, retain, scry, unplayable
  • area of effect (single row + boss)
  • multi-hit with correct token consumption
  • poison mechanic (max 30 across all enemies)
  • start-of-turn / end-of-turn trigger system
  • status cards (dazed, slime, burn, wound, void)
  • potion system (max 3, use/discard flow)
  • combat log (scrollable history of actions)

phase 5: character mechanics

each character's unique systems.

  • ironclad: strength interactions, heal 1 hp end of combat
  • silent: shiv generation, poison limits/behavior
  • defect: orb channel/end-of-turn/evoke
  • watcher: neutral/calm/wrath stances + miracle tokens

phase 6: map + progression

between-combat game flow.

  • map generation (acts 1-3 structure)
  • room types: encounter, elite, event, campfire, treasure, merchant, boss
  • deck building / card reward selection
  • upgraded card rewards, rare rewards
  • campfire: rest (heal) / smith (upgrade)
  • merchant: buy cards, remove cards, buy potions/relics
  • events (act-specific event decks)
  • relic system
  • act transitions
  • neow bonuses (run start)

phase 7: multiplayer

the "with friends" part.

  • websocket server (bun serve)
  • lobby/room creation
  • simultaneous play during player turn
  • row-based enemy targeting across players
  • shared combat state sync
  • reconnection handling
  • spectator mode

phase 8: polish

  • animations (card play, damage, block, status)
  • sound effects
  • mobile touch optimization
  • save/load (persist run state)
  • ascension levels (A1-A20)
  • act 4 (corrupt heart)
  • daily climb mode

asset inventory (StS_BG_assets/)

game state / reference:

  • Reference.png - combat flow + icon glossary + map nodes
  • HP_Tracker.png - tens/ones hp dial
  • Ascension_Reference.png - ascension level modifiers
  • Kindling.png / Kindling_Back.png - campfire resource

per-character:

  • Player_Board_{character}.png - stats/ability board
  • Playmat_{character}.png (+ Playmat.jpg generic)
  • Mini_{character}.png - small portrait
  • Cards_{character}.png / _Rare.png / _Start.png + upgraded variants

enemies/bosses:

  • Enemies_Act{1-3}.png + _Back.png (+ Act1_First_Back.png)
  • Elites_Act{1-3}.png + _Back.png
  • Boss_Act{1-4}_{name}.png + variants (A9, Back, Summon)
  • Summons_Act{1-3}.png + _Back.png

map:

  • Map.png, Map_Act{1-3}.png
  • Map_Token_{type}.png (Back, Camp, Elite, Empty, Encounter, Enemy, Shop)

tokens:

  • Token_Block_5.png, Token_Gold_{1,5}.png
  • Token_Poison.png, Token_Poison_{5,10}.png
  • Token_Strength.png, Token_Strength_5.png
  • Token_Vulnerable.png, Token_Weak.png
  • Token_Shield.png, Token_Shiv.png, Token_Miracle.png
  • Status_Dazed.png, Status_Slime_Burn.png

other:

  • Cards_Back.png, Cards_Colorless.png + upgraded
  • Curse.png, Curse_A5.png
  • Events.png, Events_Act{1-3}.png + _Back.png
  • Neows_Blessing.png + _Back.png
  • Potions.png + _Back.png
  • Relics_Common.png, Relics_Boss.png + _Back variants
  • Shop.png