Claude-Code-Game-Studios/docs/engine-reference/godot/modules/networking.md
Donchitos ad540fe75d Game Studio Agent Architecture — complete setup (Phases 1-7)
48 coordinated Claude Code subagents for indie game development:
- 3 leadership agents (creative-director, technical-director, producer)
- 10 department leads (game-designer, lead-programmer, art-director, etc.)
- 23 specialist agents (gameplay, engine, AI, networking, UI, tools, etc.)
- 12 engine-specific agents (Godot, Unity, Unreal with sub-specialists)

Infrastructure:
- 34 skills (slash commands) for workflows, reviews, and team orchestration
- 8 hooks for commit validation, asset checks, session management
- 11 path-scoped rules enforcing domain-specific standards
- 28 templates for design docs, reports, and collaborative protocols

Key features:
- User-driven collaboration protocol (Question → Options → Decision → Draft → Approval)
- Engine version awareness with knowledge-gap detection (Godot 4.6 pinned)
- Phase gate system for development milestone validation
- CLAUDE.md kept under 80 lines with extracted doc imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 21:04:24 +11:00

76 lines
2.3 KiB
Markdown

# Godot Networking — Quick Reference
Last verified: 2026-02-12 | Engine: Godot 4.6
## What Changed Since ~4.3 (LLM Cutoff)
### 4.6 Changes
- **Networking section in breaking changes**: See the official migration guide for
specifics at the 4.5→4.6 level
### 4.5 Changes
- **No major networking API breaks** — core multiplayer API remains stable
## Current API Patterns
### High-Level Multiplayer
```gdscript
# Server
func host_game(port: int = 9999) -> void:
var peer := ENetMultiplayerPeer.new()
peer.create_server(port)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
# Client
func join_game(address: String, port: int = 9999) -> void:
var peer := ENetMultiplayerPeer.new()
peer.create_client(address, port)
multiplayer.multiplayer_peer = peer
```
### RPCs
```gdscript
# Server-authoritative pattern
@rpc("any_peer", "call_local", "reliable")
func request_action(action_data: Dictionary) -> void:
if not multiplayer.is_server():
return
# Validate on server, then broadcast
_execute_action.rpc(action_data)
@rpc("authority", "call_local", "reliable")
func _execute_action(action_data: Dictionary) -> void:
# All peers execute the validated action
pass
```
### MultiplayerSpawner and MultiplayerSynchronizer
```gdscript
# Use MultiplayerSpawner for automatic node replication
# Use MultiplayerSynchronizer for property synchronization
# MultiplayerSynchronizer setup:
# 1. Add as child of the node to sync
# 2. Configure replication properties in editor
# 3. Set visibility filters for relevancy
```
### SceneMultiplayer Configuration
```gdscript
func _ready() -> void:
var scene_mp := multiplayer as SceneMultiplayer
scene_mp.auth_callback = _authenticate_peer
scene_mp.server_relay = false # Direct peer connections
func _authenticate_peer(id: int, data: PackedByteArray) -> void:
# Custom authentication logic
pass
```
## Common Mistakes
- Not using `"any_peer"` for client-to-server RPCs (defaults to authority only)
- Trusting client data without server-side validation
- Using `"unreliable"` for game state changes (use for position updates only)
- Not setting multiplayer authority (`set_multiplayer_authority()`) on spawned nodes