11 KiB
2D6 Dungeon Web Adaptation Plan
Goal
Build a web-based version of 2D6 Dungeon that preserves the solo dungeon-crawl loop from the core rules while removing paper bookkeeping and table lookups.
This plan is based on the core systems described in:
2D6 Dungeon - Core Rules.pdf, especially:- character creation and stats
- dungeon room generation
- encounters and combat
- treasure, XP, levelling, and town visits
Important Constraint
The Core Rules repeatedly depend on a separate Tables Codex for room tables, creature data, item tables, scrolls, treasures, and many event outcomes. That means the project should be split into:
- Rules engine and UI
- Game content/data entry
Do not block the app build on full content entry. Use placeholder data for development, then swap in the real tables.
Product Vision
The web version should feel like:
- a guided solo campaign tracker
- a map-and-journal interface
- a fast combat assistant
- a persistent progression game with saves between dungeon runs
The app should handle:
- dice rolling and modifiers
- map generation and room state
- combat flow
- inventory and item usage
- XP, levelling, HP, conditions, and favour
- leaving the dungeon and returning to town
- saving and resuming long campaigns
Suggested MVP Scope
Build the first playable version around Level 1 only plus town return/save flow.
MVP includes:
- one adventurer
- character creation
- map generation
- room reveal flow
- encounters
- combat with manoeuvres, shift, fatigue, interrupts, armour deflection
- inventory, potions, scrolls, rations
- XP and levelling
- leave dungeon and visit town
- save/load run
MVP excludes:
- all 10 levels
- full item catalog
- full god/favour content
- every special room and narrative edge case
- expansions and alternate dungeon ancestries
Recommended Build Order
Phase 1: Nail down the source material
Outcome: a usable design spec instead of rulebook ambiguity.
Steps:
- Extract the game systems from the Core Rules into a structured design doc.
- List every referenced external table that lives in the Tables Codex.
- Build a spreadsheet or JSON checklist for:
- room tables
- small room tables
- creature cards
- armour
- manoeuvres
- scrolls
- potions
- treasures
- market tables
- tavern and temple tables
- Mark each rule as one of:
- required for MVP
- defer until post-MVP
- content only
- Decide where the web version will intentionally streamline play without changing balance.
Definition of done:
- one concise design spec exists
- one content inventory exists
- MVP rule boundaries are agreed
Phase 2: Choose the technical foundation
Outcome: a stack that supports a state-heavy single-player game.
Recommended stack:
- Frontend: React + TypeScript
- App framework: Next.js or Vite
- Styling: Tailwind or CSS modules
- State: Zustand or Redux Toolkit
- Data validation: Zod
- Persistence: browser local storage first, optional cloud saves later
- Testing: Vitest + React Testing Library
Suggested architecture:
rules/for pure game logicdata/for encoded tables and cardsstate/for campaign/run stateui/for screens and panels
Definition of done:
- repo created
- TypeScript configured
- state and data folder structure in place
Phase 3: Model the game data
Outcome: rules can run against structured content instead of ad hoc text.
Create schemas for:
- adventurer
- weapon
- manoeuvre
- armour
- room template
- creature
- item
- potion
- scroll
- rune
- herb
- god favour
- town action
- dungeon level state
- room state
- combat state
Key rule-specific fields to support:
- D6, 2D6, and D66 rolls
- primary vs secondary die
- modified ranges rule
- exact strike
- shift points
- discipline and precision modifiers
- interrupt matches
- fatigue die
- unique room rules
- room reveal percentage rules
Definition of done:
- all MVP entities have typed schemas
- sample Level 1 data can be loaded without UI
Phase 4: Build the rules engine
Outcome: the game can run in code before the interface is polished.
Implement in this order:
- Dice utilities
- D3
- D6
- 2D6
- D66
- modifier clamping
- Character creation
- starting stats
- starting weapon/manoeuvres
- starting armour
- starting scroll/potion/items
- Dungeon generation
- outer boundary
- entrance room
- room dimensions
- exits
- small room detection
- last room / stairs logic
- secret door fallback
- Room encounter resolution
- identify room
- mark unique rooms
- resolve exits
- queue encounters and interactables
- Combat engine
- initiative flow
- manoeuvre matching
- shifting
- exact strike
- interrupt reduction
- armour deflection
- fatigue die progression
- multiple enemies
- thrown weapons and potion bombs
- Rewards and progression
- XP gain
- levelling
- treasure
- inventory capacity
- HP rules
- Dungeon traversal rules
- backtracking
- rations between levels
- leaving the dungeon
- Town loop
- market
- engraver
- herbalist
- tavern
- temple
- town hall
Definition of done:
- a text-mode test harness can complete a small mock dungeon
- the engine supports save/load state
Phase 5: Build the first playable UI
Outcome: a user can complete a short run entirely in the browser.
Recommended screens:
- Start screen
- new run
- continue run
- Character creation
- choose name, weapon, armour, starting manoeuvres, starting scroll
- Main dungeon screen
- map panel
- room log
- current encounter panel
- character sheet sidebar
- Combat modal or panel
- dice rolled
- available shifts
- selected manoeuvre
- damage calculation
- enemy response
- Town screen
- sell/buy
- services
- evening choice
- Save summary/history
- current level
- completed levels
- inventory and stats
UI priority:
- clarity over visual flourish at first
- remove manual arithmetic wherever possible
- keep a visible action log so players can verify the rules
Definition of done:
- one full Level 1 run is playable without touching code
Phase 6: Add persistence and campaign progression
Outcome: the app supports the real long-form game structure.
Steps:
- Save campaign state automatically after each action.
- Keep separate records for:
- current run
- completed dungeon levels
- town inventory/storage
- discovered permanent upgrades
- Add import/export save support as JSON.
- Add a run history log for debugging and player trust.
Definition of done:
- browser refresh does not lose progress
- campaign can resume from town or dungeon
Phase 7: Expand content safely
Outcome: the app grows without turning brittle.
Steps:
- Add the remaining dungeon levels one at a time.
- Add full creature card coverage.
- Add gods, herbs, runes, potion bombs, and optional rules.
- Add side quests and unique room edge cases.
- Add tool-assisted content validation to catch broken table links.
Definition of done:
- all core rulebook content used by the web app is encoded and reachable
Concrete Task List
Week 1: Pre-production
- Read the Core Rules and produce a short rules summary.
- Create a missing-content list for the Tables Codex.
- Decide MVP scope.
- Choose framework and state library.
- Set up repo and base TypeScript app.
Week 2: Data model and utilities
- Create TypeScript types and Zod schemas.
- Build dice helpers.
- Build rule helper functions for modifiers and D66 handling.
- Create sample JSON for one weapon set, a few enemies, and a few rooms.
Week 3: Dungeon and room flow
- Implement dungeon grid state.
- Implement room generation.
- Implement room reveal and exit resolution.
- Render a simple map view and room log.
Week 4: Combat
- Implement manoeuvre matching and shift logic.
- Implement enemy attacks, interrupts, armour deflection, and fatigue.
- Build the combat UI panel.
- Add tests for combat edge cases.
Week 5: Inventory and progression
- Add items, rations, potions, scrolls, and capacity rules.
- Add XP, levelling, HP updates, and conditions.
- Add treasure and post-combat rewards.
Week 6: Town and persistence
- Build leave-dungeon flow.
- Build market and service screens.
- Add save/load and autosave.
- Add campaign summary UI.
Week 7+: Content expansion
- Enter full Level 1 data.
- Playtest and fix rule mismatches.
- Add Level 2 and beyond incrementally.
Risks To Handle Early
1. Missing data source
The Core Rules alone are not enough for a full digital implementation because they reference the Tables Codex for many outcomes.
Mitigation:
- treat content entry as its own track
- start with stub tables
- add a validation layer that checks every table reference exists
2. Rules ambiguity
Some paper-game rules rely on human judgment, especially:
- inventive usage
- identifying the “last room”
- map common-sense decisions
- narrative interpretation of room text
Mitigation:
- make subjective rulings explicit in a digital design doc
- keep a manual override or “GM ruling” option during development
3. Overbuilding too early
Trying to implement all ten levels and all tables before a playable loop exists will slow the project down.
Mitigation:
- ship Level 1 first
- use placeholder content where needed
- prioritize end-to-end playability over completeness
Testing Strategy
Test the project at three levels:
- Unit tests
- dice logic
- modifiers
- combat resolution
- room generation constraints
- Integration tests
- create character -> enter dungeon -> resolve room -> fight -> gain loot
- Manual playtests
- compare digital outcomes against the rulebook
- record every mismatch in a balance/rules log
Important test cases:
- D66 primary/secondary ordering
- exact strike bonus
- shift usage limits
- fatigue die progression after round 6
- multiple enemies
- levelling during combat
- leaving and re-entering a level
- secret door generation when stuck early
Nice-To-Have Features After MVP
- animated dice
- mobile-friendly layout
- codex viewer for room/creature reference
- optional “assist mode” that explains why a rule fired
- seeded runs
- cloud saves
- campaign analytics
Best Next Step
If starting today, do these three things first:
- Create a
GAME_SPEC.mdsummarizing the rules from the PDF. - Create a
content-checklist.jsonlisting every table/card/data dependency from the Tables Codex. - Scaffold a TypeScript frontend with a pure
rules/module and implement dice utilities plus a minimal character state.
That gets the project moving quickly without waiting for all game content to be entered.