From 66dd3f08b1c3ab784606a11445bb0921380f6e78 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Mon, 28 Oct 2013 11:13:48 -0400 Subject: [PATCH] Updated Synergy gamedata. --- gamedata/core.games/common.games.txt | 1 + gamedata/core.games/engine.ep2.txt | 1 - gamedata/core.games/engine.sdk2013.txt | 49 +++++ gamedata/core.games/master.games.txt | 5 + gamedata/sdkhooks.games/game.synergy.txt | 121 ++++++------ gamedata/sdktools.games/engine.ep2.txt | 2 - gamedata/sdktools.games/engine.sdk2013.txt | 216 +++++++++++++++++++++ gamedata/sdktools.games/game.synergy.txt | 91 +++++---- gamedata/sdktools.games/master.games.txt | 5 + 9 files changed, 387 insertions(+), 104 deletions(-) create mode 100644 gamedata/core.games/engine.sdk2013.txt create mode 100644 gamedata/sdktools.games/engine.sdk2013.txt diff --git a/gamedata/core.games/common.games.txt b/gamedata/core.games/common.games.txt index c3a6b71e..cc064761 100644 --- a/gamedata/core.games/common.games.txt +++ b/gamedata/core.games/common.games.txt @@ -98,6 +98,7 @@ "engine" "insurgency" "engine" "csgo" "engine" "dota" + "engine" "sdk2013" } "Offsets" diff --git a/gamedata/core.games/engine.ep2.txt b/gamedata/core.games/engine.ep2.txt index dea9219d..0ed2e455 100644 --- a/gamedata/core.games/engine.ep2.txt +++ b/gamedata/core.games/engine.ep2.txt @@ -24,7 +24,6 @@ "game" "empires" "game" "RnLBeta" "game" "obsidian" - "game" "synergy" "game" "fas" "game" "fistful_of_frags" "game" "cspromod" diff --git a/gamedata/core.games/engine.sdk2013.txt b/gamedata/core.games/engine.sdk2013.txt new file mode 100644 index 00000000..d89b1d25 --- /dev/null +++ b/gamedata/core.games/engine.sdk2013.txt @@ -0,0 +1,49 @@ +/** + * Do not edit this file. Any changes will be overwritten by the gamedata + * updater or by upgrading your SourceMod install. + * + * To override data in this file, create a subdirectory named "custom" and + * place your own gamedata file(s) inside of it. Such files will be parsed + * after SM's own. + * + * For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod) + */ + +"Games" +{ + /* CGlobalEntityList */ + "#default" + { + "Offsets" + { + /* Offset into LevelShutdown */ + "gEntList" + { + "windows" "11" + "linux" "13" + } + + "EntInfo" + { + "windows" "4" + "linux" "4" + "mac" "4" + } + } + + "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" + "linux" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xC7\x2A\x2A\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8" + } + "gEntList" + { + "library" "server" + "mac" "@gEntList" + } + } + } +} diff --git a/gamedata/core.games/master.games.txt b/gamedata/core.games/master.games.txt index 4dd99c00..e2fb3700 100644 --- a/gamedata/core.games/master.games.txt +++ b/gamedata/core.games/master.games.txt @@ -40,6 +40,11 @@ "engine" "orangebox_valve" } + "engine.sdk2013.txt" + { + "engine" "sdk2013" + } + "engine.css.txt" { "engine" "css" diff --git a/gamedata/sdkhooks.games/game.synergy.txt b/gamedata/sdkhooks.games/game.synergy.txt index 0cfacda5..df69ec22 100644 --- a/gamedata/sdkhooks.games/game.synergy.txt +++ b/gamedata/sdkhooks.games/game.synergy.txt @@ -18,118 +18,129 @@ { "EndTouch" { - "windows" "92" - "linux" "93" + "windows" "100" + "linux" "101" + "mac" "101" } "FireBullets" { - "windows" "104" - "linux" "105" + "windows" "112" + "linux" "113" + "mac" "113" } "GroundEntChanged" { - "windows" "164" - "linux" "165" + "windows" "178" + "linux" "178" + "mac" "178" } "OnTakeDamage" { - "windows" "60" - "linux" "61" + "windows" "62" + "linux" "63" + "mac" "63" } "PreThink" { - "windows" "293" - "linux" "294" + "windows" "336" + "linux" "337" + "mac" "337" } "PostThink" { - "windows" "294" - "linux" "295" + "windows" "337" + "linux" "338" + "mac" "338" + } + "Reload" + { + "windows" "268" + "linux" "269" + "mac" "269" } "SetTransmit" { - "windows" "19" - "linux" "20" + "windows" "20" + "linux" "21" + "mac" "21" } "ShouldCollide" { - "windows" "15" - "linux" "16" + "windows" "16" + "linux" "17" + "mac" "17" } "Spawn" { - "windows" "21" - "linux" "22" + "windows" "22" + "linux" "23" + "mac" "23" } "StartTouch" { - "windows" "90" - "linux" "91" + "windows" "98" + "linux" "99" + "mac" "99" } "Think" { - "windows" "45" - "linux" "46" + "windows" "47" + "linux" "48" + "mac" "48" } "Touch" { - "windows" "91" - "linux" "92" + "windows" "99" + "linux" "100" + "mac" "100" } "TraceAttack" { - "windows" "58" - "linux" "59" - } - "UpdateOnRemove" - { - "windows" "97" - "linux" "98" + "windows" "60" + "linux" "61" + "mac" "61" } "Use" { - "windows" "89" - "linux" "90" + "windows" "97" + "linux" "98" + "mac" "98" } "VPhysicsUpdate" { - "windows" "144" - "linux" "145" + "windows" "157" + "linux" "158" + "mac" "158" } "Weapon_CanSwitchTo" { - "windows" "234" - "linux" "235" + "windows" "265" + "linux" "266" + "mac" "266" } "Weapon_CanUse" { - "windows" "228" - "linux" "229" + "windows" "259" + "linux" "260" + "mac" "260" } "Weapon_Drop" { - "windows" "231" - "linux" "232" + "windows" "262" + "linux" "263" + "mac" "263" } "Weapon_Equip" { - "windows" "229" - "linux" "230" + "windows" "260" + "linux" "261" + "mac" "261" } "Weapon_Switch" { - "windows" "232" - "linux" "233" - } - } - - "Signatures" - { - "IEntityFactoryDictionary" - { - "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" + "windows" "263" + "linux" "264" + "mac" "264" } } } diff --git a/gamedata/sdktools.games/engine.ep2.txt b/gamedata/sdktools.games/engine.ep2.txt index 3847b643..613d9115 100644 --- a/gamedata/sdktools.games/engine.ep2.txt +++ b/gamedata/sdktools.games/engine.ep2.txt @@ -18,7 +18,6 @@ { "game" "ageofchivalry" "game" "empires" - "game" "synergy" "game" "bg2" "game" "pvkii" "game" "gesource" @@ -99,7 +98,6 @@ "game" "ageofchivalry" "game" "zps" "game" "empires" - "game" "synergy" "game" "bg2" "game" "pvkii" "game" "gesource" diff --git a/gamedata/sdktools.games/engine.sdk2013.txt b/gamedata/sdktools.games/engine.sdk2013.txt new file mode 100644 index 00000000..a375b224 --- /dev/null +++ b/gamedata/sdktools.games/engine.sdk2013.txt @@ -0,0 +1,216 @@ +/** + * Do not edit this file. Any changes will be overwritten by the gamedata + * updater or by upgrading your SourceMod install. + * + * To override data in this file, create a subdirectory named "custom" and + * place your own gamedata file(s) inside of it. Such files will be parsed + * after SM's own. + * + * For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod) + */ + +"Games" +{ + /* General Temp Entities */ + "#default" + { + "#supported" + { + "game" "synergy" + } + + "Offsets" + { + /* Offset into CBaseTempEntity constructor */ + "s_pTempEntities" + { + "windows" "19" + "linux" "20" + } + "GetTEName" + { + "windows" "4" + "linux" "4" + "mac" "4" + } + "GetTENext" + { + "windows" "8" + "linux" "8" + "mac" "8" + } + "TE_GetServerClass" + { + "windows" "0" + "linux" "0" + "mac" "0" + } + } + + "Signatures" + { + "CBaseTempEntity" + { + "library" "server" + "windows" "\x55\x8B\xEC\x8B\xC1\x8B\x4D\x2A\xC7\x00\x2A\x2A\x2A\x2A\x89\x48" + "linux" "\x55\x89\xE5\x8B\x45\x08\x8B\x55\x0C\xC7\x2A\x2A\x2A\x2A\x2A\x89\x50\x04\x8B\x15\x2A\x2A\x2A\x2A\xA3" + } + "s_pTempEntities" + { + "library" "server" + "mac" "@_ZN15CBaseTempEntity15s_pTempEntitiesE" + } + } + } + + /* CGlobalEntityList */ + "#default" + { + "#supported" + { + "game" "synergy" + } + + "Signatures" + { + /* Functions in CGlobalEntityList */ + "FindEntityByClassname" + { + "library" "server" + "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x2A\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x40\x03\xC0\x8B\x3C\xC6\xEB\x2A\x8B" + "linux" "\x55\x89\xE5\x57\x56\x53\x83\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x85\xC0\x74\x2A\x8B\x10\x89\x04\x24\xFF\x52\x0C\x8B\x55\x08\x8B\x00\x25\xFF\x0F\x00\x00\xC1\xE0\x04\x8B\x2A\x2A\x2A\xEB\x15\x66" + "mac" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + } + } + + /* General GameRules */ + "#default" + { + "#supported" + { + "game" "synergy" + } + + "Offsets" + { + /* Offset into CreateGameRulesObject */ + "g_pGameRules" + { + "windows" "2" + "linux" "1" + } + } + + "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" + "linux" "\xA1\x2A\x2A\x2A\x2A\x8B\x5D\x08\x85\xC0\x74\x08\x8B\x10\x89" + } + "g_pGameRules" + { + "library" "server" + "mac" "@g_pGameRules" + } + } + } + + /* IServer interface pointer */ + "#default" + { + "Keys" + { + /* Signature for the beginning of IVEngineServer::CreateFakeClientEx. + * + * The engine binary is not actually scanned in order to look for + * this. SourceHook is used to used to determine the address of the + * function and this signature is used to verify that it contains + * the expected code. A pointer to sv (IServer interface) is used + * here. + */ + "CreateFakeClient_Windows" "\x55\x8B\xEC\x8B\x2A\x2A\x50\xB9\x2A\x2A\x2A\x2A\xE8" + } + + "Offsets" + { + /* Offset into IVEngineServer::CreateFakeClient */ + "sv" + { + "windows" "8" + } + } + + "Signatures" + { + /* CBaseServer object for IServer interface */ + "sv" + { + "library" "engine" + "linux" "@sv" + "mac" "@sv" + } + } + } + + /* CBaseEntityOutput::FireOutput */ + "#default" + { + "#supported" + { + "game" "synergy" + } + "Signatures" + { + "FireOutput" + { + "library" "server" + "windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\x2A\x8B\x45\x2A\x53\x56\x8B\x2A\x2A\x57\x8B\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\xC7" + "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x65\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x31\xC0\x8B\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89\x2A\x2A\x2A\x2A\x2A\x89" + "mac" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" + } + } + } + + /* 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" "18" + "linux" "58" + "mac" "58" + } + /** + * 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" "140" + "linux" "140" + "mac" "140" + } + } + } +} diff --git a/gamedata/sdktools.games/game.synergy.txt b/gamedata/sdktools.games/game.synergy.txt index 23c89889..0599796c 100644 --- a/gamedata/sdktools.games/game.synergy.txt +++ b/gamedata/sdktools.games/game.synergy.txt @@ -11,7 +11,6 @@ "Games" { - /* Synergy Release 14 */ "synergy" { "Offsets" @@ -19,93 +18,93 @@ /* CBasePlayer */ "GiveNamedItem" { - "windows" "356" - "linux" "357" + "windows" "406" + "linux" "407" + "mac" "407" } "RemovePlayerItem" { - "windows" "238" - "linux" "239" + "windows" "269" + "linux" "270" + "mac" "270" } "Weapon_GetSlot" { - "windows" "236" - "linux" "237" + "windows" "267" + "linux" "268" + "mac" "268" } "Ignite" { - "windows" "193" - "linux" "194" + "windows" "208" + "linux" "209" + "mac" "209" } "Extinguish" { - "windows" "197" - "linux" "198" + "windows" "212" + "linux" "213" + "mac" "213" } "Teleport" { - "windows" "100" - "linux" "101" + "windows" "108" + "linux" "109" + "mac" "109" } "CommitSuicide" { - "windows" "397" - "linux" "397" + "windows" "445" + "linux" "445" + "mac" "445" } "GetVelocity" { - "windows" "130" - "linux" "131" + "windows" "140" + "linux" "141" + "mac" "141" } "EyeAngles" { - "windows" "122" - "linux" "123" + "windows" "131" + "linux" "132" + "mac" "132" } "AcceptInput" { - "windows" "34" - "linux" "35" + "windows" "36" + "linux" "37" + "mac" "37" } "SetEntityModel" { - "windows" "23" - "linux" "24" + "windows" "24" + "linux" "25" + "mac" "25" } "WeaponEquip" { - "windows" "229" - "linux" "230" + "windows" "260" + "linux" "261" + "mac" "261" } "Activate" { - "windows" "31" - "linux" "32" + "windows" "33" + "linux" "34" + "mac" "34" } "RemoveAllItems" { - "windows" "304" - "linux" "305" + "windows" "348" + "linux" "349" + "mac" "349" } "PlayerRunCmd" { - "windows" "376" - "linux" "377" - } - } - "Signatures" - { - "FindEntityByClassname" - { - "library" "server" - "windows" "\x53\x55\x56\x8B\xF1\x8B\x4C\x24\x10\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x25\xFF\x0F\x00\x00\x40\xC1\xE0\x04\x8B\x3C\x30\xEB\x06\x8B\xBE\x2A\x2A\x2A\x2A\x85\xFF\x74\x2A\x8B\x5C\x24\x18\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\x04\xEB\x2A\x39\x2A\x2A\x74\x2A\x53" - "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" - } - "FireOutput" - { - "library" "server" - "windows" "\x81\xEC\x2A\x2A\x2A\x2A\x53\x55\x56\x8B\x71\x2A\x57\x89" - "linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" + "windows" "424" + "linux" "425" + "mac" "425" } } } diff --git a/gamedata/sdktools.games/master.games.txt b/gamedata/sdktools.games/master.games.txt index bcdfcd1a..2dc729eb 100644 --- a/gamedata/sdktools.games/master.games.txt +++ b/gamedata/sdktools.games/master.games.txt @@ -40,6 +40,11 @@ "engine" "orangebox_valve" } + "engine.sdk2013.txt" + { + "engine" "sdk2013" + } + "engine.css.txt" { "engine" "css"