Metamod-P is the older, widely-deployed fork of Will Day's original Metamod. It predates ReHLDS and is still what you will find on legacy servers, on hosts that only ship stock HLDS, and inside old server packs. If you are building a new server, install Metamod-r instead. Install Metamod-P when you have a real reason: you are on stock Valve HLDS, you have a plugin that misbehaves under Metamod-r, or you are maintaining a server you did not build and are not ready to swap the engine.
1. Prerequisites
- A working stock HLDS install (App 90) that boots to a map — see the SteamCMD install.
- The 32-bit runtime on Linux. Metamod-P is a 32-bit shared object like everything else in this stack; the lib32 guide covers it.
2. Create the directory and drop in the binary
mkdir -p /home/steam/hlds/cstrike/addons/metamod cp metamod_i386.so /home/steam/hlds/cstrike/addons/metamod/metamod_i386.so chmod 644 /home/steam/hlds/cstrike/addons/metamod/metamod_i386.so
Metamod-P builds are commonly named metamod_i386.so on Linux and metamod.dll on Windows, but the file name is not fixed — whatever it is called, that exact name has to appear in liblist.gam. Confirm the architecture:
file /home/steam/hlds/cstrike/addons/metamod/metamod_i386.so
Expect ELF 32-bit LSB shared object, Intel 80386.
3. Edit liblist.gam
This is the install. The engine reads cstrike/liblist.gam to decide which library is the game DLL; you point it at Metamod, and Metamod loads the real game DLL behind the scenes.
Change:
gamedll "dlls\mp.dll" gamedll_linux "dlls/cs.so"
to:
gamedll "addons\metamod\metamod.dll" gamedll_linux "addons/metamod/metamod_i386.so"
Windows path uses backslashes, Linux path uses forward slashes, and the Linux filename must match the file you actually copied. Do not change any other line — gamedir, fallback_dir, and the game name are not yours to edit.
4. plugins.ini
Create cstrike/addons/metamod/plugins.ini:
; Metamod plugin list ; format: <platform> <path relative to the mod dir> linux addons/amxmodx/dlls/amxmodx_mm_i386.so ;win32 addons\amxmodx\dlls\amxmodx_mm.dll
Metamod-P also honours an optional metamod.ini style config in some builds, but plugins.ini is what you need. Paths are relative to cstrike/. Full details: plugins.ini explained.
5. Start and verify
cd /home/steam/hlds ./hlds_run -game cstrike +map de_dust2 +maxplayers 20 +sv_lan 0
meta version meta list
You want output like:
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] AMX Mod X RUN - amxmodx_mm_i386. v1.8.2 ini Start ANY
1 plugins, 1 running
Unknown command: meta means Metamod is not loaded — the fault is in liblist.gam, essentially always.
6. Runtime plugin management
Metamod-P can load and unload plugins without a restart, which is genuinely useful when debugging:
meta load addons/amxmodx/dlls/amxmodx_mm_i386.so meta unload 1 meta reload 1 meta refresh
Plugins that hook engine functions at load time may not behave cleanly when hot-unloaded. Treat this as a debugging tool, not as a deployment strategy.
7. What Metamod-P actually does at load time
It helps to know why the liblist.gam edit is the whole install. The engine reads gamedll_linux and loads that library as the game DLL. Metamod pretends to be the game DLL: it exports the same entry points the engine expects, and once the engine has handed it the engine function table, it reads plugins.ini, loads every plugin listed, and then loads the real game library (dlls/cs.so) behind them. Every engine call and every game-DLL call then passes through Metamod's dispatch tables, giving each plugin a chance to observe, modify, or supersede it.
The consequence: if liblist.gam is wrong, nothing errors. The engine loads cs.so directly, the game works flawlessly, and Metamod is simply never invited. That is why Unknown command: meta is almost always a liblist.gam problem and almost never a permissions or binary problem.
When Metamod-P is the wrong answer
Metamod-P on ReHLDS is a mixed bag: it usually works, but you lose the performance win of Metamod-r's rewritten hook dispatch, and some ReHLDS-era plugins expect the newer API. If you are running ReHLDS + ReGameDLL, use Metamod-r. The comparison is laid out in Metamod-r vs Metamod-P.
Common errors
Unknown command: meta—liblist.gamwas not edited, or it was edited and the file name does not match the binary on disk.Failed to open addons/metamod/metamod_i386.so: cannot open shared object file— the path inliblist.gamis wrong, or the file is not readable by the user running HLDS.bad loadinmeta list— the plugin loaded but failed its API handshake. Usually an AMXX build for a different Metamod API, or a plugin.sowith unresolved symbols. Runlddon it. See the bad load fix.- Metamod loads but AMXX is missing from
meta list— theplugins.iniline is commented out, has the wrong platform keyword, or the path is relative to the wrong directory. See meta list shows Metamod but not AMXX. wrong ELF class: ELFCLASS64— you have a 64-bit binary. There is no 64-bit CS 1.6.
Verification checklist
meta versionprints a version.meta listshows every plugin asRUN.- A map change does not drop any plugin.
amxx versionanswers, once AMX Mod X is loaded on top.









