- Add ZoneBounds type to bot state structs (Go, Rust, TypeScript)
- GathererBot now moves toward zone center when outside or near edge
- Bots can see zone bounds in fog-filtered state (per plan §3.7.1)
- Fixes gofmt formatting in types.go and bot_strategies.go
This improves bot survival and combat behavior by making them
zone-aware, preventing unnecessary zone deaths when the safe area
shrinks.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Previously both bots avoided enemy positions during pathfinding,
preventing active engagement. Now both bots get bonuses for moving
toward enemies, encouraging them to enter attack range intentionally.
SwarmBot (bots/swarm/src/strategy.ts):
- Added bonus for getting closer to enemies (score += (currentDist - newDist) * 5)
- Existing bonus for being in attack range (score += 50) now more achievable
RusherBot (bots/rusher/src/strategy.rs):
- Added fallback to move toward nearest enemy when no path to target exists
- Prioritizes engagement over random movement when blocked
Impact: Combat now happens consistently across all matches. Test matches show
4 combat deaths in 2-12 turn matches (vs 0-2 deaths in 3-4 turns before).
Closes: bf-1qq8
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
All 10 non-gatherer bots included timestamp in the request verification
signing string but the engine (auth.go SignRequest) does not include
timestamp. Every incoming turn request failed 401 verification, bots
crashed after 10 turns, and all matches ended in stalemate.
The engine documentation in auth.go is also misleading (old comment
mentioned timestamp in signing string) but the actual implementation
never included it. Fixed all language implementations to match.
Affected: random (py), swarm (ts), hunter (java), guardian (php),
rusher (rs), assassin (rs), phalanx (rs), opportunist (go),
farmer (go), scout (py), raider (java)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>