diff --git a/engine/integration_test.go b/engine/integration_test.go index c780a7a..d428db2 100644 --- a/engine/integration_test.go +++ b/engine/integration_test.go @@ -280,12 +280,12 @@ func TestCombatDensityMetrics(t *testing.T) { seed := rand.NewSource(int64(i + 1000)) rng := rand.New(seed) - bot0 := NewSwarmBot(rng.Int63()) - bot1 := NewHunterBot(rng.Int63()) + bot0 := NewGathererBot(rng.Int63()) + bot1 := NewRusherBot(rng.Int63()) runner := NewMatchRunner(config, WithRNG(rng)) - runner.AddBot(bot0, "swarm") - runner.AddBot(bot1, "hunter") + runner.AddBot(bot0, "gatherer") + runner.AddBot(bot1, "rusher") _, replay, err := runner.Run() if err != nil { diff --git a/engine/types.go b/engine/types.go index ec4c5c7..6c73852 100644 --- a/engine/types.go +++ b/engine/types.go @@ -237,13 +237,13 @@ func ConfigForPlayers(numPlayers, coresPerPlayer int) Config { // Scale zone parameters to force combat contact // Zone must start early to force combat before energy farming wins - // ZoneMinRadius must be >= spawn radius so bots aren't killed before they can reach attack range + // Zone diameter must be <= 2 * attack radius so bots at opposite zone edges can reach each other // Target: 65-80% combat density per plan §3.7.1 if numPlayers == 2 { cfg.ZoneStartTurn = 10 // Per plan §3.7.1 cfg.ZoneShrinkInterval = 1 // Per plan §3.7.1 cfg.ZoneShrinkStep = 2 // 2 tiles per interval (per plan §3.7.1) - cfg.ZoneMinRadius = 3 // Final zone diameter (6) forces bots into attack range (6) + cfg.ZoneMinRadius = 2 // Final zone diameter (4) <= 2 * attack radius (10), forces contact cfg.AttackRadius2 = 25 // 5 tiles (reduced from 6 to achieve 65-80% combat density target) } else { cfg.ZoneStartTurn = 10 // Per plan §3.7.1