mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 17:02:42 +00:00
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.
33 lines
866 B
Go
33 lines
866 B
Go
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.5–3.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)
|
||
}
|
||
}
|