Files
anekdotin 5fe7c01052 Remove Apex Dynamics faction, retune bullet speed/size
Drop Apex Dynamics from the playable roster (2 races now: Inner Sphere
Navy, Outer Rim Collective) to simplify the 2D art pipeline; World's
race-offer logic just shuffles both remaining races instead of picking
2 of N. Also fix bullets using a constant muzzle velocity instead of
adding the shooter's own velocity, and shrink the bullet hitbox/sprite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 21:41:35 -04:00

2.0 KiB

Bots — Casual Mode Fill

Rules

  • Each casual match fields both races (order presented is randomized)
  • Bots fill empty slots until the match reaches 7v7 (14 total)
  • Once 7v7 is reached, no more bots are added — additional human players replace bots as they join
  • Bots are removed when real players join their team slot

Why 7v7 Minimum

  • Ensures the match feels active even at low population
  • Avoids the ghost-town feeling of a 25v25 map with 3 players
  • Bots are not added beyond 7v7 so human players always dominate strategy

Implementation Notes

  • bots/bot_manager.gd (server-authoritative autoload) owns bot lifecycle. All spawn/despawn decisions funnel through one function, _reconcile_race(race_id), triggered by PlayerRegistry's existing loadout_updated/player_removed signals (join/leave) and World.decide_offered_races() (match start) — no polling. This is the one place to change for future tweaks (fill curve, per-map team size, etc.)
  • Bots get negative peer_ids (-1, -2, ...), assigned by BotManager. This lets them reuse every existing networked-ship system for free — spawning (MultiplayerSpawner), loadout replication/backfill (PlayerRegistry), position/health/visibility sync, bullet damage attribution — none of which cares whether a peer_id came from ENet or from BotManager
  • Bots always fly the race's fighter/Interceptor (race.ships[0] in team_select.gd's RACES data)
  • AI (bots/bot_ai.gd, class_name BotAI): thrust toward nearest living enemy, turn to face it, shoot when roughly aimed and in range — simplified seek-and-shoot, intentionally easy (casual bots are filler, not a challenge). Fully isolated from ship_movement.gd's networking code so future difficulty/behavior tuning only ever touches this one file
  • Bot names: bots/bot_names.gd, a flat pool of procedural callsigns
  • Tunables live in GameConfig (bot_min_team_size, bot_engage_range, bot_stop_distance, bot_aim_tolerance_deg)