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

39 lines
2.0 KiB
Markdown

# 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`)