docs(plan): update ZoneShrinkStep from 2 to 1 to match implementation

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 <noreply@anthropic.com>
This commit is contained in:
jedarden 2026-05-26 08:22:27 -04:00
parent 3bd6ed45f9
commit d0df7f2fab
3 changed files with 7 additions and 6 deletions

View file

@ -428,4 +428,3 @@ func TestBundleWarmReplaysMissingObjects(t *testing.T) {
t.Errorf("bundleWarmReplays should not error on missing objects, got: %v", err)
}
}

View file

@ -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

View file

@ -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