Add install-metamod-r/en.md
Browse Source
1 changed file
with 89 additions and 0 deletions
install-metamod-r/en.md
A
| @@ -0,0 +1,89 @@ | ||
| 1 | +--- | |
| 2 | +title: "How to Install Metamod-r on ReHLDS" | |
| 3 | +excerpt: "Install Metamod-r, the modern fork of Metamod, on a ReHLDS server: liblist.gam, plugins.ini, meta list verification and the usual traps." | |
| 4 | +category: "installation" | |
| 5 | +tags: "metamod-r, metamod" | |
| 6 | +image: "" | |
| 7 | +read_time: "8 min read" | |
| 8 | +--- | |
| 9 | +<p>Metamod is the layer that sits between the engine and the game DLL and lets other things (AMX Mod X, Reunion, ReVoice, ReChecker, YaPB) hook in. <strong>Metamod-r</strong> is the modern fork: significantly faster hook dispatch, built for ReHLDS, and still able to load the same plugins as classic Metamod. If you are on ReHLDS in 2026, Metamod-r is the default choice.</p> | |
| 10 | + | |
| 11 | +<h2>1. Directory layout</h2> | |
| 12 | +<p>Metamod lives under the mod directory, not the server root:</p> | |
| 13 | +<pre>cstrike/ | |
| 14 | +├── addons/ | |
| 15 | +│ └── metamod/ | |
| 16 | +│ ├── metamod.so (Linux) or metamod.dll (Windows) | |
| 17 | +│ └── plugins.ini | |
| 18 | +├── liblist.gam | |
| 19 | +└── dlls/ | |
| 20 | + └── cs.so</pre> | |
| 21 | +<pre>mkdir -p /home/steam/hlds/cstrike/addons/metamod</pre> | |
| 22 | + | |
| 23 | +<h2>2. Copy the binary</h2> | |
| 24 | +<p>Download the current Metamod-r release and place the platform binary:</p> | |
| 25 | +<pre>cp metamod.so /home/steam/hlds/cstrike/addons/metamod/metamod.so | |
| 26 | +chmod 644 /home/steam/hlds/cstrike/addons/metamod/metamod.so</pre> | |
| 27 | +<p>Check it is 32-bit — everything in a CS 1.6 server is:</p> | |
| 28 | +<pre>file /home/steam/hlds/cstrike/addons/metamod/metamod.so</pre> | |
| 29 | +<p>It must say <code>ELF 32-bit LSB shared object, Intel 80386</code>. A 64-bit file here produces <code>wrong ELF class: ELFCLASS64</code> at startup.</p> | |
| 30 | + | |
| 31 | +<h2>3. Point liblist.gam at Metamod</h2> | |
| 32 | +<p>This is the step that actually installs Metamod. Open <code>cstrike/liblist.gam</code> and change the <code>gamedll</code> lines so the engine loads Metamod instead of the game DLL — Metamod then loads the game DLL itself.</p> | |
| 33 | +<p>Before:</p> | |
| 34 | +<pre>gamedll "dlls\mp.dll" | |
| 35 | +gamedll_linux "dlls/cs.so"</pre> | |
| 36 | +<p>After:</p> | |
| 37 | +<pre>gamedll "addons\metamod\metamod.dll" | |
| 38 | +gamedll_linux "addons/metamod/metamod.so"</pre> | |
| 39 | +<p>Leave every other line alone. Note the backslashes on the Windows line and forward slashes on the Linux line — that is not cosmetic, and a Linux path in <code>gamedll</code> is one of the ways people end up with a server that boots straight into stock CS with no plugins at all.</p> | |
| 40 | + | |
| 41 | +<h2>4. Create plugins.ini</h2> | |
| 42 | +<p><code>cstrike/addons/metamod/plugins.ini</code> lists what Metamod loads, one plugin per line, prefixed with the platform:</p> | |
| 43 | +<pre>; Metamod plugins | |
| 44 | +linux addons/amxmodx/dlls/amxmodx_mm_i386.so | |
| 45 | +;win32 addons\amxmodx\dlls\amxmodx_mm.dll</pre> | |
| 46 | +<p>Paths are relative to the <strong>mod directory</strong> (<code>cstrike/</code>), not to the metamod folder and not to the server root. <code>;</code> starts a comment. A full breakdown of the format is in <a href="/tutorials/metamod-plugins-ini-explained">plugins.ini explained</a>.</p> | |
| 47 | +<p>You can leave the file with only comments for now — Metamod loads fine with zero plugins, and that is a useful state to verify before you add AMXX.</p> | |
| 48 | + | |
| 49 | +<h2>5. Start and verify</h2> | |
| 50 | +<pre>cd /home/steam/hlds | |
| 51 | +./hlds_run -game cstrike +map de_dust2 +maxplayers 20 +sv_lan 0</pre> | |
| 52 | +<p>In the console:</p> | |
| 53 | +<pre>meta version | |
| 54 | +meta list</pre> | |
| 55 | +<p><code>meta version</code> prints the Metamod-r version and the engine interface it detected. <code>meta list</code> prints the plugin table. Every plugin must show status <code>RUN</code>:</p> | |
| 56 | +<pre>Currently loaded plugins: | |
| 57 | + description stat pend file vers src load unload | |
| 58 | + [ 1] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0.5 ini Start ANY</pre> | |
| 59 | +<p>If <code>meta version</code> answers <code>Unknown command: meta</code>, Metamod is not loaded at all — go back to <code>liblist.gam</code>. That is the cause in the overwhelming majority of cases.</p> | |
| 60 | + | |
| 61 | +<h2>6. Load order with the rest of the stack</h2> | |
| 62 | +<p>Metamod must be installed <em>after</em> ReGameDLL, because ReGameDLL's archive contains a <code>liblist.gam</code> that points straight at <code>cs.so</code>. If you install ReGameDLL after Metamod and copy its <code>liblist.gam</code> over yours, Metamod disappears and every plugin with it. See <a href="/tutorials/install-regamedll-cs16">the ReGameDLL guide</a> for that warning in context.</p> | |
| 63 | +<p>Metamod does not replace the game DLL — it wraps it. The engine loads <code>metamod.so</code>, Metamod reads <code>plugins.ini</code>, loads each plugin, and then loads the real game library (<code>dlls/cs.so</code>) itself, chaining every hooked engine and game call through the plugins on the way. That is why breaking <code>liblist.gam</code> does not produce an error: the engine happily loads <code>cs.so</code> directly, the game runs perfectly, and Metamod is simply never in the picture. Your only symptom is that <code>meta</code> is an unknown command and every plugin is silently gone.</p> | |
| 64 | + | |
| 65 | +<h2>7. Managing plugins at runtime</h2> | |
| 66 | +<p>Metamod-r can load and unload plugins without restarting the server, which is genuinely useful while debugging:</p> | |
| 67 | +<pre>meta list | |
| 68 | +meta load addons/revoice/revoice_mm_i386.so | |
| 69 | +meta unload 2 | |
| 70 | +meta reload 2 | |
| 71 | +meta refresh</pre> | |
| 72 | +<p><code>meta refresh</code> re-reads <code>plugins.ini</code> and loads anything new in it. Treat all of this as a debugging aid, not a deployment method — plugins that hook engine functions at load time (Reunion, ReVoice) are not designed to be hot-unloaded from a live server and can leave the hook chain in a state that only a restart clears.</p> | |
| 73 | + | |
| 74 | +<h2>Common errors</h2> | |
| 75 | +<ul> | |
| 76 | +<li><strong><code>Unknown command: meta</code></strong> — <code>liblist.gam</code> still points at <code>dlls/cs.so</code>. Nothing else causes this.</li> | |
| 77 | +<li><strong><code>Failed to open addons/metamod/metamod.so</code></strong> — wrong path or wrong permissions. The path in <code>liblist.gam</code> is relative to <code>cstrike/</code>. See <a href="/tutorials/fix-failed-to-open-metamod-so">that error</a>.</li> | |
| 78 | +<li><strong><code>bad load</code> next to a plugin in <code>meta list</code></strong> — the plugin binary failed to initialise: wrong architecture, missing dependency, or built against an incompatible Metamod API. <code>ldd</code> the plugin's <code>.so</code> and read <a href="/tutorials/fix-metamod-bad-load">the bad load guide</a>.</li> | |
| 79 | +<li><strong><code>wrong ELF class: ELFCLASS64</code></strong> — you downloaded a 64-bit build of something. There is no 64-bit CS 1.6.</li> | |
| 80 | +<li><strong>Server segfaults on start after adding Metamod</strong> — classic Metamod (not -r) on ReHLDS with an old API. Use Metamod-r.</li> | |
| 81 | +</ul> | |
| 82 | + | |
| 83 | +<h2>Verification</h2> | |
| 84 | +<ol> | |
| 85 | +<li><code>meta version</code> answers.</li> | |
| 86 | +<li><code>meta list</code> shows every entry as <code>RUN</code>, none as <code>bad load</code> or <code>badfile</code>.</li> | |
| 87 | +<li>The server survives a map change with plugins loaded.</li> | |
| 88 | +</ol> | |
| 89 | +<p>Once Metamod-r is confirmed, install <a href="/tutorials/install-amx-mod-x-1-9">AMX Mod X 1.9</a> (or <a href="/tutorials/install-amx-mod-x-1-10">1.10</a>) as its first plugin. If you are still deciding between forks, read <a href="/tutorials/metamod-r-vs-metamod-p">Metamod-r vs Metamod-P</a>.</p> | |
| 0 | 90 |









