2hours.gg/

Game servers by the hour. Pay only when you play.

How to set up a Half-Life Deathmatch: Source dedicated server

Half-Life Deathmatch: Source is the classic Half-Life 1 deathmatch rebuilt on the same Source engine as HL2:DM. Hosting it is close to HL2:DM with two differences worth knowing up front: it installs as two apps, and a fresh install crashes on boot until you add one symlink. Both are covered below.

Install the server (two apps)

HLDM:Source is the HL2:DM multiplayer engine (app 232370) running the Half-Life 1 content (app 360). Install both, anonymously, into the same folder:

./steamcmd.sh +login anonymous \
  +app_update 232370 validate \
  +app_update 360 validate \
  +quit

The game folder is hl1mp, and the config it reads on boot is:

<install>/hl1mp/cfg/server.cfg

The catch: the server_srv.so symlink

This is the one that stumps people. The dedicated engine loads the game code from a file called server_srv.so, but HLDM:Source ships only server.so. Without the alias the server segfaults the moment it boots, with a ServerDLL_Load error and no clear message. The fix is a single symlink next to the real file in hl1mp/bin:

cd <install>/hl1mp/bin
ln -sf server.so server_srv.so

Do this once after installing. It is harmless to run again, so it is safe to put in a startup script that runs before srcds.

The launch line

Same srcds_run wrapper as HL2:DM, pointed at the hl1mp game folder. The starting map and player cap are arguments:

./srcds_run -game hl1mp -console \
  -port 27015 \
  +map crossfire \
  +maxplayers 16 \
  +exec server.cfg
  • The stock maps are crossfire (the classic, with the nuke button), boot_camp, bounce, datacore, frenzy, lambda_bunker, rapidcore, snarkpit, stalkyard, subtransit and undertow.
  • maxplayers 16 suits the stock maps. crossfire and stalkyard stay fun with a full server.
  • Port 27015 is the game and query port. Open UDP (and TCP for RCON) in your firewall.

A vanilla server.cfg

Name, passwords and rules go in hl1mp/cfg/server.cfg. Free-for-all vs teams is mp_teamplay, the same switch as HL2:DM:

hostname "My HLDM:Source Server"     // CHANGE ME
rcon_password "pick-a-long-secret"   // CHANGE ME
sv_password ""                       // a word here = private, blank = open
sv_lan 0
mp_teamplay 0                        // 0 = free-for-all, 1 = team deathmatch
mp_fraglimit 0                       // kills to end the map, 0 = no limit
mp_timelimit 20                      // minutes to end the map, 0 = no limit

There are no working bots for this build, so it needs real players. It is at its best with a few friends on crossfire.

See also

← Back to all guides