From Half-Life Library

Half-Life Library > Plugins

Metamod-P is a alternate version of Metamod developed by Jussi Kivilinna (aka evilspy) using the original Metamod's source code.

Metamod-P not only boasts improved speed and less CPU usage, but has the ability to be used with virtually any modification without configuring it to do so. This is accomplished by linkents being loaded dynamically into Metamod from the game rather than them being hard-coded in, like in the original Metamod. The latest version is 1.19p32 and was released on August 12th, 2007.

Like the original Metamod, the source code is freely available for anybody to edit and compile their own distribution, as well, there is complete online HTML documentation.


The following is a complete development changelog listing multiple versions from April 22nd, 2004 through August 12th, 2007.

2007/08/12      1.19p32
[Patch: Metamod-P v32 by Jussi Kivilinna]
 - Changed GCC optimization flags based on performance monitoring results, 
   replaced '-O3 -funroll-all-loops' with '-O2'.
 - Made 'Fix for engine_api varargs log calls with very long log string'
   default on in sources so that MSVC compile is 1:1 with GCC compile.
 - Made 'optimizations on META_DEBUG' always on in sources so that MSVC 
   compile is 1:1 with GCC compile.
 - Fixed compiling META_PERFMON build with MSVC.
 - Fixed compiling with MSVC fixed by Nikolay "The Storm" Baklicharov.
 - [linux] Remake of dynamic linkent code. Parse dlsym function trampoline 
   instead of parsing ELF structures.
 - [linux] Dropped AMD64 support since Valve doesn't support their AMD64 build
   anymore and I don't have access to AMD64 machine to port new dynamic 
   linkent code. Sorry!

2007/04/05      1.19p31
[Patch: Metamod-P v31 by Jussi Kivilinna]
 - Enabled 'regparam' for internal functions. Means that function arguments are
   passed through registers instead of stack, which increases performance.
 - Merged in changes from [[Metamod|Metamod]] 1.19 that I didn't initially notice:
   - Fixed a bug where plugins could not catch NewDLL calls for GameDLLs that
     do not provide NewDLL information.

2007/04/04      1.19p30
[Patch: Metamod-P v30 by Jussi Kivilinna]
 - Fixed safevoid_vsnprintf() on win32.

2007/04/02      1.19p29
[Patch: Metamod-P v29 by Jussi Kivilinna]
 - crash fix that didn't work

2006/03/04	1.19p28
[Patch: Metamod-P v28 by Jussi Kivilinna]
 - Removed use of __VA_ARGS__ (should be easy to port to msvc now).
 - Reduced size of extra engineapi function slots from 128 to 16.
 - Clean up code, removed use of likely()/unlikely() macros in places where
they don't give extra performance.
 - Added MakeRequestID() API
 - Added api for using hook tables from plugins (thanks to BAILOPAN)
 - Re-enabled fix for engine_api varargs log calls with very long log string. 

2005/08/24      1.18p26
[Patch: Metamod-P v26 by Jussi Kivilinna]
 - Fixed newapi functions not active on mods that don't use newapi.
 - [win32] New is_gamedll() code.
 - [linux] Fix for buggy DT_HASH in library walker function.
 - Following features were removed to improve stability. These changes were 
   not present in [[Metamod|metamod]].org version:
      - Removed fix for engine_api varargs log calls with very long log 
      - Removed optimized version of GET_USER_MSG_ID() for [[Metamod|metamod]]-bots.

2005/08/24      1.18p25
[Patch: Metamod-P v25 by Jussi Kivilinna]
 - Added mutil::IsQueryingClientCvar().
 - Added support for new HLSDK-API functions: 
      - enginefuncs_t::pfnQueryClientCvarValue()
      - NEW_DLL_FUNCTIONS::pfnCvarValue()
 - Fixed reloading and unloading of plugins that haven't been loaded
 - Fixed loading of plugins that needed changelevel to activate.
 - Linux x86 and Windows binaries are now compiled for i586 since there is not
   performance difference compared to i686.
 - Fixes to improve stability on win32. (thanks to Blackhawk)
      - Changed to use mingw-gcc 3.4.2rc
      - Changed optimization flags, replaced '-O3 -ffast-math' with '-O2'.
 - Minor performance tweaks.
      - Changed to use mingw-gcc 3.4.2rc, mingw-gcc 3.4.4rc emited extra code
        to zero stack memory which lowered performance.
      - Changed API hooks to give structure offset to main API hook function 
        instead of pointer, which increases performance on linux-i586.
 - Raised META_INTERFACE_VERSION to "5:12".
 - Fixed metamod_version cvar to show "1.18p25" instead of "1.18.0p25".
 - [linux] Improved dynamic linkent code.
 - [linux] Static linked with libgcc.

2005/07/27      1.18p24
[Patch: Metamod-P v24 by Jussi Kivilinna]
 - Updated to match latest [[Metamod|metamod]].org version.
 - Removed mm-p-extensions-API, since loading/unloading plugins functions
   are included in [[Metamod|Metamod]] 1.18 in mutil-API.

2005/04/22      1.17.4p23
[Patch: Metamod-P v23 by Jussi Kivilinna]
 - Fixed broken RegMsgList caused by optimization for mm-bots.
 - Fixed optimization for mm-bots.
 - [linux] Removed ESF-Mod fix.
 - [linux] Minor performance tweaks and reduced filesize for linux.

2005/04/08      1.17.4p22
[Patch: Metamod-P v22 by Jussi Kivilinna]
 - Optimized GET_USER_MSG_ID() function for [[Metamod|metamod]]-bots.
 - Minor performance tweaks.
 - [linux] Looks for gamedll for Earth Special Forces Mod from 'linuxdlls'
   directory after checking 'dlls'.

2005/03/25      1.17.4p21
[Patch: Metamod-P v21 by Jussi Kivilinna]
 - Fixed 'meta reload' not working on plugins that have failed loading.
 - Fixed bug with handling of [[Metamod|metamod]]-plugin-bots, which might have caused
   problems depending on order of loaded plugins. See 'call_count' in
   'api_hook.cpp' for details.
 - Minor performance tweaks.
 - Changed all non-fatal error messages to warning messages.

2005/03/05      1.17.4p20
[Patch: Metamod-P v20 by Jussi Kivilinna]
 - Fixed bug with [[Metamod|metamod]].dll not having working relocation:
      - Makefile doesn't use 'dllwrap' for linking windows dlls anymore.
 - Minor performance tweaks.
 - Updated mini-hlsdk to 'official 2.3+patches' version.
 - Fixes to improve stability:
      - Added fix for broken 'vsnprintf' for win32 and some glibc versions.
      - Fixed wrong api-hook function for 'ClientConnect' in 'api_info.cpp'.
      - Fixed wrong integer type for CRC32_t in 'hlsdk/common/crc.h'.
 - Removed '' from linux binary release.

2005/02/27      1.17.4p19
[Patch: Metamod-P v19 by Jussi Kivilinna]
 - Performance tweaks mainly for AMD64 (minor for i386).
 - Linux-i386 ( binary linked against glibc-2.1.3 for better
   compatibility. Compiled using gcc-3.3.4-glibc-2.1.3 crosscompiler available
 - Binaries not linked against libstdc++ anymore for better compatibility
   (see: new_baseclass.h).

2005/02/25      1.17.4p18
[Patch: Metamod-P v18 by Jussi Kivilinna]
 - Fixed AMD64 support.

2005/02/19      1.17.4p17
[Patch: Metamod-P v17 by Jussi Kivilinna]
 - Renamed '[[Metamod|Metamod]] All-Mod-Support' to '[[Metamod|Metamod]]-P'.
 - Fixes to improve stability.
 - Minor performance tweaks.
 - Merged updates from [[Metamod|Metamod]] 1.17.4,[[Metamod|metamod]]/
      - Added Mod recognition for Brain Bread 1.2, Snow-War 2.0 and
        Gangsta Wars 2.7.

2005/02/13      1.17.3p16
[Patch: All-Mod-Support v16 by Jussi Kivilinna]
 - Fixes to improve stability.
 - Minor performance tweaks.

2005/01/10      1.17.3p15
[Patch: All-Mod-Support v15 by Jussi Kivilinna]
 - New optimization which reduces binary size more than 50%.
 - Changed '-march=i586' to '-march=i686'. This means this binary
   doesn't work on Pentium/K6 processors. You need PPro/Athlon
   or newer.
 - Removed 'Active API Hooks' optimization.
      - Removed 'memory write detection' code.

2004/11/27      1.17.3p14
[Patch: All-Mod-Support v14 by Jussi Kivilinna]
 - Remake of new callback API.

2004/11/27      1.17.3p13
[Patch: All-Mod-Support v13 by Jussi Kivilinna]
 - New callback API for plugins to load/unload other plugins. See 
 - Fixed a minor memory leak when reloading plugins.
 - Minor fixes on 'memory write detection'.
 - Minor performance tweaks.
 - Moved p13 code from osdep.cpp/h to osdep_p.cpp/h

2004/11/17      1.17.3p12
[Patch: All-Mod-Support v12 by Jussi Kivilinna]
 - Fixed crashing with 'memory write detection' (part of 'Active API Hooks').
 - Improved 'memory write detection' code.

2004/11/16      1.17.3p11
[Patch: All-Mod-Support v11 by Jussi Kivilinna]
 - Added new 'Active API Hooks' optimization, speeding up handling HLSDK-API
   functions that are not hooked by any plugins.
 - Added new command 'meta active' to list active hooks.
 - [linux] '' is compiled with gcc-3.3.4 now. If that version
   doesn't work for you, use ''.
 - [linux] gcc-2.95 compiled binary is now ''.
 - Merged updates from [[Metamod|Metamod]] 1.17.3,[[Metamod|metamod]]/
      - Added Mod recognition for Zombie Panic Beta 0.91c, Out Break 1.0,
        Operations 1942 v2.0, The Trenches 1.0-Beta, The Ship V0052.
      - When reloading plugins honour their load time settings. Does no longer
        attempt to reload plugins when the loading after the unloading would
        fail due to a load time conflict.
      - Fixed only loading one plugin when multiple plugins with the same
        prefix were used, e.g. mm_pluginA.dll and mm_pluginB.dll.
      - Fixed a minor memory leak when unloading plugins.
      - Fixed potential bug initializing plugin incorrectly after unloading
        and loading plugins.

2004/08/31      1.17.2p10
[Patch: All-Mod-Support v10 by Jussi Kivilinna]
 - Merged updates from [[Metamod|Metamod]] 1.17.2,[[Metamod|metamod]]/
      - Fixed a memory leak the size of the gamedll when extracting a missing
        gamedll from the cache file on Windows Steam servers. 
        Found by Wei Mingzhi.
      - Made game directory lookup case-insensitive.
      - Added MOD recognition for The Terrorist Revenge 0.2.1, Pirates, 
        Vikings and Knights Beta 2.1, CSV15 (Counter-Strike 1.5 for Steam), 
        Adrenaline Gamer 6.5 and up.
      - Changed MOD recognition for Adrenaline Gamer 3.x. The 3.x version of
        the MOD is now being deprecated and support will be removed from a
        future version of [[Metamod|Metamod]]. It can currently still be used by renaming
        the game directory from "ag" to "ag3" or by explicitly specifying the
      - Improved parsing of plugins.ini file to not report errors on empty 
        lines and commented out lines that start with whitespace.
      - Added "lin32" and "lin64" keywords in addition to "linux" keyword for
        plugins.ini file to support using the same file for the same game on
        both 32bit and 64bit servers. The "lin32" and "lin64" keywords
        override the "linux" keyword when used on the same plugin. Do not 
        use "linux" when using "lin32" and/or "lin64" keywords for the same

2004/07/28      1.17.1p9
[Patch: All-Mod-Support v9 by Jussi Kivilinna]
 - [linux] Amd64-support.
 - [linux] New version of osdep.cpp:is_gamedll().
      - Reads ELF directly and doesn't use external libraries.
      - Binary isn't linked with BFD library anymore, reduces filesize to
        less than 500kb.
 - More optimizations on META_DEBUG macro.
 - No more 'fast' compiles, META_DEBUG is optimized enough now.
 - Added '+localinfo mm_clientmeta <yes/no>' setting for disabling 'meta'
 - Added 'clientmeta' config.ini setting.

2004/07/04      1.17.1p8
[Patch: All-Mod-Support v8 by Jussi Kivilinna]
 - Fixed memory leak in linux version of osdep.cpp:is_gamedll().
 - Fixes to improve stability.
 - Optimizations on META_DEBUG macro.

2004/06/06      1.17.1p7
[Patch: All-Mod-Support v7 by Jussi Kivilinna]
 - Official support for All-Mod-Support versions at
 - Merged updates from [[Metamod|Metamod]] 1.17.1,[[Metamod|metamod]]/
      - Added MOD recognition for Hostile Intent 1.1.
      - Added MOD recognition for Natural Selection Beta 3.0.
      - Added MOD recognition for CS13.
      - Added MOD recognition Rocket Crowbar 2.
      - Added MOD recognition Counter-Strike:Condition Zero.
      - On Windows Steam servers extract the gamedll file from the cache file 
        if it is missing in the dlls directory.
 - Added Patch-messages.
 - Added '+localinfo mm_autodetect <yes/no>' setting for disabling 
   autodetection of gamedll.
 - Added 'autodetect' config.ini setting.
 - Small tweaks and optimizations at various different places.

2004/05/21      1.17p6
[Patch: All-Mod-Support v6 by Jussi Kivilinna]
 - Tweaks and optimizations on osdep.cpp:is_gamedll().
 - [linux] Added architecture check for i386 and x86-64 to is_gamedll().

2004/04/27	1.17p5
[Patch: All-Mod-Support v5 by Jussi Kivilinna]
2004/04/26	1.17p4
[Patch: All-Mod-Support v4 by Jussi Kivilinna]
 - Amd64-test versions

2004/04/25	1.17p3
[Patch: All-Mod-Support v3 by Jussi Kivilinna]
 - Automatically searchs for gameDll for new mods that are not included in 
   internal mod-list.
 - [linux] Cleaned up osdep_linkent_linux.cpp, might work with x86-64 build
   now (not tested).

2004/04/24	1.17p2
[Patch: All-Mod-Support v2 by Jussi Kivilinna]
 - Extra functions slots are now passed all the way to the gameDll now too.
 - [linux] New method for dlsym hooking, no need for anymore.
 - Made mm_* functions in dllapi.cpp and engine_api.cpp static.
 - Made mutil_* functions in mutil.cpp static.

2004/04/22	1.17p1
[Patch: All-Mod-Support v1 by Jussi Kivilinna]
 - Removed dependences on game.dll structures (CBasePlayer).
      - Replaced UTIL_ShowMessage with META_UTIL_ShowMessage.
 - [win32] Replaced entity linking with PE dll-export-table combining.
 - [linux] Replaced entity linking with dlsym hooking.
 - Removed entities from linkgame.cpp
 - Added 128 extra function slots on enginefuncs_t structure for future engine updates.



External Links