e1410c234a
Checkpoint of the existing flat file layout prior to restructuring into autoload/, menu/, ships/, world/, and assets/ folders. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Tech Stack
Engine & Language
- Engine: Godot 4.7 (Forward Plus renderer)
- Language: GDScript
- Project path:
/mnt/code/spacewar/spacewar/(inner folder is the Godot project root) - Platform target: Linux (Steam Deck native, 1280×800), Windows PC
- Art style: Pixel art (placeholder sprites in use currently)
See structure.md for the full file tree and scene graph.
Multiplayer Architecture (Planned)
[Client] ──── [Matchmaking Server] ──── [Dedicated Game Server]
│
[Backend API]
(queue, ranks, accounts)
Authoritative Server Model
- Dedicated game servers run the authoritative simulation (not player-hosted)
- Clients send inputs (movement, fire, ability) — server validates and broadcasts results
- No client-side cheating possible on critical state (position, HP, kills)
- Player position simulated server-side; clients predict locally and reconcile
Godot Networking Layer
# Server: move a player
@rpc("authority", "call_local", "reliable")
func set_position(new_pos: Vector2) -> void:
position = new_pos
# Client: send input to server
@rpc("any_peer", "call_remote", "unreliable")
func send_input(dir: Vector2, firing: bool) -> void:
pass
- Transport: ENet (UDP, built into Godot) for low-latency game data
- Reliable channel: critical state (HP, death, respawn)
- Unreliable channel: high-frequency position/velocity updates
Client-Side Prediction & Lag Compensation
- Client predicts own movement locally (feels instant)
- Server confirms or corrects (reconciliation)
- Other players interpolated between last two known positions
- Lag compensation: server rewinds state slightly to validate hitscan shots
Matchmaking Backend
| Component | Tech |
|---|---|
| API Server | Go or Node.js |
| Queue / State | Redis |
| Database (accounts, ranks) | PostgreSQL |
| Hosting | VPS (Hetzner / DigitalOcean) or self-hosted |
Flow:
- Client sends "find match" with MMR + mode
- Backend queues player, finds lobby within MMR range
- Lobby full → backend assigns a game server
- Backend sends client the server IP + session token
- Client connects directly to game server
Steam Integration
- GodotSteam plugin (open source, wraps Steamworks SDK)
- Handles: Steam auth, VAC anti-cheat, Steam lobbies, achievements
- No separate account system needed at launch
Networking Checklist
- Godot ENet server/client setup
- Player input RPC structure
- Position sync with interpolation
- Ship class registration per peer
- Server-authoritative health/death
- Matchmaking API (queue + lobby assignment)
- GodotSteam auth + VAC
- Lag compensation (basic rewind)