# vim: set tw=75 ft=none :

2003/01/23	1.14
 - Fixed to handle new behavior of engine routine GET_GAME_DIR under HL
   1.1.1.1 (CS 1.6) beta, where the routine no longer returns the
   fullpathname of the game directory, but now returns only the string
   passed to hlds as the argument to "-game" (pointed out by Alfred
   Reynolds).
 - Added meta-util function GET_GAME_INFO to return various string-based
   information about the gamedll (name, description, gamedir fullpathname,
   dll fullpathname, dll filename).
 - Raised META_INTERFACE_VERSION from 5:8 to 5:9.
 - Added FAQ.
 - Some docs touchups.

2003/01/18	1.13.4
 - Additional entities for betas of Counter-Strike 1.6 and TFC from HL
   1.1.1.1.
 - Added missing #include "osdep.h" to several files, to make sure things
   like win32 vsnprintf are defined.
 - In stub plugin, added engine_api.cpp, to provide example framework for
   hooking engine routines.
 - In trace plugin, changed logtag to all caps.

2003/01/12	1.13.3
 - Additional entities and updated mod recognition for Earth's Special
   Forces Beta 1.
 - Mod recognition for Retro Firearms 2.5.
 - Increased max allowed plugin functions and max allowed plugin cvars from
   512 to 1024.
 - Fixed UTIL_VarArgs and UTIL_LogPrintf (copied from SDK) to use proper
   bounds-checking (to help prevent buffer overflows).
 - Updated Copyright to include "2001-2003".

2002/11/26	1.13.2
 - Mod recognition and entities for Azure Sheep v1.0, BuzzyBots v2.3,
   Outlawsmod v.Beta 1.5, The Specialists v.Beta 1.0, and StargateTC v.Beta
   2.2.
 - Additional entities for The Battle Grounds v.Demo 1.0, Firearms v.2.6.5,
   Global Warfare v.Beta 2.0, and Tour of Duty v1.1 Beta.
 - Updated mod recognition for Rocket Crowbar v1.9.
 - Compiled against HLSDK 2.3.
 - Corrected missing "const" in vdate.h (noted by Ravenous BugBlatter
   Beast).

2002/10/06	1.13.1
 - Mod recognition and entities for Digital Paintball v1.0, Dragon Mod Z
   v1.7, Holy Wars v.beta2, and OeL Half-Life v4.0.
 - Additional entities for Adrenalinegamer Mod v6.0 and Natural Selection
   v1.0.
 - Corrected a cast in os_safe_call (from Olafur Osvaldsson).

2002/08/24	1.13
 - New config file names and locations, per the Addon Development Standard
   rev 1.00.  Default config files are now:
    - $gamedir/addons/metamod/plugins.ini
    - $gamedir/addons/metamod/exec.cfg
 - File "metagame.ini" no longer supported.
 - Additional entities for WormsHL beta 2.1.
 - Mod recognition (no entities) for Retro Counter-Strike 2.5.
 - Added release_notes.html.
 - Added function "valid_file" in support_meta.h.

2002/07/11	1.12.4
 - Additional entities for Day of Defeat beta 3.0 and Tour of Duty 0.9.0.
 - Mod recognition and entities for Natural Selection 1.0.
 - Added "$pg" string for /usr/bin/ident.

2002/07/01	1.12.3
 - Mod recognition and entities for Valve's Ricochet mod.
 - Additional entities for Tour of Duty 0.8.0.
 - Moved common code from LINK_ENTITY_TO_GAME to a function, rather than
   duplicating the code in ~2000 expanded macros.  Based on code from Jussi
   Kivilinna <kijuhe00@students.oamk.fi>.

2002/06/04	1.12.2
 - Even more entities for Firearms rc2.6.

2002/05/29	1.12.1
 - Mod recognition and entities for Desert Crisis 1.1, Tour of Duty 0.6.7,
   and Train Hunters beta 1.0.
 - Additional entities for GoldenEye 1.9C and Firearms rc2.6.
 - Fixed meta-util function GET_PLUGIN_PATH to return the full path as
   intended, rather than a partial path.
 - Updated Copyright to include "2001-2002".
 - Fixed Makefile to not update .tags or .htags by default.

2002/04/22	1.12.0
 - Updated for HL 1109, which adds one Engine routine:
      const char *GetPlayerAuthId(edict_t *e);
 - Mod recognition and entities for The Battle Grounds 0.6, Gangwars Beta
   1.0, and WormsHL Beta 2.0
 - Additional entities for Day of Defeat beta 2.0 and Oz 2.5.
 - Changed error message "user message registered again" to a debug message
   (level 3).
 - Fixed compile problem under MSVC with strcasecmp.
 - Added meta-util function GET_PLUGIN_PATH, so a plugin can know from
   whence it was loaded.
 - In trace plugin, added more trace info for EngineFprintf, ServerPrint,
   IsMapValid, GetPlayerUserId, GetPlayerWONId, GetPlayerAuthId,
   CVarGetFloat, CVarGetString, AllocString, Time, IsDedicatedServer,
   GetCurrentPlayer, GetPlayerStats.

2002/02/08	1.11.2
 - Hopefully complete list of entities for Day of Defeat beta 2.0.
 - Don't complain for NULL routines in gamedll's NEW_DLL_FUNCTIONS.  Should
   solve "Couldn't find api call: dod.dll:ShouldCollide" errors with DoD
   b2.
 - Changed default for newapi ShouldCollide() from 0 to 1, per Mugsy@DoD's
   observations.  

2002/02/03	1.11.1
 - Mod recognition and entities for Snow-War 1.0, and Earth`s Special
   Forces version Alpha 2.0.
 - Additional entities for Oz 2.4.1, Svencoop 2.0, and partial entities for
   Day of Defeat beta 2.0.
 - Added check for duplicate UserMsg registration (should help resolve
   recent "reached max msgs 256" errors).
 - Dropped leading zeroes in version number.
 - Tweaked "interface version" log message to help reduce confusion.
 - Compiled with updated version of mingw; should help reduce dll filesizes
   found in the previous release.
 - Some additional debugging in gamedll entity linking.

2001/12/17	1.11.00
 - Mod recognition and entities for Weapon Wars v0.3.
 - Additional entities for version 1.2 of Global Warfare.
 - Linux binary linked against glibc-2.1.2 for better compatibility.
 - 'meta game' now lists user messages registered by gamedll.
 - Added meta-util functions GET_USER_MSG_ID and GET_USER_MSG_NAME, so
   plugins that need to know RegUserMsg name/id mappings (like bots) don't
   need to be loaded at server startup.
 - Raised META_INTERFACE_VERSION from 5:6 to 5:7.
 - Fixed NUM_FOR_EDICT error in pfnCenterSay (from Fritz Elfert).
 - Re-fixed set_new_handler for MSVC (from Fritz Elfert).
 - Fixed meta_AddServerCommand; was registering plugin's command string
   rather than local string, causing segfault on plugin unload.
 - Changed trace plugin to use GET_USER_MSG_NAME instead of local list.
 - Added 'const' to 'char *' arguments in DLOPEN and DLSYM macros.
 - Commented out names of unused function paramenters, to satisfy "gcc
   -Wunused" without generating MSVC errors.
 - Added '#pragma warning(disable: 4390)' to disable "empty controlled
   statement" warnings in MSVC.
 - Updated MSDN url references.

2001/09/19	1.10.00
 - Updated for HL SDK 2.2, which adds two Engine routines:
      qboolean Voice_GetClientListening)(int iReceiver, int iSender);
      qboolean Voice_SetClientListening)(int iReceiver, int iSender, qboolean bListen);
 - Mod recognition and entities for "Scientist Hunt" v1.2 and Existence
   Beta 1.3.

2001/08/01	1.09.00
 - Mod recognition and entities for 'Wanted!' v1.5.
 - Mod recognition for Adrenalinegamer v3.2 and v4.1 (no special entities).
 - Additional entities for version 2.3 of Oz Deathmatch.
 - Additional entities for version 1.0 of Wizard Wars.
 - Additional meta-utility function CALL_GAME_ENTITY.  Raised
   META_INTERFACE_VERSION from 5:5 to 5:6.
 - Added proper GPL notices.

2001/07/06	1.08.02
 - Added mod recognition and entities for Gunman Chronicles.
 - Added list of supported mods to docs.
 - Updated MSVC project/workspace files to match recent source changes.
 - Fixed problem with set_new_handler compiling under MSVC.

2001/06/30	1.08.01
 - Updated for Day of Defeat v1.3.  The name of its win32 dll changed (was
   mp.dll; now dod.dll).  No new entities.
 - Added mod recognition and entities for Rocket Crowbar.
 - Fixed problem with windows internal DLL version (don't use leading
   zeros as compiler will assume it's octal notation).

2001/06/16	1.08.00
 - Allow specifying/overriding various things on the command line, via
   "+localinfo".  Fields are:
    - mm_gamedll
      a bot or other dll, instead of the gamedll based on the gamedir.
      Note this is now the preferred method; the "metagame.ini" file is
      deprecated, but still recognized for backwards compatibility.
    - mm_pluginsfile
      a file with the list of mm plugins, instead of "metamod.ini".
    - mm_execcfg
      a cfg file for mm plugin cvar settings, instead of "metaexec.cfg".
    - mm_debug
      an initial debug level.
    - Examples:
        ./hlds_run -game cstrike +localinfo mm_gamedll dlls/pod_bot.so
        ./hlds_run -game cstrike +localinfo mm_pluginsfile mylist.ini
        ./hlds_run -game cstrike +localinfo mm_execcfg mysettings.cfg
        ./hlds_run -game cstrike +localinfo mm_debug 7
 - Don't try exec'ing metaexec.cfg unless it exists.
 - Added additional entity for Action Half-Life Beta 4, from list forwarded
   from the dev team.
 - Added a couple additional entities for Global Warfare, from list
   provided by the dev team.
 - Moved a couple entities from the "common" list back to the "valve" list,
   for better organization.
 - Changed logmsg "Plugin '%s' interface version didn't match" from
   "Warning:" to "Note:" to reduce confusion.
 - Added an optional plugin meta-api routine Meta_Init, to be called prior
   to GiveFnptrsToDll, to let the dll know that it's going to be
   queried/loaded as a metamod plugin, to allow for DLL's that can be used
   as both a metamod plugin _and_ a standalone DLL.  Raised
   META_INTERFACE_VERSION from 5:4 to 5:5.
 - Removed segfault handler under linux, when calling plugin console
   command functions, as (a) it masked legitimate segfaults in plugin
   commands and produced confusing output ("plugin has been unloaded", when
   really it segfaultd), and (b) wasn't necessary since the situation
   should be covered by other tests.
 - Replaced combo SDK macros with inline funcs, and added ones for
   accessing serverinfo and localinfo infokey buffers.
 - Unfinished code for event triggers is in the source, but is disabled
   (since it's not finished yet).

2001/06/10	1.07.03
 - improper compile was reporting wrong version number

2001/06/07	1.07.02
 - added mod recognition and best-guess list of entities for Deathmatch
   Classic v1 and Global Warfare Beta 1.0.
 - updated entity list with best-guess additions and corrected win32 dll
   name for Wasteland Beta 2.
 - added additional entities for Frontline Force 1.2a, from list forwarded
   from the dev team.

2001/05/25	1.07.01
 - added complete (hopefully) list of additional entities for Front Line
   Force 1.2a/1.3.
 - added best-guess list of entities for Day of Defeat b1.1.
 - added best-guess list of entities for Science & Industry 0.97 (later
   confirmed by SI lead programmer).
 - added better guess list of entites for Action Half-Life b4.
 - shrunk entity lists for Jailbreak and Judgement to include only
   mod-specific entities (rather than common Valve entities which are in a
   separate list).
 - in THREAD_CREATE inline, replaced "(DWORD (*)(void*)) func" with
   "(LPTHREAD_START_ROUTINE) func" to properly compile under MSVC.
 - added engine_notes.html with a list of all the engine routines, and some
   comments.
 - added utils/getents.sh script to pull entity lists from .so files.

2001/05/08	1.07.00
 - fixed "%s" server-crashing bug.  "You should never pass strings with
   unknown contents as the format string."  Metamod was passing a
   preformatted non-constant (thus unknown contents) string as the format
   string (and only argument) when handling printf-style varargs engine
   functions (in particular, AlertMessage).  Ie, don't do:
      printf(buf);
   Instead do:
      printf("%s", buf);
 - added some entities for Action Half-Life Beta4, which should help
   address crashing on startup, especially with Last Man Standing random
   weapons.  Note that I don't have an official, complete list of entities
   for the mod, so there may still be some instances of crashing.
 - added debugging messages for printf-style varargs engine routines, since
   we can't rely on trace_mm for this (as the messages are re-written by
   metamod before being passed to trace).
 - better info in trace plugin's log messages for AlertMessage and
   CreateNamedEntity.
 - altered debug levels AlertMessage API routines in api_info.cpp

2001/05/04	1.06.10
 - fixed a couple of entities for HL Paintball.
 - added links.html to docs, a set of links/URLs and books that I found
   helpful for the project.
 - added to META_INTERFACE_VERSION comments to include associated metmaod 
   version for each change.
 - additional data checking in various MPluginList routines.
 - added 'const' to various function arguments to more properly reflect
   function purpose.
 - changed various function macros to inlines, to provide more obvious type
   checking, and easier debugging.
 - adjusted private/public members of various classes, to try and make them
   more proper.
 - added new_handler code, for upcoming code additions.
 - added MPluginList::find(plid_t id), for upcoming code additions.
 - added thread primitives to osdep, for upcoming code additions.

2001/04/29	1.06.02
 - added entities and mod recognition for VampireSlayer and Open-Source
   Jailbreak.
 - updated mod recognition for current names of Action Half-Life's DLL/SO
   files.
 - added some entities for FLF 1.2a, listed on Botman's news page.
 - added some docs for Installation and Compiling.
 - added build type info (optimized, debugging, etc) to the SpecialBuild
   tag in the version info for the win32 DLL.
 - disabled SDK's "DBG_" functions, for MSVC win32 debug compiles.

2001/04/22	1.06.01
 - added some entities for FLF 1.2.
 - better info in trace plugin's log messages for
   DispatchObjectCollsionBox, SetModel, FindEntityByString, SetOrigin,
   EntOffsetOfPEntity, PEntityOfEntIndex.
 - fixed missing initialization for "len" in wdmisc.
 - added <a name> links to sections in html docs.
 - for non-critical interface version mismatch, changed from a META_ERROR
   to just META_LOG, since it's not, strictly speaking, an error.

2001/04/17	1.06.00
 - added support for "metaexec.cfg", a commands file to be exec'd after
   loading the plugins, for plugin commands and cvars, since autoexec.cfg
   is parsed too early (before plugins loaded) and server.cfg is parsed too
   late (after ServerActivate).
 - better info in trace plugin's log messages for MessageBegin,
   WriteString, AlertMessage, RegUserMsg
 - to provide more manageable trace log output, throttled trace plugin to 1
   logmsg per second, by default (of course, this can cause log messages to
   be lost).  Added cvar "trace_unlimit" (0/1) to enable unlimited logging,
   as it did previously.
 - added centersay meta-utility functions (CENTER_SAY, CENTER_SAY_PARMS,
   CENTER_SAY_VARARGS).  Raised META_INTERFACE_VERSION from 5:3 to 5:4.
 - fixed crash when trying to load typical game DLLs (like standalone-bots)
   as metamod plugins.
 - fixed segfault on failed plugin attach; was dlclosing plugin
   prematurely.
 - in wdmisc, added a proof-of-concept for catching certain game events by
   doing string matching on all the log messages produced by the game.
   Ugly, to be sure, but interesting nonetheless.
 - added more entities for HL Paintball, and fixed the linux so name.
 - added "-Wno-unused" to CFLAGS when compiling sdk_util.o, to alleviate
   the complaints from #including all the extra SDK header files and class
   definitions.
 - removed GetEntityAPI routine from trace plugin, as it's unnecessary as a
   metamod plugin if already providing GetEntityAPI2.
 - in trace, moved gMetaFunctionTable declaration to plugin.cpp, so that
   meta_api.cpp can be a standard (plugin-independent) sourcefile used in
   any plugin.
 - updated the docs to include recent new features, as well as some better
   discussion of coding details.

2001/04/06	1.05.00
 - created utility callback functions, for use by plugins, to reduce code
   duplication and help simplify some things.  Currently, these consist of
   only some convenient logging functions (LOG_CONSOLE, LOG_MESSAGE,
   LOG_ERROR, LOG_DEVELOPER).
 - added "mutil_funcs_t" to Meta_Query, to pass the meta utility function
   table.  Increased META_INTERFACE_VERSION from 5:2 to 5:3.
 - made sure all exported DLL routines (ie routines that are accessed via
   dlsym) are both declared _and defined_ as 'extern "C"', so that the C++
   compiler enforces parameter type-matching, rather than considering
   routines with mis-matched arguments/types to be overloaded functions...
   Note that it's not sufficient to just be declared "C"; it has to defined
   this way as well, to make sure the C++ compiler matches it with the
   declaration.  Otherwise, again, it'll consider it an overloaded
   function, and allow it happily without complaint, and cause the
   subsequent dlsym to fail.
 - created and deployed C_DLLEXPORT macro for declaring/defining functions
   'extern "C" DLLEXPORT'.
 - added plugin 'wdmisc' as a basic example, and for my miscellaneous
   commands/cvars.
 - renamed "mm_stub" and "mm_trace" to "stub_mm" and "trace_mm" to make
   plugin name more apparent, and to be more consistent with adminmod_MM.
 - had to move plugin_info_t to its own header file, to avoid circular
   #include's between meta_api.h and mutil.h.
 - in dllapi.cpp and engineapi.cpp, pulled RETURN_API out of META_HANDLE
   macro, to make it easier to add code to middle of API routines.
 - renamed util_meta.h to support_meta.h, to avoid confusion with mutil.h
 - some code cleanup (better 80-column linebreaks).

2001/04/03	1.02.00
 - added support for Half-Life Paintball
 - added "*_mm" and "*_MM" to the list of suffixes to look for when loading
   plugins at console.
 - log errors when plugin tries to use MRES_SUPERCEDE in a _Post function
   (supercede is only relevant in a non-Post function; use OVERRIDE in a
   Post function).
 - mm_trace: added info to trace log for FindEntityInSphere
 - added osdep macro for strcasecmp, for compiling under windows
 - fixed a debug log message for GetEngineFunctions_Post
 - fixed a couple internal references to engine globals (gpGLobals)
 - renamed local SDK API routines to "mm_*" for easier debug breakpoints
 - altered debug levels for a couple API routines in api_info.cpp

2001/04/01	1.01.00
 - replaced use of FStrEQ in most places with !strcasecmp, so that case
   doesn't matter for things like console commands ("META LOAD" will now
   work in addition to "meta load") and paths (like "-game CSTRIKE"; and
   win32 filepaths are case-insignificant anyway).  Interestingly, the HL
   engine ignores case for console commands ("ADMIN_COMMAND" works), but
   cvars are only recognized with matching case ("ADMIN_DEBUG" does not
   work).  Confusing.
 - added "by " when printing author info, to make it a bit clearer
 - added a bit more operation info to metamod.html

2001/03/30	1.00.00
 - released as v1.0, for inclusion with release of Adminmod v2.50.
 - added $(VERSFILE) to Makefile and Config.mak, to better insure correct
   rebuild on version number changes
 - added "i486", "i586", and "i686" to "i386" in the list of prefixes to
   look for when loading plugins at console.
 - added "MDLL*" and "MNEW" macros in meta_api.h, to be more convenient for
   plugins to call GameDLL functions.
 - added missing "extern gamedll_funcs_t *gpGamedllFuncs" to meta_api.h
 - added handling of gpGamedllFuncs in stub, for example purposes.
 - fixed problems with running bots under metagame.ini:
 - moved instantiation of Plugins object to before meta_load_gamedll, so
   that if gamedll calls engine functions during GiveFnptrsToDll (like
   hpb_bot does), META_ENGINE_HANDLE won't crash from a null Plugins object
   pointer.
 - in GET_FUNC_TABLE_FROM_GAME, memset gamedll.funcs.struct_field, and then
   free/null it if the gamedll's GetFuncs call fails, to handle the
   situation where the gamedll provides GetNewDLLFunctions(), but doesn't
   have anything to return (like hpb_bot does, when the real gamedll
   doesn't provide GetNewDLLFunctions).
 - add handling of gpGamedllFuncs to mm_stub's Meta_Attach().

2001/03/27	1.0-rc5
 - fixed problem with crashing when a plugin failed to load (improper
   dereference of null 'info' structure; incomplete fix from rc2).
 - added a plugin status "badfile", for plugin files that appear to be
   invalid metamod plugins; this is to differentiate from "failed", which
   is a valid-looking plugin file (queried) but encountered a failure
   attaching/unloading/etc.
 - changed "-march=i686" optimization to "-march=i586", and moved this to
   only the optimized binaries, and not the debugging binaries.  As it
   turns out, i686 doesn't work on things like AMD K6-III cpus (I know, go
   figure :).
 - duplicated functionality of adminmod's "admin.ini", except with a file
   named "metagame.ini".  This will allow (at least partial) use with game
   DLLs that metamod doesn't support yet - "partial" because, although the
   game DLL will load, it may not work if it uses entities that metamod
   doesn't know about yet.  It will also allow use of standalone "bot"
   DLLs, which sit between metamod and the gamedll (much like metamod sits
   between the engine and the gamedll).
 - added console command "meta game" to show information about the loaded
   game DLL (to help troubleshoot issues with "metagame.ini").

2001/03/25	1.0-rc4
 - split linkfunc.cpp into linkent.h, linkgame.cpp, linkplug.cpp
 - split entity lists for mods into separate files, one for each mod; these
   are used to build linkgame.cpp
 - metamod/mm_trace version info should indicate debugging/optimized compile
 - added entity support for Judgement DM
 - added "-fno-rtti" to mm_trace gcc cflags, to address problem of
   unresolved CSaveRestoreBuffer symbols using older versions of gcc
 - lowered debug levels in GetEntityAPI, GetNewDLLFunctions, etc to enable
   "+developer" messages (6 -> 3).
 - removed "-Werror" from Makefile's default cflags; should only be used
   on devl system with edited SDK

2001/03/18	1.0-rc3
 - central Makefile can now build optimzed as well as debugging targets;
   default to compile is debugging; default in 'dlls' dir is optimized
 - toplevel Makefile builds release tgz/zip files.  TGZ file includes only
   linux .so objects, and text files in unix-LF format.  ZIP file includes
   only win32 .dll objects, and text files in dos-CRLF format, and actual
   files rather than symlinks.
 - added mod recognition for "judgedm" mod; still need entities list
 - added 4 entities for Firearms 2.5

2001/03/07	1.0-rc2
 - fixed missing WINAPI in mm_trace GiveFnptrsToDll
 - added HTML version of docs
 - description field in metamod.ini is now optional: 
    - uses "name" from plugin info for desc by default
    - desc field in metamod.ini will override this
    - "meta list" shows just desc, rather than desc and name
 - altered debug levels for a couple API routines in api_info.cpp
 - added missing "load" cmd in "meta" usage help
 - added to "meta load" usage help
 - added macros RETURN_META(result) and RETURN_META_VALUE(result, value) to
   simplify plugin coding
 - added parameter "gamedll_funcs" to meta_attach(), to give each plugin a
   copy of the gamedll's API function tables
 - raised META_INTERFACE_VERSION to "5:2"
 - now load gamedll before plugins (rather than the reverse) so that
   it'll have the gamedll func tables to hand to the plugins
 - changed trace plugin console commands:
     trace_version	->	trace version
     trace <routine>	->	trace set <routine>
     untrace <routine>	->	trace unset <routine>
     showtrace		->	trace show
 - added "trace list <api>" to list all available routines for tracing
 - fixed broken trace cvars
 - for "meta {load,unload,etc}" console cmd, added matching against plugin
   logtag, as well as for "mm_<prefix>" in plugin file
 - handle null 'info' after failed plugin load (ie in "meta info" etc)
 - fixed "usage: meta list" errors on some meta commands; was calling
   cmd_meta_pluginlist() instead of Plugins->show()
 - fixed: unload/attach delayed plugins at changelevel
 - now doesn't export newapi if gamedll doesn't provide it
 - now doesn't call plugins getnewapi if gamedll doesn't provide it
 - fixed incorrect apitable references in MPlugin::show()

2001/02/08	1.0-rc1
 - fixed unistd.h under MSVC
 - fixed S_ISREG under MSVC
 - fixed strncasecmp under MSVC
 - fixed void svr_meta() returning value
 - fixed missing WINAPI in mm_stub GiveFnptrsToDll
 - remade MSVC project for metamod
 - created MSVC project for mm_stub
 - added an example "metamod.ini" to ./docs
