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 Paraworld.exe
, PWClient.exe
and 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 Paraworld.exe
and 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 psserver
:
- bin
- Data
- Docs
- Firewall
- Tools
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.
cd ~/paraworld
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 CTRL
and 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 stat
again.
Once you have verified the setup, return to the session with your privileged user. Still as pwserver
, run:
exit
Step 6: Trick ParaWorld.exe
with a fake PWServer.exe
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 PWServer.exe
.
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 PWServer.exe
.
wget https://github.com/cetteup/dummy-executable/releases/download/1.0.0/dummy-executable-1.0.0-windows-amd64.zip
unzip dummy-executable-1.0.0-windows-amd64.zip
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 pwserver
.
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 Paraworld.exe
and PWServerd.exe
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.
wget https://gist.githubusercontent.com/cetteup/c347d754314574903fa43fec89475458/raw/6a18331b22f932fc91e5624a948fda4aa98a84a9/paraworldd.service
wget https://gist.githubusercontent.com/cetteup/c347d754314574903fa43fec89475458/raw/6a18331b22f932fc91e5624a948fda4aa98a84a9/pwserverd.service
Next, we need to edit the templates to fit your configuration. Replace the [username]
placeholders in the templates with pwserver
.
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 pwserverd
service.
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
Done, finally!
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 Paraworld.exe
and 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 systemctl stop
.
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