Add real server pool, race roster overhaul, and ship energy system
Server browsing & matchmaking: - HL2-style main menu (QUICK PLAY/SERVER SELECT/OPTIONS/PROFILE/QUIT) replaces the old CASUAL/RANKED tiles; RANKED removed end-to-end (menu, matchmaking-api's Mode.ranked queue path, MMR matching) until ranked is real. - New menu/server_select.gd lists real servers from the matchmaking API's GET /servers and connects directly, retiring the old unreachable menu/server_browser.gd. - Real game-server pool: NetworkManager.host_server() self-registers on boot and heartbeats every 8s with live player counts; API computes available/full status from player_count, and a background sweep marks any server offline once its heartbeat goes stale (catches a crashed server that never deregistered). - Server-select rows get a live UDP ping probe (query port = game port + 10000) instead of trusting stale DB numbers; post-connect HUD shows live RTT off ENet's own peer stats. Race roster overhaul: - Swapped Terran/Mechanos/Vorg for the pivoted roster — Apex Dynamics, Inner Sphere Navy, Outer Rim Collective — each with a 3-ship Fighter/Gunner/Tank lineup, art cropped from concept sheets with background removal + orientation fixes per sheet. - Live headcount + roster + "TEAM FULL" lock on the race-select screen, shared between the initial pre-spawn pick and the pause menu's live SELECT TEAM swap. - Bot personalities (bots/bot_personality.gd): aggression/caution/ accuracy/reaction/awareness traits rolled per bot instead of one fixed AI profile. HUD additions: - Player list (roster, teammates white/enemies yellow, bots flagged), kill feed, minimap, and explosion VFX on death. - Health and energy now render as bars (hud/stat_bar.gd) instead of text in the top-left HUD. Ship energy system: - Per-role max energy (Fighter 100 / Gunner 150 / Tank 250), 75 energy per shot, flat regen (100 per 2.5s), fully server-authoritative and piggybacked on the existing per-tick state broadcast alongside health. - New blue "mirrored" bar top-middle of the screen (hud/energy_bar.gd) whose fill drains from both edges toward the center instead of left-to-right. Ship handling tuning: - Turn rate reduced (4.0 -> 1.0 rad/s) so a quick tap no longer over-rotates; holding past 0.15s ramps to double speed (2.0 rad/s) for fast full turns, gated the same way damage already is so replay during reconciliation can't double-count the hold timer. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+17
-6
@@ -9,8 +9,8 @@ spacewar/ ← repo root
|
||||
├── autoload/
|
||||
│ └── game_config.gd ← autoload singleton (tuning values, player state, signals)
|
||||
├── menu/
|
||||
│ ├── main_menu.tscn/gd ← entry point / main scene
|
||||
│ ├── server_browser.tscn/gd ← server browser UI (built, not in active flow yet)
|
||||
│ ├── main_menu.tscn/gd ← entry point / main scene; HL2-style vertical nav
|
||||
│ ├── server_select.tscn/gd ← server list UI, backed by matchmaking-api's GET /servers
|
||||
│ ├── pause_menu.tscn/gd ← in-game pause overlay (ESC / Start button)
|
||||
│ └── team_select.tscn/gd ← race + ship selection overlay (shown on world load)
|
||||
├── ships/
|
||||
@@ -19,6 +19,8 @@ spacewar/ ← repo root
|
||||
│ └── bullet.tscn/gd ← projectile
|
||||
├── chat/
|
||||
│ └── chat_box.tscn/gd ← WoW-style chat overlay (T=all, Y=team), added to world.tscn
|
||||
├── hud/
|
||||
│ └── player_list.tscn/gd ← top-left player roster (white=team, yellow=enemy, "(b)"=bot), added to world.tscn
|
||||
├── bots/
|
||||
│ ├── bot_manager.gd ← autoload; server-only bot fill (join/leave reconciliation)
|
||||
│ ├── bot_ai.gd ← class_name BotAI; seek-nearest-enemy-and-shoot brain
|
||||
@@ -47,6 +49,11 @@ spacewar/ ← repo root
|
||||
MainMenu (Control) ← main_menu.gd builds all UI in _ready()
|
||||
```
|
||||
|
||||
### `menu/server_select.tscn` — server list
|
||||
```
|
||||
ServerSelect (Control) ← server_select.gd builds all UI in _ready(), fetches GET /servers
|
||||
```
|
||||
|
||||
### `world/world.tscn` — game world
|
||||
```
|
||||
World (Node2D) ← world.gd instances MAP_SCENE into MapContainer on _ready()
|
||||
@@ -56,7 +63,8 @@ World (Node2D) ← world.gd instances MAP_SCENE into MapContainer o
|
||||
│ └── HealthLabel
|
||||
├── PauseMenu (CanvasLayer, layer=10) ← menu/pause_menu.tscn
|
||||
├── TeamSelect (CanvasLayer, layer=20) ← menu/team_select.tscn; queue_free()s after selection
|
||||
└── ChatBox (CanvasLayer, layer=5) ← chat/chat_box.tscn
|
||||
├── ChatBox (CanvasLayer, layer=5) ← chat/chat_box.tscn
|
||||
└── PlayerList (CanvasLayer, layer=4) ← hud/player_list.tscn
|
||||
```
|
||||
|
||||
### `world/maps/map_01.tscn` — hand-painted map
|
||||
@@ -95,14 +103,17 @@ Player (CharacterBody2D) ← ship_movement.gd
|
||||
|
||||
```
|
||||
main_menu.tscn
|
||||
├── CASUAL → world.tscn
|
||||
├── QUICK PLAY → matchmaking queue (casual) → world.tscn
|
||||
│ ├── TeamSelect overlay: pick race (2 random of 3 offered)
|
||||
│ ├── TeamSelect overlay: pick ship
|
||||
│ └── Player spawns → game live
|
||||
└── RANKED → disabled (coming soon)
|
||||
├── SERVER SELECT → server_select.tscn → pick a server → world.tscn (same TeamSelect flow)
|
||||
├── OPTIONS → stub, coming soon
|
||||
├── PROFILE → callsign-edit overlay (also auto-opens from QUICK PLAY if no callsign is set)
|
||||
└── QUIT
|
||||
```
|
||||
|
||||
> **Note:** `server_browser.tscn` was built (Task 1) and is functional, but the current flow bypasses it — CASUAL goes directly to the world and TeamSelect handles name/race/ship. The server browser will be re-integrated when real multiplayer server listing is built. It still uses the old hardcoded-1280px layout style (see Display below) — not yet updated since it isn't reachable in the live flow.
|
||||
Ranked matchmaking is removed from the menu entirely (not just disabled) until it's real — see `CLAUDE.md` Current Tasks.
|
||||
|
||||
## Display
|
||||
|
||||
|
||||
Reference in New Issue
Block a user