GM→DM rename across docs and code (GMNarrationType→DMNarrationType, GMState→DMState, narration constants, comments) so the system reads as "Dungeon Master" everywhere. Player-visible "GM mood" wording stays where it appears in flavor. Streamed zone/expedition combat: zone advance now stages patrol → patrol play-by-play → patrol resolution → room intro → room play-by-play → final outcome through sendZoneCombatMessages with 2–3s pacing (arena keeps its 5–8s window). Combat narrative lines pick up a compact d20-vs-AC roll annotation for hit/crit/miss/block events. Combat outcome polish: dndHPSnapshot lets narration show sheet HP rather than legacy combat-engine HP, and markAdventureDead clears the zombie state where hp_current was 0 but the legacy alive flag stayed true after a D&D-layer KO. Adv 2.0 announcement (ADVENTURE_2.0_ANNOUNCEMENT.md), README rewrite covering the new layer, and adv2_scenario_test.go — a full zone-run + expedition + harvest playthrough against a copy of the prod DB asserting persisted state end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
Adventure 2.0 — D&D Layer
Status: shipping to prod from branch adv-2.0.
Compatibility: fully additive. Every existing character, treasure, balance,
streak, and inventory row is preserved. Players who don't opt in keep the
classic adventure experience unchanged.
TL;DR
Adventure 2.0 grafts a full D&D-style character layer onto the existing adventure system, then builds two new endgame loops on top of it: single- session dungeon zones and multi-day expeditions. It introduces ten hand-tuned zones across five tiers, a real-time threat clock, harvest nodes per room, multi-region travel, an extract/resume cycle, and TwinBee — a zone-narrating mood-driven dungeon master who reacts to what you do.
If you've been running !adventure, nothing breaks. If you run !setup, the
whole game opens up.
What's new
1. A D&D character, on top of your existing one
Run !setup once. You pick a race and class, your existing
combat_level becomes your D&D level, and the system inherits your
treasures and equipment as attunements. From that point on every fight,
forage, and arena run is resolved through D&D mechanics — STR/DEX/CON/INT/WIS/CHA,
HP, AC, ability checks, saving throws, the lot.
- 5 classes: Fighter, Mage, Cleric, Ranger, Rogue
- 6 races with distinct passives
- HP / AC / ability scores with proper modifiers
- Resource pools per class (stamina, spell slots, channel divinity, etc.)
!sheetshows everything: stats, bonuses, equipped gear, attunements
Players who haven't run !setup see the legacy adventure UI as before.
2. Subclasses & level-up features (L3 → L15)
At L3 you specialize — every class has 3 subclasses, each with its own passives, abilities, and signature moves through L15.
| Class | Subclasses |
|---|---|
| Fighter | Champion, Battle Master, Berserker |
| Mage | Evocation, Abjuration, Necromancy, Arcane Trickster |
| Cleric | Life, War, Trickery |
| Ranger | Hunter, Beast Master, Gloom Stalker |
| Rogue | Thief, Assassin, Arcane Trickster |
Subclass features unlock at L5, L7, L10, L15 — extra attacks, spell slot
upgrades, signature spells, beast companions, sneak-attack scaling, divine
strike, etc. Use !subclass to inspect and pick.
3. Spells & spellbooks
Mages, Clerics, and Rangers cast for real now. Spell slots are tracked,
combat consumes them, and Mages have a spellbook cap that grows with
level — pick which spells to learn at level-up via !learn. Spells fire
automatically through the combat AI when the situation favors them.
4. Forward-simulating combat engine
Combat is no longer a one-shot dice roll. The engine plays out the encounter turn by turn, threading consumables, monster abilities, status effects, class resources, crits and fumbles, and renders a real combat narrative. Every fight in arena, encounters, expeditions, and zones runs through it.
5. Dungeon zones (single-session)
!zone — pick a zone, run it, come out with loot.
- 10 zones, 5 tiers, level bands L1 through L20
- T1: Goblin Warrens, Crypt of Valdris
- T2: Forest Shadows, Sunken Temple
- T3: Haunted Manor, Underforge
- T4: Underdark Outpost, Feywild Crossing
- T5: Dragon's Lair, Abyss Portal
- Procedural rooms: entry → exploration → trap → elite → boss, with the middle padded out per zone
- Per-zone bestiary, traps, atmosphere, and flavor pools
- Boss phase-two narration when a boss crosses 50% HP
- TwinBee — your in-zone DM. Has a 0–100 mood score that shifts on crits, deaths, taunts, compliments, zone completions. Mood gates the flavor of every aside, gloat, and recap you read.
!zone map— ASCII layoutE──?──T──★──☠with your current marker!zone lore— TwinBee shares zone history!zone taunt/!zone compliment— directly poke or flatter your DM
6. Multi-day expeditions
!expedition — the long form. Pack supplies, head out, manage your day-by-day
survival, come home with the haul (or not).
- Outfitting: buy supply packs at start; standard or deluxe; cost scales with zone tier
- Real-time day cycle: 06:00 morning briefing, 21:00 evening recap (configurable per environment)
- Supply burn: rations tick down; harsh zones burn faster; running out triggers a forced extraction
- Threat Clock (0–100): every action you take is noticed. As threat rises you cross bands — Quiet → Stirring → Alert → Hostile → Siege — each band changes monster density, patrol odds, and night events
- Patrol encounters at Alert+: fights can interrupt you while traversing cleared rooms
- Wandering monsters at night
- Siege Mode at threat 80+: fortified camp branches, special warnings
- Camp:
!camp rough(free, no protection) vs!camp standard(consumes supplies, grants overnight rest) - Milestones (§13): First Night, Deep Dive, Long Haul, etc.
- Expedition log: every event recorded;
!expedition logshows the trail
7. Multi-region zones
Higher-tier zones are multi-region. The Underdark, Feywild Crossing, Dragon's Lair, and Abyss Portal each have multiple connected regions.
!region— see where you are, where you can travel, what you've explored- Inter-region travel consumes supplies and ticks threat
- Base camp is a persistent waypoint per expedition — anchor your return, retreat to safety, regroup
!map(E6a) — full multi-region map renderer with visited markers
8. Per-zone temporal events
Every T2+ zone has a signature time-based effect:
- Sunken Temple — tidal cycle floods/recedes rooms
- Haunted Manor — nightly reset; cleared rooms come back
- Underforge — heat accumulation; gear damage rises
- Feywild Crossing — time distortion; days pass at non-uniform rates
- Dragon's Lair — awareness pulses warn the dragon directly
- Abyss Portal — destabilization stack threatens forced collapse
These are enumerated and active at all expedition tiers, layered on top of the threat clock.
9. Extract & resume
!extract — bail safely from an expedition. You keep what you've found,
the expedition row goes to extracting status, and you can !resume
later to pick up from your base camp on the same expedition. Multi-region
extract→resume preserves your current region and visited set.
10. Harvest nodes per room
Foraging, mining, and (in coastal zones) fishing now happen inside zones.
- Every room gets a seeded set of harvest nodes — finite, room-scoped
- Harvest actions roll against zone-specific DCs with class bonuses (Ranger forage/fish, Fighter mine, etc.)
- Class-specific yield bonuses — Rangers find rare game; Fighters break tougher ore; Mages divine arcane components
- Zone-condition effects — Tidal Rising blocks fishing; Heat blocks mining; nightly reset re-seeds nodes; etc.
- Per-zone resource tables — every zone has its own loot pool
11. Fishing zones
Coastal/aquatic zones (Sunken Temple, Forest Shadows streams, Feywild
Crossing) support !harvest fish with their own resource pools, fishing
DCs, and Ranger rare-catch upgrades.
12. Zone loot drops
- Boss kills drop from a per-zone loot table
- Elite kills drop from a tier-scoped table
- Loot persists into your inventory and can be sold, equipped, or attuned via the existing flow
13. Economy integration
All Adv 2.0 systems use real coins. Outfitting expeditions debits at start; extracted loot credits at completion; harvest yields stack into your existing inventory; arena multipliers and streak XP scale through D&D combat. No parallel currency.
14. TwinBee narration coverage
Every zone × every narration type (room entry, combat start, combat end,
crits, fumbles, player death, zone complete, mood asides, lore, boss
entry, elite entry, taunt/compliment responses) has a non-empty pool.
A coverage test (TestNarrationCoverage_AllZonesAllTypes) locks this in
so future zone additions can't ship with empty pools.
Player commands cheat sheet
| Command | What it does |
|---|---|
!setup |
Opt into D&D — pick race + class, inherits your existing progress |
!sheet |
Full character sheet |
!learn |
Mages — pick a spell at level-up |
!subclass |
Inspect / select subclass at L3 |
!zone / !zone list |
Show available zones |
!zone enter <id> |
Start a single-session run |
!zone advance |
Resolve current room |
!zone status / !zone map / !zone lore |
Run inspection |
!zone abandon |
End run, no rewards |
!zone taunt / !zone compliment |
Poke TwinBee |
!expedition list |
Zones available at your level |
!expedition start <zone> [Ns] [Md] |
Outfit and begin |
!expedition status / !expedition log |
Daily briefing + history |
!camp rough / !camp standard |
Make camp |
!region |
Multi-region inspection + travel |
!map |
Full multi-region map |
!harvest forage / !harvest mine / !harvest fish |
Work the room |
!resources |
Inventory of harvested materials |
!threat |
Current threat clock |
!extract |
Bail safely from an expedition |
!resume |
Pick up an extracted expedition |
Compatibility & rollout
- Additive migrations only. No columns dropped, no tables renamed. Every pre-2.0 column is preserved with original semantics.
- Opt-in. A
pending_setupflag keeps non-opted players on the legacy flow. Output formats only switch after!setupcompletes. - Treasures → attunements. Existing treasure rows are interpreted as attunements rather than re-issued.
combat_level→ D&D level. Same column, new lens.- Equipment slots carry forward 1:1.
If you've been playing pre-2.0, your save is intact. Run !setup when you
want the new layer. Don't run it and nothing about your day changes.
Developer notes
- Branch:
adv-2.0, 104 commits ahead ofmain - Test coverage: full
internal/pluginsuite green, including a new scenario playthrough (adv2_scenario_test.go) that drives end-to-end flows against a copy of the prod database - Phases shipped on this branch:
- Phases 1–9 — character system, abilities, combat engine, spells (SP1–SP4)
- Phase 10 — subclasses (SUB1–SUB3d, all classes through L15)
- Phase 11 — dungeon zones D1–D11 (10 zones + TwinBee + map + coverage test)
- Phase 12 — expeditions E1–E6 (supplies, threat clock, day cycle, camp, multi-region, extract/resume, milestones, flavor)
- Phase R — resource/combat integration (R1–R7, including post-completion audit hardening)
- Deferred (pre-existing systems required):
- Lemmy/Matrix activity → mood signal hooks (waiting on activity aggregation)
- Pete bot zone announcements (Phase 16 deliverable)