CreateExplosion
0x008c54f0 · 4032 bytes · __cdecl
_Z15CreateExplosionRK15CTakeDamageInfoff15ExplosionFxType
Decompiled
undefined (4 params)
/* CreateExplosion(CTakeDamageInfo const&, float, float, ExplosionFxType) */
void CreateExplosion(float *param_1,float param_2,float param_3,int param_4)
{
code *pcVar1;
char cVar2;
int *piVar3;
int iVar4;
int iVar5;
undefined *puVar6;
int *piVar7;
int *piVar8;
int *piVar9;
longdouble lVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
int local_9c4 [2];
int local_9ac;
float local_9a8 [2];
int local_9a0 [8];
int local_980 [4];
float local_970;
float local_96c;
float local_968;
float local_964;
float local_960;
float local_95c;
float local_958;
float local_954;
float local_950;
undefined1 local_94c [16];
float local_93c;
float local_938;
float local_934;
float local_92c;
float local_928;
float local_924;
undefined4 local_91c;
undefined4 local_918;
undefined4 local_914;
undefined4 local_90c;
undefined4 local_908;
undefined4 local_904;
undefined4 local_8fc;
undefined1 local_8f8;
undefined1 local_8f7;
undefined1 local_8e0 [12];
undefined1 local_8d4 [32];
float local_8b4;
float local_88c;
float local_888;
float local_884;
float local_880;
float local_87c;
float local_878;
float local_874;
float local_870;
float local_86c;
float local_868;
float local_864;
float local_860;
float local_85c;
float local_858;
float local_854;
float local_850;
float local_84c;
float local_848;
float local_844;
float local_840;
float local_83c;
float local_838;
float local_834;
float local_830;
float local_82c;
float local_828;
float local_824;
undefined4 local_81c;
undefined4 local_818;
undefined4 local_814;
undefined4 local_80c;
undefined4 local_808;
undefined4 local_804;
undefined4 local_7fc;
undefined4 local_7f8;
undefined4 local_7f4;
undefined4 local_7ec;
undefined1 local_7e8;
undefined1 local_7e7;
local_970 = param_1[3];
local_96c = param_1[4];
local_968 = param_1[5];
CEntitySphereQuery::CEntitySphereQuery
((CEntitySphereQuery *)&local_82c,(Vector *)&local_970,param_3,0);
piVar8 = (int *)&stack0xfffff644;
do {
*piVar8 = (int)&local_82c;
piVar8[-1] = 0x8c55dd;
piVar3 = (int *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)*piVar8);
if (piVar3 == (int *)0x0) {
iVar4 = IPredictionSystem::g_pPredictionSystems;
if (param_4 == 2) {
for (; iVar4 != 0; iVar4 = *(int *)(iVar4 + 4)) {
*(int *)(iVar4 + 0x10) = *(int *)(iVar4 + 0x10) + 1;
}
piVar8[9] = -1;
piVar8[8] = 0;
piVar8[7] = 0;
piVar8[4] = 0;
piVar8[1] = (int)local_970;
piVar8[5] = 0;
piVar8[6] = 0x3f800000;
*piVar8 = (int)"boomer_explode";
piVar8[2] = (int)local_96c;
local_82c = 0.0;
local_828 = 0.0;
local_824 = 1.0;
piVar8[3] = (int)local_968;
/* try { // try from 008c5cfe to 008c5eed has its CatchHandler @ 008c64e2 */
piVar8[-1] = 0x8c5d03;
DispatchParticleEffect();
fVar15 = param_1[0xc];
iVar4 = 0;
if (((fVar15 != -NAN) &&
(puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
puVar6 != (undefined *)0xfffffffc)) && (*(uint *)(puVar6 + 8) == (uint)fVar15 >> 0xc)) {
iVar4 = *(int *)(puVar6 + 4);
}
piVar8[3] = 0;
piVar8[2] = 0;
local_82c = local_970;
piVar8[1] = iVar4;
local_828 = local_96c;
*piVar8 = (int)&local_88c;
local_81c = 0;
local_818 = 0;
local_814 = 0xc2c80000;
local_7e7 = 1;
local_7f4 = 0;
local_7f8 = 0;
local_7fc = 0;
local_7ec = 0;
local_7e8 = 1;
local_804 = 0;
local_808 = 0;
local_80c = 0;
local_824 = local_968;
piVar8[-1] = 0x8c5df7;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)*piVar8,(IHandleEntity *)piVar8[1],piVar8[2],
(_func_bool_IHandleEntity_ptr_int *)piVar8[3]);
iVar4 = *enginetrace;
piVar8[4] = (int)local_8e0;
piVar8[3] = (int)&local_88c;
piVar8[2] = 0x600400b;
piVar8[1] = (int)&local_82c;
*piVar8 = (int)enginetrace;
pcVar1 = *(code **)(iVar4 + 0x14);
piVar8[-1] = 0x8c5e24;
(*pcVar1)();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
piVar8[6] = -0x40800000;
piVar8[5] = 1;
piVar8[4] = 0;
piVar8[3] = 0;
piVar8[2] = 0xff;
piVar8[1] = (int)local_8d4;
*piVar8 = (int)local_8e0;
piVar8[-1] = 0x8c5e6a;
DebugDrawLine((Vector *)*piVar8,(Vector *)piVar8[1],piVar8[2],piVar8[3],piVar8[4],
SUB41(piVar8[5],0),(float)piVar8[6]);
}
piVar8[1] = (int)"Blood";
*piVar8 = (int)local_8e0;
piVar8[-1] = 0x8c5e7a;
UTIL_DecalTrace((CGameTrace *)*piVar8,(char *)piVar8[1]);
fVar15 = param_1[0xc];
if (((fVar15 != -NAN) &&
(puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
puVar6 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar6 + 8) == (uint)fVar15 >> 0xc &&
(iVar4 = *(int *)(puVar6 + 4), iVar4 != 0)))) {
piVar8[3] = 0;
piVar8[2] = 0;
piVar8[1] = (int)"BoomerZombie.Detonate";
*piVar8 = iVar4;
/* try { // try from 008c5f85 to 008c5f89 has its CatchHandler @ 008c64e2 */
piVar8[-1] = 0x8c5f8a;
CBaseEntity::EmitSound
((CBaseEntity *)*piVar8,(char *)piVar8[1],(float)piVar8[2],(float *)piVar8[3]);
}
piVar8[7] = 0;
piVar8[6] = 0;
piVar8[5] = 0;
piVar8[4] = 0x443b8000;
piVar8[3] = 0x3f800000;
piVar8[2] = 0x43160000;
piVar8[1] = 0x42480000;
*piVar8 = (int)&local_970;
piVar8[-1] = 0x8c5eee;
UTIL_ScreenShake();
iVar4 = IPredictionSystem::g_pPredictionSystems;
if (IPredictionSystem::g_pPredictionSystems != 0) {
do {
*(int *)(iVar4 + 0x10) = *(int *)(iVar4 + 0x10) + -1;
piVar8 = (int *)(iVar4 + 4);
iVar4 = *piVar8;
} while (*piVar8 != 0);
return;
}
}
return;
}
piVar9 = piVar8;
if (*(char *)((int)piVar3 + 0x105) == '\0') goto LAB_008c55c8;
if ((char *)piVar3[0x1f] == "prop_physics") {
LAB_008c5580:
piVar8[3] = -2;
piVar8[2] = (int)&IBreakableWithPropData::typeinfo;
piVar8[1] = (int)&CBaseEntity::typeinfo;
*piVar8 = (int)piVar3;
piVar8[-1] = 0x8c55a0;
piVar7 = (int *)__dynamic_cast();
if (piVar7 == (int *)0x0) goto LAB_008c5614;
iVar4 = *piVar7;
*piVar8 = (int)piVar7;
pcVar1 = *(code **)(iVar4 + 0x2c);
piVar8[-1] = 0x8c55ae;
lVar10 = (longdouble)(*pcVar1)();
if ((float)lVar10 <= 0.0) {
iVar4 = *piVar7;
*piVar8 = (int)piVar7;
pcVar1 = *(code **)(iVar4 + 0x34);
piVar8[-1] = 0x8c5f28;
iVar4 = (*pcVar1)();
if (iVar4 == 0) goto LAB_008c5614;
}
}
else {
piVar8[1] = (int)"prop_physics";
*piVar8 = (int)piVar3;
piVar8[-1] = 0x8c5609;
cVar2 = CBaseEntity::ClassMatchesComplex((CBaseEntity *)*piVar8,(char *)piVar8[1]);
if (cVar2 != '\0') goto LAB_008c5580;
LAB_008c5614:
iVar4 = *piVar3;
piVar8[2] = (int)&local_970;
*piVar8 = (int)&local_88c;
piVar8[3] = 0;
piVar8[1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x244);
piVar8[-1] = 0x8c5643;
(*pcVar1)();
*piVar8 = (int)&local_970;
local_964 = local_88c;
piVar8[1] = (int)piVar3;
local_960 = local_888;
piVar8[-1] = g_pGameRules;
local_95c = local_884;
piVar8[-2] = 0x8c5691;
lVar10 = (longdouble)
CCSGameRules::GetAmountOfEntityVisible
((CCSGameRules *)piVar8[-1],(Vector *)*piVar8,(CBaseEntity *)piVar8[1]);
fVar15 = (float)lVar10;
piVar9 = piVar8 + -1;
if (0.0 < fVar15) {
fVar14 = local_964 - local_970;
fVar13 = local_960 - local_96c;
fVar12 = local_95c - local_968;
fVar11 = SQRT(fVar13 * fVar13 + fVar14 * fVar14 + fVar12 * fVar12);
piVar9 = piVar8 + -1;
if ((fVar11 <= param_3) &&
((fVar11 <= param_2 ||
(fVar15 = fVar15 * ((fVar11 - param_2) * (1.0 / (param_2 - param_3)) + 1.0),
piVar9 = piVar8 + -1, 0.0 < fVar15)))) {
local_88c = *param_1;
local_84c = param_1[0x10];
local_888 = param_1[1];
local_850 = param_1[0xf] * fVar15;
local_884 = param_1[2];
local_880 = param_1[3];
local_87c = param_1[4];
local_878 = param_1[5];
local_874 = param_1[6];
local_870 = param_1[7];
local_86c = param_1[8];
local_868 = param_1[9];
local_864 = param_1[10];
local_860 = param_1[0xb];
local_85c = param_1[0xc];
local_858 = param_1[0xd];
local_854 = param_1[0xe];
local_844 = param_1[0x12];
local_848 = param_1[0x11];
local_834 = param_1[0x16];
local_840 = param_1[0x13];
local_83c = param_1[0x14];
local_838 = param_1[0x15];
local_830 = param_1[0x17];
piVar8[-1] = (int)&local_958;
piVar8[-2] = 0x8c5869;
local_958 = fVar14;
local_954 = fVar13;
local_950 = fVar12;
VectorNormalize((Vector *)piVar8[-1]);
if (param_4 == 2) {
piVar8[-2] = 0x8c5fbc;
cVar2 = CTerrorGameRules::HasPlayerControlledZombies();
if ((cVar2 == '\0') && (piVar9 = piVar8 + -1, local_950 < -0.7)) goto LAB_008c55c8;
fVar11 = param_1[0xc];
if ((fVar11 == -NAN) ||
(((puVar6 = g_pEntityList + ((uint)fVar11 & 0xfff) * 0x10,
puVar6 == (undefined *)0xfffffffc || (*(uint *)(puVar6 + 8) != (uint)fVar11 >> 0xc)
) || (piVar9 = *(int **)(puVar6 + 4), piVar9 == (int *)0x0)))) {
LAB_008c604d:
piVar9 = (int *)0x0;
}
else {
iVar4 = *piVar9;
piVar8[-1] = (int)piVar9;
pcVar1 = *(code **)(iVar4 + 0x16c);
piVar8[-2] = 0x8c6039;
cVar2 = (*pcVar1)();
if (cVar2 == '\0') goto LAB_008c604d;
}
iVar4 = *piVar3;
piVar8[-1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x16c);
piVar8[-2] = 0x8c606a;
cVar2 = (*pcVar1)();
piVar7 = (int *)0x0;
if (cVar2 != '\0') {
piVar7 = piVar3;
}
if (piVar9 != (int *)0x0) {
piVar8[-1] = (int)piVar9;
piVar8[-2] = 0x8c6097;
iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
if (iVar4 == 3) {
iVar4 = *piVar9;
piVar8[-1] = (int)piVar9;
pcVar1 = *(code **)(iVar4 + 0x544);
piVar8[-2] = 0x8c60cf;
iVar4 = (*pcVar1)();
if ((iVar4 == 2) && (piVar7 != (int *)0x0)) {
piVar8[-1] = (int)piVar7;
piVar8[-2] = 0x8c6114;
iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
piVar8[-1] = iVar4;
piVar8[-2] = 0x8c611c;
cVar2 = IsASurvivorTeam(iVar4);
if (cVar2 != '\0') {
iVar4 = *piVar7;
piVar8[-1] = (int)piVar7;
pcVar1 = *(code **)(iVar4 + 0x52c);
piVar8[-2] = 0x8c6155;
iVar4 = (*pcVar1)();
piVar8[5] = 0;
*piVar8 = (int)&local_970;
piVar8[4] = 1;
piVar8[3] = 0;
piVar8[2] = 0x461c4000;
piVar8[1] = 0;
piVar8[-1] = TheNavMesh;
piVar8[-2] = 0x8c619a;
iVar5 = CNavMesh::GetNearestNavArea
((CNavMesh *)piVar8[-1],(Vector *)*piVar8,SUB41(piVar8[1],0),
(float)piVar8[2],SUB41(piVar8[3],0),SUB41(piVar8[4],0),
SUB41(piVar8[5],0));
if (((iVar5 != 0) && (iVar4 != 0)) &&
(((byte)(*(uint *)(iVar4 + 300) >> 0xb) & 1) !=
((byte)(*(uint *)(iVar5 + 300) >> 0xb) & 1))) {
if (CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
doorStr == '\0') {
piVar8[-1] = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
::doorStr;
piVar8[-2] = 0x8c646f;
iVar4 = __cxa_guard_acquire();
if (iVar4 != 0) {
piVar8[-1] = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
::doorStr;
DAT_01002b50 = 0;
CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
doorStr = 0;
DAT_01002b4c = "prop_door_rotating_checkpoint";
piVar8[-2] = 0x8c64b1;
__cxa_guard_release();
piVar8[1] = (int)&__dso_handle;
*piVar8 = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
::doorStr;
piVar8[-1] = (int)CGameString::~CGameString;
piVar8[-2] = 0x8c64cd;
__cxa_atexit();
}
}
iVar4 = *piVar9;
piVar8[-1] = (int)piVar9;
pcVar1 = *(code **)(iVar4 + 0x288);
piVar8[-2] = 0x8c6208;
iVar4 = (*pcVar1)();
if (((CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
doorStr == 0) ||
(iVar5 = CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
::doorStr, DAT_01002b50 != CGameString::gm_iSerialNumber)) &&
(iVar5 = 0, DAT_01002b4c != (char *)0x0)) {
*piVar8 = (int)DAT_01002b4c;
piVar8[-1] = (int)local_980;
piVar8[-2] = 0x8c625f;
AllocPooledString((char *)piVar8[-1]);
CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::doorStr
= local_980[0];
DAT_01002b50 = CGameString::gm_iSerialNumber;
iVar5 = local_980[0];
}
piVar8[1] = iVar4;
*piVar8 = iVar5;
piVar8[2] = (int)(param_3 + param_3);
piVar8[-1] = (int)gEntList;
piVar8[-2] = 0x8c62bf;
piVar7 = (int *)CGlobalEntityList::FindEntityByClassnameNearestFast();
if (piVar7 != (int *)0x0) {
iVar4 = *piVar7;
piVar8[-1] = (int)piVar7;
pcVar1 = *(code **)(iVar4 + 0x478);
piVar8[-2] = 0x8c62e4;
cVar2 = (*pcVar1)();
if ((cVar2 != '\0') &&
((piVar9 = piVar8 + -1, piVar7[0x57d] == 0 ||
(piVar9 = piVar8 + -1, piVar7[0x57d] == 3)))) goto LAB_008c55c8;
}
}
}
}
}
}
}
if (((vec3_origin == local_880) &&
((local_87c == DAT_01053d4c && (local_878 == DAT_01053d50)))) ||
((vec3_origin == local_88c &&
((local_888 == DAT_01053d4c && (local_884 == DAT_01053d50)))))) {
piVar8[2] = 0x3fc00000;
piVar8[1] = (int)&local_970;
*piVar8 = (int)&local_958;
piVar8[-1] = (int)&local_88c;
piVar8[-2] = 0x8c58f6;
CalculateExplosiveDamageForce
((CTakeDamageInfo *)piVar8[-1],(Vector *)*piVar8,(Vector *)piVar8[1],
(float)piVar8[2]);
}
else {
local_88c = SQRT(local_884 * local_884 + local_888 * local_888 + local_88c * local_88c);
local_884 = local_950 * fVar15 * local_88c;
local_888 = local_954 * fVar15 * local_88c;
local_88c = fVar15 * local_958 * local_88c;
local_880 = local_970;
local_87c = local_96c;
local_878 = local_968;
}
if (local_884 < 0.0) {
if ((*(byte *)((int)piVar3 + 0x14d) & 0x10) != 0) {
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c6373;
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)piVar8[-1]);
}
if ((float)piVar3[0x9e] * (float)piVar3[0x9e] +
(float)piVar3[0x9d] * (float)piVar3[0x9d] +
(float)piVar3[0x9f] * (float)piVar3[0x9f] < 1.0) {
local_884 = local_884 * -0.5;
}
}
piVar8[2] = 0;
piVar8[-1] = (int)local_94c;
piVar8[1] = 0;
*piVar8 = 0;
local_92c = local_964 - local_970;
local_93c = local_970;
local_928 = local_960 - local_96c;
local_938 = local_96c;
local_934 = local_968;
local_924 = local_95c - local_968;
local_904 = 0;
local_908 = 0;
local_90c = 0;
local_8fc = 0;
local_8f8 = 1;
local_914 = 0;
local_918 = 0;
local_91c = 0;
local_8f7 = local_928 * local_928 + local_92c * local_92c + local_924 * local_924 != 0.0;
piVar8[-2] = 0x8c5b52;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)piVar8[-1],(IHandleEntity *)*piVar8,piVar8[1],
(_func_bool_IHandleEntity_ptr_int *)piVar8[2]);
iVar4 = *enginetrace;
piVar8[-1] = (int)enginetrace;
piVar8[2] = (int)local_94c;
*piVar8 = (int)&local_93c;
piVar8[3] = (int)local_8e0;
piVar8[1] = 0x46004003;
pcVar1 = *(code **)(iVar4 + 0x14);
piVar8[-2] = 0x8c5b7f;
(*pcVar1)();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
piVar8[5] = -0x40800000;
piVar8[4] = 1;
piVar8[3] = 0;
piVar8[2] = 0;
piVar8[1] = 0xff;
*piVar8 = (int)local_8d4;
piVar8[-1] = (int)local_8e0;
piVar8[-2] = 0x8c5bc5;
DebugDrawLine((Vector *)piVar8[-1],(Vector *)*piVar8,piVar8[1],piVar8[2],piVar8[3],
SUB41(piVar8[4],0),(float)piVar8[5]);
}
iVar4 = *piVar3;
piVar8[-1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x144);
piVar8[-2] = 0x8c5bd0;
iVar4 = (*pcVar1)();
if (iVar4 == 0) {
LAB_008c5be4:
if (local_8b4 == 1.0) {
piVar8[-1] = (int)piVar3;
*piVar8 = (int)&local_88c;
piVar8[-2] = 0x8c5fb2;
CBaseEntity::TakeDamage((CBaseEntity *)piVar8[-1],(CTakeDamageInfo *)*piVar8);
}
else {
piVar8[-2] = 0x8c5bfe;
ClearMultiDamage();
piVar8[2] = (int)local_8e0;
piVar8[1] = (int)&local_958;
*piVar8 = (int)&local_88c;
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c5c1e;
CBaseEntity::DispatchTraceAttack
((CTakeDamageInfo *)piVar8[-1],(Vector *)*piVar8,(CGameTrace *)piVar8[1]);
piVar8[-2] = 0x8c5c23;
ApplyMultiDamage();
}
}
else {
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c5bdc;
iVar4 = CBaseEntity::MyNPCPointer();
if ((iVar4 != 0) || (param_4 != 2)) goto LAB_008c5be4;
fVar15 = param_1[0xc];
if ((((fVar15 == -NAN) ||
(puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
puVar6 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar6 + 8) != (uint)fVar15 >> 0xc)) ||
(piVar9 = *(int **)(puVar6 + 4), piVar9 == (int *)0x0)) {
LAB_008c6353:
iVar4 = *piVar3;
piVar8[-1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x16c);
piVar8[-2] = 0x8c635e;
(*pcVar1)();
}
else {
iVar4 = *piVar9;
piVar8[-1] = (int)piVar9;
pcVar1 = *(code **)(iVar4 + 0x16c);
piVar8[-2] = 0x8c6392;
cVar2 = (*pcVar1)();
if (cVar2 == '\0') goto LAB_008c6353;
iVar4 = *piVar3;
piVar8[-1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x16c);
piVar8[-2] = 0x8c63a1;
cVar2 = (*pcVar1)();
if (cVar2 == '\0') {
piVar8[2] = -2;
piVar8[1] = (int)&INextBot::typeinfo;
*piVar8 = (int)&CBaseEntity::typeinfo;
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c63c5;
piVar7 = (int *)__dynamic_cast();
if (piVar7 != (int *)0x0) {
iVar4 = *piVar7;
*piVar8 = (int)piVar9;
piVar8[-1] = (int)piVar7;
pcVar1 = *(code **)(iVar4 + 0x74);
piVar8[-2] = 0x8c63d9;
(*pcVar1)();
}
}
else {
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c63e6;
iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
piVar8[-1] = iVar4;
piVar8[-2] = 0x8c63ee;
cVar2 = IsASurvivorTeam(iVar4);
if (cVar2 != '\0') {
iVar4 = *piVar3;
piVar8[-1] = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 0x550);
piVar8[-2] = 0x8c6416;
cVar2 = (*pcVar1)();
if (cVar2 == '\0') {
iVar4 = piVar3[0xae8];
piVar8[-1] = (int)piVar9;
*piVar8 = iVar4;
piVar8[-2] = 0x8c6451;
CTerrorPlayer::OnHitSurvivorWithBoomerBomb();
}
piVar8[1] = 1;
*piVar8 = (int)piVar9;
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c642e;
CTerrorPlayer::OnVomitedUpon
((CTerrorPlayer *)piVar8[-1],(CTerrorPlayer *)*piVar8,SUB41(piVar8[1],0)
);
iVar4 = *piVar9;
*piVar8 = (int)piVar3;
piVar8[-1] = (int)piVar9;
pcVar1 = *(code **)(iVar4 + 0x64c);
piVar8[-2] = 0x8c643d;
(*pcVar1)();
}
piVar8[1] = 0;
*piVar8 = (int)piVar9;
piVar8[-1] = (int)piVar3;
piVar8[-2] = 0x8c6406;
CTerrorPlayer::OnStaggered
((CTerrorPlayer *)piVar8[-1],(CBaseEntity *)*piVar8,(Vector *)piVar8[1]);
}
}
}
piVar8[-1] = (int)piVar3;
piVar8[3] = (int)&local_958;
piVar8[2] = (int)&local_964;
piVar8[1] = (int)&local_970;
*piVar8 = (int)&local_88c;
piVar8[-2] = 0x8c5c58;
CBaseEntity::TraceAttackToTriggers
((CBaseEntity *)piVar8[-1],(CTakeDamageInfo *)*piVar8,(Vector *)piVar8[1],
(Vector *)piVar8[2],(Vector *)piVar8[3]);
piVar9 = piVar8 + -1;
}
}
}
LAB_008c55c8:
local_82c = (float)((int)local_82c + 1);
piVar8 = piVar9;
} while( true );
}
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.