mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 08:52:42 +00:00
J3 D10: T4/T5 anchor-room variety (2nd elite + trap per zone)
In-place node kind swaps on fork branches — no node added/removed, longest path unchanged — adding one Elite + one Trap of anchor variety to each T4/T5 zone, placed to keep fork-choice risk/loot asymmetric: underdark +Elite drow_gate (R2->R4 region-guardian) +Trap silenced_chamber feywild +Elite singing_orchard (grove branch) +Trap mire_steps (marsh) dragons_lair+Elite coin_strewn_hall (treasure spur) +Trap hidden_passage (hoard spur) abyss_portal+Elite wardens_hall (R3 guardian) +Trap hush_corridor, seam_threshold abyss_portal shipped with zero trap nodes; D10 gives it two. A/B sim corpus (n=480/side): boss-clear flat (+1.5pp aggregate, per-cell within n=15 noise), median day-counts stable, combats/run rose where anchors hit common paths. New Test*Graph_*Anchors tests lock the per-zone trap/elite counts.
This commit is contained in:
@@ -119,3 +119,34 @@ func TestAbyssPortalGraph_RealitySeamHighestBias(t *testing.T) {
|
||||
t.Errorf("reality_seam LootBias = %v, want >= 3.0 (Abyss capstone)", seam.Content.LootBias)
|
||||
}
|
||||
}
|
||||
|
||||
// TestAbyssPortalGraph_D10Anchors verifies the D10 anchor-variety pass.
|
||||
// The Abyss shipped with no Trap node and a single fork2 Elite, so D10
|
||||
// adds two branch Traps (Hush Corridor, Seam Threshold) and a main-path
|
||||
// region-guardian Elite (Warden's Hall). Counts: 2 traps, 2 elites.
|
||||
func TestAbyssPortalGraph_D10Anchors(t *testing.T) {
|
||||
g := zoneAbyssPortalGraph()
|
||||
var trapCount, eliteCount int
|
||||
for _, n := range g.Nodes {
|
||||
switch n.Kind {
|
||||
case NodeKindTrap:
|
||||
trapCount++
|
||||
case NodeKindElite:
|
||||
eliteCount++
|
||||
}
|
||||
}
|
||||
if trapCount != 2 {
|
||||
t.Errorf("trap nodes = %d, want 2 (D10 hush_corridor + seam_threshold)", trapCount)
|
||||
}
|
||||
if eliteCount != 2 {
|
||||
t.Errorf("elite nodes = %d, want 2 (vrock_aerie + D10 wardens_hall)", eliteCount)
|
||||
}
|
||||
if g.Nodes["abyss_portal.wardens_hall"].Kind != NodeKindElite {
|
||||
t.Error("D10: wardens_hall (R3 region-guardian) should be an Elite")
|
||||
}
|
||||
for _, id := range []string{"abyss_portal.hush_corridor", "abyss_portal.seam_threshold"} {
|
||||
if g.Nodes[id].Kind != NodeKindTrap {
|
||||
t.Errorf("D10: %s should be a Trap", id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user