ioquake3 is pretty much the reference implementation of Q3A these days, and despite my lack of time for FPS gaming, I like to remember the days when I ran a dedicated gaming service and revisit how to get a dedicated server going.
Synology DS411j ARM Build
Compiling the dedicated server on an ARM box is mostly a matter of checking out the sources from the official SVN or the unofficial Github repo and creating a
Makefile.local file with:
# Skip the client build BUILD_CLIENT=0 CC=gcc # For Synology with Optware, this enables getaddrinfo() properly SERVER_CFLAGS=-I/opt/include -D_GNU_SOURCE BUILD_GAME_QVM=1 BUILD_GAME_SO=1 COPYDIR=/opt/ioquake3
I initially had issues with floating point math in the game engine having a distressing habit of placing spawn points outside the game map, but fixed it by editing the main
Makefile and commenting out the line:
OPTIMIZE = $(OPTIMIZEVM) -ffast-math
-ffast-math, everything went smoothly.
gcc has always had an issue with this kind of thing, but it’s been quite a while since it bit me that way. Your mileage may vary slightly depending on your specific CPU and compiler version.
Most of the servers I maintained back around the turn of the century ran the excellent Orange Smoothie Project mod (which made it trivial to manage servers and let users do all kinds of nifty management of game modes), and it runs fine on ARM as well - just grab it, unpack it as usual, and let rip with something like:
/opt/ioquake3/ioq3ded.armv5tel +set fs_game osp +set vm_game 2 +exec ffa.cfg
You might want to tweak your server configuration file to include the lines:
set sv_dlRate 8192 set fs_basepath /opt/ioquake3
To allow for faster map downloads (you can also redirect users to a web server, but I find it fastidious to set up).
I’ve been trying to find one of my daemon/logging/monitoring wrappers from years gone by, and will post it here when I do (or re-do it).