Files
gogobee/internal/plugin/zone_graph_first_hoard_test.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

33 lines
866 B
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
import "testing"
func TestFirstHoardGraph_Invariants(t *testing.T) {
assertPostgameGraph(t, ZoneFirstHoard, zoneFirstHoardGraph)
}
// TestFirstHoardGraph_GameMaxLootBias verifies the plan's requirement that
// the First Hoard carries the game-max LootBias route (2.53.0), which the
// boss's Greed Tax self-balances. The deepest gilded vein hits the 3.0
// ceiling and at least three nodes sit at or above 2.5.
func TestFirstHoardGraph_GameMaxLootBias(t *testing.T) {
g := zoneFirstHoardGraph()
var max float64
rich := 0
for _, n := range g.Nodes {
if n.Content.LootBias > max {
max = n.Content.LootBias
}
if n.Content.LootBias >= 2.5 {
rich++
}
}
if max < 3.0 {
t.Errorf("max LootBias = %v, want >= 3.0 (game-max gilded route)", max)
}
if rich < 3 {
t.Errorf("nodes with LootBias >= 2.5 = %d, want >= 3", rich)
}
}