Commit graph

7 commits

Author SHA1 Message Date
jedarden
d5515e0bca feat(mechanics): reduce flee thresholds and derive aggression from kill rate
## Flee Threshold Changes
- Reduced flee threshold from AttackRadius2+4 to AttackRadius2 (no buffer)
- Modified bots: farmer, gatherer, siege
- Bots now only consider enemies in actual attack range, not preemptively
- Added outnumber logic: only flee when nearbyAllies < nearbyEnemies

## Behavior Vector Changes
- Derive aggression from actual kill rate (not self-reported)
- Formula: behaviorVec[0] = min(killRate, 1.0)
- Preserves existing economy value or defaults to 0.5
- Enhanced logging to show derived aggression value

## Rationale
Aggression must be economically necessary, not just rewarded.
Previous flee logic created a false safe option that discouraged combat.
Now bots only flee when actually outnumbered within combat range.

Related: bf-413 genesis bead tracking mechanics iteration
2026-06-17 03:51:15 -04:00
jedarden
87e2298a0f fix(replay): ensure events array is always populated in turns
- Remove omitempty tag from Events field in ReplayTurn
- Create a proper slice copy of gs.Events in RecordTurn
- Prevents null events array in JSON output
- Fixes parsing errors in analysis scripts

Closes: bf-6amz0, bf-3l7tf
2026-05-26 21:12:12 -04:00
jedarden
390ebba52a fix(bots): add zone edge margin to strategy bots for combat density
Strategy bots (GathererBot, RusherBot, SwarmBot) now move toward zone
center when within 2 tiles of the zone edge, not just when outside.
This anticipates the shrinking zone and prevents bots from moving
away from center due to energy-seeking logic.

Test results: 60% of matches now have combat deaths (3/5), up from 0%.
Zone margin of 2 tiles aligns with engine's built-in bot behavior.

Fixes gap identified in test replay where gatherer bot at distance 5
from center (zone radius 6) moved away from center and died from
zone_death instead of engaging in combat.

Closes: bf-2ham

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 08:42:44 -04:00
jedarden
4f1b26f6fe feat(bots): add zone bounds awareness to GathererBot, RusherBot, SwarmBot
- 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>
2026-05-26 08:03:30 -04:00
jedarden
ea04f4debb style: apply gofmt alignment fixes across codebase
Tab/space alignment consistency from running gofmt on all packages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 10:40:33 -04:00
jedarden
6899b2efa0 fix(bots): fix gatherer Go compile error - declare nearestEnergy in function scope
The nearestEnergy variable was referenced inside findNearestEnergy() but
only declared in the caller's scope. Declare it locally and use _ in caller.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 07:33:28 -04:00
jedarden
6f1b50384c Complete Phase 2: HTTP protocol and 6 strategy bots
Phase 2 Implementation:
- HMAC authentication for engine-to-bot communication
  - Request signing with timestamp anti-replay
  - Response signing for integrity verification
- HTTP bot client with timeout and crash detection
  - Per-turn 3s timeout, 10 consecutive failure crash threshold
  - Move validation (position ownership, direction validity)
- Integration tests for HTTP match execution
- 6 strategy bots in 6 languages:
  - RandomBot (Python): Random valid moves - rating floor
  - GathererBot (Go): Energy-focused with combat avoidance
  - RusherBot (Rust): Aggressive core rushing via BFS
  - GuardianBot (PHP): Defensive core protection
  - SwarmBot (TypeScript): Formation-based group combat
  - HunterBot (Java): Target isolation and hunting

All bots include:
- HMAC signature verification
- Dockerfile for containerization
- README documentation

All engine tests passing (32+ tests)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 07:00:38 -04:00