How to Install Metamod-P (Legacy) on Classic HLDS

November 5, 2025 Daemon666 8 min read 4 Aufrufe

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: metaliblist.gam was 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 in liblist.gam is wrong, or the file is not readable by the user running HLDS.
  • bad load in meta list — the plugin loaded but failed its API handshake. Usually an AMXX build for a different Metamod API, or a plugin .so with unresolved symbols. Run ldd on it. See the bad load fix.
  • Metamod loads but AMXX is missing from meta list — the plugins.ini line 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

  1. meta version prints a version.
  2. meta list shows every plugin as RUN.
  3. A map change does not drop any plugin.
  4. amxx version answers, once AMX Mod X is loaded on top.
Mitwirkende: Daemon666 ✦
Teilen: