Files
DungeonsOfKharadum/MULTIPLAYER_WEBRTC_GUIDE.md

4.1 KiB

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:

# 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:

    # 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