4.1 KiB
WebRTC Multiplayer Guide
How WebRTC Multiplayer Works
Architecture
Your game now supports two networking modes:
- ENet (Native builds): Windows/Linux/Mac players connect via IP:Port
- WebRTC (Web builds): Browser players connect via Room IDs
Important: ENet and WebRTC are NOT compatible with each other!
- PC (ENet) players can only play with other PC (ENet) players
- Browser (WebRTC) players can only play with other Browser (WebRTC) players
Your Server Setup
- Matchbox Signaling:
ws://ruinborn.thefirstboss.com:3536 - STUN Server:
stun:ruinborn.thefirstboss.com:3578
How Players Find Each Other
WebRTC/Browser Mode (Room-Based)
-
Host creates a game:
- Clicks "Host Game"
- Game generates a 6-character Room Code (e.g., "ABC123")
- Share this code with friends
-
Players join:
- Enter the Room Code in the "Join Game" field
- Click "Join"
- Matchbox connects all players in the same room
Example Flow
Host (Browser):
- Clicks "Host"
- Gets Room Code: "XYZ789"
- Tells friend: "Join room XYZ789"
Player (Browser):
- Types "XYZ789" in join field
- Clicks "Join"
- Connected!
Testing Scenarios
Scenario 1: Browser to Browser (WebRTC)
✅ Works!
1. Open game in Chrome: host.com/game
2. Host creates game → Gets code "ABC123"
3. Open game in Firefox: host.com/game
4. Join with code "ABC123"
5. Both connected via WebRTC!
Scenario 2: PC to Browser (Mixed)
❌ Doesn't Work!
PC (ENet) ←→ Browser (WebRTC) = INCOMPATIBLE
Scenario 3: Phone Browser to PC Browser (WebRTC)
✅ Works!
1. PC Browser hosts → code "XYZ456"
2. Phone browser joins "XYZ456"
3. Connected via WebRTC!
Scenario 4: PC to PC (ENet)
✅ Works!
1. PC1 hosts → Shows IP: 192.168.1.100
2. PC2 joins → Enters "192.168.1.100"
3. Connected via ENet!
Can PC Host and Browser Join?
Short Answer: No, not with the current setup.
Long Answer: ENet (PC) and WebRTC (Browser) use completely different protocols. They can't talk to each other directly.
Solution: If you want cross-platform play, you have two options:
Option A: Make PC Use WebRTC Too
Update PC builds to also use WebRTC when you want to play with browser users:
# Force WebRTC mode even on native builds
use_webrtc = true # in network_manager.gd
Then PC and Browser can use the same room codes!
Option B: Use a Dedicated Server
Run a dedicated server that:
- Accepts both ENet and WebRTC connections
- Bridges between them
This is more complex but allows true cross-platform play.
Room Codes
Room codes are automatically generated as 6-character codes:
- Easy to share (just text it!)
- No IP addresses to remember
- Works through NATs/firewalls
Example codes: ABC123, XYZ789, PLAYER, GAME42
Exporting for Web
-
Export HTML5:
- Project → Export → Add → HTML5 (WebAssembly)
- Export the project
-
Host on Web Server:
# Your files python -m http.server 8000 -
Players Access:
http://yoursite.com/game- Works on PC browsers, phone browsers, tablets!
Security Notes
- Room codes are NOT secure (anyone with code can join)
- For production, add:
- Password-protected rooms
- Room capacity limits
- Ban/kick functionality
- Room expiration
Troubleshooting
"Connection failed" in browser:
- Check matchbox server is running:
netstat -tulpn | grep 3536 - Check firewall allows port 3536
- Check browser console for errors
"Can't see other players":
- Make sure both players entered the SAME room code
- Check both are using browser builds (not mixing PC/browser)
"Stuck on connecting":
- STUN server must be reachable
- Check port 3578 is open
- Try different browsers
Current Limitations
- PC (ENet) ←/→ Browser (WebRTC) can't play together
- Need to share room codes manually (no lobby browser yet)
- No reconnection if disconnected (must rejoin)
Next Steps
To improve multiplayer:
- Add lobby browser (see active rooms)
- Add friend codes/invites
- Add voice chat (WebRTC supports it!)
- Add dedicated server for PC↔Browser bridge