Multiplayer Quake III Arena on Linux (client and server)
I made a sort-of-joke the other day about using Quake III Arena as a form of metaverse for decoded.legal meetings.
After all, you can move about, group together with people, talk (admittedly to the whole group, AFAIK) via text chat, and frag people who talk too much or go off topic.
In other words, ideal for most corporate meetings.
And that led me to thinking about actually setting up a multiplayer Quake III environment.
So I did, mainly thanks to the superb ioquake3 Free software Quake engine.
Buying Quake III Arena
While ioquake3 is Free software, some of the files to actually play Quake III are not.
I bought an old CD containing Quake III Arena from eBay, and copied the files from there.
£9 delivered, and it also has Quake III Team Arena on it.
(I understand that one can find the relevant files online, but my understanding is that they are not licensed suitably for that.)
Installing ioquake3 (client)
I installed ioquake3 on an old laptop running Debian, from GNOME’s software GUI, via flatpak.
I started it, so that it would create the directory structure.
I put the game files in ~/.var/app/org.ioquake3.ioquake3/data/baseq3/
.
I “registered” it with “aaaaaaaaaaaaaaa”.
And that’s it.
Installing ioquake3 (server)
For the server, I mostly followed these instructions.
I’m using a Raspberry Pi 4, and, with two multiplayers, it has been absolutely fine. I suspect it could cope with a lot more.
I created a new user:
sudo useradd -m -g users -s /bin/bash -d /home/quake3 quake3
and set its password:
sudo passwd quake3
Then I installed the server:
sudo apt install ioquake3-server -y
I switched to my new user
su - quake3
I put the games files (and config files) in /home/quake3/.q3a/baseq3
. (I think I could also have used /usr/lib/ioquake3/baseq3
.)
I created the config files from the Github example, as a starting point.
I created a simple bash script to run the server (to avoid me having to remember the command):
sudo tee /home/quake3/start_quake_server.sh <<EOF
#!/bin/bash
/usr/lib/ioquake3/ioq3ded +exec server.cfg +exec levels.cfg +exec bots.cfg
EOF
And made it executable:
chmod +x /home/quake3/start_quake_server.sh
I opened the relevant port:
sudo ufw allow in from any to any port 27960 comment 'allow in to quake3'
sudo ufw reload
(Note that this allows in from “any”; in practice, you might want to limit it to a particular VLAN, or even particular machines.)
I ran screen
, and then ran the bash script (/home/quake3/start_quake_server.sh
).
And I had a running Quake III server.
Connecting to the server
For now, I’ve just specified the server by IP address. I’ve yet to experiment with whether it will cope with a domain name.
I’ve only used IPv4 so far; I might try IPv6 one day, but I am not optimistic.
I’ve also not experimented with enabling automatic download by clients of maps stored on the server.
Tinkering with the game types and levels
I’ve had a bit of a play around with some of the different settings.
CTF (Capture The Flag) requires CTF-specific maps, with a flag in them.
Some of the settings haven’t worked quite the way that I’d thought they would, in terms of frag limits and so on. I’m probably getting something wrong.
Playing with a friend
It works! We’ve done voice via Signal, and then just run around playing Quake III like it is the late 1990s/early 2000s.
Great fun.
Playing Quake III in the browser
I’ve also set up Quake III running in the browser with JavaScript and WebAssembly.
It works (to my surprise) hosted on a Raspberry Pi.
But I haven’t yet managed to get it working for multiplayer mode. I tried switching the supplier .pk3 file with the one from the CD (renaming it in line with the supplied file) and, while it shows that it is loading, it hasn’t worked.
Perhaps I’ll spend some more time on this some point.
You may also like:
- A working wireless plug-and-play display solution for Linux laptops (and others OSs)
- Improving my laptop's battery with TLP
- Stopping music in my office automatically when I get a phone call or join an audio/video call
- Adding an Internet radio stream (such as RadioFreeFedi) to mpd
- Getting the Sierra Wireless EM7455 LTE modem working in a ThinkPad with Debian 12 Linux (with GPS)
- Fixing dropbear-initramfs '/scripts/init-premount/dropbear: cat: not found' error
- Keeping bash history in sync using atuin and a self-hosted sync server
- Keyboard shortcut for adding random albums to the playlist in ncmpcpp
- This is a test post
- Fixing Mastodon 'Error processing thumbnail for uploaded media' video uploading
- Upgrading the glitch-soc fork of Mastodon
- Very, very initial thoughts of the Xreal Air 2 Pro glasses and Debian 12
- Using Bitwarden as an AppImage on Debian with GNOME
- A web UI for label creation and printing on a Brother QL-710W on Linux
- Getting a Brother QL-710W label printer working via CUPS on Debian