CPointScriptTemplate::CreateInstance
0x007e07f0 · 1505 bytes · __thiscall
_ZN20CPointScriptTemplate14CreateInstanceERK6VectorRK6QAngleP10CUtlVectorIP11CBaseEntity10CUtlMemoryIS8_iEES8_b
Decompiled
undefined (6 params)
/* CPointScriptTemplate::CreateInstance(Vector const&, QAngle const&, CUtlVector<CBaseEntity*,
CUtlMemory<CBaseEntity*, int> >*, CBaseEntity*, bool) */
undefined4 __thiscall
CPointScriptTemplate::CreateInstance
(CPointScriptTemplate *this,Vector *param_1,QAngle *param_2,CUtlVector *param_3,
CBaseEntity *param_4,bool param_5)
{
code *pcVar1;
undefined1 *puVar2;
uint *puVar3;
int iVar4;
CUtlVector *pCVar5;
CPointScriptTemplate *pCVar6;
QAngle *pQVar7;
undefined4 ****ppppuVar8;
undefined4 uVar9;
undefined4 *puVar10;
undefined4 *****pppppuVar11;
undefined1 *puVar12;
int iVar13;
int iVar14;
undefined4 *****pppppuVar15;
int *piVar16;
char **ppcVar17;
undefined4 *****pppppuVar18;
int *piVar19;
int in_GS_OFFSET;
undefined3 in_stack_00000019;
undefined4 uStack_210;
char *local_20c [2];
int aiStack_204 [7];
undefined4 local_1e8;
int *local_1e4;
CUtlVector *local_1e0;
CPointScriptTemplate *local_1dc;
QAngle *local_1d8;
Vector *local_1d4;
undefined4 ****local_1d0;
undefined4 ****local_1cc;
undefined4 ****local_1c8;
int *local_1c4;
undefined4 ****local_1c0;
undefined4 ****local_1b8;
undefined4 local_1b4;
undefined4 local_1b0;
undefined1 local_1ac [12];
undefined1 local_1a0 [64];
undefined1 local_160 [64];
undefined1 local_120 [64];
undefined4 ***local_e0 [16];
undefined1 local_a0 [64];
undefined4 ****local_60;
undefined4 local_5c;
undefined2 local_58;
ushort local_56;
undefined4 ****local_54;
undefined4 local_50;
undefined2 local_4c;
ushort local_4a;
uint local_48;
undefined4 local_44;
undefined2 local_40;
ushort local_3e;
undefined4 ***local_3c [2];
undefined4 local_34;
int local_20;
local_1d4 = param_1;
local_1d8 = param_2;
local_1e0 = param_3;
local_1e8 = _param_5;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_1c8 = *(undefined4 *****)(this + 0x50c);
if ((undefined4 *****)local_1c8 == (undefined4 *****)0x0) {
local_20c[0] = "CreateInstance called on a point_template that has no templates: %s\n";
local_20c[1] = &DAT_00d539c2;
if (*(undefined1 **)(this + 0x154) != (undefined1 *)0x0) {
local_20c[1] = *(undefined1 **)(this + 0x154);
}
uStack_210 = 0x7e085e;
Msg();
uVar9 = 0;
ppcVar17 = local_20c;
goto LAB_007e0860;
}
iVar4 = -((int)local_1c8 * 0x10 + 0x10);
ppcVar17 = (char **)((int)local_20c + iVar4);
*(undefined4 *)((int)aiStack_204 + iVar4 + -4) = 1;
local_1e4 = (int *)((int)aiStack_204 + iVar4 + 0x14);
*(undefined4 *)((int)local_20c + iVar4) = TheDirector;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e08b4;
puVar10 = (undefined4 *)CDirector::GetScriptScope();
if (puVar10 != (undefined4 *)0x0) {
iVar13 = *g_pScriptVM;
*(undefined4 *)((int)aiStack_204 + iVar4 + 4) = 0;
uVar9 = *puVar10;
*(char **)((int)aiStack_204 + iVar4 + -4) = "InstanceTemplateSpawnTables";
*(int **)((int)local_20c + iVar4) = g_pScriptVM;
*(undefined4 *)((int)aiStack_204 + iVar4) = uVar9;
pcVar1 = *(code **)(iVar13 + 0x48);
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e08e1;
pppppuVar11 = (undefined4 *****)(*pcVar1)();
if (pppppuVar11 != (undefined4 *****)0x0) {
local_1c4 = (int *)((CONCAT31(local_1c4._1_3_,(char)(*(uint *)(this + 0x148) >> 1)) ^ 1) &
0xffffff01);
local_1c0 = *(undefined4 ******)(this + 0x530);
local_1cc = *(undefined4 ******)(this + 0x52c);
pppppuVar18 = &local_60;
do {
*pppppuVar18 = (undefined4 ****)0x0;
pppppuVar15 = pppppuVar18 + 3;
*(undefined2 *)(pppppuVar18 + 2) = 0;
*(undefined2 *)((int)pppppuVar18 + 10) = 0;
pppppuVar18 = pppppuVar15;
} while (pppppuVar15 != (undefined4 *****)local_3c);
if ((local_56 & 1) != 0) {
local_1d0 = pppppuVar11;
*(undefined4 *****)((int)local_20c + iVar4) = local_60;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0955;
free(*(void **)((int)local_20c + iVar4));
local_56 = local_56 & 0xfffe;
pppppuVar11 = (undefined4 *****)local_1d0;
}
local_5c = 0;
local_58 = 0x20;
local_60 = local_1cc;
if ((local_4a & 1) != 0) {
local_1cc = pppppuVar11;
*(undefined4 *****)((int)local_20c + iVar4) = local_54;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0990;
free(*(void **)((int)local_20c + iVar4));
local_4a = local_4a & 0xfffe;
pppppuVar11 = (undefined4 *****)local_1cc;
}
local_50 = 0;
local_4c = 0x20;
local_54 = local_1c0;
if ((local_3e & 1) != 0) {
local_1c0 = pppppuVar11;
*(uint *)((int)local_20c + iVar4) = local_48;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e09cb;
free(*(void **)((int)local_20c + iVar4));
local_3e = local_3e & 0xfffe;
pppppuVar11 = (undefined4 *****)local_1c0;
}
local_40 = 6;
local_44 = 0;
local_48 = (uint)local_1c4 & 0xff;
iVar13 = *g_pScriptVM;
*(undefined4 *)((int)aiStack_204 + iVar4 + 0x10) = 1;
uVar9 = *puVar10;
*(undefined4 *)((int)aiStack_204 + iVar4 + 8) = 0;
*(undefined4 *)((int)aiStack_204 + iVar4 + 4) = 3;
*(undefined4 ******)((int)aiStack_204 + iVar4) = &local_60;
*(undefined4 ******)((int)aiStack_204 + iVar4 + -4) = pppppuVar11;
*(undefined4 *)((int)aiStack_204 + iVar4 + 0xc) = uVar9;
*(int **)((int)local_20c + iVar4) = g_pScriptVM;
/* try { // try from 007e0a27 to 007e0a29 has its CatchHandler @ 007e0cb0 */
pcVar1 = *(code **)(iVar13 + 0x50);
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0a2a;
(*pcVar1)();
pppppuVar11 = (undefined4 *****)local_3c;
do {
pppppuVar18 = pppppuVar11 + -3;
if ((*(byte *)((int)pppppuVar11 + -2) & 1) != 0) {
*(undefined4 *****)((int)local_20c + iVar4) = *pppppuVar18;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0a40;
free(*(void **)((int)local_20c + iVar4));
*(ushort *)((int)pppppuVar11 + -2) = *(ushort *)((int)pppppuVar11 + -2) & 0xfffe;
}
*pppppuVar18 = (undefined4 ****)0x0;
pppppuVar11[-2] = (undefined4 ****)0x0;
*(undefined2 *)(pppppuVar11 + -1) = 0;
pppppuVar11 = pppppuVar18;
} while (pppppuVar18 != &local_60);
}
}
piVar16 = local_1e4;
if ((int)local_1c8 < 1) {
*(undefined4 *)((int)aiStack_204 + iVar4) = 1;
*(int **)((int)aiStack_204 + iVar4 + -4) = piVar16;
*(undefined4 *****)((int)local_20c + iVar4) = local_1c8;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0db8;
SpawnHierarchicalList
(*(int *)((int)local_20c + iVar4),
*(HierarchicalSpawn_t **)((int)aiStack_204 + iVar4 + -4),
*(bool *)((int)aiStack_204 + iVar4));
if ((char)local_1e8 != '\0') goto LAB_007e0d05;
LAB_007e0dc5:
uVar9 = 1;
ppcVar17 = (char **)((int)local_20c + iVar4);
}
else {
local_1c0 = (undefined4 *****)0x0;
local_1c4 = local_1e4;
local_1dc = this + 0x2e0;
do {
puVar10 = (undefined4 *)(*(int *)(this + 0x500) + (int)local_1c0 * 8);
puVar2 = (undefined1 *)*puVar10;
puVar12 = &DAT_00d539c2;
if (puVar2 != (undefined1 *)0x0) {
puVar12 = puVar2;
}
*(undefined4 *)((int)aiStack_204 + iVar4 + -4) = puVar10[1];
*(undefined1 **)((int)local_20c + iVar4) = puVar12;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c21;
iVar13 = ScriptCreateEntityFromTable
(*(char **)((int)local_20c + iVar4),
*(HSCRIPT__ **)((int)aiStack_204 + iVar4 + -4));
if (iVar13 == 0) {
*(char **)((int)local_20c + iVar4) =
"Failed to initialize templated entity with spawn table\n";
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0ca4;
Msg();
uVar9 = 0;
goto LAB_007e0860;
}
if (((byte)this[0x14d] & 8) != 0) {
*(CPointScriptTemplate **)((int)local_20c + iVar4) = this;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c42;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
if (((byte)this[0x14d] & 8) != 0) {
*(CPointScriptTemplate **)((int)local_20c + iVar4) = this;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c57;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
}
}
pCVar6 = local_1dc;
*(CPointScriptTemplate **)((int)aiStack_204 + iVar4) = this + 0x37c;
*(CPointScriptTemplate **)((int)aiStack_204 + iVar4 + -4) = pCVar6;
*(undefined1 **)((int)local_20c + iVar4) = local_1a0;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0aba;
VMatrix::SetupMatrixOrgAngles
(*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
*(QAngle **)((int)aiStack_204 + iVar4));
*(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_160;
*(undefined1 **)((int)local_20c + iVar4) = local_1a0;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0acc;
VMatrix::InverseTR(*(VMatrix **)((int)local_20c + iVar4),
*(VMatrix **)((int)aiStack_204 + iVar4 + -4));
local_1cc = (undefined4 ****)(iVar13 + 0x37c);
if ((*(byte *)(iVar13 + 0x14d) & 8) != 0) {
*(int *)((int)local_20c + iVar4) = iVar13;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c6e;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
if ((*(byte *)(iVar13 + 0x14d) & 8) != 0) {
*(int *)((int)local_20c + iVar4) = iVar13;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c89;
CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
}
}
*(undefined4 *****)((int)aiStack_204 + iVar4) = local_1cc;
*(int *)((int)aiStack_204 + iVar4 + -4) = iVar13 + 0x2e0;
*(undefined1 **)((int)local_20c + iVar4) = local_120;
local_1cc = (undefined4 ****)local_120;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b01;
VMatrix::SetupMatrixOrgAngles
(*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
*(QAngle **)((int)aiStack_204 + iVar4));
ppppuVar8 = local_1cc;
*(undefined1 **)((int)local_20c + iVar4) = local_160;
*(undefined4 *****)((int)aiStack_204 + iVar4) = local_e0;
local_1d0 = local_e0;
*(undefined4 *****)((int)aiStack_204 + iVar4 + -4) = ppppuVar8;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b29;
MatrixMultiply(*(VMatrix **)((int)local_20c + iVar4),
*(VMatrix **)((int)aiStack_204 + iVar4 + -4),
*(VMatrix **)((int)aiStack_204 + iVar4));
pQVar7 = local_1d8;
*(undefined1 **)((int)local_20c + iVar4) = local_a0;
*(QAngle **)((int)aiStack_204 + iVar4) = pQVar7;
*(Vector **)((int)aiStack_204 + iVar4 + -4) = local_1d4;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b45;
VMatrix::SetupMatrixOrgAngles
(*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
*(QAngle **)((int)aiStack_204 + iVar4));
ppppuVar8 = local_1d0;
*(undefined4 ******)((int)aiStack_204 + iVar4) = &local_60;
*(undefined1 **)((int)local_20c + iVar4) = local_a0;
local_1cc = &local_60;
*(undefined4 *****)((int)aiStack_204 + iVar4 + -4) = ppppuVar8;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b6a;
MatrixMultiply(*(VMatrix **)((int)local_20c + iVar4),
*(VMatrix **)((int)aiStack_204 + iVar4 + -4),
*(VMatrix **)((int)aiStack_204 + iVar4));
ppppuVar8 = local_54;
*(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_1ac;
uVar9 = local_34;
local_1b8 = ppppuVar8;
local_1b4 = local_44;
*(undefined4 *****)((int)local_20c + iVar4) = local_1cc;
local_1b0 = uVar9;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0ba3;
MatrixToAngles(*(VMatrix **)((int)local_20c + iVar4),
*(QAngle **)((int)aiStack_204 + iVar4 + -4));
*(int *)((int)local_20c + iVar4) = iVar13;
*(undefined4 ******)((int)aiStack_204 + iVar4 + -4) = &local_1b8;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0bb5;
CBaseEntity::SetAbsOrigin
(*(CBaseEntity **)((int)local_20c + iVar4),
*(Vector **)((int)aiStack_204 + iVar4 + -4));
*(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_1ac;
*(int *)((int)local_20c + iVar4) = iVar13;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0bc1;
CBaseEntity::SetAbsAngles
(*(CBaseEntity **)((int)local_20c + iVar4),
*(QAngle **)((int)aiStack_204 + iVar4 + -4));
piVar19 = local_1c4;
piVar16 = local_1e4;
local_1c0 = (undefined4 ****)((int)local_1c0 + 1);
local_1c4 = local_1c4 + 4;
*piVar19 = iVar13;
piVar19[1] = 0;
piVar19[2] = 0;
} while (local_1c0 != local_1c8);
*(undefined4 *)((int)aiStack_204 + iVar4) = 1;
*(int **)((int)aiStack_204 + iVar4 + -4) = piVar16;
*(undefined4 *****)((int)local_20c + iVar4) = local_1c8;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0cf8;
SpawnHierarchicalList
(*(int *)((int)local_20c + iVar4),
*(HierarchicalSpawn_t **)((int)aiStack_204 + iVar4 + -4),
*(bool *)((int)aiStack_204 + iVar4));
if ((char)local_1e8 != '\0') {
LAB_007e0d05:
piVar16 = *(int **)(gpGlobals + 0xc);
if ((int)local_1c8 < 1) goto LAB_007e0dc5;
pppppuVar18 = (undefined4 *****)0x0;
pppppuVar11 = (undefined4 *****)local_1c8;
piVar19 = local_1e4;
do {
iVar13 = *piVar19;
if ((iVar13 != 0) && ((float)piVar16 != *(float *)(iVar13 + 0x98))) {
if (*(char *)(iVar13 + 0x6c) == '\0') {
puVar3 = *(uint **)(iVar13 + 0x30);
if (puVar3 != (uint *)0x0) {
*puVar3 = *puVar3 | 0x101;
*(uint **)((int)local_20c + iVar4) = puVar3;
local_1c4 = piVar16;
local_1c0 = pppppuVar11;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0d7a;
iVar14 = CBaseEdict::GetChangeAccessor(*(CBaseEdict **)((int)local_20c + iVar4));
*(undefined2 *)(iVar14 + 2) = 0;
pppppuVar11 = (undefined4 *****)local_1c0;
piVar16 = local_1c4;
}
}
else {
*(byte *)(iVar13 + 0x70) = *(byte *)(iVar13 + 0x70) | 1;
}
*(int **)(iVar13 + 0x98) = piVar16;
}
pppppuVar18 = (undefined4 *****)((int)pppppuVar18 + 1);
piVar19 = piVar19 + 4;
} while (pppppuVar18 != pppppuVar11);
}
pCVar5 = local_1e0;
iVar13 = 0;
piVar16 = local_1e4;
do {
if (*piVar16 != 0) {
*(int **)((int)aiStack_204 + iVar4) = piVar16;
uVar9 = *(undefined4 *)(pCVar5 + 0xc);
*(CUtlVector **)((int)local_20c + iVar4) = pCVar5;
*(undefined4 *)((int)aiStack_204 + iVar4 + -4) = uVar9;
*(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0df9;
CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
(*(CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> **)
((int)local_20c + iVar4),*(int *)((int)aiStack_204 + iVar4 + -4),
*(CBaseEntity ***)((int)aiStack_204 + iVar4));
}
iVar13 = iVar13 + 1;
piVar16 = piVar16 + 4;
} while (iVar13 < (int)local_1c8);
uVar9 = 1;
ppcVar17 = (char **)((int)local_20c + iVar4);
}
LAB_007e0860:
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return uVar9;
}
/* WARNING: Subroutine does not return */
*(undefined1 **)((int)ppcVar17 + -4) = &LAB_007e0cb0;
__stack_chk_fail();
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.