New gamedata organization (bug 3546, r=ds,pred).

This commit is contained in:
David Anderson 2009-01-12 02:28:22 -05:00
parent bc3491c5bd
commit e31cbbfe21
30 changed files with 2873 additions and 2567 deletions

View File

@ -90,9 +90,37 @@ struct TempSigInfo
unsigned int s_ServerBinCRC;
bool s_ServerBinCRC_Ok = false;
static bool DoesGameMatch(const char *value)
{
if (strcmp(value, g_Game) == 0 ||
strcmp(value, g_GameDesc) == 0 ||
strcmp(value, g_GameName) == 0)
{
return true;
}
return false;
}
static bool DoesEngineMatch(const char *value)
{
#if SOURCE_ENGINE == SE_EPISODEONE
if (strcmp(value, "original") == 0)
#elif SOURCE_ENGINE == SE_ORANGEBOX
if (strcmp(value, "orangebox") == 0)
#elif SOURCE_ENGINE == SE_LEFT4DEAD
if (strcmp(value, "left4dead") == 0)
#else
#error "Unknown engine type"
#endif
{
return true;
}
return false;
}
CGameConfig::CGameConfig(const char *file)
{
m_pFile = sm_strdup(file);
strncopy(m_File, file, sizeof(m_File));
m_pOffsets = sm_trie_create();
m_pProps = sm_trie_create();
m_pKeys = sm_trie_create();
@ -110,7 +138,6 @@ CGameConfig::~CGameConfig()
sm_trie_destroy(m_pProps);
sm_trie_destroy(m_pKeys);
sm_trie_destroy(m_pSigs);
delete [] m_pFile;
delete m_pStrings;
}
@ -136,11 +163,9 @@ SMCResult CGameConfig::ReadSMC_NewSection(const SMCStates *states, const char *n
}
case PSTATE_GAMES:
{
if ((strcmp(name, "*") == 0)
|| (strcmp(name, "#default") == 0)
|| (strcasecmp(name, g_Game) == 0)
|| (strcasecmp(name, g_GameDesc) == 0)
|| (strcasecmp(name, g_GameName) == 0))
if (strcmp(name, "*") == 0 ||
strcmp(name, "#default") == 0 ||
DoesGameMatch(name))
{
bShouldBeReadingDefault = true;
m_ParseState = PSTATE_GAMEDEFS;
@ -160,12 +185,15 @@ SMCResult CGameConfig::ReadSMC_NewSection(const SMCStates *states, const char *n
{
m_ParseState = PSTATE_GAMEDEFS_KEYS;
}
else if ((strcmp(name, "#supported") == 0)
&& (strcmp(m_Game, "#default") == 0))
else if ((strcmp(name, "#supported") == 0) && (strcmp(m_Game, "#default") == 0))
{
m_ParseState = PSTATE_GAMEDEFS_SUPPORTED;
/* Ignore this section unless we get a game. */
bShouldBeReadingDefault = false;
had_game = false;
matched_game = false;
had_engine = false;
matched_engine = false;
}
else if (strcmp(name, "Signatures") == 0)
{
@ -244,7 +272,7 @@ SMCResult CGameConfig::ReadSMC_NewSection(const SMCStates *states, const char *n
if (error[0] != '\0')
{
m_IgnoreLevel = 1;
g_Logger.LogError("[SM] Error while parsing CRC section for \"%s\" (%s):", m_Game, m_pFile);
g_Logger.LogError("[SM] Error while parsing CRC section for \"%s\" (%s):", m_Game, m_CurFile);
g_Logger.LogError("[SM] %s", error);
} else {
m_ParseState = PSTATE_GAMEDEFS_CRC_BINARY;
@ -297,13 +325,29 @@ SMCResult CGameConfig::ReadSMC_KeyValue(const SMCStates *states, const char *key
int id = m_pStrings->AddString(value);
sm_trie_replace(m_pKeys, key, (void *)id);
} else if (m_ParseState == PSTATE_GAMEDEFS_SUPPORTED) {
if (strcmp(key, "game") == 0
&& (strcasecmp(value, g_Game) == 0
|| strcasecmp(value, g_GameDesc) == 0
|| strcasecmp(value, g_GameName) == 0)
)
if (strcmp(key, "game") == 0)
{
bShouldBeReadingDefault = true;
had_game = true;
if (DoesGameMatch(value))
{
matched_game = true;
}
if ((!had_engine && matched_game) || (matched_engine && matched_game))
{
bShouldBeReadingDefault = true;
}
}
else if (strcmp(key, "engine") == 0)
{
had_engine = true;
if (DoesEngineMatch(value))
{
matched_engine = true;
}
if ((!had_game && matched_engine) || (matched_game && matched_engine))
{
bShouldBeReadingDefault = true;
}
}
} else if (m_ParseState == PSTATE_GAMEDEFS_SIGNATURES_SIG) {
if (strcmp(key, PLATFORM_NAME) == 0)
@ -390,7 +434,7 @@ SMCResult CGameConfig::ReadSMC_LeavingSection(const SMCStates *states)
g_Logger.LogError("[SM] Unable to find property %s.%s (file \"%s\") (mod \"%s\")",
m_Class,
m_Prop,
m_pFile,
m_CurFile,
m_Game);
}
}
@ -440,7 +484,7 @@ SMCResult CGameConfig::ReadSMC_LeavingSection(const SMCStates *states)
{
g_Logger.LogError("[SM] Unrecognized library \"%s\" (gameconf \"%s\")",
s_TempSig.library,
m_pFile);
m_CurFile);
} else {
#if defined PLATFORM_LINUX
if (s_TempSig.sig[0] == '@')
@ -457,12 +501,12 @@ SMCResult CGameConfig::ReadSMC_LeavingSection(const SMCStates *states)
} else {
g_Logger.LogError("[SM] Unable to load library \"%s\" (gameconf \"%s\")",
s_TempSig.library,
m_pFile);
m_File);
}
} else {
g_Logger.LogError("[SM] Unable to find library \"%s\" in memory (gameconf \"%s\")",
s_TempSig.library,
m_pFile);
m_File);
}
}
if (final_addr)
@ -526,37 +570,206 @@ skip_find:
return SMCResult_Continue;
}
bool CGameConfig::Reparse(char *error, size_t maxlength)
{
SMCError err;
SMCStates state = {0, 0};
#define MSTATE_NONE 0
#define MSTATE_MAIN 1
#define MSTATE_FILE 2
char path[PLATFORM_MAX_PATH];
g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "gamedata/%s.txt", m_pFile);
/* Backwards compatibility */
if (!g_LibSys.PathExists(path))
class MasterReader : public ITextListener_SMC
{
public:
virtual void ReadSMC_ParseStart()
{
g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "configs/gamedata/%s.txt", m_pFile);
state = MSTATE_NONE;
ignoreLevel = 0;
}
/* Initialize parse states */
m_IgnoreLevel = 0;
bShouldBeReadingDefault = true;
m_ParseState = PSTATE_NONE;
virtual SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name)
{
if (ignoreLevel)
{
return SMCResult_Continue;
}
if (state == MSTATE_NONE)
{
if (strcmp(name, "Game Master") == 0)
{
state = MSTATE_MAIN;
}
else
{
ignoreLevel++;
}
}
else if (state == MSTATE_MAIN)
{
strncopy(cur_file, name, sizeof(cur_file));
had_engine = false;
matched_engine = false;
had_game = false;
matched_game = false;
state = MSTATE_FILE;
}
else if (state == MSTATE_FILE)
{
ignoreLevel++;
}
return SMCResult_Continue;
}
virtual SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
{
if (ignoreLevel || state != MSTATE_FILE)
{
return SMCResult_Continue;
}
if (strcmp(key, "engine") == 0)
{
had_engine = true;
if (DoesEngineMatch(value))
{
matched_engine = true;
}
}
else if (strcmp(key, "game") == 0)
{
had_game = true;
if (DoesGameMatch(value))
{
matched_game = true;
}
}
return SMCResult_Continue;
}
virtual SMCResult ReadSMC_LeavingSection(const SMCStates *states)
{
if (ignoreLevel)
{
ignoreLevel--;
return SMCResult_Continue;
}
if (state == MSTATE_FILE)
{
/* The four success conditions:
* 1. Needed nothing.
* 2. Needed game only.
* 3. Needed engine only.
* 4. Needed both engine and game.
* Final result is minimized via k-map.
*/
#if 0
if ((!had_engine && !had_game) ||
(!had_engine && (had_game && matched_game)) ||
(!had_game && (had_engine && matched_engine)) ||
((had_game && had_engine) && (matched_game && matched_engine)))
#endif
if ((!had_engine && !had_game) ||
(!had_engine && matched_game) ||
(!had_game && matched_engine) ||
(matched_engine && matched_game))
{
fileList->push_back(cur_file);
}
state = MSTATE_MAIN;
}
else if (state == MSTATE_MAIN)
{
state = MSTATE_NONE;
}
return SMCResult_Continue;
}
public:
List<String> *fileList;
unsigned int state;
unsigned int ignoreLevel;
char cur_file[PLATFORM_MAX_PATH];
bool had_engine;
bool matched_engine;
bool had_game;
bool matched_game;
};
static MasterReader master_reader;
bool CGameConfig::Reparse(char *error, size_t maxlength)
{
/* Reset cached data */
m_pStrings->Reset();
sm_trie_clear(m_pOffsets);
sm_trie_clear(m_pProps);
sm_trie_clear(m_pKeys);
if ((err=textparsers->ParseSMCFile(path, this, &state, error, maxlength))
char path[PLATFORM_MAX_PATH];
/* See if we can use the extended gamedata format. */
g_SourceMod.BuildPath(Path_SM, path, sizeof(path), "gamedata/%s/master.games.txt", m_File);
if (!g_LibSys.PathExists(path))
{
/* Nope, use the old mechanism. */
UTIL_Format(path, sizeof(path), "%s.txt", m_File);
return EnterFile(path, error, maxlength);
}
/* Otherwise, it's time to parse the master. */
SMCError err;
SMCStates state = {0, 0};
List<String> fileList;
master_reader.fileList = &fileList;
err = textparsers->ParseSMCFile(path, &master_reader, &state, error, maxlength);
if (err != SMCError_Okay)
{
const char *msg = textparsers->GetSMCErrorString(err);
g_Logger.LogError("[SM] Error parsing master gameconf file \"%s\":", path);
g_Logger.LogError("[SM] Error %d on line %d, col %d: %s",
err,
state.line,
state.col,
msg ? msg : "Unknown error");
return false;
}
/* Go through each file we found and parse it. */
List<String>::iterator iter;
for (iter = fileList.begin(); iter != fileList.end(); iter++)
{
UTIL_Format(path, sizeof(path), "%s/%s", m_File, (*iter).c_str());
if (!EnterFile(path, error, maxlength))
{
return false;
}
}
return true;
}
bool CGameConfig::EnterFile(const char *file, char *error, size_t maxlength)
{
SMCError err;
SMCStates state = {0, 0};
g_SourceMod.BuildPath(Path_SM, m_CurFile, sizeof(m_CurFile), "gamedata/%s", file);
/* Initialize parse states */
m_IgnoreLevel = 0;
bShouldBeReadingDefault = true;
m_ParseState = PSTATE_NONE;
if ((err=textparsers->ParseSMCFile(m_CurFile, this, &state, error, maxlength))
!= SMCError_Okay)
{
const char *msg;
msg = textparsers->GetSMCErrorString(err);
g_Logger.LogError("[SM] Error parsing gameconfig file \"%s\":", path);
g_Logger.LogError("[SM] Error parsing gameconfig file \"%s\":", m_CurFile);
g_Logger.LogError("[SM] Error %d on line %d, col %d: %s",
err,
state.line,
@ -722,7 +935,7 @@ void GameConfigManager::CloseGameConfigFile(IGameConfig *cfg)
if (pConfig->DecRefCount() == 0)
{
sm_trie_delete(m_pLookup, pConfig->m_pFile);
sm_trie_delete(m_pLookup, pConfig->m_File);
delete pConfig;
}
}

View File

@ -55,6 +55,7 @@ public:
~CGameConfig();
public:
bool Reparse(char *error, size_t maxlength);
bool EnterFile(const char *file, char *error, size_t maxlength);
public: //ITextListener_SMC
SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name);
SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value);
@ -69,7 +70,8 @@ public:
unsigned int DecRefCount();
private:
BaseStringTable *m_pStrings;
char *m_pFile;
char m_File[PLATFORM_MAX_PATH];
char m_CurFile[PLATFORM_MAX_PATH];
Trie *m_pOffsets;
Trie *m_pProps;
Trie *m_pKeys;
@ -83,6 +85,10 @@ private:
char m_offset[64];
char m_Game[256];
bool bShouldBeReadingDefault;
bool had_game;
bool matched_game;
bool had_engine;
bool matched_engine;
/* Custom Sections */
unsigned int m_CustomLevel;

View File

@ -1,180 +0,0 @@
"Games"
{
"#default"
{
"Offsets"
{
"GetDataDescMap"
{
"windows" "13"
"linux" "14"
}
"m_lifeState"
{
"class" "CBasePlayer"
"prop" "m_lifeState"
}
}
}
"dod"
{
"Keys"
{
"RadioMenuTimeout" "4"
}
"Offsets"
{
"GetDataDescMap"
{
"windows" "11"
"linux" "12"
}
}
}
"ship"
{
"Offsets"
{
"GetDataDescMap"
{
"windows" "18"
"linux" "19"
}
}
}
"tf"
{
"Offsets"
{
"GetDataDescMap"
{
"windows" "11"
"linux" "12"
}
}
}
"ageofchivalry"
{
"Keys"
{
"RadioMenuTimeout" "4"
}
"Offsets"
{
"GetDataDescMap"
{
"windows" "11"
"linux" "12"
}
}
}
"left4dead"
{
"Offsets"
{
"GetDataDescMap"
{
"windows" "11"
"linux" "12"
}
}
}
/**
* Which games support ShowMenu?
*/
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "dod"
"game" "sourceforts"
"game" "insurgency"
"game" "Insurgency"
"game" "tf"
"game" "pvkii"
"game" "diprip"
"game" "synergy"
"game" "FortressForever"
"game" "left4dead"
"game" "ageofchivalry"
"game" "obsidian"
}
"Keys"
{
"HudRadioMenuMsg" "ShowMenu"
}
}
/**
* Which games support HudMsg?
*/
"#default"
{
"#supported"
{
"game" "hl2mp"
"game" "sourceforts"
"game" "tf"
"game" "ageofchivalry"
"game" "obsidian"
}
"Keys"
{
"HudTextMsg" "HudMsg"
}
}
/**
* Which games use an extra byte in the HintText
* message? Even though it's in the SDK, apparently
* only CS:S does this right now.
*/
"#default"
{
"#supported"
{
"game" "cstrike"
}
"Keys"
{
"HintTextPreByte" "yes"
}
}
"cstrike"
{
"Keys"
{
"GameExtension" "game.cstrike"
}
}
"tf"
{
"Keys"
{
"GameExtension" "game.tf2"
"RadioMenuTimeout" "4"
}
}
"synergy"
{
"Keys"
{
"RadioMenuTimeout" "4"
}
}
}

View File

@ -0,0 +1,143 @@
"Games"
{
"#default"
{
"Offsets"
{
"m_lifeState"
{
"class" "CBasePlayer"
"prop" "m_lifeState"
}
}
}
/* Original engine specifics */
"#default"
{
"#supported"
{
"engine" "original"
}
"Offsets"
{
"GetDataDescMap"
{
"windows" "13"
"linux" "14"
}
}
}
/* OB/L4D engine specifics */
"#default"
{
"#supported"
{
"engine" "orangebox"
"engine" "left4dead"
}
"Offsets"
{
"GetDataDescMap"
{
"windows" "11"
"linux" "12"
}
}
}
/* The Ship is completely different */
"ship"
{
"Offsets"
{
"GetDataDescMap"
{
"windows" "18"
"linux" "19"
}
}
}
/* Which games support ShowMenu? */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "dod"
"game" "sourceforts"
"game" "insurgency"
"game" "tf"
"game" "pvkii"
"game" "diprip"
"game" "synergy"
"game" "FortressForever"
"game" "left4dead"
"game" "obsidian"
"game" "ageofchivalry"
}
"Keys"
{
"HudRadioMenuMsg" "ShowMenu"
}
}
/* Which games need a radio menu timeout? */
"#default"
{
"#supported"
{
"game" "tf"
"game" "synergy"
"game" "dod"
"game" "ageofchivalry"
}
"Keys"
{
"RadioMenuTimeout" "4"
}
}
/**
* Which games support HudMsg?
*/
"#default"
{
"#supported"
{
"game" "hl2mp"
"game" "sourceforts"
"game" "tf"
"game" "ageofchivalry"
"game" "obsidian"
}
"Keys"
{
"HudTextMsg" "HudMsg"
}
}
"cstrike"
{
"Keys"
{
"HintTextPreByte" "yes"
"GameExtension" "game.cstrike"
}
}
"tf"
{
"Keys"
{
"GameExtension" "game.tf2"
}
}
}

View File

@ -0,0 +1,6 @@
"Game Master"
{
"common.games.txt"
{
}
}

View File

@ -1,635 +0,0 @@
"Games"
{
/* Sounds */
"#default"
{
"Keys"
{
"SlapSoundCount" "3"
"SlapSound1" "player/pl_fallpain1.wav"
"SlapSound2" "player/pl_fallpain3.wav"
"SlapSound3" "player/pl_pain5.wav"
"m_iFrags" "m_iFrags"
}
"Offsets"
{
"m_iHealth"
{
"class" "CBasePlayer"
"prop" "m_iHealth"
}
"m_lifeState"
{
"class" "CBasePlayer"
"prop" "m_lifeState"
}
}
}
/* General Temp Entities */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into CBaseTempEntity constructor */
"s_pTempEntities"
{
"windows" "17"
}
"GetTEName"
{
"windows" "4"
"linux" "4"
}
"GetTENext"
{
"windows" "8"
"linux" "8"
}
"TE_GetServerClass"
{
"windows" "0"
"linux" "0"
}
}
"Signatures"
{
"CBaseTempEntity"
{
"library" "server"
"windows" "\x8B\xC1\x8B\x4C\x24\x04\xC7\x00\x2A\x2A\x2A\x2A\x89\x48\x04\x8B\x15\x2A\x2A\x2A\x2A\x89\x50\x08\xA3\x2A\x2A\x2A\x2A\xC2\x04\x00"
}
"s_pTempEntities"
{
"library" "server"
"linux" "@_ZN15CBaseTempEntity15s_pTempEntitiesE"
}
}
}
/* Create Entity Signatures */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Signatures"
{
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x64\x8B\xCB"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2"
}
}
}
/* CGlobalEntityList */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into LevelShutdown */
"gEntList"
{
"windows" "11"
}
}
"Signatures"
{
"LevelShutdown"
{
"library" "server"
"windows" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8"
}
"gEntList"
{
"library" "server"
"linux" "@gEntList"
}
/* Functions in CGlobalEntityList */
"FindEntityByClassname"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03"
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
}
}
}
/* General GameRules */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into CreateGameRulesObject */
"g_pGameRules"
{
"windows" "2"
}
}
"Signatures"
{
/* This signature sometimes has multiple matches, but this
* does not matter as g_pGameRules is involved in all of them.
* The same g_pGameRules offset applies to each match.
*
* Sometimes this block of bytes is at the beginning of the static
* CreateGameRulesObject function and sometimes it is in the middle
* of an entirely different function. This depends on the game.
*/
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2"
}
"g_pGameRules"
{
"library" "server"
"linux" "@g_pGameRules"
}
}
}
/* IServer interface pointer */
"#default"
{
"Offsets"
{
/* Offset into IVEngineServer::CreateFakeClient */
"sv"
{
"windows" "6"
}
}
"Signatures"
{
/* CBaseServer object for IServer interface */
"sv"
{
"library" "engine"
"linux" "@sv"
}
}
}
/* EntityFactoryDictionary function */
"#default"
{
"Signatures"
{
"EntityFactory"
{
"library" "server"
"windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3"
"linux" "@_Z23EntityFactoryDictionaryv"
}
}
}
/* CBaseEntityOutput::FireOutput */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Signatures"
{
"FireOutput"
{
"library" "server"
"windows" "\x81\xEC\x1C\x01\x00\x00\x53\x55\x56\x8B\x71\x14\x85\xF6"
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
}
}
"Offsets"
{
"FireOutputBackup"
{
"windows" "6"
"linux" "10"
}
}
}
/* SetUserInfo data */
"#default"
{
"Offsets"
{
/**
* CBaseClient::SetUserCVar(char const*,char const*);
* Linux offset straight from VTable dump.
* Windows offset is crazy. Found the windows 'SetName' function using string "(%d)%-0.*s"
* Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1)
*/
"SetUserCvar"
{
"windows" "17"
"linux" "55"
}
/**
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
* Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end.
* Linux: mov byte ptr [esi+98h], 0
* Win: mov byte ptr [esi+0A4h], 0
*/
"InfoChanged"
{
"windows" "164"
"linux" "152"
}
}
}
/* Team Fortress 2 */
"tf"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "406"
"linux" "410"
}
"RemovePlayerItem"
{
"windows" "238"
"linux" "239"
}
"Weapon_GetSlot"
{
"windows" "236"
"linux" "237"
}
"Ignite"
{
"windows" "193"
"linux" "194"
}
"Extinguish"
{
"windows" "197"
"linux" "198"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "388"
"linux" "388"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"WeaponEquip"
{
"windows" "229"
"linux" "230"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
/* Day of Defeat: Source */
"dod"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "350"
"linux" "351"
}
"RemovePlayerItem"
{
"windows" "238"
"linux" "239"
}
"Weapon_GetSlot"
{
"windows" "236"
"linux" "237"
}
"Ignite"
{
"windows" "193"
"linux" "194"
}
"Extinguish"
{
"windows" "197"
"linux" "198"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "388"
"linux" "388"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "229"
"linux" "230"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
/* Afe of Chivalry */
"ageofchivalry"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "351"
"linux" "352"
}
"RemovePlayerItem"
{
"windows" "239"
"linux" "240"
}
"Weapon_GetSlot"
{
"windows" "237"
"linux" "238"
}
"Ignite"
{
"windows" "194"
"linux" "195"
}
"Extinguish"
{
"windows" "198"
"linux" "199"
}
"Teleport"
{
"windows" "101"
"linux" "102"
}
"CommitSuicide"
{
"windows" "389"
"linux" "389"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "230"
"linux" "231"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
/* Obsidian Conflict 1.3 */
"obsidian"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "350"
"linux" "351"
}
"RemovePlayerItem"
{
"windows" "237"
"linux" "238"
}
"Weapon_GetSlot"
{
"windows" "235"
"linux" "236"
}
"Ignite"
{
"windows" "190"
"linux" "191"
}
"Extinguish"
{
"windows" "194"
"linux" "195"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "393"
"linux" "393"
}
"GetVelocity"
{
"windows" "127"
"linux" "128"
}
"EyeAngles"
{
"windows" "119"
"linux" "120"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "228"
"linux" "229"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
"Games"
{
/* Sounds */
"#default"
{
"Keys"
{
"SlapSoundCount" "3"
"SlapSound1" "player/pl_fallpain1.wav"
"SlapSound2" "player/pl_fallpain3.wav"
"SlapSound3" "player/pl_pain5.wav"
}
}
/* Properties */
"#default"
{
"Keys"
{
"m_iFrags" "m_iFrags"
}
"Offsets"
{
"m_iHealth"
{
"class" "CBasePlayer"
"prop" "m_iHealth"
}
"m_lifeState"
{
"class" "CBasePlayer"
"prop" "m_lifeState"
}
}
}
}

View File

@ -0,0 +1,288 @@
"Games"
{
/* General Temp Entities */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "hl2mp"
"game" "ship"
"game" "!Dystopia"
"game" "insurgency"
"game" "pvkii"
"game" "sourceforts"
"game" "FortressForever"
"game" "empires"
"game" "synergy"
"game" "hidden"
"game" "zombie_master"
}
"Offsets"
{
/* Offset into CBaseTempEntity constructor */
"s_pTempEntities"
{
"windows" "17"
}
"GetTEName"
{
"windows" "4"
"linux" "4"
}
"GetTENext"
{
"windows" "8"
"linux" "8"
}
"TE_GetServerClass"
{
"windows" "1"
"linux" "1"
}
}
"Signatures"
{
"CBaseTempEntity"
{
"library" "server"
"windows" "\x8B\xC1\x8B\x4C\x24\x04\xC7\x00\x2A\x2A\x2A\x2A\x89\x48\x04\x8B\x15\x2A\x2A\x2A\x2A\x89\x50\x08\xA3\x2A\x2A\x2A\x2A\xC2\x04\x00"
}
"s_pTempEntities"
{
"library" "server"
"linux" "@_ZN15CBaseTempEntity15s_pTempEntitiesE"
}
}
}
/* General GameRules */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "garrysmod"
"game" "hl2mp"
"game" "ship"
"game" "!Dystopia"
"game" "insurgency"
"game" "pvkii"
"game" "sourceforts"
"game" "FortressForever"
"game" "empires"
"game" "synergy"
"game" "hidden"
}
"Offsets"
{
/* Offset into CreateGameRulesObject */
"g_pGameRules"
{
"windows" "2"
}
}
"Signatures"
{
/* This signature sometimes has multiple matches, but this
* does not matter as g_pGameRules is involved in all of them.
* The same g_pGameRules offset applies to each match.
*
* Sometimes this block of bytes is at the beginning of the static
* CreateGameRulesObject function and sometimes it is in the middle
* of an entirely different function. This depends on the game.
*/
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01\xFF\x50"
}
"g_pGameRules"
{
"library" "server"
"linux" "@g_pGameRules"
}
}
}
/* CGlobalEntityList */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "garrysmod"
"game" "hl2mp"
"game" "ship"
"game" "insurgency"
"game" "pvkii"
"game" "sourceforts"
"game" "FortressForever"
"game" "empires"
"game" "synergy"
"game" "hidden"
"game" "zombie_master"
}
"Offsets"
{
/* Offset into LevelShutdown */
"gEntList"
{
"windows" "11"
}
}
"Signatures"
{
"LevelShutdown"
{
"library" "server"
"windows" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8"
}
"gEntList"
{
"library" "server"
"linux" "@gEntList"
}
/* Functions in CGlobalEntityList */
"FindEntityByClassname"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x85\xC9\x57\x74\x2A\x8B\x01\xFF\x50\x2A\x8B\x08\x81\xE1\x2A\x2A\x2A\x2A\x83\xC1\x2A\xC1\xE1\x2A\x8B\x3C\x31\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\x9B\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39"
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
}
}
}
/* Create Entity Signatures */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "hl2mp"
"game" "insurgency"
"game" "pvkii"
"game" "sourceforts"
"game" "empires"
"game" "synergy"
"game" "hidden"
"game" "FortressForever"
}
"Signatures"
{
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0"
}
}
}
/* IServer interface pointer */
"#default"
{
"Offsets"
{
/* Offset into IVEngineServer::CreateFakeClient */
"sv"
{
"windows" "6"
}
}
"Signatures"
{
/* CBaseServer object for IServer interface */
"sv"
{
"library" "engine"
"linux" "@sv"
}
}
}
/* EntityFactoryDictionary function */
"#default"
{
"Signatures"
{
"EntityFactory"
{
"library" "server"
"windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3"
"linux" "@_Z23EntityFactoryDictionaryv"
}
}
}
/* CBaseEntityOutput::FireOutput */
"#default"
{
"#supported"
{
"game" "cstrike"
"game" "hl2mp"
}
"Signatures"
{
"FireOutput"
{
"library" "server"
"windows" "\x81\xEC\x1C\x03\x00\x00\x53\x55\x56\x8B\x71\x14"
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
}
}
"Offsets"
{
"FireOutputBackup"
{
"windows" "6"
"linux" "6"
}
}
}
/* SetUserInfo data */
"#default"
{
"Offsets"
{
/**
* CBaseClient::SetUserCVar(char const*,char const*);
* Linux offset straight from VTable dump.
* Windows offset is crazy. Found the windows 'SetName' function using string "(%d)%-0.*s"
* Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1)
*/
"SetUserCvar"
{
"windows" "17"
"linux" "53"
}
/**
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
* Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end.
* Linux: mov byte ptr [esi+98h], 0
* Win: mov byte ptr [esi+0A4h], 0
*/
"InfoChanged"
{
"windows" "164"
"linux" "152"
}
}
}
}

View File

@ -0,0 +1,257 @@
"Games"
{
/* General Temp Entities */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into CBaseTempEntity constructor */
"s_pTempEntities"
{
"windows" "17"
}
"GetTEName"
{
"windows" "4"
"linux" "4"
}
"GetTENext"
{
"windows" "8"
"linux" "8"
}
"TE_GetServerClass"
{
"windows" "0"
"linux" "0"
}
}
"Signatures"
{
"CBaseTempEntity"
{
"library" "server"
"windows" "\x8B\xC1\x8B\x4C\x24\x04\xC7\x00\x2A\x2A\x2A\x2A\x89\x48\x04\x8B\x15\x2A\x2A\x2A\x2A\x89\x50\x08\xA3\x2A\x2A\x2A\x2A\xC2\x04\x00"
}
"s_pTempEntities"
{
"library" "server"
"linux" "@_ZN15CBaseTempEntity15s_pTempEntitiesE"
}
}
}
/* Create Entity Signatures */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Signatures"
{
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x64\x8B\xCB"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2"
}
}
}
/* CGlobalEntityList */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into LevelShutdown */
"gEntList"
{
"windows" "11"
}
}
"Signatures"
{
"LevelShutdown"
{
"library" "server"
"windows" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8"
}
"gEntList"
{
"library" "server"
"linux" "@gEntList"
}
/* Functions in CGlobalEntityList */
"FindEntityByClassname"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03"
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
}
}
}
/* General GameRules */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Offsets"
{
/* Offset into CreateGameRulesObject */
"g_pGameRules"
{
"windows" "2"
}
}
"Signatures"
{
/* This signature sometimes has multiple matches, but this
* does not matter as g_pGameRules is involved in all of them.
* The same g_pGameRules offset applies to each match.
*
* Sometimes this block of bytes is at the beginning of the static
* CreateGameRulesObject function and sometimes it is in the middle
* of an entirely different function. This depends on the game.
*/
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2"
}
"g_pGameRules"
{
"library" "server"
"linux" "@g_pGameRules"
}
}
}
/* IServer interface pointer */
"#default"
{
"Offsets"
{
/* Offset into IVEngineServer::CreateFakeClient */
"sv"
{
"windows" "6"
}
}
"Signatures"
{
/* CBaseServer object for IServer interface */
"sv"
{
"library" "engine"
"linux" "@sv"
}
}
}
/* EntityFactoryDictionary function */
"#default"
{
"Signatures"
{
"EntityFactory"
{
"library" "server"
"windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3"
"linux" "@_Z23EntityFactoryDictionaryv"
}
}
}
/* CBaseEntityOutput::FireOutput */
"#default"
{
"#supported"
{
"game" "dod"
"game" "tf"
"game" "ageofchivalry"
}
"Signatures"
{
"FireOutput"
{
"library" "server"
"windows" "\x81\xEC\x1C\x01\x00\x00\x53\x55\x56\x8B\x71\x14\x85\xF6"
"linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f"
}
}
"Offsets"
{
"FireOutputBackup"
{
"windows" "6"
"linux" "10"
}
}
}
/* SetUserInfo data */
"#default"
{
"Offsets"
{
/**
* CBaseClient::SetUserCVar(char const*,char const*);
* Linux offset straight from VTable dump.
* Windows offset is crazy. Found the windows 'SetName' function using string "(%d)%-0.*s"
* Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1)
*/
"SetUserCvar"
{
"windows" "17"
"linux" "55"
}
/**
* Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made.
* Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end.
* Linux: mov byte ptr [esi+98h], 0
* Win: mov byte ptr [esi+0A4h], 0
*/
"InfoChanged"
{
"windows" "164"
"linux" "152"
}
}
}
}

View File

@ -8,20 +8,6 @@
"SlapSoundCount" "2"
"SlapSound1" "player/damage1.wav"
"SlapSound2" "player/damage2.wav"
"m_iFrags" "m_iFrags"
}
"Offsets"
{
"m_iHealth"
{
"class" "CBasePlayer"
"prop" "m_iHealth"
}
"m_lifeState"
{
"class" "CBasePlayer"
"prop" "m_lifeState"
}
}
}

View File

@ -0,0 +1,90 @@
"Games"
{
/* Age of Chivalry */
"ageofchivalry"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "351"
"linux" "352"
}
"RemovePlayerItem"
{
"windows" "239"
"linux" "240"
}
"Weapon_GetSlot"
{
"windows" "237"
"linux" "238"
}
"Ignite"
{
"windows" "194"
"linux" "195"
}
"Extinguish"
{
"windows" "198"
"linux" "199"
}
"Teleport"
{
"windows" "101"
"linux" "102"
}
"CommitSuicide"
{
"windows" "389"
"linux" "389"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "230"
"linux" "231"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

View File

@ -0,0 +1,98 @@
"Games"
{
/* Counter-Strike: Source */
"cstrike"
{
"Keys"
{
"SlapSoundCount" "3"
"SlapSound1" "player/damage1.wav"
"SlapSound2" "player/damage2.wav"
"SlapSound3" "player/damage3.wav"
}
"Offsets"
{
"GiveNamedItem"
{
"windows" "329"
"linux" "330"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "357"
"linux" "358"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "217"
"linux" "218"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
}
}

View File

@ -0,0 +1,90 @@
"Games"
{
/* Day of Defeat: Source */
"dod"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "350"
"linux" "351"
}
"RemovePlayerItem"
{
"windows" "238"
"linux" "239"
}
"Weapon_GetSlot"
{
"windows" "236"
"linux" "237"
}
"Ignite"
{
"windows" "193"
"linux" "194"
}
"Extinguish"
{
"windows" "197"
"linux" "198"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "388"
"linux" "388"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "229"
"linux" "230"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

View File

@ -0,0 +1,125 @@
"Games"
{
/* Dsytopia */
"!Dystopia"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "331"
"linux" "332"
}
"RemovePlayerItem"
{
"windows" "229"
"linux" "230"
}
"Weapon_GetSlot"
{
"windows" "227"
"linux" "228"
}
"Ignite"
{
"windows" "191"
"linux" "192"
}
"Extinguish"
{
"windows" "192"
"linux" "193"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "360"
"linux" "361"
}
"GetVelocity"
{
"windows" "128"
"linux" "129"
}
"EyeAngles"
{
"windows" "120"
"linux" "121"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "220"
"linux" "221"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
/* Offset into CBaseTempEntity constructor.
* On Windows Dsytopia is heavily inlined; we use the function
* surrounding "aCouldnTFindTem" in IDA instead.
*/
"s_pTempEntities"
{
"windows" "70"
}
}
"Signatures"
{
/* On Windows Dsytopia is heavily inlined; we use the function
* surrounding "aCouldnTFindTem" in IDA instead.
*/
"CBaseTempEntity"
{
"library" "server"
"windows" "\x81\xEC\x84\x00\x00\x00\x56\x8B\xF1\x8B\x46\x6C\x57\x8D\x7E\x6C\x8D\x4C\x24\x08\x83\xC8\x20\x51\x89\x44\x24\x0C\xE8\x2A\x2A\x2A"
}
/* Dystopia always has to be different, doesn't it
*
* This is very similar to the general signature, except that
* it does "mov edx, [eax+2Ch]" before making a call rather than
* doing "call dword ptr [eax+2Ch]"
*/
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2"
}
}
}
}

View File

@ -0,0 +1,106 @@
"Games"
{
/* Empires 2 */
"empires"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "332"
"linux" "333"
}
"RemovePlayerItem"
{
"windows" "230"
"linux" "231"
}
"Weapon_GetSlot"
{
"windows" "228"
"linux" "229"
}
"Ignite"
{
"windows" "192"
"linux" "193"
}
"Extinguish"
{
"windows" "193"
"linux" "194"
}
"Teleport"
{
"windows" "102"
"linux" "103"
}
"CommitSuicide"
{
"windows" "360"
"linux" "361"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"AcceptInput"
{
"windows" "36"
"linux" "37"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "221"
"linux" "222"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
/* Offset into LevelShutdown for CGlobalEntList */
"gEntList"
{
"windows" "64"
}
}
"Signatures"
{
"LevelShutdown"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2B\x56\xE8\x2A\x2A\x2A\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x8B\xF1\x74\x0E"
}
}
}
}

View File

@ -0,0 +1,114 @@
"Games"
{
/* Fortress Forever */
"FortressForever"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "338"
"linux" "339"
}
"RemovePlayerItem"
{
"windows" "236"
"linux" "237"
}
"Weapon_GetSlot"
{
"windows" "234"
"linux" "235"
}
"Ignite"
{
"windows" "198"
"linux" "199"
}
"Extinguish"
{
"windows" "199"
"linux" "200"
}
"Teleport"
{
"windows" "104"
"linux" "105"
}
"CommitSuicide"
{
"windows" "366"
"linux" "367"
}
"GetVelocity"
{
"windows" "136"
"linux" "137"
}
"EyeAngles"
{
"windows" "128"
"linux" "129"
}
"AcceptInput"
{
"windows" "39"
"linux" "40"
}
"DispatchKeyValue"
{
"windows" "35"
"linux" "34"
}
"DispatchKeyValueFloat"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValueVector"
{
"windows" "33"
"linux" "36"
}
"SetEntityModel"
{
"windows" "27"
"linux" "28"
}
"WeaponEquip"
{
"windows" "227"
"linux" "228"
}
"Activate"
{
"windows" "36"
"linux" "37"
}
}
"Signatures"
{
"CreateGameRulesObject"
{
"library" "server"
"windows" "8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x09\x8B\x01\x8B\x50\x2C\x6A\x01"
}
"FindEntityByClassname"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x85\xC9\x57\x74\x19\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x83\xC0\x01\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x04\x00\x01\x00\x85\xFF\x74\x39\x8B\x5C\x24\x18\x8B\x2D\x2A\x2A\x2A\x2A\xEB\x03"
}
"DispatchSpawn"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x60\x8B\xCB"
}
"CreateEntityByName"
{
"library" "server"
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x27\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x54\x56\xFF\xD2"
}
}
}
}

View File

@ -0,0 +1,66 @@
"Games"
{
/* Garry's Mod 10 - Windows only
* This mod is not officially supported, and the definitions are
* for Garry's Mod pre-Orange Box.
* (credits: Damaged Soul)
*/
"garrysmod"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "366"
}
"RemovePlayerItem"
{
"windows" "264"
}
"Weapon_GetSlot"
{
"windows" "262"
}
"Ignite"
{
"windows" "220"
}
"Extinguish"
{
"windows" "221"
}
"Teleport"
{
"windows" "99"
}
"CommitSuicide"
{
"windows" "394"
}
"GetVelocity"
{
"windows" "127"
}
"EyeAngles"
{
"windows" "119"
}
"AcceptInput"
{
"windows" "35"
}
"DispatchKeyValue"
{
"windows" "31"
}
"DispatchKeyValueFloat"
{
"windows" "30"
}
"DispatchKeyValueVector"
{
"windows" "29"
}
}
}
}

View File

@ -0,0 +1,101 @@
"Games"
{
/* Hidden:Source Beta 4b */
"hidden"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "348"
"linux" "349"
}
"RemovePlayerItem"
{
"windows" "207"
"linux" "208"
}
"Weapon_GetSlot"
{
"windows" "205"
"linux" "206"
}
"Ignite"
{
"windows" "170"
"linux" "171"
}
"Extinguish"
{
"windows" "171"
"linux" "172"
}
"Teleport"
{
"windows" "90"
"linux" "91"
}
"GetVelocity"
{
"windows" "114"
"linux" "115"
}
"EyeAngles"
{
"windows" "106"
"linux" "107"
}
"DispatchKeyValue"
{
"windows" "30"
"linux" "29"
}
"DispatchKeyValueFloat"
{
"windows" "29"
"linux" "30"
}
"DispatchKeyValueVector"
{
"windows" "28"
"linux" "31"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
"TE_GetServerClass"
{
"windows" "0"
"linux" "0"
}
"WeaponEquip"
{
"windows" "198"
"linux" "199"
}
}
"Signatures"
{
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14"
}
}
}
}

View File

@ -0,0 +1,90 @@
"Games"
{
/* Half-Life 2: Deathmatch */
"hl2mp"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "328"
"linux" "329"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "356"
"linux" "357"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "217"
"linux" "218"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
}
}

View File

@ -0,0 +1,71 @@
"Games"
{
/* Insurgency */
"insurgency"
{
"Offsets"
{
/* CBasePlayer */
"Ignite"
{
"windows" "174"
"linux" "175"
}
"Extinguish"
{
"windows" "175"
"linux" "176"
}
"Teleport"
{
"windows" "90"
"linux" "91"
}
"GetVelocity"
{
"windows" "115"
"linux" "116"
}
"EyeAngles"
{
"windows" "107"
"linux" "108"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "30"
"linux" "29"
}
"DispatchKeyValueFloat"
{
"windows" "29"
"linux" "30"
}
"DispatchKeyValueVector"
{
"windows" "28"
"linux" "31"
}
"SetEntityModel"
{
"windows" "24"
"linux" "25"
}
"WeaponEquip"
{
"windows" "215"
"linux" "216"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

View File

@ -0,0 +1,90 @@
"Games"
{
/* Obsidian Conflict 1.3 */
"obsidian"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "350"
"linux" "351"
}
"RemovePlayerItem"
{
"windows" "237"
"linux" "238"
}
"Weapon_GetSlot"
{
"windows" "235"
"linux" "236"
}
"Ignite"
{
"windows" "190"
"linux" "191"
}
"Extinguish"
{
"windows" "194"
"linux" "195"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "393"
"linux" "393"
}
"GetVelocity"
{
"windows" "127"
"linux" "128"
}
"EyeAngles"
{
"windows" "119"
"linux" "120"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"WeaponEquip"
{
"windows" "228"
"linux" "229"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

View File

@ -0,0 +1,91 @@
"Games"
{
/* Pirates, Vikings and Knights II */
"pvkii"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "328"
"linux" "329"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "356"
"linux" "357"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "217"
"linux" "218"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
}
}

View File

@ -0,0 +1,114 @@
"Games"
{
/* The Ship */
"ship"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "316"
"linux" "317"
}
"RemovePlayerItem"
{
"windows" "220"
"linux" "221"
}
"Weapon_GetSlot"
{
"windows" "218"
"linux" "219"
}
"Ignite"
{
"windows" "180"
"linux" "181"
}
"Extinguish"
{
"windows" "181"
"linux" "182"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "343"
"linux" "344"
}
"GetVelocity"
{
"windows" "124"
"linux" "125"
}
"EyeAngles"
{
"windows" "116"
"linux" "117"
}
"DispatchKeyValue"
{
"windows" "35"
"linux" "34"
}
"DispatchKeyValueFloat"
{
"windows" "34"
"linux" "35"
}
"DispatchKeyValueVector"
{
"windows" "33"
"linux" "36"
}
"AcceptInput"
{
"windows" "39"
"linux" "40"
}
"SetEntityModel"
{
"windows" "30"
"linux" "31"
}
"WeaponEquip"
{
"windows" "211"
"linux" "212"
}
"Activate"
{
"windows" "37"
"linux" "38"
}
/* Temp Entities */
"TE_GetServerClass"
{
"windows" "0"
"linux" "0"
}
}
"Signatures"
{
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x60\x8B\0x16"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0"
}
}
}
}

View File

@ -0,0 +1,91 @@
"Games"
{
/* SourceForts */
"SourceForts"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "328"
"linux" "329"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "356"
"linux" "357"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "217"
"linux" "218"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
}
}

View File

@ -0,0 +1,91 @@
"Games"
{
/* Synergy Release 1 */
"synergy"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "334"
"linux" "335"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "362"
"linux" "363"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "217"
"linux" "218"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
}
}

View File

@ -0,0 +1,90 @@
"Games"
{
/* Team Fortress 2 */
"tf"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "406"
"linux" "410"
}
"RemovePlayerItem"
{
"windows" "238"
"linux" "239"
}
"Weapon_GetSlot"
{
"windows" "236"
"linux" "237"
}
"Ignite"
{
"windows" "193"
"linux" "194"
}
"Extinguish"
{
"windows" "197"
"linux" "198"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "388"
"linux" "388"
}
"GetVelocity"
{
"windows" "130"
"linux" "131"
}
"EyeAngles"
{
"windows" "122"
"linux" "123"
}
"DispatchKeyValue"
{
"windows" "29"
"linux" "28"
}
"DispatchKeyValueFloat"
{
"windows" "28"
"linux" "29"
}
"DispatchKeyValueVector"
{
"windows" "27"
"linux" "30"
}
"SetEntityModel"
{
"windows" "23"
"linux" "24"
}
"AcceptInput"
{
"windows" "34"
"linux" "35"
}
"WeaponEquip"
{
"windows" "229"
"linux" "230"
}
"Activate"
{
"windows" "31"
"linux" "32"
}
}
}
}

View File

@ -0,0 +1,136 @@
"Games"
{
/* Zombie Master 1.1.3 */
"zombie_master"
{
"Offsets"
{
/* CBasePlayer */
"GiveNamedItem"
{
"windows" "329"
"linux" "330"
}
"RemovePlayerItem"
{
"windows" "226"
"linux" "227"
}
"Weapon_GetSlot"
{
"windows" "224"
"linux" "225"
}
"Ignite"
{
"windows" "188"
"linux" "189"
}
"Extinguish"
{
"windows" "189"
"linux" "190"
}
"Teleport"
{
"windows" "98"
"linux" "99"
}
"CommitSuicide"
{
"windows" "357"
"linux" "358"
}
"GetVelocity"
{
"windows" "126"
"linux" "127"
}
"EyeAngles"
{
"windows" "118"
"linux" "119"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"s_pTempEntities"
{
"windows" "30"
}
"g_pGameRules"
{
"windows" "7"
}
"WeaponEquip"
{
"windows" "198"
"linux" "199"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
"Signatures"
{
"CBaseTempEntity"
{
"library" "server"
"windows" "\x55\x8B\xEC\x51\x89\x4D\xFC\x8B\x45\xFC\xC7\x00\x2A\x2A\x2A\x2A\x8B\x4D\xFC\x8B\x55\x08\x89\x51\x04\x8B\x45\xFC\x8B\x0D\x2A\x2A"
}
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x55\x8B\xEC\x83\xEC\x20\x83\x7D\x08\x00\x0F\x84\x95\x01\x00\x00\xA1\x2A\x2A\x2A\x2A\x50\x8D\x4D\xF0\xE8\x2A\x2A\x2A\x2A\x8D\x4D"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x55\x8B\xEC\x83\xEC\x0C\x83\x7D\x0C\xFF\x74\x39\x8B\x45\x0C\x50\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x11\x8B\x0D\x2A\x2A\x2A\x2A\xFF\x52"
}
"FindEntityByClassname"
{
"library" "server"
"windows" "\x55\x8B\xEC\x83\xEC\x10\x89\x4D\xF4\x83\x7D\x08\x00\x74\x1C\x8B\x45\x08\x8B\x10\x8B\x4D\x08\xFF\x52\x08\x50\x8B\x4D\xF4\xE8\x2A\x2A\x2A\x2A\x8B\x40\x0C\x89\x45\x\xF0\xEB\x0B\x8B\x4D\xF4\xE8\x2A\x2A\x2A\x2A\x89\x45\xF0\x8B\x4D\xF0\x89\x4D\xFC\xEB\x09\x8B\x55\xFC\x8B\x42\x0C\x89\x45\xFC\x83\x7D\xFC\x00\x74\x38\x8B\x4D\xFC\x8B\x11\x89"
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
}
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x55\x8B\xEC\x83\xEC\x10\xA1\x2A\x2A\x2A\x2A\x89\x45\xF4\x8B\x4D\xF4\x89\x4D\xF8\x83\x7D\xF8\x00"
}
"g_pGameRules"
{
"library" "server"
"linux" "@g_pGameRules"
}
}
}
}

View File

@ -0,0 +1,120 @@
"Games"
{
/* Zombie Panic! Source 1.2b
* Note: This mod is not fully supported yet.
* The definitions below were supplied by a third party.
* (thanks "noob cannon lol")
*/
"$Zombie Panic! Source"
{
"Offsets"
{
"GiveNamedItem"
{
"windows" "333"
"linux" "334"
}
"RemovePlayerItem"
{
"windows" "230"
"linux" "231"
}
"Weapon_GetSlot"
{
"windows" "226"
"linux" "227"
}
"Ignite"
{
"windows" "190"
"linux" "191"
}
"Extinguish"
{
"windows" "191"
"linux" "192"
}
"Teleport"
{
"windows" "100"
"linux" "101"
}
"CommitSuicide"
{
"windows" "361"
"linux" "362"
}
"GetVelocity"
{
"windows" "128"
"linux" "129"
}
"EyeAngles"
{
"windows" "120"
"linux" "121"
}
"AcceptInput"
{
"windows" "35"
"linux" "36"
}
"DispatchKeyValue"
{
"windows" "31"
"linux" "30"
}
"DispatchKeyValueFloat"
{
"windows" "30"
"linux" "31"
}
"DispatchKeyValueVector"
{
"windows" "29"
"linux" "32"
}
"SetEntityModel"
{
"windows" "25"
"linux" "26"
}
"WeaponEquip"
{
"windows" "219"
"linux" "220"
}
"Activate"
{
"windows" "32"
"linux" "33"
}
}
"Signatures"
{
"CreateGameRulesObject"
{
"library" "server"
"windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2C\x6A\x01"
}
"FindEntityByClassname"
{
"library" "server"
"windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x2A\x2A\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xC1\xE0\x04\x8B\x2A\x2A\xEB\x2A\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x2A\x8B\x2D\x2A\x2A\x2A\x2A\x8D\xA4\x24\x00\x00\x00\x00\x8B\x37\x85\xF6\x75\x2A\x68\x2A\x2A\x2A\x2A\xFF\x2A\x83\xC4\x2A\xEB\x2A\x39"
"linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc"
}
"CreateEntityByName"
{
"library" "server"
"linux" "@_Z18CreateEntityByNamePKci"
"windows" "\x56\x8B\x74\x24\x2A\x57\x8B\x7C\x24\x2A\x83\xFE\xFF\x74\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x8B\x50\x2A\x56\xFF\xD2"
}
"DispatchSpawn"
{
"library" "server"
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
"windows" "\x53\x55\x56\x8B\x74\x24\x10\x2A\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\x50\x60\x8B\xCB"
}
}
}
}

View File

@ -0,0 +1,112 @@
"Game Master"
{
"common.games.txt"
{
}
"engine.l4d.txt"
{
"engine" "left4dead"
}
"engine.ep2.txt"
{
"engine" "orangebox"
}
"engine.ep1.txt"
{
"engine" "original"
}
"game.tf.txt"
{
"game" "tf"
}
"game.dod.txt"
{
"game" "dod"
}
"game.cstrike.txt"
{
"game" "cstrike"
}
"game.hl2mp.txt"
{
"game" "hl2mp"
}
"game.ship.txt"
{
"game" "ship"
}
"game.dystopia.txt"
{
"game" "!Dystopia"
}
"game.insurgency.txt"
{
"game" "insurgency"
}
"game.pvkii.txt"
{
"game" "pvkii"
}
"game.ff.txt"
{
"game" "FortressForever"
}
"game.garrysmod.txt"
{
"engine" "original"
"game" "garrysmod"
}
"game.empires.txt"
{
"game" "empires"
}
"game.sourceforts.txt"
{
"game" "sourceforts"
}
"game.synergy.txt"
{
"game" "synergy"
}
"game.hidden.txt"
{
"game" "hidden"
}
"game.zm.txt"
{
"game" "zombie_master"
}
"game.zpanic.txt"
{
"game" "$Zombie Panic! Source"
}
"game.obsidian.txt"
{
"game" "obsidian"
}
"game.aoc.txt"
{
"game" "ageofchivalry"
}
}