Compiling ReGameDLL_CS yourself is worth doing for the same reasons as ReHLDS: you know exactly what is running on your server, and you can pick up a fix that is merged upstream but not yet released. The build is a 32-bit C++ compile with a Python driver script, and the cleanest way to get a reproducible 32-bit toolchain on a modern 64-bit host is a container.
1. The build container
Dockerfile.regamedll:
FROM debian:12
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential gcc-multilib g++-multilib libc6-dev-i386 \
python3 git ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
docker build -t regamedll-build -f Dockerfile.regamedll .
If you already built the ReHLDS container from the ReHLDS source guide, reuse it — the requirements are the same.
2. Clone with submodules
mkdir -p ~/build && cd ~/build git clone --recursive https://github.com/s1lentq/ReGameDLL_CS.git cd ReGameDLL_CS
The --recursive flag is not optional. ReGameDLL depends on shared headers pulled in as submodules; without them the compile dies on missing includes and looks like a broken toolchain. If you forgot:
git submodule update --init --recursive
3. Pin the revision
Check out the tag that matches the ReGameDLL release you would otherwise have downloaded, or a specific commit. Never deploy an unpinned master to a production server — you cannot reproduce it later and you cannot tell what changed.
git tag --sort=-creatordate | head -5 git checkout <tag> git rev-parse HEAD | tee ../regamedll-commit.txt
4. Compile
docker run --rm -it \ -v ~/build/ReGameDLL_CS:/src \ -w /src \ regamedll-build bash
Inside the container, run the repository's build script. ReGameDLL ships a Python build driver at the repo root; the usual invocation is a clean release build:
python3 build.py --clean
If the script or its flags differ in the revision you checked out, follow the repository's own build instructions instead of guessing — this project has changed build systems over its lifetime, and made-up flags will only cost you time.
The build produces, among other artefacts:
cs.so (Linux game library) game.cfg game_init.cfg delta.lst
The three config/data files are part of the release, not incidental. Ship them with the binary — a ReGameDLL cs.so with a stale delta.lst is one of the reliable ways to get a crash the moment a player connects.
5. Check the binary before you trust it
file cs.so ldd cs.so
file must report:
ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked
If it says x86-64, your multilib setup silently produced a 64-bit object; the server will refuse it with wrong ELF class: ELFCLASS64. ldd must resolve every dependency — a not found line tells you which 32-bit library the target box is missing.
Confirm the symbol the engine actually asks for is exported:
nm -D --defined-only cs.so | grep -i GiveFnptrsToDll
If that symbol is absent, the engine will fail with Couldn't get DLL API from ./cstrike/dlls/cs.so! and no amount of config will help — the build is wrong.
6. Deploy
cd /home/steam/hlds/cstrike cp dlls/cs.so dlls/cs.so.bak cp /path/to/build/cs.so dlls/cs.so cp /path/to/build/game.cfg game.cfg cp /path/to/build/game_init.cfg game_init.cfg cp /path/to/build/delta.lst delta.lst chmod 644 dlls/cs.so
Do not copy liblist.gam from the build tree. If Metamod is installed, your liblist.gam points gamedll_linux at addons/metamod/metamod.so; overwriting it points the engine straight at cs.so and silently disables Metamod and every AMXX plugin.
7. Verify on the server
./hlds_run -game cstrike +map de_dust2 +maxplayers 20 +sv_lan 0
Then in the console:
regamedll_version meta list
regamedll_version must print your build's version. meta list must still show every plugin as RUN. Play a full round and force a map change — that is where a mismatched delta.lst announces itself.
Common build errors
skipping incompatible ... when searching for -lstdc++— the 32-bit libstdc++ is missing or-m32is not being passed. Installg++-multilib.fatal error: bits/c++config.h: No such file or directory— same root cause: no 32-bit C++ headers.- Missing headers under a vendor/submodule path — you cloned without
--recursive. - Build succeeds, server segfaults immediately — you are running a fresh ReGameDLL against a very old engine. Update ReHLDS to a release from the same period; see ReGameDLL/ReHLDS incompatibility.
Keep a record
Store regamedll-commit.txt next to the deployed cs.so, and note the matching ReHLDS commit. When someone reports a bug six months from now, the first question is "which build?" — and being able to answer it in five seconds instead of an evening is the entire payoff of building from source. Next: install ReAPI, which is only usable once ReGameDLL is in place.









