Quake Live

Quake live is a remake of Quake 3 with some tweaks and performance improvements that make it a really nice online game to play with a couple of friends.

Hosting a server isn’t that difficult, but some of the default guide is missing a few bits.

Hosting a server

To start with we need to fetch the binaries from steam itself, this can be done with:

./steamcmd.sh +login anonymous +force_install_dir ./steamapps/common/qlds/ +app_update 349090 +quit

This gives us the game assets, main server binary and some default configuration.

Just running run_server_x64.sh will start the server with defaults. But we want to tweak those a little.

Config

The main game configuation lives at baseq3/server.cfg. Most of the options you can easily read the comments and adjust (server name, max player count, passwords etc). But we also want to adjust a few things for perfomance and stability:

  • com_hunkMegs this should be set to at least 256 for 16 players. This is the main memory pool the server uses (with it’s own allocator) for map and model data.

  • bot_enable should be set to 1 to enable bot support.

  • bot_minplayers sets the minimum amount of players. I generally set this to 10 for team based modes. Basically it guarantees a minimum players in the game. Bots are automatically kicked when real players join.

We also want to set com_zoneMemory to 64. This is used for a bunch of temporary objects and with bots and a lot of map changes we can easily run out of memory here and kill the server. It cannot be modified after startup, and setting it from the config is a little error prone. Instead we need to edit run_server_x64.sh to do it. It should look like:

!/bin/bash
cd "$(dirname "$0")"
LD_LIBRARY_PATH="./linux64" exec ./qzeroded.x64 +set com_zoneMegs 64 "$@"

With these options our server will be stable and quick! I run this on a single shared core VPS with 1G of RAM no problem.

Useful admin commands

The default mappool is fun but here are a couple of commands that are useful to know as the host. Remember to put /rcon in front of all of these if executing from the game clients (after setting up access.txt as detailed in server.cfg).

If you do not use /rcon your local game client will just change into it’s own match without warning!

Change map and game mode

map trinity iffa Instagib free for all on Trinity

set fraglimit 50 Set game winning total in deathmatch

set timelimit 20 Set timelimit for the match (in minutes)

put X blue Move player to blue team. You can lookup players with status

Game modes

actf ad ca ctf dom duel oneflag ffa ft har ictf iffa ift infected quadhog race rr tdm vca

vstr nextmap Jump to next map in the pool

map_restart Restart the game with the same mode on the same map

meminfo For debugging the current memory usage (you probably won’t ever need this unless having OOM problems which shouldn’t happen with our memory settings above.

Mappools

Map pools are just a text file with modes. You can use set sv_mappoolfile to change the mappool at runtime. My starter is:

zen|infected
campgrounds|iffa
japanesecastles|ctf
hiddenfortress|ift
castledeathstalker|ffa
overgrowth|ca
bloodlust|race
skyward|ictf
eyetoeye|dom
rebound|actf