All Guides·FAQ

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.

Everyone Stock client TCP/IP & ZeroTier

What you need

Joining over TCP/IP

1

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).

2

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.

3

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

Bonus: the idle bot

The same devilutionx-server binary can join another game instead of hosting — an automated companion, mule, or test client:

shell
$ ./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

SymptomFix
Game list is emptyWrong IP, or the server is down. Ping it / ask the host for journalctl -u devxh.
Connection times outFirewall: TCP 6112 must be reachable (or the ZeroTier realm joined & authorized).
Password prompt you can't passThe gate is private (--password). Get the password from the operator.
Sync never completesThe join retries automatically; if it keeps failing, both client and server must be compatible 1.5.x builds.
Heavy lagLockstep 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.