diff --git a/cmd/acb-index-builder/s3_test.go b/cmd/acb-index-builder/s3_test.go index b43f896..a6bf244 100644 --- a/cmd/acb-index-builder/s3_test.go +++ b/cmd/acb-index-builder/s3_test.go @@ -428,4 +428,3 @@ func TestBundleWarmReplaysMissingObjects(t *testing.T) { t.Errorf("bundleWarmReplays should not error on missing objects, got: %v", err) } } - diff --git a/docs/plan/plan.md b/docs/plan/plan.md index e868b1c..e4feb55 100644 --- a/docs/plan/plan.md +++ b/docs/plan/plan.md @@ -494,7 +494,7 @@ rather than pure energy farming. Zone parameters are tuned per player count: |-----------|----------|-----------|-------------| | ZoneStartTurn | 10 | 10 | Turn when zone begins shrinking | | ZoneShrinkInterval | 1 | 1 | Turns between shrink steps | -| ZoneShrinkStep | 2 | 2 | Tiles to shrink each step | +| ZoneShrinkStep | 1 | 1 | Tiles to shrink each step | | ZoneMinRadius | 2 | 1 | Minimum zone radius (stops shrinking) | **Design rationale:** @@ -503,8 +503,10 @@ rather than pure energy farming. Zone parameters are tuned per player count: - **ZoneShrinkInterval = 1**: Shrinks every turn creates steady, predictable pressure. Faster than the original 2-turn interval to ensure bots reach contact range before the match is decided by energy alone. -- **ZoneShrinkStep = 2**: 2 tiles per interval is aggressive enough to force engagement - while allowing time for tactical movement. +- **ZoneShrinkStep = 1**: Zone shrinks at the same rate as bot movement (1 tile/turn). + A value of 2 caused the zone to shrink faster than bots could move, killing them + before combat could occur. The value of 1 ensures bots have time to reach each other + and engage in combat while still being forced into contact range. - **ZoneMinRadius = 2 (2-player)**: Final zone diameter (4 tiles) ≤ 2 × attack radius (10 tiles), ensuring bots at opposite zone edges are within attack range (5 tiles). - **ZoneMinRadius = 1 (3+ player)**: Final zone diameter (2 tiles) is smaller than attack diff --git a/engine/types.go b/engine/types.go index 08e4898..572976d 100644 --- a/engine/types.go +++ b/engine/types.go @@ -240,13 +240,13 @@ func ConfigForPlayers(numPlayers, coresPerPlayer int) Config { // 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 // Start early to force combat before random bots spread out + cfg.ZoneStartTurn = 10 // Start early to force combat before random bots spread out cfg.ZoneShrinkInterval = 1 // Per plan §3.7.1 cfg.ZoneShrinkStep = 1 // Zone shrinks at same rate as bot movement (1 tile/turn) cfg.ZoneMinRadius = 2 // Per plan §3.7.1: 2-player min radius cfg.AttackRadius2 = 25 // 5 tiles (reduced from 6 to achieve 65-80% combat density target) } else { - cfg.ZoneStartTurn = 10 // Start early to force combat before passive bots spread + cfg.ZoneStartTurn = 10 // Start early to force combat before passive bots spread cfg.ZoneShrinkInterval = 1 // Per plan §3.7.1 cfg.ZoneShrinkStep = 1 // Zone shrinks at same rate as bot movement (1 tile/turn) cfg.ZoneMinRadius = 1 // Zone diameter (2) < attack radius (3.5), forces contact