Running a server
A dedicated server runs on Source SDK Base 2013 Dedicated Server from SteamCMD (app 244310), with Hidden: Rebuild's server package and Hidden: Source Beta 4b next to it. SteamCMD's server has the 64-bit engine but only 32-bit launchers, which can't load the mod; the server package brings the 64-bit launcher.
- Install the dedicated server:
steamcmd +force_install_dir /path/to/server +login anonymous +app_update 244310 validate +quit
- Download the server package for your system from the
releases (
hidden2013-<version>-windows-server.zipor-linux-server.tar.gz) and extract it into the server's folder. - Put Beta 4b's
hiddenfolder there too (hsb4b-full.zip has it). The server's folder then has:
bin/ hl2/ hl2mp/ platform/ from SteamCMD
hidden/ Hidden: Source Beta 4b
hidden2013/ Hidden: Rebuild
srcds_win64.exe or srcds_linux64 Hidden: Rebuild's 64-bit launcher
Windows
srcds_win64.exe -console -game hidden2013 +maxplayers 12 +map hdn_docks
Linux
Two one-time steps. Beta 4b has file and folder names with capitals (materials/Wall, ...), and
the engine looks everything up in lower case, which Linux's case-sensitive file system doesn't
find. The server package brings a script that lower-cases the names in the hidden folder:
sh hidden2013/lowercase_beta4b.sh
And the Steamworks library looks for the 64-bit steamclient.so in ~/.steam/sdk64. SteamCMD
has it; link it there:
mkdir -p ~/.steam/sdk64
ln -s /path/to/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
Then start the server from anywhere:
/path/to/server/srcds_linux64 -console -game hidden2013 +maxplayers 12 +map hdn_docks
Pterodactyl
For a Pterodactyl panel there's an egg,
egg-hidden-rebuild.json
(Admin, Nests, Import Egg). A server made from it installs everything above by itself: the SteamCMD
server, Beta 4b from its official download, and Hidden: Rebuild. With Auto update on it updates
on every start. Release channel picks what it installs: release (the newest release), snapshot
(the newest test build) or a release tag such as v1.0.1.0 to stay on it. An edited
cfg/mapcycle.txt and your MOTD survive updates.
Outside Pterodactyl, the Linux server package's hidden_update.sh does the same updating:
HIDDEN_CHANNEL=snapshot ./hidden_update.sh in the server folder.
Being found
- LAN: players on your network see the server under Find Servers, LAN.
- Internet: the server registers with Steam's master server by itself, but players can only reach it once UDP port 27015 is forwarded to it on your router (TCP 27015 too, for rcon).
- More than one network adapter (VPNs, virtual machines, WSL): the server may pick the wrong one
and not be reachable. Add
+ip 0.0.0.0to listen on all of them, or+ip <address>for one. - Listen servers (Create Server in the game) answer on your LAN, and over the internet they run through Steam's relay network instead of your IP, so no ports need forwarding: friends join through the Friends tab or a Steam invite.
Configuring
cfg/server.cfgruns at every map start: hostname, passwords, and the cvars below. Start fromcfg/server_example.cfg: every server cvar of the release and its plugins, with its default and what it does. Copy it toserver.cfg; updates replace the example, never your copy. Until you have aserver.cfg, the server runs the Beta 4b install's. Old Hidden: Source server configs work, including the plugins' cvars.cfg/mapcycle.txtis the map rotation. The one that ships is Beta 4b's, with the fixedhdn_decayandhdn_origin. Maps the server doesn't have are skipped, and a missing_fixedmap falls back to the original.cfg/motd.txtis the message of the day players see on joining: HTML, up to 2 KB (the engine skips a bigger one), andcfg/motd_text.txtfor players who turned HTML messages off. Updates never overwrite them: the packages' own iscfg/motd_default.txt, shown while you have none. Amotd.txtinhidden2013/itself works too.- Bots play both sides:
bot_addadds one,hdn_bot_quotakeeps the server topped up with them. - Versions: players can only join a server on the same release, so update the server when you update the game.
Cvars
This list is generated from the source code, so it's always the current build's. Server cvars go in
cfg/server.cfg; client cvars are for players' own configs. The plugins have
their own cvars.
| Cvar | Default | Side | What it does |
|---|---|---|---|
cl_brasslife | 90 | client | Seconds ejected shell casings stay on the ground |
cl_hvision | 1 | client | Draw the Hidden's vision effect when playing the Hidden |
hdn_bot_auto_nav | 1 | server | Generate a navigation mesh when bots are wanted on a map without one (reloads the map) |
hdn_bot_difficulty | 1 | server | Skill of new bots: 0 easy, 1 normal, 2 hard, 3 expert |
hdn_bot_forfeit_hidden | 0 | server | New bots forfeit the Hidden selection (1), so humans play the Hidden |
hdn_bot_join_after_player | 1 | server | Only fill the quota once a human has joined |
hdn_bot_quota | 0 | server | Keep the server filled up to this many players with bots |
hdn_deathnotices | 0 | server | Show the Hidden's kills in the kill feed (the server log always has them) |
hdn_deathwait | 5 | server | OverRun: seconds before a killed player comes back (four times as long after a marine's suicide) |
hdn_hiddenrounds | 5 | server | Rounds in a row the same player can be the Hidden before someone else is picked; 0 is unlimited |
hdn_hidehiddendecals | 0 | server | Keep blood and bullet impact decals off the Hidden; Beta 4b let them show where he'd been hit |
hdn_jointime | 15 | server | Seconds to wait after a map change before the first round starts |
hdn_limitbombs | 1 | server | Give the Hidden half as many pipe bombs as there are marines (rounded up), less one, instead of 3 |
hdn_radio_limit | 5 | server | Seconds a player has to wait between radio messages and taunts |
hdn_selectmethod | 0 | server | How the Hidden is picked: 0 by weighting points, 1 classic (whoever killed the Hidden), 2 random |
hdn_staminadrain | -0.095 | server | Stamina the Hidden gains per tick while clinging to a wall; negative, so clinging drains it |
hdn_survivaltime | 15 | server | OverRun: seconds the last marine standing has to survive |
hdn_targetnames | 1 | server | Show the name and health of the player under the crosshair: marines see marines ("Friend"), the Hidden sees anyone within 256 units ("Enemy"), as in Beta 4b |
mp_roundtime | 240 | server | Length of a round, in seconds |
sv_pigstick | 1 | server | Enables the Hidden's pigstick attack |
Commands
| Command | Side | What it does |
|---|---|---|
bot_add | server | Add bots: bot_add [count] [iris]; 'iris' bots never become the Hidden |
bot_kick | server | Remove a bot by name, or all of them; 'bot_kick all' also sets hdn_bot_quota to 0 |
chooseteam | client | Shows the personnel selection menu |
classmenu | client | Shows the personnel selection menu |
hdn_restartround | server | Restarts the round |
hdn_spec_unrestricted | server | hdn_spec_unrestricted <name|#userid> [0|1]: let a player also watch the Hidden and use the chase and free cameras |
+radiomenu | client | Shows the radio menu while held |
weaponmenu | client | Shows the weapon selection menu |