When I was a kid, my brother and I really enjoyed playing Dungeon Siege. For the uninitiated, Dungeon Siege is a 2002 action based roleplaying PC game by Gas Powered games.

I recently built a budget gaming PC so I finally had a way to play Dungeon Siege again (it’s available pretty cheap on Steam and GOG).

Dungeon Siege has a co-operative multiplayer mode which my brother and I wanted to try.

The box for the game Dungeon Siege.

Tweaking the game settings

If you’re using the Steam version (potentially the GOG version too) you’ll get a message that says “Disabled” when clicking multiplayer from the main menu.

To get past this you’ll need to adjust the game to launch with the zonematch=true option - you can add these through the Steam properties. See this post for more information.

Steam properties for Dungeon Siege with the Zonematch=true option set.
Steam properties for Dungeon Siege with the Zonematch=true option set

The ZoneMatch option will start the game in the multiplayer screen by default, but if you want to play Single Player you can click “Back” to return to the main menu.

For any other issues you come across, there’s also this helpful GitHub repo with lots of tips for troubleshooting issues with the game.

Getting connected

Dungeon Siege multiplayer has local, internet and ‘ZoneMatch’ modes.

The ZoneMatch, Internet and Network options in the Dungeon Siege multiplayer menu.
The Dungeon Siege multiplayer menu

I believe ‘ZoneMatch’ is the now shut down matchmaking service - so unfortunately that’s no use to us.

The local mode works great - while on the same home network, one computer hosted the game and it showed up for the other one to join. However, the problem is that my brother and I live in different cities so need to connect over the internet.

The internet mode is pretty simple - with no automatic matchmaking you’ll need to enter the IP address of the game server that you want to connect to.

I tried to get the internet mode working with some portforwarding in my router but I didn’t have any luck. Maybe I configured something wrong, maybe my ISP has something against Dungeon Siege - who knows.

Either way, exposing this 21 year old game to the wild internet didn’t seem like a good idea.

Introducing Tailscale

The Tailscale logo.

I haven’t written about it yet, but I use a free Cloudflare tunnel to access services on my NAS when I’m away from home. I run this in a Docker container on my NAS, but a few weeks ago I managed to accidently restart the container while connected remotely and it didn’t come back on it’s own!

So long story short, I wanted another way to access my network while away from home in addition to Cloudflare tunnel. I went with Tailscale which is a free service VPN service (with paid options available) which creates a virtual network which connects your devices to each other. Tailscale is based on Wiregaurd VPN but they take care of all the hard stuff - you just need to install their apps on your devices and optionally setup some access rules.

With Tailscale I can access my NAS from any of my devices using the NAS’s Tailscale IP address. I can also use my NAS as an exit node, letting me tunnel my internet traffic through my home network or to access other devices which don’t run Tailscale - like my IP camera or router.

Gaming through Tailscale

Gaming through Tailscale is really not anything new - it seems like it’s already pretty popular for Minecraft servers. I installed Tailscale on my gaming PC then shared an invite link to my brother.

With a sharing link, my brother setup his own Tailnet and setup Tailscale on his computer. By default, if you share a device, the other person can initiate connections to your device but you can’t initiate connections to theirs. I believe this can be changed in the ACLs, but since I was using my machine as the server he only needed to connect to my PC.

I hosted a Dungeon Siege game through the “Internet” mode and my brother typed in my gaming PC’s Tailscale IP address. It all worked just like we were local - amazing!

Why couldn’t we use the “Local” network mode? I suspect this is because Tailscale doesn’t support multi-cast so the “Local” discovery feature couldn’t send out a message to ask for other servers.

Retaining our progress

Dungeon Siege’s multiplayer let’s you spawn into the single player world, known as the Kingdom of Ehb.

The map of Ehb, showing allt he prominent locations in the game. Wesrin Cross is between Stonebridge and Glitterdelve Mine.
The map of Ehb (source)

Unlike in the single player game, you can’t save in multi-player. Your characters (and their items and levels) will all be saved automatically, but it won’t remember what you’ve done or the enemy’s you’ve killed. Instead, based on your level you can spawn into one of the main areas of your choice when joining the game.

This is generally not a big issue, but it can be kinda annoying. For example, you can spawn in Stonebridge but not Glitterdelve. Stonebridge and Glitterdelve are pretty close together but to unlock the damaged gate between them you need to go through spider infested Wesrin Cross.

If we get part way through Glitterdelve Mine but wanted to finish up for the night, then next time we’d need to go all the way through Wesrin Cross and re-do our progress on the mine again.

Setting up a virtual machine as a game server

A virtual machine (VM) is a virtual instance of a computer that you run within your physical computer. You can pause running VMs (storing the contents of the RAM to disk) and boot them back up as if nothing happened.

My idea was to host the game on a Windows virtual machine -

  • The game server VM would host the game, leaving a character safely standing at an inn in a nearby city.
  • My brother and I would connect to the game server VM and play the game as normal.
  • When we finish playing for the night we disconnect from the server and freeze the VM.
  • When we come back, we unfreeze the game server, spawn at the nearest spawn point and run to where we left off (with the world exactly as it was previously).

To do this we need to setup a virtual machine which can play Dungeon Siege and which can run Tailscale. I decided I’d run Windows 10 as this is the minimum operating system for Tailscale and it means we can stay up to date with the latest security patches.

Choosing a hypervisor

I considered a few different hypervisor options:

  • HyperV is hypervisor built into Windows, but unfortunately unless you can pass through your GPU (which I believe requires a more modern GPU than my GTX1070) it doesn’t support 3D acceleration so can’t play the game.
  • VirtualBox is a popular open source hypervisor available for many different operating systems.
    • VirtualBox lets you run VMs in the background (perfect for server scenarios like this)
    • VirtualBox supports snapshotting (essentially so you can so you can take a historical backup of the VM to restore to later) in addition to the standard ‘pause’ VM feature of hypervisors.
    • VirtualBox can play Dungeon Siege, however I found even the game menus run at such a frustratingly slow framerate that it didn’t seem worth investigating this option too much further.
  • VMware Workstation Player is a free version of VMWare’s Workstation Pro product.
    • Player works pretty well with Dungeon Siege - almost to the point where I’d consider playing the game directly through the VM!.
    • Unfortunately, Player doesn’t support snapshotting or running the server in the background. These are nice to have features, but I probably don’t need snapshotting and I can just minimise the window instead of running it in the background.

I decided to use VMware Workstation Player.

Setting up the VM

  1. Setup the VM using a Windows 10 ISO and the install wizard. Remember that nowadays Windows will work fine without a product key short of a few cosmetic things which aren’t an issue for the VM.

  2. Allocate sufficient system resources.

    With the bloat of Windows 10 running, I needed to assign more RAM and CPU resources than I assumed I would.

    I gave the VM 6 processor cores and 8GB RAM, but I think 3 cores and 4GB RAM would be fine.

    (To be honest I’m a bit confused about the processor cores, I only have 4 cores/8 threads but the core options went a lot higher so it might be some sort of virtual core?)

    VMWare Player Virtual Machine Settings page showing 8GB RAM and 6 processor cores, 50GB hard disk size.
    The VM setting I used in VMWare Player
  3. Install Tailscale and share the server to the other person.

  4. Install Dungeon Siege.

    My brother and I are using the Steam version - I found that the retail version (i.e.: launch day CDs) of the game and the Steam version didn’t seem to be compatible with each other in multiplayer, so you might want to stick with the same version as your ‘client’ machines.

    I installed Steam on the server VM and switched it to ‘offline’ mode before starting the game (so that it wouldn’t complain that I’m trying to open the game a second time on my gaming PC).

    Don’t forget the zonematch=true trick from above to get into multiplayer.

    A VMWare Player window running the Game Server instance with Dungeon Siege open. Rory is the server's player, hanging out in Stonebridge.
    The servers player, Rory, hanging out in Stonebridge
  5. Run Dungeon Siege and host an internet game.

    Ensure the “Allow players to join game in progress” and “Allow players to choose start locations” options are ticked.

  6. Alt-tab to the desktop in the VM.

    I had some issues with the game crashing if I left it open as the active window, but I’ve found it works more reliably when I alt-tab to the desktop. The game server continues to run even with the game in the background.

    A VMWare Player window running the Game Server instance with Steam open.
    A VMWare Player window running the Game Server instance with Steam open
  7. Connect to the Tailscale address from your other computers and play the game.

  8. When you’re finished playing, disconnect both players from the server and freeze the server VM. Boot it back up again when you’re ready to play again.

So far, this has worked well for us - we can play co-operatively over the internet and have a way to save our world between sessions.

Enjoy your time in the Kingdom of Ehb!

My rules for using Time Machine on Synology

Published on September 17, 2023

Escaping Google Workspace

Published on August 13, 2022