mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 00:52:40 +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:
@@ -106,8 +106,8 @@ func TestUnderdarkGraph_AllArmsReachBoss(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestUnderdarkGraph_TrapAnchor verifies D1-d added the missing Trap
|
||||
// node. Original G8i graph had elite/boss/harvest but no trap.
|
||||
// TestUnderdarkGraph_TrapAnchor verifies D1-d added the missing R1 Trap
|
||||
// (collapsed_arch) and D10 added the illithid-arm Trap (silenced_chamber).
|
||||
func TestUnderdarkGraph_TrapAnchor(t *testing.T) {
|
||||
g := zoneUnderdarkGraph()
|
||||
var trapCount int
|
||||
@@ -116,7 +116,30 @@ func TestUnderdarkGraph_TrapAnchor(t *testing.T) {
|
||||
trapCount++
|
||||
}
|
||||
}
|
||||
if trapCount != 1 {
|
||||
t.Errorf("trap nodes = %d, want 1", trapCount)
|
||||
if trapCount != 2 {
|
||||
t.Errorf("trap nodes = %d, want 2 (collapsed_arch + D10 silenced_chamber)", trapCount)
|
||||
}
|
||||
if g.Nodes["underdark.silenced_chamber"].Kind != NodeKindTrap {
|
||||
t.Error("D10: silenced_chamber (illithid arm) should be a Trap")
|
||||
}
|
||||
}
|
||||
|
||||
// TestUnderdarkGraph_EliteAnchors verifies the per-arm elites (drow
|
||||
// Captain, illithid Mind Flayer) plus the D10 region-guardian elite at
|
||||
// the drow→throne boundary (drow_gate), so the drow arm carries two
|
||||
// elites while the chasm spur stays anchor-light.
|
||||
func TestUnderdarkGraph_EliteAnchors(t *testing.T) {
|
||||
g := zoneUnderdarkGraph()
|
||||
var eliteCount int
|
||||
for _, n := range g.Nodes {
|
||||
if n.Kind == NodeKindElite {
|
||||
eliteCount++
|
||||
}
|
||||
}
|
||||
if eliteCount != 3 {
|
||||
t.Errorf("elite nodes = %d, want 3 (drow_captain + mind_flayer + D10 drow_gate)", eliteCount)
|
||||
}
|
||||
if g.Nodes["underdark.drow_gate"].Kind != NodeKindElite {
|
||||
t.Error("D10: drow_gate (R2→R4 boundary) should be a region-guardian Elite")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user