# WebRTC Multiplayer Guide ## How WebRTC Multiplayer Works ### Architecture Your game now supports two networking modes: 1. **ENet (Native builds)**: Windows/Linux/Mac players connect via IP:Port 2. **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) 1. **Host creates a game**: - Clicks "Host Game" - Game generates a 6-character **Room Code** (e.g., "ABC123") - Share this code with friends 2. **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: ```gdscript # 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 1. **Export HTML5**: - Project → Export → Add → HTML5 (WebAssembly) - Export the project 2. **Host on Web Server**: ```bash # Your files python -m http.server 8000 ``` 3. **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 1. PC (ENet) ←/→ Browser (WebRTC) can't play together 2. Need to share room codes manually (no lobby browser yet) 3. No reconnection if disconnected (must rejoin) ## Next Steps To improve multiplayer: 1. Add lobby browser (see active rooms) 2. Add friend codes/invites 3. Add voice chat (WebRTC supports it!) 4. Add dedicated server for PC↔Browser bridge