Difference between revisions of "Metamod:Source"

From AlliedModders Wiki
Jump to: navigation, search
(added more to toc)
Line 4: Line 4:
 
[[Category:Half-Life 2]]
 
[[Category:Half-Life 2]]
 
[[Category:SourceMM]]
 
[[Category:SourceMM]]
 +
 +
==Naming Conventions==
 +
Metamod:Source refers to the overall product and concept behind SourceMM.  SourceMM is the actual implementation and codebase.  For practical purposes the names are interchangeable, however, "Metamod:Source" is preferred for public relations/marketing purposes and SourceMM is preferred for programming purposes.
 +
 +
==History==
 +
Metamod:Source is derived from the [[Metamod]] concept of intercepting calls between a game's engine and mod library.  While not based on the same code, the API is designed to be similar and familiar to [[Half-Life 1]] programmers.
 +
 +
===SourceMod Core1===
 +
Initially, the [[SourceMod]] project was started as the next-generation continuation of the [[AMX Mod X]] project.  It was designed to be a meta-interface layer for inter-communicating plugins.  However, as development continued, it was soon realized that the [[Valve Server Plugin]] interface would not be sufficient to provide proper engine access.
 +
 +
[[User:PM|Pavol Marko]] (core1 developer) decided to add "SourceHook" to SourceMod core1.  It was embedded as a large library for hooking specific virtual table functions.  After multiple revisions (see [[SourceHook]] history), it became apparent that 1)SourceHook needed to be game and interface generic, and 2)SourceMod and SourceHook needed to be split into two separate projects.  The logic behind this was that SourceHook needed to be a layer above [[Valve Server Plugins]], in order to properly manage hooks with the least possibility of conflicts.  Furthermore, SourceMod should be a plugin to the SourceHook interface, rather than managing it.  This decision can be likened to [[Admin-Mod]]'s early decision to split into the first [[Metamod]] project.
 +
 +
===SourceHook Finalized===
 +
After four major revisions, [[SourceHook]] was mature enough to be used in a production environment.  While [[User:PM|PM]] concentrated on fleshing out [[SourceHook]], [[User:BAILOPAN|BAILOPAN]] and [[User::Damaged Soul|DS]] created the GameDLL wrapper portion.
 +
 +
===Version 1.0===
 +
On May 6, 2005, Metamod:Source 1.0 was released with SourceHook v4.1 as a backend.  GameDLL wrapping was achieved by proving the engine with fake copies of the IServerGame* interfaces.  Once the true GameDLL location was known it would be loaded by SourceMM.  The fake interface then directly wrapped calls to the real GameDLL.
 +
 +
===Version 1.1===
 +
On October 21, 2005, the first major revision of SourceMM was released, featuring SourceHook v4.4, internal event listeners, dropped reliance on STL, and rewritten GameDLL hooking code.  The [[Day of Defeat|Day of Defeat:Source]] release by [[Valve Software]] revealed that the binary interface between the engine and mod wasn't necessarily public or current, and SourceMM's detection was improved for compatibility and speed.  Furthermore, SourceMM stopped wrapping the GameDLL interfaces and began using SourceHook to hook them. 
 +
 +
===Version 1.2===
 +
On January 7th, 2006, SourceMM was updated for SourceHook v4.5, but received no major API changes.

Revision as of 10:49, 13 January 2006

Introduction

Metamod:Source is an API manager and interception handler that sits in between the Half-Life 2 Engine (Source) and a subsequent Game Modification (MOD). It can dynamically load "SourceMM Plugins", written in C++, to intercept, override, and hook Engine and GameDLL API interfaces. It also allows for inter-plugin communication. As a backend it contains SourceHook, a powerful library for safely manipulating virtual table hooks.

Naming Conventions

Metamod:Source refers to the overall product and concept behind SourceMM. SourceMM is the actual implementation and codebase. For practical purposes the names are interchangeable, however, "Metamod:Source" is preferred for public relations/marketing purposes and SourceMM is preferred for programming purposes.

History

Metamod:Source is derived from the Metamod concept of intercepting calls between a game's engine and mod library. While not based on the same code, the API is designed to be similar and familiar to Half-Life 1 programmers.

SourceMod Core1

Initially, the SourceMod project was started as the next-generation continuation of the AMX Mod X project. It was designed to be a meta-interface layer for inter-communicating plugins. However, as development continued, it was soon realized that the Valve Server Plugin interface would not be sufficient to provide proper engine access.

Pavol Marko (core1 developer) decided to add "SourceHook" to SourceMod core1. It was embedded as a large library for hooking specific virtual table functions. After multiple revisions (see SourceHook history), it became apparent that 1)SourceHook needed to be game and interface generic, and 2)SourceMod and SourceHook needed to be split into two separate projects. The logic behind this was that SourceHook needed to be a layer above Valve Server Plugins, in order to properly manage hooks with the least possibility of conflicts. Furthermore, SourceMod should be a plugin to the SourceHook interface, rather than managing it. This decision can be likened to Admin-Mod's early decision to split into the first Metamod project.

SourceHook Finalized

After four major revisions, SourceHook was mature enough to be used in a production environment. While PM concentrated on fleshing out SourceHook, BAILOPAN and [[User::Damaged Soul|DS]] created the GameDLL wrapper portion.

Version 1.0

On May 6, 2005, Metamod:Source 1.0 was released with SourceHook v4.1 as a backend. GameDLL wrapping was achieved by proving the engine with fake copies of the IServerGame* interfaces. Once the true GameDLL location was known it would be loaded by SourceMM. The fake interface then directly wrapped calls to the real GameDLL.

Version 1.1

On October 21, 2005, the first major revision of SourceMM was released, featuring SourceHook v4.4, internal event listeners, dropped reliance on STL, and rewritten GameDLL hooking code. The Day of Defeat:Source release by Valve Software revealed that the binary interface between the engine and mod wasn't necessarily public or current, and SourceMM's detection was improved for compatibility and speed. Furthermore, SourceMM stopped wrapping the GameDLL interfaces and began using SourceHook to hook them.

Version 1.2

On January 7th, 2006, SourceMM was updated for SourceHook v4.5, but received no major API changes.