From ff02c49995b008ebdfa76895be25e5a66d4c4a35 Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Sun, 15 Oct 2023 11:37:01 -0400 Subject: [PATCH 1/7] stash of current mcv changes --- gamedata/sdktools.games/engine.mcv.txt | 152 ++++++++++++++++--------- 1 file changed, 96 insertions(+), 56 deletions(-) diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 081c2b09d5..ec5332e8eb 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -16,13 +16,13 @@ { "Keys" { - "SlapSoundCount" "6" - "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" - "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" - "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" - "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" - "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" - "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" + "SlapSoundCount" "6" + "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" + "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" + "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" + "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" + "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" + "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" } } @@ -34,19 +34,19 @@ /* Offset into CBaseTempEntity signature address */ "s_pTempEntities" { - "windows" "16" + // "windows" "16" } "GetTEName" { - "windows" "4" + // "windows" "4" } "GetTENext" { - "windows" "8" + // "windows" "8" } "TE_GetServerClass" { - "windows" "0" + // "windows" "0" } } @@ -54,8 +54,8 @@ { "CBaseTempEntity" { - "library" "server" - "windows" "\x55\x8B\xEC\x8B\x45\x08\x89\x41\x04\xC7\x01" + "library" "server" + // "windows" "\x55\x8B\xEC\x8B\x45\x08\x89\x41\x04\xC7\x01" } } } @@ -66,10 +66,42 @@ "Signatures" { /* Functions in CGlobalEntityList */ + + // "NULL entity in global entity list!\n" + /* + __int64 __fastcall sub_8DFF50(__int64 a1, _DWORD *a2, _BYTE *a3) + { + ... + + while ( 1 ) + { + while ( 1 ) + { + v10 = *v8; + if ( *v8 ) + break; + DevWarning("NULL entity in global entity list!\n"); // <--- + + ... + + */ + // "env_credits" + /* + __int64 sub_9098B0() + { + __int64 result; // rax + + result = sub_8DFF50((__int64)&qword_1857200, 0LL, "env_credits"); // <--- + if ( result ) + return sub_89D0C0(result + 1296, result, result, 0.0); + return result; + } + */ "FindEntityByClassname" { - "library" "server" - "windows" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x1C\x8B\x45\x0C\x8B\x5D\x08\x8B\x7D\x10\x85\xC0\x0F\x84\x2A\x2A\x2A\x2A\x8B\x10\x89\x04\x24\xFF\x52\x0C\x8B\x10\xB8\xFF\x1F\x00\x00\x0F\xB7\xCA\x83\xFA\xFF\x0F\x45\xC1\x8D\x04\x40\x8B\x5C\xC3\x10\xEB\x2A\x90\x2A\x2A\x2A\x2A\x89" + "library" "server" + "linux" "\x55\x48\x89\xE5\x41\x55\x49\x89\xD5\x41\x54\x53\x48\x89\xFB\x48\x83\xEC\x08\x48\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x48\x8B\x06\x48\x8D\x15\xDA\x09\xE3\xFF" + "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" } } } @@ -79,12 +111,14 @@ { "Keys" { - "GameRulesProxy" "CVietnamGameRulesProxy" - "GameRulesDataTable" "vietnam_gamerules" + // "GameRulesProxy" "CVietnamGameRulesProxy" + // "GameRulesDataTable" "vietnam_gamerules" } } /* IServer interface pointer */ + // "linux" "@_sv" + "#default" { "Keys" @@ -97,7 +131,7 @@ * the expected code. A pointer to sv (IServer interface) is used * here. */ - "CreateFakeClient_Windows" "\x55\x8B\xEC\x56\xFF\x75\x08\xB9" + // "CreateFakeClient_Windows" "\x55\x8B\xEC\x56\xFF\x75\x08\xB9" } "Offsets" @@ -105,7 +139,7 @@ /* Offset into IVEngineServer::CreateFakeClient */ "sv" { - "windows" "8" + // "windows" "8" } } @@ -118,34 +152,36 @@ { "EntityFactory" { - "library" "server" - "windows" "\xA1\x2A\x2A\x2A\x2A\xA8\x01\x0F\x85\x2A\x2A\x2A\x2A\x83\xC8\x01" + "library" "server" + //"windows" "\xA1\x2A\x2A\x2A\x2A\xA8\x01\x0F\x85\x2A\x2A\x2A\x2A\x83\xC8\x01" } } } /* CBaseEntityOutput::FireOutput */ + // "(%0.2f) output: (%s,%s) -> (%s,%s,%.1f)(%s)\n" "#default" { "Signatures" { "FireOutput" { - "library" "server" - "windows" "\x55\x8B\xEC\x81\xEC\x44\x01\x00\x00\x8B\xC1" + "library" "server" + // "windows" "\x55\x8B\xEC\x81\xEC\x44\x01\x00\x00\x8B\xC1" + "linux" "\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xEC\x78\x01\x00\x00\x4C\x8B\x7F\x18" } } } - /* CBaseAnimating::LookupAttachment */ + /* CBaseAnimating::LookupAttachment */ "#default" { "Signatures" { "LookupAttachment" { - "library" "server" - "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" + "library" "server" + "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" } } } @@ -163,8 +199,8 @@ */ "SetUserCvar" { - /* Not 100% sure on this, why would windows change and not linux - TEST ME */ - "windows" "31" + "linux" "69" + "windows" "61" } /** * CBaseClient::SetName(char const*); @@ -173,111 +209,115 @@ */ "SetClientName" { - "windows" "30" + "linux" "68" + "windows" "60" } /** * 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+0B0h], 0 - * Win: mov byte ptr [esi+0B0h], 0 + * Linux: mov byte ptr [esi+0B0h], 0 + * Win: mov byte ptr [esi+0B0h], 0 * - * L4D2: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. + * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. */ "InfoChanged" { - "windows" "488" + "linux" "59" + // "windows" "46" <-- ?? } } } - "#default" + "#default" { "Keys" { // Netprop on the team entity for team score - "m_iScore" "m_scoreTotal" + "m_iScore" "m_scoreTotal" } "Offsets" { + /* "SetOwnerEntity" { - "windows" "19" + "windows" "19" } "GiveNamedItem" { - "windows" "461" + "windows" "461" } "RemovePlayerItem" { - "windows" "304" + "windows" "304" } "Weapon_GetSlot" { - "windows" "299" + "windows" "299" } "Ignite" { - "windows" "229" + "windows" "229" } "Extinguish" { - "windows" "232" + "windows" "232" } "Teleport" { - "windows" "114" + "windows" "114" } "CommitSuicide" { - "windows" "511" + "windows" "511" } "GetVelocity" { - "windows" "140" + "windows" "140" } "EyeAngles" { - "windows" "131" + "windows" "131" } "AcceptInput" { - "windows" "41" + "windows" "41" } "SetEntityModel" { - "windows" "27" + "windows" "27" } "WeaponEquip" { - "windows" "292" + "windows" "292" } "Activate" { - "windows" "38" + "windows" "38" } "PlayerRunCmd" { - "windows" "481" + "windows" "481" } "GiveAmmo" { - "windows" "285" + "windows" "285" } "GetAttachment" { - "windows" "223" + "windows" "223" } + */ } "Signatures" { /** - * CNetworkStringTableContainer::WriteBaselines - * "Index error writing string table baseline %s\n" + * CNetworkStringTableContainer::WriteBaselines + * "Index error writing string table baseline %s\n" */ "WriteBaselines" { - "library" "engine" - "windows" "\x55\x8B\xEC\x83\xEC\x58\x53\x56\x8B\xF1" + "library" "engine" + //"windows" "\x4C\x8B\xDC\x53\x57\x41\x55" } } } From 15900f14a56e75806c700e158cb6697c031a8429 Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Sun, 15 Oct 2023 12:13:26 -0400 Subject: [PATCH 2/7] CBaseAnimating::UpdateAttachment and WriteBaselines --- gamedata/sdktools.games/engine.mcv.txt | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index ec5332e8eb..e6bcc2b187 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -174,6 +174,74 @@ } /* CBaseAnimating::LookupAttachment */ + // "blood_left" - both instances are right before a call + /* + + lea rsi, aBloodLeft ; "blood_left" + call sub_80E740 <-- calls this function + + ...which is: + + ; Attributes: bp-based frame + + sub_80E740 proc near + + var_30= qword ptr -30h + var_28= qword ptr -28h + + ; __unwind { + push rbp + mov rbp, rsp + push r13 + mov r13, rcx + push r12 + mov r12, rdx + push rbx + mov rbx, rdi + sub rsp, 18h + mov [rbp+var_30], r8 + mov [rbp+var_28], r9 + call LookupAttachment // <--- + mov r9, [rbp+var_28] + mov rcx, r13 + mov rdx, r12 + mov r8, [rbp+var_30] + add rsp, 18h + mov rdi, rbx + mov esi, eax + pop rbx + pop r12 + pop r13 + pop rbp + jmp sub_80BCA0 + ; } // starts at 80E740 + sub_80E740 endp + + + + __int64 __fastcall sub_80E690(__int64 a1) + { + CStudioHdr *v2; // rdi + + v2 = *(CStudioHdr **)(a1 + 1632); + if ( !v2 ) + { + if ( sub_842720(a1) ) + sub_80BE80(a1); + v2 = *(CStudioHdr **)(a1 + 1632); + if ( !v2 ) + return 0LL; + } + if ( *(_QWORD *)v2 ) + return (unsigned int)sub_F0BFD0(v2) + 1; + else + return 0LL; + } + + + this was found by working backwards from the existing windows signature from forever ago. how did that get there? i have literally no idea. + + */ "#default" { "Signatures" @@ -182,6 +250,7 @@ { "library" "server" "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" + "linux" "\x55\x48\x89\xE5\x53\x48\x89\xFB\x48\x83\xEC\x18\x48\x8B\xBF\x60\x06\x00\x00\x48\x85\xFF\x74\x2A\x48\x83\x3F\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A" } } } @@ -318,6 +387,7 @@ { "library" "engine" //"windows" "\x4C\x8B\xDC\x53\x57\x41\x55" + "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" } } } From 12f0cd1ad705df3b53f4b43be6111db38f067734 Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Sun, 15 Oct 2023 12:16:32 -0400 Subject: [PATCH 3/7] CNetworkStringTableContainer::WriteBaselines on windows (doublechecked) --- gamedata/sdktools.games/engine.mcv.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index e6bcc2b187..17f2896563 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -382,11 +382,13 @@ /** * CNetworkStringTableContainer::WriteBaselines * "Index error writing string table baseline %s\n" + * "CNetworkStringTableContainer::WriteBaselines" + * "infested" */ "WriteBaselines" { "library" "engine" - //"windows" "\x4C\x8B\xDC\x53\x57\x41\x55" + "windows" "\x4C\x8B\xDC\x53\x57\x41\x55" "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" } } From d435c848693d22a9632079a8d5df6e4219715be0 Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Mon, 16 Oct 2023 00:09:16 -0400 Subject: [PATCH 4/7] no message --- gamedata/sdktools.games/engine.mcv.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 17f2896563..942616b829 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -363,6 +363,7 @@ { "windows" "38" } + // CVietnam_Player::PlayerRunCommand "PlayerRunCmd" { "windows" "481" From c213d9fe4e7fd106fe410003a6d155a48658b68b Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Fri, 27 Oct 2023 02:24:40 -0400 Subject: [PATCH 5/7] more sdktools updates --- gamedata/sdktools.games/engine.mcv.txt | 161 ++++++++++++++++++++----- 1 file changed, 129 insertions(+), 32 deletions(-) diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 942616b829..7448835e4c 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -34,28 +34,76 @@ /* Offset into CBaseTempEntity signature address */ "s_pTempEntities" { - // "windows" "16" + "windows" "16" } "GetTEName" { - // "windows" "4" + "windows" "4" } "GetTENext" { - // "windows" "8" + "windows" "8" } "TE_GetServerClass" { - // "windows" "0" + "windows" "0" } } +/* +.text:000000018004A500 ; int sub_18004A500() +.text:000000018004A500 sub_18004A500 proc near ; DATA XREF: .rdata:0000000180654E70↓o +.text:000000018004A500 ; .pdata:0000000180C2E714↓o +.text:000000018004A500 sub rsp, 28h +.text:000000018004A504 lea rdx, aShotgunShot ; "Shotgun Shot" // <--- uniq string +.text:000000018004A50B lea rcx, qword_180B89850 +.text:000000018004A512 call sub_1803C6210 // <--- CBaseTempEntity::CBaseTempEntity +.text:000000018004A517 lea rax, ??_7CTEFireBullets@@6B@ ; const CTEFireBullets::`vftable' +.text:000000018004A51E mov cs:dword_180B89884, 0FFFFFFFFh + + + + +QWORD *__fastcall sub_1803C6210(_QWORD *a1, __int64 a2) +{ + _QWORD *result; // rax + + a1[1] = a2; + *a1 = &CBaseTempEntity::`vftable'; + a1[2] = qword_180B76B10; + result = a1; + qword_180B76B10 = (__int64)a1; + return result; +} + + +void __fastcall CBaseTempEntity::CBaseTempEntity(CBaseTempEntity *this, const char *a2) +{ + __int64 v2; // rdx + + *((_QWORD *)this + 1) = a2; + *(_QWORD *)this = &`vtable for'CBaseTempEntity + 2; + v2 = CBaseTempEntity::s_pTempEntities; + CBaseTempEntity::s_pTempEntities = this; + *((_QWORD *)this + 2) = v2; +} + +== + + + "Signatures" { "CBaseTempEntity" { "library" "server" + /* Signature for sub_1803C6210: + 48 8D 05 51 FD 3C 00 + \x48\x8D\x05\x51\xFD\x3C\x00 + */ // "windows" "\x55\x8B\xEC\x8B\x45\x08\x89\x41\x04\xC7\x01" + // Wrong? + "windows" "\x48\x8D\x05\x51\xFD\x3C\x00" } } } @@ -100,7 +148,7 @@ "FindEntityByClassname" { "library" "server" - "linux" "\x55\x48\x89\xE5\x41\x55\x49\x89\xD5\x41\x54\x53\x48\x89\xFB\x48\x83\xEC\x08\x48\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x48\x8B\x06\x48\x8D\x15\xDA\x09\xE3\xFF" + "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" } } @@ -117,7 +165,7 @@ } /* IServer interface pointer */ - // "linux" "@_sv" + "linux" "@_sv" "#default" { @@ -150,10 +198,22 @@ { "Signatures" { + // Signature for _ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc: + // 48 89 54 24 10 48 83 EC 28 49 8B D0 + // \x48\x89\x54\x24\x10\x48\x83\xEC\x28\x49\x8B\xD0 + /* + 180B161B8: using guessed type __int64 qword_180B161B8; + Signature for sub_180369600: + 48 83 EC 28 8B 05 CE A9 7F 00 + \x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00 + + Probably wrong. + */ "EntityFactory" { "library" "server" //"windows" "\xA1\x2A\x2A\x2A\x2A\xA8\x01\x0F\x85\x2A\x2A\x2A\x2A\x83\xC8\x01" + "windows" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" } } } @@ -167,8 +227,11 @@ "FireOutput" { "library" "server" + // Signature for sub_1801CCDA0: + // 4C 8B DC 55 41 56 41 57 49 8D AB E8 FE FF FF + "windows" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" // "windows" "\x55\x8B\xEC\x81\xEC\x44\x01\x00\x00\x8B\xC1" - "linux" "\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xEC\x78\x01\x00\x00\x4C\x8B\x7F\x18" + "linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" } } } @@ -226,16 +289,16 @@ v2 = *(CStudioHdr **)(a1 + 1632); if ( !v2 ) { - if ( sub_842720(a1) ) - sub_80BE80(a1); - v2 = *(CStudioHdr **)(a1 + 1632); - if ( !v2 ) - return 0LL; + if ( sub_842720(a1) ) + sub_80BE80(a1); + v2 = *(CStudioHdr **)(a1 + 1632); + if ( !v2 ) + return 0LL; } if ( *(_QWORD *)v2 ) - return (unsigned int)sub_F0BFD0(v2) + 1; + return (unsigned int)sub_F0BFD0(v2) + 1; else - return 0LL; + return 0LL; } @@ -250,7 +313,7 @@ { "library" "server" "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" - "linux" "\x55\x48\x89\xE5\x53\x48\x89\xFB\x48\x83\xEC\x18\x48\x8B\xBF\x60\x06\x00\x00\x48\x85\xFF\x74\x2A\x48\x83\x3F\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A" + "linux" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" } } } @@ -306,77 +369,111 @@ } "Offsets" { - /* + // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", "SetOwnerEntity" { - "windows" "19" + "linux" "20" + "windows" "20" } + // "[L0/W0] L462 W462 CVietnam_Player::GiveNamedItem(char const*,int,bool,bool,Vector const*)", "GiveNamedItem" { - "windows" "461" + "linux" "462" + "windows" "462" } + // "[L0/W0] L305 W304 CBaseCombatCharacter::RemovePlayerItem(CBaseCombatWeapon *)", "RemovePlayerItem" { + "linux" "305" "windows" "304" } + // "[L0/W0] L301 W300 CBaseCombatCharacter::Weapon_GetSlot(int)", "Weapon_GetSlot" { - "windows" "299" + "linux" "301" + "windows" "300" } + // "[L0/W0] L230 W229 CBaseAnimating::Ignite(float,bool,float,bool,CBaseEntity *,string_t)", "Ignite" { + "linux" "230" "windows" "229" } + // This might be broken, CZombie is the only instance i could find! + // "[L0/W0] L233 W232 CZombie::Extinguish(void)", "Extinguish" { + "linux" "233" "windows" "232" } + // "[L0/W0] L115 W114 CBaseEntity::Teleport(Vector const*,QAngle const*,Vector const*,bool)", "Teleport" { + "linux" "115" "windows" "114" } + // Unsure which of these to use, so let's try the bool bool one first + // "[L0/W0] L511 W512 CBasePlayer::CommitSuicide(bool,bool)", + // "[L0/W0] L512 W511 CBasePlayer::CommitSuicide(Vector const&,bool,bool)", "CommitSuicide" { - "windows" "511" + "linux" "511" + "windows" "512" } + // "[L0/W0] L141 W140 CBaseEntity::GetVelocity(Vector *,Vector *)", "GetVelocity" { - "windows" "140" + "linux" "140" + "windows" "140" } + // "[L0/W0] L132 W131 CBaseEntity::EyeAngles(void)", "EyeAngles" { - "windows" "131" + "linux" "132" + "windows" "131" } + // "[L0/W0] L42 W41 CBaseEntity::AcceptInput(char const*,CBaseEntity*,CBaseEntity*,variant_t,int)", "AcceptInput" { - "windows" "41" + "linux" "42" + "windows" "41" } + // "[L0/W0] L28 W29 CBaseEntity::SetModel(char const*)", "SetEntityModel" { - "windows" "27" + "linux" "28" + "windows" "27" } + // "[L0/W0] L293 W292 CBaseCombatCharacter::Weapon_Equip(CBaseCombatWeapon *)", "WeaponEquip" { - "windows" "292" + "linux" "293" + "windows" "292" } + // "[L0/W0] L39 W41 CBaseEntity::Activate(void)", "Activate" { - "windows" "38" + "linux" "39" + "windows" "41" } - // CVietnam_Player::PlayerRunCommand + // "[L0/W0] L482 W482 CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)", "PlayerRunCmd" { - "windows" "481" + "linux" "482" + "windows" "482" } + // "[L0/W0] L286 W285 CBaseCombatCharacter::GiveAmmo(int,int,bool)", "GiveAmmo" { - "windows" "285" + "linux" "286" + "windows" "285" } + // "[L0/W0] L224 W223 CBaseAnimating::GetAttachment(int,matrix3x4_t &)", "GetAttachment" { - "windows" "223" + "linux" "224" + "windows" "223" } - */ } "Signatures" { @@ -390,7 +487,7 @@ { "library" "engine" "windows" "\x4C\x8B\xDC\x53\x57\x41\x55" - "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" + "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" } } } From f2c30adf5cee9537ee4b936aec60955e1b75eb72 Mon Sep 17 00:00:00 2001 From: stephanie sappho lenzo Date: Mon, 27 Nov 2023 06:09:07 -0500 Subject: [PATCH 6/7] latest update --- gamedata/core.games/engine.mcv.txt | 78 ++- gamedata/sdkhooks.games/engine.mcv.txt | 272 +++++---- gamedata/sdktools.games/engine.mcv.txt | 732 +++++++++---------------- 3 files changed, 452 insertions(+), 630 deletions(-) diff --git a/gamedata/core.games/engine.mcv.txt b/gamedata/core.games/engine.mcv.txt index 10254d9e9d..77cf29f70e 100644 --- a/gamedata/core.games/engine.mcv.txt +++ b/gamedata/core.games/engine.mcv.txt @@ -1,45 +1,41 @@ -/** - * 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" - { - "#supported" - { - "engine" "mcv" - } - - "Offsets" - { - /* Offset into LevelShutdown */ - "gEntList" - { - "windows" "33" - } + /* CGlobalEntityList */ + /* Windows - get gEntList from offset into CServerGameDLL::LevelShutdown and then get EntInfo offset from gamedata */ + /* Linux - get gEntList directly from exported symbol and then get the EntInfo offset from gamedata */ + + "#default" + { + "Signatures" + { + /* gEntList symbol */ + "gEntList" + { + "library" "server" + "linux64" "@gEntList" + } + + "LevelShutdown" + { + "library" "server" + "windows64" "IDK" + } + } + + "Offsets" + { + /* Offset into LevelShutdown of gEntList */ + "gEntList" + { + "windows64" "IDK" + } - "EntInfo" - { - "windows" "4" - } - } - - "Signatures" - { - "LevelShutdown" - { - "library" "server" - "windows" "\x56\x8B\x35\x2A\x2A\x2A\x2A\x8B\xCE\x8B\x06\xFF\x90\x84\x00\x00\x00\xE8\x2A\x2A\x2A\x2A\xE8" - } - } - } + /* gEntList->m_EntPtrArray[] offset */ + "EntInfo" + { + "linux64" "8" + "windows64" "8" + } + } + } } diff --git a/gamedata/sdkhooks.games/engine.mcv.txt b/gamedata/sdkhooks.games/engine.mcv.txt index 334bd5c49c..8bdaaff6cb 100644 --- a/gamedata/sdkhooks.games/engine.mcv.txt +++ b/gamedata/sdkhooks.games/engine.mcv.txt @@ -1,112 +1,166 @@ "Games" { - "#default" - { - "Offsets" - { - "Blocked" - { - "windows" "106" - } - "EndTouch" - { - "windows" "104" - } - "FireBullets" - { - "windows" "118" - } - "GetMaxHealth" - { - "windows" "122" - } - "OnTakeDamage" - { - "windows" "68" - } - "OnTakeDamage_Alive" - { - "windows" "306" - } - "PreThink" - { - "windows" "376" - } - "PostThink" - { - "windows" "377" - } - "Reload" - { - "windows" "295" - } - "SetTransmit" - { - "windows" "23" - } - "ShouldCollide" - { - "windows" "18" - } - "Spawn" - { - "windows" "25" - } - "StartTouch" - { - "windows" "102" - } - "Think" - { - "windows" "52" - } - "Touch" - { - "windows" "103" - } - "TraceAttack" - { - "windows" "66" - } - "Use" - { - "windows" "101" - } - "VPhysicsUpdate" - { - "windows" "157" - } - "Weapon_CanSwitchTo" - { - "windows" "297" - } - "Weapon_CanUse" - { - "windows" "291" - } - "Weapon_Drop" - { - "windows" "294" - } - "Weapon_Equip" - { - "windows" "292" - } - "Weapon_Switch" - { - "windows" "296" - } - } - } - - "#default" - { - "Offsets" - { - "EntityListeners" - { - "windows" "196644" - } - } - } + "#default" + { + "Offsets" + { + // "[L0/W0] L107 W108 CBaseEntity::Blocked(CBaseEntity*)", + "Blocked" + { + "linux64" "107" + "windows64" "108" + } + // "[L0/W0] L105 W106 CBaseEntity::EndTouch(CBaseEntity*)", + "EndTouch" + { + "linux64" "105" + "windows64" "106" + } + // "[L0/W0] L119 W120 CBaseEntity::FireBullets(FireBulletsInfo_t const&)", + "FireBullets" + { + "linux64" "119" + "windows64" "120" + } + // "[L0/W0] L123 W124 CBaseEntity::GetMaxHealth(void)", + "GetMaxHealth" + { + "linux64" "123" + "windows64" "124" + } + // "[L0/W0] L69 W70 CBaseEntity::OnTakeDamage(CTakeDamageInfo const&)", + "OnTakeDamage" + { + "linux64" "69" + "windows64" "70" + } + // Only seems to exist on bot functions?? + // "[L0/W0] L307 W306 CAI_BaseNPC::OnTakeDamage_Alive(CTakeDamageInfo const&)", + // "OnTakeDamage_Alive" + // { + // "windows" "306" + // } + + + // "[L0/W0] L376 W375 CBasePlayer::PreThink(void)", + "PreThink" + { + "linux64" "376" + "windows64" "375" + } + // "[L0/W0] L377 W376 CBasePlayer::PostThink(void)", + "PostThink" + { + "linux64" "377" + "windows64" "376" + } + // CBaseCombatWeapon::FinishReload ????? + // "[L0/W0] L294 W296 CBaseCombatWeapon::FinishReload(void)", + "Reload" + { + "linux64" "294" + "windows64" "296" + } + // "[L0/W0] L24 W24 CBaseEntity::SetTransmit(CCheckTransmitInfo *,bool)", + "SetTransmit" + { + "linux64" "24" + "windows64" "24" + } + // "[L0/W0] L19 W19 CBaseEntity::ShouldCollide(int,int)", + "ShouldCollide" + { + "linux64" "19" + "windows64" "19" + } + // "[L0/W0] L32 W27 CBaseEntity::Spawn(void)", + // "[L0/W0] L26 W26 CBaseCombatCharacter::Spawn(void)", + "Spawn" + { + "linux64" "26" + "windows64" "26" + } + // "[L0/W0] L103 W104 CBaseEntity::StartTouch(CBaseEntity*)", + "StartTouch" + { + "linux64" "103" + "windows64" "104" + } + // "[L0/W0] L53 W55 CBaseEntity::Think(void)", + "Think" + { + "linux64" "53" + "windows64" "55" + } + // "[L0/W0] L104 W105 CBaseEntity::Touch(CBaseEntity*)", + "Touch" + { + "linux64" "104" + "windows64" "105" + } + // "[L0/W0] L67 W68 CBaseEntity::TraceAttack(CTakeDamageInfo const&,Vector const&,CGameTrace *)", + "TraceAttack" + { + "linux64" "67" + "windows64" "68" + } + // "[L0/W0] L102 W103 CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)", + "Use" + { + "linux64" "102" + "windows64" "103" + } + // "[L0/W0] L158 W157 CBaseEntity::VPhysicsUpdate(IPhysicsObject *)", + "VPhysicsUpdate" + { + "linux64" "158" + "windows64" "157" + } + // "[L0/W0] L299 W298 CBaseCombatCharacter::Weapon_CanSwitchTo(CBaseCombatWeapon *)", + "Weapon_CanSwitchTo" + { + "linux64" "299" + "windows64" "298" + } + // "[L0/W0] L292 W291 CBaseCombatCharacter::Weapon_CanUse(CBaseCombatWeapon *)", + "Weapon_CanUse" + { + "linux64" "292" + "windows64" "291" + } + // "[L0/W0] L296 W295 CBaseCombatCharacter::Weapon_Drop(CBaseCombatWeapon *,Vector const*,Vector const*)", + "Weapon_Drop" + { + "linux64" "296" + "windows64" "295" + } + // "[L0/W0] L293 W292 CBaseCombatCharacter::Weapon_Equip(CBaseCombatWeapon *)", + "Weapon_Equip" + { + "linux64" "293" + "windows64" "292" + } + // "[L0/W0] L297 W296 CBaseCombatCharacter::Weapon_Switch(CBaseCombatWeapon *,int)", + "Weapon_Switch" + { + "linux64" "297" + "windows64" "296" + } + } + + } + + "#default" + { + "Offsets" + { + "EntityListeners" + { + // 49159 + // 98322 + "windows" "196644" + "linux64" "49159" + } + } + } } diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 7448835e4c..4ac91e0df5 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -1,494 +1,266 @@ -/** - * 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" { - /* Sounds */ - "#default" - { - "Keys" - { - "SlapSoundCount" "6" - "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" - "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" - "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" - "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" - "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" - "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" - } - } - - /* General Temp Entities */ - "#default" - { - "Offsets" - { - /* Offset into CBaseTempEntity signature address */ - "s_pTempEntities" - { - "windows" "16" - } - "GetTEName" - { - "windows" "4" - } - "GetTENext" - { - "windows" "8" - } - "TE_GetServerClass" - { - "windows" "0" - } - } - -/* -.text:000000018004A500 ; int sub_18004A500() -.text:000000018004A500 sub_18004A500 proc near ; DATA XREF: .rdata:0000000180654E70↓o -.text:000000018004A500 ; .pdata:0000000180C2E714↓o -.text:000000018004A500 sub rsp, 28h -.text:000000018004A504 lea rdx, aShotgunShot ; "Shotgun Shot" // <--- uniq string -.text:000000018004A50B lea rcx, qword_180B89850 -.text:000000018004A512 call sub_1803C6210 // <--- CBaseTempEntity::CBaseTempEntity -.text:000000018004A517 lea rax, ??_7CTEFireBullets@@6B@ ; const CTEFireBullets::`vftable' -.text:000000018004A51E mov cs:dword_180B89884, 0FFFFFFFFh - - - - -QWORD *__fastcall sub_1803C6210(_QWORD *a1, __int64 a2) -{ - _QWORD *result; // rax - - a1[1] = a2; - *a1 = &CBaseTempEntity::`vftable'; - a1[2] = qword_180B76B10; - result = a1; - qword_180B76B10 = (__int64)a1; - return result; -} - - -void __fastcall CBaseTempEntity::CBaseTempEntity(CBaseTempEntity *this, const char *a2) -{ - __int64 v2; // rdx - - *((_QWORD *)this + 1) = a2; - *(_QWORD *)this = &`vtable for'CBaseTempEntity + 2; - v2 = CBaseTempEntity::s_pTempEntities; - CBaseTempEntity::s_pTempEntities = this; - *((_QWORD *)this + 2) = v2; -} - -== - - - - "Signatures" - { - "CBaseTempEntity" - { - "library" "server" - /* Signature for sub_1803C6210: - 48 8D 05 51 FD 3C 00 - \x48\x8D\x05\x51\xFD\x3C\x00 - */ - // "windows" "\x55\x8B\xEC\x8B\x45\x08\x89\x41\x04\xC7\x01" - // Wrong? - "windows" "\x48\x8D\x05\x51\xFD\x3C\x00" - } - } - } - - /* CGlobalEntityList */ - "#default" - { - "Signatures" - { - /* Functions in CGlobalEntityList */ - - // "NULL entity in global entity list!\n" - /* - __int64 __fastcall sub_8DFF50(__int64 a1, _DWORD *a2, _BYTE *a3) - { - ... - - while ( 1 ) - { - while ( 1 ) - { - v10 = *v8; - if ( *v8 ) - break; - DevWarning("NULL entity in global entity list!\n"); // <--- - - ... - - */ - // "env_credits" - /* - __int64 sub_9098B0() - { - __int64 result; // rax - - result = sub_8DFF50((__int64)&qword_1857200, 0LL, "env_credits"); // <--- - if ( result ) - return sub_89D0C0(result + 1296, result, result, 0.0); - return result; - } - */ - "FindEntityByClassname" - { - "library" "server" - "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" - "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" - } - } - } - - /* General GameRules */ - "#default" - { - "Keys" - { - // "GameRulesProxy" "CVietnamGameRulesProxy" - // "GameRulesDataTable" "vietnam_gamerules" - } - } - - /* IServer interface pointer */ - "linux" "@_sv" - - "#default" - { - "Keys" - { - /* Signature for the beginning of IVEngineServer::CreateFakeClient. - * - * 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\x56\xFF\x75\x08\xB9" - } - - "Offsets" - { - /* Offset into IVEngineServer::CreateFakeClient */ - "sv" - { - // "windows" "8" - } - } - - } - - /* EntityFactoryDictionary function */ - "#default" - { - "Signatures" - { - // Signature for _ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc: - // 48 89 54 24 10 48 83 EC 28 49 8B D0 - // \x48\x89\x54\x24\x10\x48\x83\xEC\x28\x49\x8B\xD0 - /* - 180B161B8: using guessed type __int64 qword_180B161B8; - Signature for sub_180369600: - 48 83 EC 28 8B 05 CE A9 7F 00 - \x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00 - - Probably wrong. - */ - "EntityFactory" - { - "library" "server" - //"windows" "\xA1\x2A\x2A\x2A\x2A\xA8\x01\x0F\x85\x2A\x2A\x2A\x2A\x83\xC8\x01" - "windows" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" - } - } - } - - /* CBaseEntityOutput::FireOutput */ - // "(%0.2f) output: (%s,%s) -> (%s,%s,%.1f)(%s)\n" - "#default" - { - "Signatures" - { - "FireOutput" - { - "library" "server" - // Signature for sub_1801CCDA0: - // 4C 8B DC 55 41 56 41 57 49 8D AB E8 FE FF FF - "windows" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" - // "windows" "\x55\x8B\xEC\x81\xEC\x44\x01\x00\x00\x8B\xC1" - "linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" - } - } - } - - /* CBaseAnimating::LookupAttachment */ - // "blood_left" - both instances are right before a call - /* - - lea rsi, aBloodLeft ; "blood_left" - call sub_80E740 <-- calls this function - - ...which is: - - ; Attributes: bp-based frame - - sub_80E740 proc near - - var_30= qword ptr -30h - var_28= qword ptr -28h - - ; __unwind { - push rbp - mov rbp, rsp - push r13 - mov r13, rcx - push r12 - mov r12, rdx - push rbx - mov rbx, rdi - sub rsp, 18h - mov [rbp+var_30], r8 - mov [rbp+var_28], r9 - call LookupAttachment // <--- - mov r9, [rbp+var_28] - mov rcx, r13 - mov rdx, r12 - mov r8, [rbp+var_30] - add rsp, 18h - mov rdi, rbx - mov esi, eax - pop rbx - pop r12 - pop r13 - pop rbp - jmp sub_80BCA0 - ; } // starts at 80E740 - sub_80E740 endp - - - - __int64 __fastcall sub_80E690(__int64 a1) - { - CStudioHdr *v2; // rdi - - v2 = *(CStudioHdr **)(a1 + 1632); - if ( !v2 ) - { - if ( sub_842720(a1) ) - sub_80BE80(a1); - v2 = *(CStudioHdr **)(a1 + 1632); - if ( !v2 ) - return 0LL; - } - if ( *(_QWORD *)v2 ) - return (unsigned int)sub_F0BFD0(v2) + 1; - else - return 0LL; - } - - - this was found by working backwards from the existing windows signature from forever ago. how did that get there? i have literally no idea. - - */ - "#default" - { - "Signatures" - { - "LookupAttachment" - { - "library" "server" - "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" - "linux" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" - } - } - } - - /* 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)%-.*s" (aD_S in IDA) - * Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1) - */ - "SetUserCvar" - { - "linux" "69" - "windows" "61" - } - /** - * CBaseClient::SetName(char const*); - * Linux offset straight from VTable dump. - * Has string "(%d)%-0.*s" - */ - "SetClientName" - { - "linux" "68" - "windows" "60" - } - /** - * 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+0B0h], 0 - * Win: mov byte ptr [esi+0B0h], 0 - * - * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. - */ - "InfoChanged" - { - "linux" "59" - // "windows" "46" <-- ?? - } - } - } - - "#default" - { - "Keys" - { - // Netprop on the team entity for team score - "m_iScore" "m_scoreTotal" - } - "Offsets" - { - // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", - "SetOwnerEntity" - { - "linux" "20" - "windows" "20" - } - // "[L0/W0] L462 W462 CVietnam_Player::GiveNamedItem(char const*,int,bool,bool,Vector const*)", - "GiveNamedItem" - { - "linux" "462" - "windows" "462" - } - // "[L0/W0] L305 W304 CBaseCombatCharacter::RemovePlayerItem(CBaseCombatWeapon *)", - "RemovePlayerItem" - { - "linux" "305" - "windows" "304" - } - // "[L0/W0] L301 W300 CBaseCombatCharacter::Weapon_GetSlot(int)", - "Weapon_GetSlot" - { - "linux" "301" - "windows" "300" - } - // "[L0/W0] L230 W229 CBaseAnimating::Ignite(float,bool,float,bool,CBaseEntity *,string_t)", - "Ignite" - { - "linux" "230" - "windows" "229" - } - // This might be broken, CZombie is the only instance i could find! - // "[L0/W0] L233 W232 CZombie::Extinguish(void)", - "Extinguish" - { - "linux" "233" - "windows" "232" - } - // "[L0/W0] L115 W114 CBaseEntity::Teleport(Vector const*,QAngle const*,Vector const*,bool)", - "Teleport" - { - "linux" "115" - "windows" "114" - } + "#default" + { + "Keys" + { + "SlapSoundCount" "6" + "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" + "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" + "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" + "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" + "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" + "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" + + + "GameRulesProxy" "CVietnamGameRulesProxy" + "GameRulesDataTable" "vietnam_gamerules" + } + + "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" + "windows64" "\x55\x8B\xEC\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01" + } + "g_pGameRules" + { + "library" "server" + "linux64" "@g_pGameRules" + } + } + "Signatures" + { + /* CBaseServer object for IServer interface */ + "sv" + { + "library" "engine" + "linux64" "@sv" + } + } + + /* General Temp Entities */ + "Offsets" + { + /* Offset into CBaseTempEntity signature address */ + "s_pTempEntities" + { + "windows64" "16" + } + "GetTEName" + { + "windows64" "4" + } + "GetTENext" + { + "windows64" "8" + } + "TE_GetServerClass" + { + "windows64" "0" + } + + /* Offset into IVEngineServer::CreateFakeClient */ + //"sv" + //{ + // // "windows64" "8" + //} + /** + * CBaseClient::SetUserCVar(char const*,char const*); + * linux64 offset straight from VTable dump. + * windows64 offset is crazy. Found the windows64 SetName function using string "(%d)%-.*s" (aD_S in IDA) + * Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1) + */ + "SetUserCvar" + { + "linux64" "69" + "windows64" "61" + } + /** + * CBaseClient::SetName(char const*); + * linux64 offset straight from VTable dump. + * Has string "(%d)%-0.*s" + */ + "SetClientName" + { + "linux64" "68" + "windows64" "60" + } + /** + * 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. + * linux64: mov byte ptr [esi+0B0h], 0 + * Win: mov byte ptr [esi+0B0h], 0 + * + * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. + */ + "InfoChanged" + { + "linux64" "59" + // "windows64" "46" <-- ?? + } + + + // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", + "SetOwnerEntity" + { + "linux64" "20" + "windows64" "20" + } + // "[L0/W0] L462 W462 CVietnam_Player::GiveNamedItem(char const*,int,bool,bool,Vector const*)", + "GiveNamedItem" + { + "linux64" "462" + "windows64" "462" + } + // "[L0/W0] L305 W304 CBaseCombatCharacter::RemovePlayerItem(CBaseCombatWeapon *)", + "RemovePlayerItem" + { + "linux64" "305" + "windows64" "304" + } + // "[L0/W0] L301 W300 CBaseCombatCharacter::Weapon_GetSlot(int)", + "Weapon_GetSlot" + { + "linux64" "301" + "windows64" "300" + } + // "[L0/W0] L230 W229 CBaseAnimating::Ignite(float,bool,float,bool,CBaseEntity *,string_t)", + "Ignite" + { + "linux64" "230" + "windows64" "229" + } + // This might be broken, CZombie is the only instance i could find! + // "[L0/W0] L233 W232 CZombie::Extinguish(void)", + "Extinguish" + { + "linux64" "233" + "windows64" "232" + } + // "[L0/W0] L115 W114 CBaseEntity::Teleport(Vector const*,QAngle const*,Vector const*,bool)", + "Teleport" + { + "linux64" "115" + "windows64" "114" + } // Unsure which of these to use, so let's try the bool bool one first // "[L0/W0] L511 W512 CBasePlayer::CommitSuicide(bool,bool)", // "[L0/W0] L512 W511 CBasePlayer::CommitSuicide(Vector const&,bool,bool)", - "CommitSuicide" - { - "linux" "511" - "windows" "512" - } + "CommitSuicide" + { + "linux64" "511" + "windows64" "512" + } // "[L0/W0] L141 W140 CBaseEntity::GetVelocity(Vector *,Vector *)", - "GetVelocity" - { - "linux" "140" - "windows" "140" - } + "GetVelocity" + { + "linux64" "140" + "windows64" "140" + } // "[L0/W0] L132 W131 CBaseEntity::EyeAngles(void)", - "EyeAngles" - { - "linux" "132" - "windows" "131" - } + "EyeAngles" + { + "linux64" "132" + "windows64" "131" + } // "[L0/W0] L42 W41 CBaseEntity::AcceptInput(char const*,CBaseEntity*,CBaseEntity*,variant_t,int)", - "AcceptInput" - { - "linux" "42" - "windows" "41" - } + "AcceptInput" + { + "linux64" "42" + "windows64" "41" + } // "[L0/W0] L28 W29 CBaseEntity::SetModel(char const*)", - "SetEntityModel" - { - "linux" "28" - "windows" "27" - } + "SetEntityModel" + { + "linux64" "28" + "windows64" "27" + } // "[L0/W0] L293 W292 CBaseCombatCharacter::Weapon_Equip(CBaseCombatWeapon *)", - "WeaponEquip" - { - "linux" "293" - "windows" "292" - } + "WeaponEquip" + { + "linux64" "293" + "windows64" "292" + } // "[L0/W0] L39 W41 CBaseEntity::Activate(void)", - "Activate" - { - "linux" "39" - "windows" "41" - } - // "[L0/W0] L482 W482 CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)", - "PlayerRunCmd" - { - "linux" "482" - "windows" "482" - } + "Activate" + { + "linux64" "39" + "windows64" "41" + } + // "[L0/W0] L482 W482 CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)", + "PlayerRunCmd" + { + "linux64" "482" + "windows64" "482" + } // "[L0/W0] L286 W285 CBaseCombatCharacter::GiveAmmo(int,int,bool)", - "GiveAmmo" - { - "linux" "286" - "windows" "285" - } + "GiveAmmo" + { + "linux64" "286" + "windows64" "285" + } // "[L0/W0] L224 W223 CBaseAnimating::GetAttachment(int,matrix3x4_t &)", - "GetAttachment" - { - "linux" "224" - "windows" "223" - } - } - "Signatures" - { - /** - * CNetworkStringTableContainer::WriteBaselines - * "Index error writing string table baseline %s\n" - * "CNetworkStringTableContainer::WriteBaselines" - * "infested" - */ - "WriteBaselines" - { - "library" "engine" - "windows" "\x4C\x8B\xDC\x53\x57\x41\x55" - "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" - } - } - } + "GetAttachment" + { + "linux64" "224" + "windows64" "223" + } + } + + + "Signatures" + { + "CBaseTempEntity" + { + "library" "server" + "windows64" "\x48\x8D\x05\x51\xFD\x3C\x00" + "linux64" "@_ZN15CBaseTempEntityC2EPKc" + } + + // "NULL entity in global entity list!\n" + "FindEntityByClassname" + { + "library" "server" + "windows64" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" + "linux64" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + + "EntityFactory" + { + "library" "server" + "windows64" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" + "linux64" "@_ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc" + } + + "FireOutput" + { + "library" "server" + "windows64" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" + "linux64" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" + } + "LookupAttachment" + { + "library" "server" + "windows64" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" + "linux64" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" + } + + "WriteBaselines" + { + "library" "engine" + "windows64" "\x4C\x8B\xDC\x53\x57\x41\x55" + "linux64" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" + } + } + } } From c608cc37d2dd93fb9c2882fdc3fad897826766fd Mon Sep 17 00:00:00 2001 From: Gazyi Date: Sat, 10 Feb 2024 20:43:56 +0300 Subject: [PATCH 7/7] Updated some Win64 signatures. --- gamedata/core.games/engine.mcv.txt | 26 ++++++++++++++-- gamedata/sdkhooks.games/engine.mcv.txt | 41 +++++++++++++++++++------- gamedata/sdktools.games/engine.mcv.txt | 39 +++++++++++------------- 3 files changed, 71 insertions(+), 35 deletions(-) diff --git a/gamedata/core.games/engine.mcv.txt b/gamedata/core.games/engine.mcv.txt index 77cf29f70e..b98cab06c6 100644 --- a/gamedata/core.games/engine.mcv.txt +++ b/gamedata/core.games/engine.mcv.txt @@ -6,7 +6,19 @@ "#default" { - "Signatures" + "Addresses" + { + "EntInfosPtr" + { + "windows64" + { + "signature" "EntInfosFinder" + "read" "19" + } + } + } + + "Signatures" { /* gEntList symbol */ "gEntList" @@ -18,8 +30,16 @@ "LevelShutdown" { "library" "server" - "windows64" "IDK" + "windows64" "\xE8\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x48\x8D\x0D\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\xE8" } + + // Found from FindEntityByClassname. + "EntInfosFinder" + { + "library" "server" + // EB 18 0F B7 C1 48 8D 1C 40 48 03 DB 48 8B 5C DF 20 EB 07 48 8B + "windows64" "\xEB\x18\x0F\xB7\xC1\x48\x8D\x1C\x40\x48\x03\xDB\x2A\x2A\x2A\x2A\x2A\xEB\x07\x48\x8B" + } } "Offsets" @@ -27,7 +47,7 @@ /* Offset into LevelShutdown of gEntList */ "gEntList" { - "windows64" "IDK" + "windows64" "13" } /* gEntList->m_EntPtrArray[] offset */ diff --git a/gamedata/sdkhooks.games/engine.mcv.txt b/gamedata/sdkhooks.games/engine.mcv.txt index 8bdaaff6cb..0e66112c90 100644 --- a/gamedata/sdkhooks.games/engine.mcv.txt +++ b/gamedata/sdkhooks.games/engine.mcv.txt @@ -34,14 +34,12 @@ "linux64" "69" "windows64" "70" } - // Only seems to exist on bot functions?? - // "[L0/W0] L307 W306 CAI_BaseNPC::OnTakeDamage_Alive(CTakeDamageInfo const&)", - // "OnTakeDamage_Alive" - // { - // "windows" "306" - // } - - + "[L0/W0] L307 W306 CBasePlayer::OnTakeDamage_Alive(CTakeDamageInfo const&)", + "OnTakeDamage_Alive" + { + "linux64" "307" + "windows64" "306" + } // "[L0/W0] L376 W375 CBasePlayer::PreThink(void)", "PreThink" { @@ -147,7 +145,6 @@ "windows64" "296" } } - } "#default" @@ -158,9 +155,33 @@ { // 49159 // 98322 - "windows" "196644" + //"windows" "196644" + "windows64" "393272" // wild guess based on Ins2 Win offsets. + //"windows64" "98318" "linux64" "49159" } } + + "Addresses" + { + "EntityListenersPtr" + { + "windows64" + { + "signature" "EntityListenersFinder" + "read" "18" + } + } + } + + "Signatures" + { + // CGlobalEntityList::AddListenerEntity has symbols in windows64 binaries + "EntityListenersFinder" + { + "library" "server" + "windows64" "\x48\x89\x54\x24\x10\x48\x83\xEC\x28\x4C\x8D\x91\x38\x00\x06\x00" + } + } } } diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 4ac91e0df5..041a774a21 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -30,7 +30,7 @@ "CreateGameRulesObject" { "library" "server" - "windows64" "\x55\x8B\xEC\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01" + "windows64" "\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x30\x48\x8B\xF9\x48\x8B\x0D\x2A\x2A\x2A\x2A\x48\x85\xC9" } "g_pGameRules" { @@ -98,18 +98,16 @@ /** * 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. - * linux64: mov byte ptr [esi+0B0h], 0 - * Win: mov byte ptr [esi+0B0h], 0 - * + * linux64: mov byte ptr [rbx+258h], 0 + * Win64: mov byte ptr [rsi+278h], 0 + * In this example, offset is 278h = 632 * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. */ "InfoChanged" { - "linux64" "59" - // "windows64" "46" <-- ?? + "linux64" "600" + "windows64" "632" } - - // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", "SetOwnerEntity" { @@ -140,8 +138,7 @@ "linux64" "230" "windows64" "229" } - // This might be broken, CZombie is the only instance i could find! - // "[L0/W0] L233 W232 CZombie::Extinguish(void)", + // "[L0/W0] L233 W232 CBaseAnimating::Extinguish()", "Extinguish" { "linux64" "233" @@ -216,49 +213,47 @@ "windows64" "223" } } - - "Signatures" { "CBaseTempEntity" { "library" "server" - "windows64" "\x48\x8D\x05\x51\xFD\x3C\x00" + "windows64" "\x48\x8D\x05\x2A\x2A\x2A\x2A\x48\x89\x51\x08\x48\x89\x01\x48\x8B\x05" "linux64" "@_ZN15CBaseTempEntityC2EPKc" } - // "NULL entity in global entity list!\n" "FindEntityByClassname" { "library" "server" - "windows64" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" + "windows64" "\x48\x89\x5C\x24\x08\x48\x89\x74\x24\x10\x57\x48\x83\xEC\x20\x49\x8B\xF0\x48\x8B\xF9\x48\x85\xD2" "linux64" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" } - + // const CEntityFactoryDictionary::`vftable' "EntityFactory" { "library" "server" - "windows64" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" + "windows64" "\x48\x83\xEC\x28\x8B\x2A\x2A\x2A\x82\x00\xA8\x01" "linux64" "@_ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc" } - "FireOutput" { "library" "server" - "windows64" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" + "windows64" "\x4C\x8B\xDC\x41\x54\x41\x55" "linux64" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" } + // Fuction calls between strings "eyes"(1st xref), "chest"(1st xref), "forward"(3rd xref) - CAI_BaseActor::UpdateHeadControl(CAI_BaseActor *this, const Vector *a2, float a3, float a4) "LookupAttachment" { "library" "server" - "windows64" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" + "windows64" "\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x20\x48\x83\xB9\x38\x06\x00\x00\x00\x48\x8B\xFA\x48\x8B\xD9\x75\x2A\xE8\x2A\x2A\x2A\x2A\x48\x85\xC0\x74\x2A\x48\x8B\xCB\xE8\x2A\x2A\x2A\x2A\x48\x8B\x8B\x38\x06\x00\x00\x48\x85\xC9\x74\x2A\x48\x83\x39\x00\x74\x2A\x48\x8B\xD7\xE8\x2A\x2A\x2A\x2A" "linux64" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" } - + // "Index error writing string table baseline" "WriteBaselines" { "library" "engine" - "windows64" "\x4C\x8B\xDC\x53\x57\x41\x55" + // This signature seems to be right, but causes server hangs when player joining it. + //"windows64" "\x4C\x8B\xDC\x53\x41\x55\x48\x81\xEC\xF8\x00\x00\x00" "linux64" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" } }