Gameplay · 5 minutes
Joining a Public Game
No patches, no mods on the client side — stock DevilutionX speaks to a DevXH gate natively. Here's the join from the player's side, what you'll see, and how the server's idle companion works.
What you need
- Stock DevilutionX 1.5.x — the normal release from diasurgical/devilutionX. DevXH uses the same multiplayer protocol, so no client patch is required.
- Your own game MPQs installed as usual.
- The server's IP address (TCP/IP games) or membership in its ZeroTier network (ZeroTier games).
Joining over TCP/IP
Open the multiplayer menu
Launch DevilutionX → Multiplayer → TCP/IP. In the
address field, enter the server's IP — the one your host gave you (e.g.
203.0.113.7).
Pick the game, create your hero
The gate's game appears in the list by its advertised name (e.g. server-4821
or a custom name like My First Gate). Select it. If the host set a password,
you'll be prompted — ask them for it. Choose a hero as usual and enter the world.
Walk into town
During the handover you may see a brief sync dialog (the world is being copied to you —
usually under a second on a decent VPS). Then you're in town, and the idle host — named
Server by default — will be standing by the fire, keeping the world alive.
The 4-slot truth
Every game seats four players total, and the gate itself occupies one
slot as the idle host. That leaves three human slots per game. Hosting
multiple groups? Run multiple gates with different --port and
--name values.
Joining over ZeroTier
For ZeroTier realms there's no IP entry at all: join the realm's network first (see ZeroTier Private Realms), then in DevilutionX choose Multiplayer → ZeroTier and pick the game from the list. Everything else is identical.
Game rules of the house
- Difficulty is set by the gate. The host chooses normal, nightmare, or
hell (
--difficulty) — clients can't change it, same as any hosted game. - The game name is the door. Renamed games (
--name) show exactly that name in the lobby list. - Save data stays yours. Your hero progress saves to your own machine, as in any DevilutionX multiplayer session. The gate's idle hero persists on the server.
Bonus: the idle bot
The same devilutionx-server binary can join another game instead of
hosting — an automated companion, mule, or test client:
$ ./devilutionx-server --join 192.168.1.10 \
--hero-name Loyal --hero-class rogue \
--data-dir ./assets --save-dir ./saves --config-dir ./cfg
The bot connects, completes the sync, and idles in town — exactly like a hosting gate's companion, just pointed at someone else's game. It works for TCP/IP addresses and ZeroTier game names alike. A version mismatch is rejected by the protocol itself, so a wrong client build can't sneak in.
Troubleshooting
| Symptom | Fix |
|---|---|
| Game list is empty | Wrong IP, or the server is down. Ping it / ask the host for journalctl -u devxh. |
| Connection times out | Firewall: TCP 6112 must be reachable (or the ZeroTier realm joined & authorized). |
| Password prompt you can't pass | The gate is private (--password). Get the password from the operator. |
| Sync never completes | The join retries automatically; if it keeps failing, both client and server must be compatible 1.5.x builds. |
| Heavy lag | Lockstep simulation: everyone's RTT to the server matters. Pick the nearest gate. |
That's the whole ritual — the gate does the rest. May your drops be heavy and your deaths rare.