From d0df7f2fab6bf4cf5f1971770b09057fe917c180 Mon Sep 17 00:00:00 2001 From: jedarden Date: Tue, 26 May 2026 08:22:27 -0400 Subject: [PATCH] docs(plan): update ZoneShrinkStep from 2 to 1 to match implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plan previously specified ZoneShrinkStep=2, but the engine uses ZoneShrinkStep=1 (per commit 0577fcd). The value of 1 was found to improve combat density because it matches bot movement speed (1 tile/turn). A value of 2 caused the zone to shrink faster than bots could move, killing them before combat could occur. Updated zone parameters table and rationale in §3.7.1. Closes: bf-3mrj Co-Authored-By: Claude Opus 4.7 --- cmd/acb-index-builder/s3_test.go | 1 - docs/plan/plan.md | 8 +++++--- engine/types.go | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) 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