ParaWorld, as many other games, lost part of it’s online multiplayer functionality when GameSpy shut down in 2014. You can still play the game against other players via the internet, but you need to find opponents outside of the game. One of the players also has to (temporarily) act as the server and forward ports in their firewall to make their server accessible to everyone else. Having to mess with firewall/router settings each time you want to play a quick match against friends is far from ideal. So, we are going to address both of these issues by setting up a dedicated server that players can easily find via the in-game server browser.
Before we start
Here is an overview of everything you will need in order to set up the server:
- A dedicated server with a public IP address (that you have admin rights on)
- A working copy of the game (make sure to also install any mods you want the server to run)
- A second CD key for the game (if you want to be able to play on the server yourself)
We will set the server up on Ubuntu Server 20.04 using wine. You are free to use any other Linux distribution or even Windows, but you will have to adapt the steps accordingly. If you encounter any issues during the setup, join the ParaWorld Tavern Discord server. We will be able to help you there.
This guide assumes that you have already applied the fix to make the game work on recent versions of Windows. If you currently cannot launch and play the game without issues, follow the guide on how to apply the fix first.
Setting up the server
First, we need to prepare your existing game installation to work with OpenSpy. We then need to copy the game files and the game’s configuration file to the server. After copying everything over, we can switch to the server and install the tools we are going to need. Once that is all done, we need to trick the game to let us run a dedicated server which appears in the server list. And finally, we will want to make sure the server is automatically restarted after each round.
Step 1: Patch the game to use OpenSpy
In order to have the server listed on OpenSpy, we need to patch the game binaries. OpenSpy is an open-source replacement for GameSpy which provides all the same services. Replace your existing
PWServer.exe with the patched binaries as described in this guide. The guide also provides the steps required to make the game show dedicated servers in the in-game server browser.
Step 2: Copy the game files to the server
To make copying faster and easier, create a .zip archive of your game files. We will also need to copy the game’s configuration file, which can be found at:
C:\Users\[your_username]\AppData\Roaming\SpieleEntwicklungsKombinat\Paraworld\Settings.cfg. Copy the file to your desktop and use a text editor to apply the server CD key. One of the first lines in the file should read:
CDKey = '[...]'
Replace the CD key between the quotes with the one you will be using to host the server. Then save the file.
Now copy both the game files archive and the config file to the server. You can use tools like
scp if you are on a Linux machine or WinSCP on Windows to do this. Copy everything to the home directory of your privileged user for now.
Step 3: Install required tools
Let’s switch to the server. Since we will be using wine to run
PWServer.exe on Linux, we need install wine first. Specifically, the 32 bit version of wine.
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install wine32
We will also need to unpack the .zip archives, so install unzip as well.
sudo apt install unzip
Step 4: Set up the game on the server
Next, let’s set up a new user to run the game server. You will never need to log into the server directly as this user, so we can safely disable the login.
sudo adduser --disabled-login --gecos "" pwserver
With the new user created, we can unpack the game files to it’s home directory.
sudo mkdir /home/pwserver/paraworld
sudo unzip [game-files-zip-archive] -d /home/pwserver/paraworld
Since we unpacked the files as root, we need to now transfer ownership of the game files to the user we created.
sudo chown -R pwserver:pwserver /home/pwserver/paraworld
Double check your directory structure at this point. Simply list all the files in the directory.
ls -l /home/pwserver/paraworld
You should see the following folders, all owned by
Step 5: First start of the game server
With the game files in place, we are ready to start the game server once. This first start will cause wine and the game itself to create all the config directories they need. We will run the game as the
pwserver user, so let’s switch to it.
sudo su - pwserver
If you want to verify whether the switch worked, you can do so using the
whoami command. Once logged in as
pwserver, navigate to the paraworld directory and start
Paraworld.exe via wine.
wine bin/Paraworld.exe -dedicated
Let it run for 1-2 minutes. It will output quite a few of log messages during this first start, which are mostly caused by wine setting everything up. Once you don’t see any new log messages for a bit, stop the server by pressing
C. If the setup was completed successfully, you should not receive errors when you run:
stat "/home/pwserver/.wine/drive_c/users/pwserver/Application Data/SpieleEntwicklungsKombinat/Paraworld/Settings.cfg"
If you do get any errors, double check you completed all the previous steps and start the server again. Make sure to leave the server running for a bit before you try
Once you have verified the setup, return to the session with your privileged user. Still as
Step 6: Trick
ParaWorld.exe with a fake
By default, the game does not provide a way of running dedicated servers with proper GameSpy support. The game server will run fine and appear in the server list, but it reports randomly selected ports. Since we can’t know these ports ahead of time, the server will not be accessible on these ports (unless we have no firewall whatsoever). We also cannot start
PWServer.exe (the actual server executable) directly. It relies on being able to communicate with
Paraworld.exe and will exit if cannot contact it.
We can solve this by letting
Paraworld.exe start a fake
PWServer.exe and then starting the real
PWServer.exe manually with the arguments we need. So let’s do that.
First, rename the real
sudo mv /home/pwserver/paraworld/bin/PWServer.exe /home/pwserver/paraworld/bin/PWServerd.exe
Now we download the dummy executable and move it to the
bin directory as
sudo mv dummy-executable.exe /home/pwserver/paraworld/bin/PWServer.exe
We again added files to
/home/pwserver that belong to a different user, so we need to transfer ownership like we did before.
sudo chown -R pwserver:pwserver /home/pwserver/paraworld
Step 7: Apply the configuration file
Remember the configuration file you also copied to the server ages ago? Now we need it. Use it to replace the
Settings.cfg the game just created.
sudo mv Settings.cfg "/home/pwserver/.wine/drive_c/users/pwserver/Application Data/SpieleEntwicklungsKombinat/Paraworld/Settings.cfg"
Once more, we need to transfer file ownership to
sudo chown -R pwserver:pwserver /home/pwserver/.wine
Step 8: Open firewall ports
Depending on which provider is hosting the server for you, your server may be behind a firewall which you need to configure. Since the steps required to open the relevant ports in the firewall vary from provider to provider, I can’t provide step by step guidance here. If you don’t know how to proceed, contact your provider for help. In case your server does not have any pre-configured firewall, I strongly recommend using a Linux tool like
ufw to only allow incoming traffic on ports you need. You can find a guide covering the basics here.
The following ports need to allow incoming traffic:
- 1177 (TCP)
- 45010 (UDP)
Your server also needs to be able to communicate with OpenSpy. Usually providers do not limit outgoing traffic by default. But for future reference, the server needs to be able to send traffic to the internet via:
- 27900 (UDP)
- 27901 (UDP)
Step 9: Create systemd services for
The game is designed to use an instance of
PWServer.exe for only one match. Once the game is over,
PWServer.exe will exit and would usually be restarted by
Paraworld.exe shortly after. Since we are running our
PWServerd.exe directly, we need to take care of the restart as well. To achieve this and to automatically restart either executable should they ever crash, we are going to set up
systemd services for both.
First, download the service configuration templates.
Next, we need to edit the templates to fit your configuration. Replace the
[username] placeholders in the templates with
sed -i "s/\[username\]/pwserver/ig" paraworldd.service pwserverd.service
If you want to run the booster pack or any custom mods, you need to further edit the configuration files. In order to host a booster pack server, add
-enable BoosterPack1 to the
ExecStart arguments for both services. For Mirage, use
-enable MIRAGE instead.
Now we can move the configuration files to the
systemd services folder.
sudo mv paraworldd.service pwserverd.service -t /etc/systemd/system/
Change ownership and permissions of the configuration files.
sudo chown root:root /etc/systemd/system/paraworldd.service /etc/systemd/system/pwserverd.service
sudo chmod 644 /etc/systemd/system/paraworldd.service /etc/systemd/system/pwserverd.service
systemd does not yet know about the new services. We need to tell it to look for them.
sudo systemctl daemon-reload
Step 10: Start the services
We are finally ready to really start the game server. Enable and start the
paraworldd service first.
sudo systemctl enable paraworldd.service
sudo systemctl start paraworldd.service
Then, enable and start the
sudo systemctl enable pwserverd.service
sudo systemctl start pwserverd.service
That’s it. The server should be up and running. It should appear in the in-game server list right away. If not, make sure both services are up and running and did not encounter any errors.
sudo systemctl status pwserverd.service
You made it (hopefully)! Any player who is using the patched OpenSpy binaries and the modded game UI script can now see you server in the list.
Since we are using
systemd to run the game server, both
PWServerd.exe will be automatically restarted if they exit, crash or you restart the server. If you ever need to restart either service manually, use
systemctl restart. You can also stop the services with
If you made it this far, be sure to join the ParaWorld Tavern Discord server if you haven’t already. You’ll be able to chat with fellow ParaWorld enjoyers and share