mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
Adv 2.0 D&D Phase 11 D3a: Tier 2 zones + bestiary
Forest of Shadows + Sunken Temple of Dar'eth registered. New bestiary entries (dire wolf, bandit captain, owlbear, corrupted dryad, displacer beast, green hag, kuo-toa + whip, water elemental, merrow, aboleth thrall, Hollow King boss, Dreaming Aboleth boss) per dungeon zones doc §5. L1 tier-gate test expectation bumped from 2→4 zones now that T2 is visible to T1 players. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -111,6 +111,8 @@ func registerZone(z ZoneDefinition) {
|
||||
func init() {
|
||||
registerZone(zoneGoblinWarrens())
|
||||
registerZone(zoneCryptValdris())
|
||||
registerZone(zoneForestShadows())
|
||||
registerZone(zoneSunkenTemple())
|
||||
}
|
||||
|
||||
// getZone returns the definition by ID and ok=false if unknown.
|
||||
@@ -253,3 +255,94 @@ func zoneCryptValdris() ZoneDefinition {
|
||||
FlavorFile: "zone_crypt_valdris_flavor.go",
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Tier 2 zone factories (Phase 11 D3a) -----------------------------------
|
||||
|
||||
func zoneForestShadows() ZoneDefinition {
|
||||
return ZoneDefinition{
|
||||
ID: ZoneForestShadows,
|
||||
Display: "Forest of Shadows",
|
||||
Tier: ZoneTierApprentice,
|
||||
LevelMin: 3,
|
||||
LevelMax: 5,
|
||||
Faction: "Beasts, Fey-corrupted creatures, Bandits",
|
||||
Atmosphere: "Ancient forest, twisted paths, eerie silence, bioluminescent fungi, things in the canopy.",
|
||||
Hook: "The forest was beautiful once. Travelers still say so, usually right before they stop saying anything at all. The trees lean in when you're not looking. TwinBee has noted this is not a metaphor.",
|
||||
MinRooms: 6,
|
||||
MaxRooms: 8,
|
||||
Enemies: []ZoneEnemy{
|
||||
{BestiaryID: "dire_wolf", SpawnWeight: 6},
|
||||
{BestiaryID: "bandit_captain", SpawnWeight: 4},
|
||||
{BestiaryID: "owlbear", SpawnWeight: 4},
|
||||
{BestiaryID: "dryad_corrupted", SpawnWeight: 3},
|
||||
{BestiaryID: "displacer_beast", SpawnWeight: 3},
|
||||
{BestiaryID: "green_hag", SpawnWeight: 1, IsElite: true},
|
||||
},
|
||||
Boss: ZoneBoss{
|
||||
BestiaryID: "boss_hollow_king",
|
||||
Name: "The Hollow King",
|
||||
CR: 6,
|
||||
HP: 142,
|
||||
AC: 15,
|
||||
PhaseTwoAt: 0.40,
|
||||
Description: "What was once a forest guardian, now a vessel for something older and angrier. The antlers are real. The eyes are not.",
|
||||
Abilities: []string{
|
||||
"Corrupting Aura: melee-range targets WIS DC 14 each turn or lose bonus action",
|
||||
"Root Surge (recharge 5–6): Restrain (STR DC 15) + 2d8 bludgeoning",
|
||||
"Devour Light: extinguishes magical light for 2 turns; player AC -2",
|
||||
"Phase 2 (<40% HP): summons 2 Dire Wolves; gains Reckless Attack",
|
||||
},
|
||||
},
|
||||
Loot: []ZoneLootEntry{
|
||||
{ItemID: "the_hollow_crown", DropChance: 0.06, Note: "+2 WIS; Fey Sight (advantage on Perception in nature)"},
|
||||
{ItemID: "arm_hide_+2", DropChance: 0.10},
|
||||
{ItemID: "wpn_longbow_+1", DropChance: 0.12},
|
||||
{ItemID: "forest_essence", UniqueAlways: true, Note: "crafting material x1–3"},
|
||||
},
|
||||
FlavorFile: "zone_forest_shadows_flavor.go",
|
||||
}
|
||||
}
|
||||
|
||||
func zoneSunkenTemple() ZoneDefinition {
|
||||
return ZoneDefinition{
|
||||
ID: ZoneSunkenTemple,
|
||||
Display: "Sunken Temple of Dar'eth",
|
||||
Tier: ZoneTierApprentice,
|
||||
LevelMin: 3,
|
||||
LevelMax: 5,
|
||||
Faction: "Kuo-toa, Water Elementals, Aboleth-touched",
|
||||
Atmosphere: "Flooded stone chambers, barnacled pillars, salt smell, alien glyphs, things that swim in the dark water.",
|
||||
Hook: "The tide went out thirty years ago and never fully came back. The temple stayed wet anyway. Something down there keeps it that way. TwinBee suggests waterproofing your spellbook.",
|
||||
MinRooms: 6,
|
||||
MaxRooms: 8,
|
||||
Enemies: []ZoneEnemy{
|
||||
{BestiaryID: "kuo_toa", SpawnWeight: 7},
|
||||
{BestiaryID: "kuo_toa_whip", SpawnWeight: 4},
|
||||
{BestiaryID: "merrow", SpawnWeight: 4},
|
||||
{BestiaryID: "aboleth_thrall", SpawnWeight: 3},
|
||||
{BestiaryID: "water_elemental", SpawnWeight: 1, IsElite: true},
|
||||
},
|
||||
Boss: ZoneBoss{
|
||||
BestiaryID: "boss_dreaming_aboleth",
|
||||
Name: "The Dreaming Aboleth",
|
||||
CR: 10,
|
||||
HP: 135,
|
||||
AC: 17,
|
||||
PhaseTwoAt: 0,
|
||||
Description: "Ancient. Patient. It has been waiting in this temple since before the city above was built. It has had time to plan.",
|
||||
Abilities: []string{
|
||||
"Tentacle Multiattack: 3 hits; on-hit Diseased (no magical healing 24h until cured)",
|
||||
"Enslave (recharge 6): WIS DC 14 or Charmed; player skips turn, drifts toward Aboleth",
|
||||
"Mucus Cloud: melee attackers CON DC 14 or skin→membrane (6d6 acid if not submerged)",
|
||||
"Legendary Actions (3/round): Detect / Tail Swipe (2 LA) / Psychic Drain (3 LA, max-HP cut)",
|
||||
},
|
||||
},
|
||||
Loot: []ZoneLootEntry{
|
||||
{ItemID: "aboleths_eye", DropChance: 0.05, Note: "+2 INT; Telepathy (passive lore checks auto-succeed)"},
|
||||
{ItemID: "arm_breastplate_+1", DropChance: 0.10},
|
||||
{ItemID: "refined_aboleth_mucus", UniqueAlways: true, Note: "rare crafting material x1"},
|
||||
{ItemID: "coins_5d10x8", DropChance: 1.0, Note: "5d10 × 8 coins"},
|
||||
},
|
||||
FlavorFile: "zone_sunken_temple_flavor.go",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user