CStudioHdr::CActivityToSequenceMapping::Initialize
0x0059fac0 · 1899 bytes · __thiscall
_ZN10CStudioHdr26CActivityToSequenceMapping10InitializeEPKS_
Decompiled
undefined (2 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CStudioHdr::CActivityToSequenceMapping::Initialize(CStudioHdr const*) */
void __thiscall
CStudioHdr::CActivityToSequenceMapping::Initialize
(CActivityToSequenceMapping *this,CStudioHdr *param_1)
{
undefined4 *puVar1;
CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
*this_00;
code *pcVar2;
ushort uVar3;
bool bVar4;
undefined4 uVar5;
undefined4 uVar6;
char cVar7;
int iVar8;
int iVar9;
uint uVar10;
int iVar11;
uint uVar12;
uint uVar13;
int iVar14;
uint uVar15;
int *piVar16;
undefined1 *puVar17;
int in_GS_OFFSET;
undefined4 uStackY_90;
char *local_7c [5];
char *local_68;
char *local_64;
char *local_60;
uint local_58;
void *local_54;
uint local_50;
uint local_4c;
CStudioHdr *local_48;
uint local_44;
CActivityToSequenceMapping *local_40;
undefined4 local_34;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
int local_24;
int local_20;
local_34 = 0;
local_30 = 0;
local_40 = this;
local_48 = param_1;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (___atan2f_finite == 0) {
local_24 = 0;
}
else {
local_60 = "CStudioHdr::CActivityToSequenceMapping::Initialize";
local_64 = "Unaccounted";
local_68 = "(%s)%s";
local_7c[4] = (char *)&Initialize(CStudioHdr_const*)::tm_fmt;
local_7c[3] = (char *)0x787;
local_7c[2] = "/data/src/game/server/../../public/studio.cpp";
local_7c[1] = (char *)0x0;
local_7c[0] = (char *)0x0;
uStackY_90 = 0x59fb58;
(**(code **)(___atan2f_finite + 0x50))();
local_24 = ___atan2f_finite;
}
iVar9 = _DAT_0105db00;
local_2c = local_34;
local_28 = local_30;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 0059fc06 to 0059fc54 has its CatchHandler @ 005a028b */
uStackY_90 = 0x59fc0b;
iVar8 = ThreadGetCurrentId();
if (iVar9 == iVar8) {
if ((char *)*_DAT_0105d15c != "CStudioHdr::CActivityToSequenceMapping::Initialize") {
local_7c[0] = (char *)0x0;
uStackY_90 = 0x59fc48;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xc56944,(char *)0x1,0xbfafa1);
}
uStackY_90 = 0x59fc55;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
*(int *)(local_40 + 0x24) = *(int *)local_48;
if (*(int *)local_40 == 0) {
*(int *)(local_40 + 0x28) = *(int *)(local_48 + 4);
/* try { // try from 0059fcca to 0059ff66 has its CatchHandler @ 005a026a */
uStackY_90 = 0x59fccf;
cVar7 = SequencesAvailable(local_48);
if (cVar7 != '\0') {
if (*(int *)(local_48 + 4) == 0) {
local_4c = *(uint *)(*(int *)local_48 + 0xbc);
}
else {
local_4c = *(uint *)(*(int *)(local_48 + 4) + 0x14);
}
if (0 < (int)local_4c) {
local_44 = 0;
bVar4 = false;
do {
uStackY_90 = 0x59fd12;
iVar9 = pSeqdesc(local_48,local_44);
if ((*(byte *)(iVar9 + 0xd) & 0x10) == 0) {
uStackY_90 = 0x5a0182;
SetActivityForSequence(local_48,local_44);
}
iVar8 = *(int *)(iVar9 + 0x10);
if (-1 < iVar8) {
local_58 = *(uint *)(iVar9 + 0x14);
uStackY_90 = 0x59fd37;
uVar10 = HashInt(iVar8);
if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
local_50 = *(uint *)(local_40 + 0x14);
uVar10 = uVar10 % local_50;
}
else {
uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
local_50 = *(uint *)(local_40 + 0x14);
}
local_54 = *(void **)(local_40 + 8);
puVar1 = (undefined4 *)((int)local_54 + uVar10 * 0x14);
uVar15 = puVar1[3];
if ((int)uVar15 < 1) {
if (uVar15 != 0) goto LAB_005a009e;
LAB_0059fd93:
uVar15 = 0xffff;
uVar10 = 0xffff;
if (0xffff < (int)local_50) goto LAB_0059fdab;
LAB_005a00b8:
/* try { // try from 005a00bb to 005a0181 has its CatchHandler @ 005a026a */
uStackY_90 = 0x5a00c0;
uVar10 = HashInt(iVar8);
if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
uVar10 = uVar10 % *(uint *)(local_40 + 0x14);
}
else {
uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
}
this_00 = (CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
*)(*(int *)(local_40 + 8) + uVar10 * 0x14);
iVar9 = *(int *)(this_00 + 0xc);
if (iVar9 < 1) {
if (iVar9 == 0) {
LAB_005a0113:
uStackY_90 = 0x5a0123;
CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
::GrowVector(this_00,1);
uStackY_90 = 0x5a0137;
CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
::ShiftElementsRight(this_00,iVar9,1);
piVar16 = (int *)(iVar9 * 0x10 + *(int *)this_00);
if (piVar16 != (int *)0x0) {
*piVar16 = iVar8;
piVar16[1] = 0;
piVar16[2] = 1;
piVar16[3] = local_58 ^ (int)local_58 >> 0x1f;
piVar16[3] = piVar16[3] - ((int)local_58 >> 0x1f);
}
}
}
else {
piVar16 = *(int **)this_00;
if (iVar8 != *piVar16) {
iVar11 = 0;
do {
piVar16 = piVar16 + 4;
iVar11 = iVar11 + 1;
if (iVar11 == iVar9) goto LAB_005a0113;
} while (iVar8 != *piVar16);
}
}
}
else {
piVar16 = (int *)*puVar1;
if (iVar8 == *piVar16) {
LAB_005a009e:
uVar12 = 0;
}
else {
uVar12 = 0;
do {
piVar16 = piVar16 + 4;
uVar12 = uVar12 + 1;
if (uVar12 == uVar15) goto LAB_0059fd93;
} while (iVar8 != *piVar16);
}
uVar15 = uVar12 & 0xffff;
uVar10 = (uVar10 << 0x10 | uVar12) >> 0x10;
if ((int)local_50 <= (int)uVar10) goto LAB_005a00b8;
LAB_0059fdab:
piVar16 = (int *)((int)local_54 + uVar10 * 0x14);
if (piVar16[3] <= (int)uVar15) goto LAB_005a00b8;
iVar8 = uVar15 * 0x10 + *piVar16;
piVar16 = (int *)(iVar8 + 8);
*piVar16 = *piVar16 + 1;
uVar10 = *(int *)(iVar9 + 0x14) >> 0x1f;
piVar16 = (int *)(iVar8 + 0xc);
*piVar16 = *piVar16 + ((*(uint *)(iVar9 + 0x14) ^ uVar10) - uVar10);
}
bVar4 = true;
}
local_44 = local_44 + 1;
} while (local_44 != local_4c);
if (bVar4) {
uVar10 = *(uint *)(local_40 + 0x14);
if ((int)uVar10 < 1) {
LAB_0059fe2d:
uVar15 = 0xffffffff;
}
else {
uVar15 = 0;
piVar16 = (int *)(*(int *)(local_40 + 8) + 0x20);
if (*(int *)(*(int *)(local_40 + 8) + 0xc) < 1) {
do {
uVar15 = uVar15 + 1;
if (uVar15 == uVar10) goto LAB_0059fe2d;
iVar9 = *piVar16;
piVar16 = piVar16 + 5;
} while (iVar9 < 1);
uVar15 = uVar15 * 0x10000;
}
else {
uVar15 = 0;
}
}
iVar9 = 0;
uVar12 = 0;
while (uVar13 = uVar15 >> 0x10, (int)uVar13 < (int)uVar10) {
while( true ) {
piVar16 = (int *)(*(int *)(local_40 + 8) + uVar13 * 0x14);
if (piVar16[3] <= (int)(uVar15 & 0xffff)) goto LAB_0059fedf;
piVar16 = (int *)((uVar15 & 0xffff) * 0x10 + *piVar16);
piVar16[1] = uVar12;
uVar12 = uVar12 + piVar16[2];
if (iVar9 < *piVar16) {
iVar9 = *piVar16;
}
uVar10 = *(uint *)(local_40 + 0x14);
local_44 = uVar15 + 1 >> 0x10;
uVar15 = uVar15 + 1 & 0xffff;
if ((int)uVar10 <= (int)local_44) break;
if (*(int *)(*(int *)(local_40 + 8) + 0xc + local_44 * 0x14) <= (int)uVar15) {
uVar13 = local_44;
piVar16 = (int *)(*(int *)(local_40 + 8) + 0xc + (local_44 * 5 + 5) * 4);
do {
uVar13 = uVar13 + 1;
if (uVar13 == uVar10) goto LAB_005a01ed;
iVar8 = *piVar16;
piVar16 = piVar16 + 5;
} while (iVar8 < 1);
uVar15 = 0;
local_44 = uVar13;
}
uVar15 = local_44 << 0x10 | uVar15;
uVar13 = local_44 & 0xffff;
if ((int)uVar10 <= (int)uVar13) goto LAB_0059fedf;
}
LAB_005a01ed:
uVar15 = 0xffffffff;
}
LAB_0059fedf:
uVar10 = 0xffffffff;
if (uVar12 < 0x1fc00001) {
uVar10 = uVar12 * 4;
}
uStackY_90 = 0x59fefc;
local_54 = operator_new__(uVar10);
*(void **)local_40 = local_54;
uVar10 = iVar9 * 4 + 0x13U & 0xfffffff0;
*(uint *)(local_40 + 4) = uVar12;
iVar9 = -(uVar10 + 0x10);
*(uint *)(&stack0xffffff7c + iVar9) = uVar10;
local_50 = (int)&local_50 + iVar9;
*(undefined4 *)(&stack0xffffff78 + iVar9) = 0;
*(uint *)(&stack0xffffff74 + iVar9) = local_50;
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff38;
memset(*(void **)(&stack0xffffff74 + iVar9),*(int *)(&stack0xffffff78 + iVar9),
*(size_t *)(&stack0xffffff7c + iVar9));
local_44 = 0;
do {
*(uint *)(&stack0xffffff78 + iVar9) = local_44;
*(CStudioHdr **)(&stack0xffffff74 + iVar9) = local_48;
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff52;
iVar11 = pSeqdesc(*(CStudioHdr **)(&stack0xffffff74 + iVar9),
*(int *)(&stack0xffffff78 + iVar9));
iVar8 = *(int *)(iVar11 + 0x10);
if (-1 < iVar8) {
*(int *)(&stack0xffffff74 + iVar9) = iVar8;
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff67;
uVar10 = HashInt(*(int *)(&stack0xffffff74 + iVar9));
if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
uVar10 = uVar10 % *(uint *)(local_40 + 0x14);
}
else {
uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
}
local_58 = *(uint *)(local_40 + 8);
puVar1 = (undefined4 *)(local_58 + uVar10 * 0x14);
uVar15 = puVar1[3];
if ((int)uVar15 < 1) {
if (uVar15 != 0) goto LAB_005a01bb;
LAB_0059ffc3:
iVar8 = 0xffff0;
iVar14 = 0x13ffec;
}
else {
piVar16 = (int *)*puVar1;
if (iVar8 == *piVar16) {
LAB_005a01bb:
uVar12 = 0;
}
else {
uVar12 = 0;
do {
piVar16 = piVar16 + 4;
uVar12 = uVar12 + 1;
if (uVar12 == uVar15) goto LAB_0059ffc3;
} while (iVar8 != *piVar16);
}
iVar14 = ((uVar10 << 0x10 | uVar12) >> 0x10) * 0x14;
iVar8 = (uVar12 & 0xffff) << 4;
}
iVar8 = iVar8 + *(int *)(local_58 + iVar14);
iVar14 = *(int *)(local_50 + *(int *)(iVar11 + 0x10) * 4);
*(undefined2 *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar14) * 4) =
(undefined2)local_44;
uVar3 = (ushort)((int)*(undefined4 *)(iVar11 + 0x14) >> 0x1f);
*(ushort *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar14) * 4 + 2) =
(uVar3 ^ (ushort)*(undefined4 *)(iVar11 + 0x14)) - uVar3;
iVar14 = iVar14 + *(int *)(iVar8 + 4);
if (*(short *)((int)local_54 + iVar14 * 4 + 2) == 0) {
*(undefined2 *)((int)local_54 + iVar14 * 4 + 2) = 1;
}
piVar16 = (int *)(local_50 + *(int *)(iVar11 + 0x10) * 4);
*piVar16 = *piVar16 + 1;
}
iVar8 = _DAT_0105db00;
local_44 = local_44 + 1;
} while (local_44 != local_4c);
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0054;
iVar11 = ThreadGetCurrentId();
if (iVar8 == iVar11) {
*(int **)(&stack0xffffff74 + iVar9) = _DAT_0105d15c;
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0235;
cVar7 = CVProfNode::ExitScope();
if (cVar7 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
iVar8 = local_24;
uVar5 = local_2c;
puVar17 = &stack0xffffff74 + iVar9;
if (local_24 != 0) {
*(undefined4 *)((int)local_7c + iVar9 + 4) = 0;
uVar6 = local_28;
*(undefined4 *)((int)local_7c + iVar9) = 0;
*(undefined4 *)(&stack0xffffff80 + iVar9) = 0;
*(int *)(&stack0xffffff74 + iVar9) = iVar8;
*(undefined4 *)(&stack0xffffff78 + iVar9) = uVar5;
*(undefined4 *)(&stack0xffffff7c + iVar9) = uVar6;
pcVar2 = *(code **)(iVar8 + 0x54);
*(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0093;
(*pcVar2)();
puVar17 = &stack0xffffff74 + iVar9;
}
goto LAB_0059fbe5;
}
}
}
}
iVar9 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
uStackY_90 = 0x59fc73;
iVar8 = ThreadGetCurrentId();
if (iVar9 == iVar8) {
uStackY_90 = 0x59fc88;
cVar7 = CVProfNode::ExitScope();
if (cVar7 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
puVar17 = &stack0xffffff74;
if (local_24 != 0) {
local_7c[1] = (char *)0x0;
local_7c[0] = (char *)0x0;
uStackY_90 = 0x59fbe5;
(**(code **)(local_24 + 0x54))();
puVar17 = &stack0xffffff74;
}
LAB_0059fbe5:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined1 **)(puVar17 + -4) = &LAB_005a026a;
__stack_chk_fail();
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.