Files
gogobee/internal/plugin/zone_graph_first_hoard.go
prosolis d9541f07f1 adventure: Tier 6 postgame "Mythic" dungeons (P1–P7 calibration)
Five post-game dungeons above the T5 ceiling, gated on both T5 bosses beaten
+ level 18. Opt-in endgame: deadly solo, clearable by a party with Pete + pets.

- P1 gating: postgameUnlocked (T5 clears + level floor), zonesForLevel excludes
  T6 unconditionally; wired into startZoneRun, !zone/!expedition, party accept,
  boredom picker, and the list dividers.
- P2 bestiary: 15 elites + 5 signature bosses (Layer-1 stat blocks).
- P3 zone defs + 4-region registries; ZoneLootEntry.BossOnly.
- P4 five zone graphs on a shared builder (44–52 rooms, no soft-lock; Ossuary
  secret Verse nodes).
- P5 loot: BossOnly enforced; signature items are real registry magic items;
  five Thom pity recipes off the per-zone crafting anchors.
- P6 narration/flavor (5 files), T6 achievements, Pete stays zone-parametric.
- P7 (in progress): sim can now reach gated T6 (SimRunner.SeedPostgameUnlock +
  IsPostgameZone). First calibration pass on millenia — hardened ossuary +
  drowned_star, softened first_hoard + unplace; last_meridian in band.

Fix: party members were refused from every T6 zone because expeditionCmdAccept
ran the level gate (which excludes T6) before the postgame check — the intended
party endgame was unreachable. Route T6 through postgameUnlocked. Regression
tests added.
2026-07-15 23:17:07 -07:00

76 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package plugin
// The First Hoard branching graph (Tier 6, Phase P4).
//
// Aurvandryx's gilded clutch under Infernus Peak. Regions: The Cooling
// Throne → Gilded Gullet → The Clutch Vaults → Cradle of the First Flame,
// on the shared T6 skeleton. Longest walk = 46, in band.
//
// Signature set-piece: the game-max LootBias route. Per the plan, the First
// Hoard carries the richest nodes in the game (2.53.0) because the boss's
// Layer-2 Greed Tax makes rich routes self-balancing — gild yourself and
// pay for it at Aurvandryx, or take the lean line. The free capstone (the
// deepest gilded vein, cap12) sits at the 3.0 ceiling; two buildup nodes
// carry 2.5/2.75. Forks gate on physical checks (STR/CON) — you force the
// vault, you don't sneak it.
func zoneFirstHoardGraph() ZoneGraph {
stat := func(s string, dc int, hint string) pgLock {
return pgLock{kind: LockStatCheck, lockData: map[string]any{"stat": s, "dc": dc}, hint: hint}
}
return buildPostgameZoneGraph(pgZoneSpec{
zoneID: ZoneFirstHoard,
regions: [4]string{"hoard_cooling_throne", "hoard_gilded_gullet", "hoard_clutch_vaults", "hoard_cradle_first_flame"},
entry: "The Still-Warm Gate",
preamble: [12]string{
"Infernax's Corpse-Terrain", "The Cooling Throne", "Scale-River Ford", "Ashfall Landing",
"The Guard-Dog's Rest", "Ember Colonnade", "Slag Pit", "Choir-Drake Roost",
"The Gilded Descent", "Minted Approach", "Coin-Drift Hall", "Throat of the Mountain",
},
fork1: pgFork{
label: "The First Swallow",
freeLabel: [3]string{"Lean Passage", "Bare Gullet", "Gullet Floor"},
lockLabel: [3]string{"Vault-Seam", "The Gilded Vein", "Coin-Choked Stair"},
lock: stat("STR", 16, "a wall of fused coin — force it and the hoard spills"),
},
r2gate: "Gilded Gullet",
r2build: [6]string{
"Hall of Minted Antibodies", "The Simulacrum Font", "Mirror-Mint Gallery",
"Executor's Approach", "The Scale-Debt Walk", "Vault Threshold",
},
fork2: pgFork{
label: "The Second Swallow",
freeLabel: [3]string{"Poverty's Line", "Empty Clutch-Walk", "Clutch Floor"},
lockLabel: [3]string{"Cracked Egg-Vault", "The Gilded Reliquary", "Gold-Sealed Nest"},
lock: stat("CON", 16, "the heat here would cook a lesser body — endure it for the richest vault"),
},
r3gate: "The Clutch Vaults",
r3build: [6]string{
"Rows of Gilded Eggs", "The Resonance Nursery", "Choir-Cracked Stone",
"Wyrm-Sworn Landing", "Cradle Antechamber", "Threshold of the First Flame",
},
capstone: pgCapstone{
label: "The Cradle Fork",
freeLabel: [3]string{"The Deep Vein", "Mother-Lode Gallery", "Cradle Floor"},
lockALabel: [3]string{"Ember Squeeze", "The Molten Reliquary", "Scale-Sworn Path"},
lockA: stat("STR", 18, "prise the last vault open before she wakes"),
lockBLabel: [3]string{"Heat-Shimmer Recess", "The Poverty Shrine", "Vowed Approach"},
lockB: stat("WIS", 18, "leave the gold — the lean route arrives unburdened"),
},
merge: "Cradle of the First Flame",
approach: [5]string{
"The Warming Nest", "Clutch of the First Wyrm", "Ember-Before-Fire Walk", "The Progenitor's Shadow", "The First Breath",
},
boss: "Aurvandryx, the Ember Before Fire",
overrides: map[string]pgNodeOverride{
"cap12": {bias: 3.0}, // deepest gilded vein — game-max
"f1b2": {bias: 2.75}, // The Gilded Vein
"r2b2": {bias: 2.5}, // The Simulacrum Font
},
})
}
func init() {
registerZoneGraph(zoneFirstHoardGraph())
}