6.8 KiB
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