CTerrorPlayer::FireBullet
0x0052a3a0 · 10375 bytes · __cdecl
_ZN13CTerrorPlayer10FireBulletE6VectorRK6QAngle10CSWeaponIDi
Decompiled
undefined (4 params)
/* CTerrorPlayer::FireBullet(Vector, QAngle const&, CSWeaponID, int) */
void CTerrorPlayer::FireBullet
(CTerrorPlayer *param_1,float param_2,float param_3,float param_4,float *param_5,
undefined4 param_6,int param_7)
{
float fVar1;
ushort uVar2;
code *pcVar3;
bool bVar4;
bool bVar5;
short sVar6;
CBaseEntity *pCVar7;
int iVar8;
char cVar9;
CBaseAnimating *pCVar10;
undefined *puVar11;
CAmmoDef *this;
int *piVar12;
int *piVar13;
int iVar14;
CBaseEntity *pCVar15;
undefined4 *puVar16;
uint uVar17;
int iVar18;
IHandleEntity *pIVar19;
int iVar20;
uint uVar21;
undefined1 *puVar22;
uint uVar23;
ushort *puVar24;
int in_GS_OFFSET;
bool bVar25;
longdouble lVar26;
longdouble lVar27;
longdouble lVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
undefined **ppuVar34;
float local_6c0;
int local_6b4;
int local_6b0;
float local_69c;
float local_698;
float local_694;
int local_690;
float local_674;
float local_668;
CFindActiveTongues local_641;
undefined ***local_640;
float local_63c;
float local_638;
undefined **local_634;
float local_630;
float local_62c;
float local_628;
undefined4 local_624;
undefined4 local_620;
undefined4 local_61c;
float local_618;
float local_614;
float local_610;
CTraceFilterChain local_60c [12];
undefined **local_600;
float local_5fc;
float local_5f8;
undefined4 local_5f4;
undefined4 local_5f0;
undefined4 local_5ec;
undefined4 local_5e8;
undefined4 local_5e4;
undefined4 local_5e0;
undefined **local_5dc [4];
undefined4 local_5cc [3];
undefined4 local_5c0;
undefined4 local_5bc;
undefined **local_5b8 [4];
undefined4 local_5a8 [3];
undefined4 local_59c;
undefined4 local_598;
CBaseEntity *local_594;
int local_590;
float local_58c;
float local_588;
float local_584;
undefined4 local_580;
undefined4 local_57c;
undefined4 local_578;
uint local_574;
uint local_570;
float local_56c;
float local_568;
float local_564;
undefined1 local_560;
undefined1 local_55f;
char local_55e;
char local_55d;
float local_55c;
float local_558;
float local_554;
float local_54c;
float local_548;
float local_544;
undefined4 local_53c;
undefined4 local_538;
undefined4 local_534;
undefined4 local_52c;
undefined4 local_528;
undefined4 local_524;
undefined4 local_51c;
undefined1 local_518;
undefined1 local_517;
undefined **local_50c;
float local_508;
float local_504;
float local_4fc;
float local_4f8;
float local_4f4;
undefined4 local_4ec;
undefined4 local_4e8;
undefined4 local_4e4;
undefined4 local_4dc;
undefined4 local_4d8;
undefined4 local_4d4;
undefined4 local_4cc;
undefined1 local_4c8;
undefined1 local_4c7;
float local_4b4;
float local_4b0;
float local_4ac;
undefined **local_4a8;
float local_4a4;
float local_4a0;
undefined4 local_49c;
undefined4 local_498;
undefined4 local_494;
undefined4 local_490;
undefined1 local_48c;
undefined1 local_48b;
undefined2 local_48a;
undefined4 local_488;
uint local_484;
undefined2 local_480;
undefined1 local_47e;
undefined1 local_47d;
undefined4 local_47c;
undefined4 local_478;
undefined4 local_474;
undefined4 local_470;
undefined2 local_46c;
undefined2 local_46a;
CBaseAnimating *local_468;
undefined4 local_464;
float local_460;
float local_45c;
float local_458;
undefined **local_454;
float local_450;
float local_44c;
undefined4 local_448;
undefined4 local_444;
undefined4 local_440;
undefined4 local_43c;
undefined1 local_438;
undefined1 local_437;
undefined2 local_436;
undefined4 local_434;
uint local_430;
undefined2 local_42c;
undefined1 local_42a;
undefined1 local_429;
undefined4 local_428;
undefined4 local_424;
undefined4 local_420;
undefined4 local_41c;
undefined2 local_418;
undefined2 local_416;
CBaseAnimating *local_414;
undefined4 local_410;
undefined **local_40c;
float local_408;
float local_404;
float local_400;
float local_3fc;
float local_3f8;
byte local_3dc;
char local_3d5;
undefined4 local_3b8;
undefined4 local_3b4;
undefined4 local_3b0;
Vector local_3ac [32];
float local_38c;
undefined4 local_380;
float local_37c;
uint local_370;
undefined4 local_36c;
undefined4 local_364;
float local_358;
float local_354;
float local_350;
undefined **local_34c;
float local_348;
float local_344;
undefined4 local_340;
undefined4 local_33c;
undefined4 local_338;
undefined4 local_334;
undefined1 local_330;
undefined1 local_32f;
undefined2 local_32e;
undefined4 local_32c;
uint local_328;
undefined2 local_324;
undefined1 local_322;
undefined1 local_321;
undefined4 local_320;
undefined4 local_31c;
undefined4 local_318;
undefined4 local_314;
undefined2 local_310;
undefined2 local_30e;
CBaseAnimating *local_30c;
undefined4 local_308;
uint local_304;
int local_300;
float local_2fc;
float local_2f8;
float local_2f4;
undefined **local_2f0;
float local_2ec;
float local_2e8;
float local_2e4;
bool local_2c0;
char local_2bf;
undefined1 local_2be;
undefined1 local_2bd;
char local_2bc;
char local_2b8 [20];
undefined **local_2a4 [14];
char local_269;
undefined4 local_24c;
undefined4 local_248;
undefined1 local_244 [512];
undefined4 local_44;
undefined1 *local_40;
code *local_3c;
int local_38;
undefined4 local_34;
undefined4 local_30;
ushort local_2c;
ushort local_2a;
undefined2 local_28;
undefined2 local_26;
undefined4 local_24;
int local_20;
puVar22 = &stack0xfffff914;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_590 = CTerrorWeaponInfo::GetWeaponInfo();
if (local_590 == 0) goto LAB_0052bcf1;
if ((0 < *(int *)(sv_showplayerhitboxes._28_4_ + 0x30)) &&
(pCVar10 = (CBaseAnimating *)UTIL_PlayerByIndex(*(int *)(sv_showplayerhitboxes._28_4_ + 0x30)),
pCVar10 != (CBaseAnimating *)0x0)) {
CBaseAnimating::DrawServerHitboxes(pCVar10,4.0,true);
}
iVar8 = local_590;
local_630 = *param_5;
local_62c = param_5[1];
local_628 = param_5[2];
uVar21 = *(uint *)(param_1 + 0x1d14);
if (((uVar21 == 0xffffffff) ||
(puVar11 = g_pEntityList + (uVar21 & 0xfff) * 0x10, puVar11 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar11 + 8) != uVar21 >> 0xc)) {
LAB_0052a47b:
local_574 = 0x46004003;
pIVar19 = (IHandleEntity *)0x0;
}
else {
pIVar19 = *(IHandleEntity **)(puVar11 + 4);
local_574 = 0x6004003;
if (pIVar19 == (IHandleEntity *)0x0) goto LAB_0052a47b;
}
CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_5dc,0);
/* try { // try from 0052a4b0 to 0052a6e9 has its CatchHandler @ 0052cd5d */
CTraceFilterSimpleList::AddEntityToIgnore
((CTraceFilterSimpleList *)local_5dc,(IHandleEntity *)param_1);
uVar21 = *(uint *)(param_1 + 0x2e24);
if (((uVar21 != 0xffffffff) &&
(puVar11 = g_pEntityList + (uVar21 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar11 + 8) == uVar21 >> 0xc &&
(*(IHandleEntity **)(puVar11 + 4) != (IHandleEntity *)0x0)))) {
/* try { // try from 0052cd53 to 0052cd57 has its CatchHandler @ 0052cd5d */
CTraceFilterSimpleList::AddEntityToIgnore
((CTraceFilterSimpleList *)local_5dc,*(IHandleEntity **)(puVar11 + 4));
}
if (pIVar19 != (IHandleEntity *)0x0) {
CTraceFilterSimpleList::AddEntityToIgnore((CTraceFilterSimpleList *)local_5dc,pIVar19);
}
local_640 = local_5dc;
ForEachTerrorPlayer<IgnoreGhosts>((IgnoreGhosts *)&local_640);
local_641 = (CFindActiveTongues)0x0;
ForEachTerrorPlayer<CFindActiveTongues>(&local_641);
local_560 = false;
local_58c = param_2;
local_588 = param_3;
local_584 = param_4;
if (local_641 != (CFindActiveTongues)0x0) {
uVar21 = *(uint *)(param_1 + 0x33c4);
if (((uVar21 == 0xffffffff) ||
(puVar11 = g_pEntityList + (uVar21 & 0xfff) * 0x10, puVar11 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar11 + 8) != uVar21 >> 0xc)) {
local_560 = true;
}
else {
local_560 = *(int *)(puVar11 + 4) == 0;
}
}
(**(code **)(*(int *)param_1 + 0x478))();
puVar22 = &stack0xfffff910;
local_594 = (CBaseEntity *)param_1;
local_580 = local_624;
iVar14 = *(int *)(local_590 + 0x850);
local_57c = local_620;
local_578 = local_61c;
this = (CAmmoDef *)GetAmmoDef();
local_570 = CAmmoDef::DamageType(this,iVar14);
local_56c = *(float *)(local_590 + 0xc4c) * *(float *)(local_590 + 0xc4c);
local_568 = *(float *)(local_590 + 0xc50) * *(float *)(local_590 + 0xc50);
local_564 = *(float *)(local_590 + 0xc54) * *(float *)(local_590 + 0xc54);
if ((*(int *)(local_590 + 0x158) == 0) &&
(piVar12 = (int *)GetActiveTerrorWeapon(param_1), piVar12 != (int *)0x0)) {
cVar9 = (**(code **)(*piVar12 + 0x6b4))();
if (cVar9 != '\0') {
local_570 = local_570 | 8;
local_56c = 0.0;
}
cVar9 = (**(code **)(*piVar12 + 0x6b4))();
if (cVar9 != '\0') {
local_570 = local_570 | 0x80800040;
local_56c = 0.0;
}
}
piVar12 = mdlcache;
local_55e = '\0';
local_55f = 0;
(**(code **)(*mdlcache + 0x68))();
iVar14 = *(int *)(local_590 + 0x9d8);
iVar18 = *(int *)(perf_fire_bullet_single._28_4_ + 0x30);
iVar20 = 1;
if ((iVar18 != 1) && (iVar20 = iVar14 * iVar18, iVar18 < 2)) {
iVar20 = iVar14;
}
/* try { // try from 0052a71c to 0052a8e7 has its CatchHandler @ 0052cd2a */
piVar13 = (int *)GetActiveTerrorWeapon(param_1);
if ((piVar13 == (int *)0x0) || (local_55d = (**(code **)(*piVar13 + 0x6b4))(), local_55d == '\0'))
{
local_6b4 = iVar20 + -1;
local_55d = iVar14 == 1;
}
else {
local_6b4 = 0;
iVar20 = 1;
}
fVar29 = *(float *)(iVar8 + 0xc30);
if (fVar29 == 0.0) {
local_6c0 = 1.0;
}
else if (*(float *)(iVar8 + 0xc2c) == 0.0) {
local_6c0 = 1.0;
}
else {
local_6c0 = *(float *)(iVar8 + 0xc2c) / fVar29;
}
if (0 < iVar20) {
bVar5 = true;
do {
param_7 = param_7 + 1;
if ((fVar29 != 0.0) && (!bVar5)) {
lVar26 = (longdouble)
SharedRandomFloat("CTerrorPlayer::FireBullet Spread",-fVar29,fVar29,param_7);
lVar27 = (longdouble)
SharedRandomFloat("CTerrorPlayer::FireBullet SpreadDir",0.0,180.0,param_7);
lVar28 = (longdouble)(((float)lVar27 + (float)lVar27) * 0.017453292);
lVar27 = (longdouble)fcos(lVar28);
lVar28 = (longdouble)fsin(lVar28);
local_628 = param_5[2];
local_630 = local_6c0 * (float)lVar26 * (float)lVar28 + *param_5;
local_62c = (float)lVar27 * (float)lVar26 + param_5[1];
}
AngleVectors((QAngle *)&local_630,(Vector *)&local_618);
CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_5b8,0);
/* try { // try from 0052a905 to 0052a909 has its CatchHandler @ 0052cd26 */
CTraceFilterChain::CTraceFilterChain
(local_60c,(ITraceFilter *)local_5dc,(ITraceFilter *)local_5b8);
fVar32 = local_584;
fVar31 = local_588;
fVar30 = local_58c;
local_304 = 0xffffffff;
local_300 = 0;
local_2e4 = 0.0;
local_69c = local_58c;
fVar29 = *(float *)(local_590 + 0x9d0);
local_698 = local_584;
ppuVar34 = (undefined **)(local_618 * fVar29 + local_58c);
local_694 = local_588;
local_2bd = local_55f;
fVar33 = local_614 * fVar29 + local_588;
fVar29 = fVar29 * local_610 + local_584;
if (local_55e == '\0') {
local_2c0 = false;
}
else {
local_544 = fVar29 - local_584;
local_54c = (float)ppuVar34 - local_58c;
local_518 = 1;
local_548 = fVar33 - local_588;
local_40c = &PTR_ShouldHitEntity_00c2ac08;
local_524 = 0;
local_528 = 0;
local_52c = 0;
local_51c = 0;
local_534 = 0;
local_538 = 0;
local_53c = 0;
local_55c = local_58c;
local_517 = local_544 * local_544 + local_54c * local_54c + local_548 * local_548 != 0.0;
local_558 = local_588;
local_554 = local_584;
/* try { // try from 0052ca95 to 0052cadd has its CatchHandler @ 0052cd26 */
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_3b8,local_3ac,0xff,0,0,true,-1.0);
}
local_2c0 = local_38c != 1.0;
}
local_2f8 = local_614;
local_2f4 = local_610;
local_2fc = local_618;
local_2be = local_560;
local_2bf = '\x01';
local_2bc = '\0';
local_4b4 = fVar30;
local_4b0 = fVar31;
local_4ac = fVar32;
local_488 = 0x3f800000;
local_47e = 0;
local_47d = 0;
local_468 = (CBaseAnimating *)0x0;
local_47c = 0;
local_460 = fVar30;
local_45c = fVar31;
local_458 = fVar32;
local_448 = local_49c;
local_434 = 0x3f800000;
local_42a = 0;
local_444 = local_498;
local_438 = local_48c;
local_440 = local_494;
local_429 = 0;
local_43c = local_490;
local_437 = local_48b;
local_428 = 0;
local_420 = local_474;
local_414 = (CBaseAnimating *)0x0;
local_436 = local_48a;
local_430 = local_484;
local_42c = local_480;
local_424 = local_478;
local_41c = local_470;
local_418 = local_46c;
local_416 = local_46a;
local_410 = local_464;
local_40 = local_244;
local_2a4[0] = &PTR_EnumElement_00c341b0;
local_2c = 0xffff;
local_2a = 0;
local_28 = 0xffff;
local_26 = 0xffff;
local_690 = *(int *)(local_590 + 0xc48);
local_24c = 0xffffffff;
local_248 = 0;
local_44 = 0;
local_3c = CDefOps<float>::LessFunc;
local_38 = 0;
local_34 = 0;
local_30 = 0;
local_24 = 0;
local_4a8 = ppuVar34;
local_4a4 = fVar33;
local_4a0 = fVar29;
local_454 = ppuVar34;
local_450 = fVar33;
local_44c = fVar29;
local_2f0 = ppuVar34;
local_2ec = fVar33;
local_2e8 = fVar29;
if ((local_570 & 0x800000) == 0) {
if (0 < local_690) goto LAB_0052ac71;
}
else {
local_690 = 1;
LAB_0052ac71:
local_6b0 = 0xf;
while( true ) {
local_524 = 0;
local_518 = 1;
local_55c = local_69c;
local_558 = local_694;
local_54c = (float)ppuVar34 - local_69c;
local_528 = 0;
local_548 = fVar33 - local_694;
local_52c = 0;
local_51c = 0;
local_544 = fVar29 - local_698;
local_534 = 0;
local_538 = 0;
local_53c = 0;
local_554 = local_698;
local_44 = 0;
local_517 = local_548 * local_548 + local_54c * local_54c + local_544 * local_544 != 0.0;
CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::RemoveAll((CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
*)&local_3c);
/* try { // try from 0052adb0 to 0052bbd8 has its CatchHandler @ 0052cc73 */
CTraceBulletEntityEnumerator::PerformMultiTrace
((CTraceBulletEntityEnumerator *)local_2a4,(Ray_t *)&local_55c,
(Vector *)&local_618,local_574,(ITraceFilter *)local_60c);
if ((local_269 != '\0') || (uVar21 = (uint)local_2a, uVar2 = local_2c, uVar21 == 0))
break;
while( true ) {
uVar23 = (uint)uVar2;
if ((CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel == '\0') &&
(iVar14 = __cxa_guard_acquire(), iVar14 != 0)) {
CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel = -1;
DAT_00f1d16a = 0xffff;
DAT_00f1d16c = 0xffff;
__cxa_guard_release();
}
sVar6 = CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel;
if (uVar2 != 0xffff) {
sVar6 = *(short *)(uVar23 * 0x68 + local_38);
}
if (sVar6 == -1) break;
if (CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel == '\0') {
iVar14 = __cxa_guard_acquire();
if (iVar14 != 0) {
CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel = -1;
DAT_00f1d16a = 0xffff;
DAT_00f1d16c = 0xffff;
__cxa_guard_release();
}
if (uVar2 != 0xffff) goto LAB_0052ae1b;
LAB_0052bd35:
puVar24 = (ushort *)
&CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Links(unsigned_short)::s_Sentinel;
}
else {
if (uVar2 == 0xffff) goto LAB_0052bd35;
LAB_0052ae1b:
puVar24 = (ushort *)(uVar23 * 0x68 + local_38);
}
uVar2 = *puVar24;
}
if (uVar23 != 0xffff) {
iVar14 = uVar21 - 1;
do {
iVar18 = uVar23 * 0x68 + local_38;
local_358 = *(float *)(iVar18 + 0xc);
local_330 = *(undefined1 *)(iVar18 + 0x34);
local_354 = *(float *)(iVar18 + 0x10);
local_350 = *(float *)(iVar18 + 0x14);
local_34c = *(undefined ***)(iVar18 + 0x18);
local_348 = *(float *)(iVar18 + 0x1c);
local_344 = *(float *)(iVar18 + 0x20);
local_340 = *(undefined4 *)(iVar18 + 0x24);
local_33c = *(undefined4 *)(iVar18 + 0x28);
local_32f = *(undefined1 *)(iVar18 + 0x35);
local_338 = *(undefined4 *)(iVar18 + 0x2c);
local_334 = *(undefined4 *)(iVar18 + 0x30);
local_32e = *(undefined2 *)(iVar18 + 0x36);
local_32c = *(undefined4 *)(iVar18 + 0x38);
local_328 = *(uint *)(iVar18 + 0x3c);
local_324 = *(undefined2 *)(iVar18 + 0x40);
local_322 = *(undefined1 *)(iVar18 + 0x42);
local_321 = *(undefined1 *)(iVar18 + 0x43);
local_318 = *(undefined4 *)(iVar18 + 0x4c);
local_320 = *(undefined4 *)(iVar18 + 0x44);
local_31c = *(undefined4 *)(iVar18 + 0x48);
local_308 = *(undefined4 *)(iVar18 + 0x5c);
local_314 = *(undefined4 *)(iVar18 + 0x50);
local_304 = *(uint *)(iVar18 + 0x60);
local_310 = *(undefined2 *)(iVar18 + 0x54);
local_30e = *(undefined2 *)(iVar18 + 0x56);
local_300 = *(int *)(iVar18 + 100);
local_30c = *(CBaseAnimating **)(iVar18 + 0x58);
if (local_30c == (CBaseAnimating *)0x0) {
LAB_0052b0be:
iVar18 = (**(code **)(*physprops + 0x18))();
uVar21 = (uint)*(ushort *)(iVar18 + 0x4c);
if (((local_328 & 2) == 0) || (uVar21 != 0x59)) {
local_63c = 0.5;
local_638 = 1.0;
GetMaterialParameters(uVar21,&local_638,&local_63c);
bVar5 = false;
}
else {
local_63c = 0.99;
local_638 = 1.0;
bVar5 = true;
}
if ((*(uint *)(sv_showimpacts._28_4_ + 0x30) & 0xfffffffd) == 1) {
local_5e8 = 0x40000000;
local_5e4 = 0x40000000;
local_5e0 = 0x40000000;
local_5f4 = 0xc0000000;
local_5f0 = 0xc0000000;
local_5ec = 0xc0000000;
NDebugOverlay::Box((Vector *)&local_34c,(Vector *)&local_5f4,(Vector *)&local_5e8,
0,0,0xff,0x7f,4.0);
if (local_30c != (CBaseAnimating *)0x0) {
cVar9 = (**(code **)(*(int *)local_30c + 0x16c))();
pCVar10 = local_30c;
if (cVar9 != '\0') {
if ((local_30c == (CBaseAnimating *)0x0) ||
(cVar9 = (**(code **)(*(int *)local_30c + 0x16c))(), cVar9 == '\0')) {
pCVar10 = (CBaseAnimating *)0x0;
}
CBaseAnimating::DrawServerHitboxes(pCVar10,4.0,true);
}
goto joined_r0x0052c146;
}
LAB_0052c150:
bVar25 = false;
}
else {
joined_r0x0052c146:
if (local_30c == (CBaseAnimating *)0x0) goto LAB_0052c150;
iVar18 = (**(code **)(*(int *)local_30c + 0x144))();
bVar25 = iVar18 != 0;
}
fVar30 = (local_344 - local_584) * (local_344 - local_584) +
((float)local_34c - local_58c) * ((float)local_34c - local_58c) +
(local_348 - local_588) * (local_348 - local_588);
if ((bVar25) && (local_2bc = '\x01', local_564 != 0.0)) {
bVar4 = fVar30 <= local_564;
}
else {
bVar4 = false;
}
piVar13 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar13 != (int *)0x0) {
pcVar3 = *(code **)(*piVar13 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar3)();
(**(code **)(*piVar13 + 0x38))();
(**(code **)(*piVar13 + 0x38))();
(**(code **)(*piVar13 + 0x38))();
(**(code **)(*gameeventmanager + 0x20))();
}
if (local_30c != (CBaseAnimating *)0x0) {
ClearMultiDamage();
iVar18 = local_590;
fVar31 = SQRT(fVar30);
local_668 = (float)*(int *)(local_590 + 0x9cc);
if (fVar31 == 0.0) {
LAB_0052b399:
if (local_594 == (CBaseEntity *)0x0) goto LAB_0052c218;
LAB_0052b3a7:
pCVar15 = local_594;
if (local_30c != (CBaseAnimating *)0x0) {
iVar18 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_30c);
cVar9 = IsASurvivorTeam(iVar18);
pCVar15 = local_594;
if (cVar9 != '\0') {
iVar18 = CBaseEntity::GetTeamNumber(local_594);
cVar9 = IsASurvivorTeam(iVar18);
pCVar7 = local_594;
pCVar15 = local_594;
if (cVar9 != '\0') {
if (local_594 == (CBaseEntity *)0x0) goto LAB_0052c218;
cVar9 = (**(code **)(*(int *)local_594 + 0x16c))();
pCVar15 = local_594;
if ((cVar9 != '\0') &&
(cVar9 = (**(code **)(*(int *)pCVar7 + 0x7e8))(), pCVar15 = local_594,
cVar9 != '\0')) goto LAB_0052af31;
}
}
}
}
else {
lVar27 = (longdouble)__pow_finite();
fVar32 = *(float *)(iVar18 + 0xc58);
fVar1 = *(float *)(iVar18 + 0x9d0);
if ((fVar31 <= fVar32) || (fVar32 <= 0.0)) {
local_668 = (float)lVar27 * local_668;
goto LAB_0052b399;
}
if (fVar31 <= fVar1) {
lVar26 = (longdouble)Gain((fVar31 - fVar32) / (fVar32 - fVar1) + 1.0,0.8);
local_668 = (float)lVar26 * (float)lVar27 * local_668;
goto LAB_0052b399;
}
local_668 = 0.0;
if (local_594 != (CBaseEntity *)0x0) goto LAB_0052b3a7;
LAB_0052c218:
pCVar15 = (CBaseEntity *)0x0;
}
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_3b8,pCVar15,pCVar15,local_668,local_570,0);
if (local_594 != (CBaseEntity *)0x0) {
piVar13 = (int *)CBaseCombatCharacter::GetActiveWeapon
((CBaseCombatCharacter *)local_594);
if (piVar13 == (int *)0x0) {
local_380 = 0xffffffff;
}
else {
puVar16 = (undefined4 *)(**(code **)(*piVar13 + 0xc))();
local_380 = *puVar16;
}
}
if ((local_570 & 0x800000) == 0) {
fVar31 = 0.4;
}
else if ((local_570 & 0x20000000) == 0) {
fVar31 = *(float *)(upgrade_explosive_bullet_force._28_4_ + 0x2c);
}
else {
fVar31 = *(float *)(upgrade_explosive_slug_force._28_4_ + 0x2c);
}
CalculateBulletDamageForce
((CTakeDamageInfo *)&local_3b8,*(int *)(local_590 + 0x850),
(Vector *)&local_2fc,(Vector *)&local_34c,fVar31);
local_364 = *(undefined4 *)(local_590 + 0x850);
if (local_2bf == '\0') {
local_36c = 0xffffffff;
}
if ((400.0 < *(float *)(local_30c + 0x23c)) ||
((cVar9 = CTerrorGameRules::IsCurrentRoundActive(g_pGameRules), cVar9 == '\0'
&& (cVar9 = CTerrorGameRules::IsSurvivalMode(), cVar9 != '\0')))) {
local_370 = local_370 | 0x800;
local_3b8 = 0;
local_3b4 = 0;
local_3b0 = 0;
}
if ((*(int *)(sv_showdamage._28_4_ + 0x30) == 2) ||
((*(int *)(sv_showdamage._28_4_ + 0x30) == 1 &&
(cVar9 = (**(code **)(*(int *)local_30c + 0x16c))(), cVar9 != '\0')))) {
local_600 = local_34c;
local_5fc = local_348;
local_5f8 = local_344 - 3.0;
V_snprintf(local_2b8,0x14,"%f");
NDebugOverlay::Text((Vector *)&local_600,local_2b8,false,4.0);
}
if ((local_570 & 0x800000) != 0) {
fVar31 = 1.0;
if ((local_570 & 0x20000000) != 0) {
fVar31 = (float)*(int *)(local_590 + 0x9d8);
}
local_37c = fVar31 * local_37c;
local_674 = local_37c * 0.5 + 32.0;
if ((local_30c != (CBaseAnimating *)0x0) &&
(local_30c == (CBaseAnimating *)g_WorldEntity)) {
local_674 = local_674 + 32.0;
}
RadiusDamage((CTakeDamageInfo *)&local_3b8,(Vector *)&local_34c,local_674,0,
(CBaseEntity *)local_30c);
if (*(int *)(upgrade_show_explosive_ammo_radius._28_4_ + 0x30) != 0) {
NDebugOverlay::Sphere
((Vector *)&local_34c,(QAngle *)&vec3_angle,local_674,0xff,0,0,0,
false,1.0);
}
}
CBaseEntity::DispatchTraceAttack
((CTakeDamageInfo *)local_30c,(Vector *)&local_3b8,
(CGameTrace *)&local_2fc);
ApplyMultiDamage();
if (((local_2bf != '\0') &&
(iVar18 = (**(code **)(*(int *)local_30c + 0x144))(), iVar18 != 0)) &&
(iVar18 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_30c), iVar18 != 4)) {
(**(code **)(*(int *)local_594 + 0x8f0))();
}
}
if ((local_570 & 0x800000) != 0) {
local_2e4 = 3.4028235e+38;
LAB_0052b980:
if (local_2bf != '\0') {
LAB_0052be37:
local_48c = local_330;
local_4a8 = local_34c;
local_4a4 = local_348;
local_48a = local_32e;
local_48b = local_32f;
local_488 = local_32c;
local_4b4 = local_358;
local_484 = local_328;
local_4b0 = local_354;
local_4ac = local_350;
local_49c = local_340;
local_480 = local_324;
local_498 = local_33c;
local_494 = local_338;
local_490 = local_334;
local_47e = local_322;
local_470 = local_314;
local_47d = local_321;
local_2bf = '\0';
local_47c = local_320;
local_474 = local_318;
local_46c = local_310;
local_478 = local_31c;
local_46a = local_30e;
local_468 = local_30c;
local_464 = local_308;
local_4a0 = local_344;
}
goto LAB_0052ba81;
}
if (((local_690 == 1) && ((bool)(bVar5 ^ 1U))) && (!bVar4)) {
local_2e4 = 3.4028235e+38;
goto LAB_0052b980;
}
if (bVar25) {
piVar13 = (int *)(**(code **)(*(int *)local_30c + 0x144))();
iVar18 = (**(code **)(*piVar13 + 0x544))();
if (iVar18 != 8) goto LAB_0052b645;
LAB_0052c445:
local_2e4 = 3.4028235e+38;
goto LAB_0052b980;
}
LAB_0052b645:
if ((0.0 < local_568) && (local_568 < fVar30)) {
local_2e4 = 3.4028235e+38;
goto LAB_0052b980;
}
if (local_300 == 0) {
iVar18 = 3;
fVar31 = local_2fc * 12.0;
fVar32 = local_2f8 * 12.0;
fVar30 = local_2f4 * 12.0;
local_408 = local_348;
local_40c = local_34c;
local_404 = local_344;
do {
local_40c = (undefined **)((float)local_40c + fVar31);
local_408 = local_408 + fVar32;
local_404 = local_404 + fVar30;
uVar17 = (**(code **)(*enginetrace + 4))();
if ((uVar17 & 0x200400b) == 0) {
local_634 = &PTR_ShouldHitEntity_00c2ac08;
local_4c8 = 1;
local_508 = local_408;
local_504 = local_404;
local_4f8 = local_348 - local_408;
local_4d4 = 0;
local_4f4 = local_344 - local_404;
local_4d8 = 0;
local_4dc = 0;
local_4fc = (float)local_34c - (float)local_40c;
local_4cc = 0;
local_4e4 = 0;
local_4e8 = 0;
local_50c = local_40c;
local_4ec = 0;
local_4c7 = local_4f4 * local_4f4 + local_4f8 * local_4f8 +
local_4fc * local_4fc != 0.0;
(**(code **)(*enginetrace + 0x14))();
if (local_3d5 == '\0') goto LAB_0052b830;
break;
}
iVar18 = iVar18 + -1;
} while (iVar18 != 0);
local_2e4 = 3.4028235e+38;
goto LAB_0052b980;
}
local_4d4 = 0;
local_4c8 = 1;
local_508 = local_2ec;
local_504 = local_2e8;
local_4f8 = local_348 - local_2ec;
local_4d8 = 0;
local_4f4 = local_344 - local_2e8;
local_4dc = 0;
local_4cc = 0;
local_4fc = (float)local_34c - (float)local_2f0;
local_4e4 = 0;
local_4e8 = 0;
local_50c = local_2f0;
local_4ec = 0;
local_4c7 = local_4f4 * local_4f4 + local_4f8 * local_4f8 + local_4fc * local_4fc !=
0.0;
(**(code **)(*enginetrace + 0x10))();
if (((!bVar25) && ((bool)(bVar5 ^ 1U))) &&
((local_3d5 != '\0' ||
(576.0 <= (local_3fc - local_348) * (local_3fc - local_348) +
(local_400 - (float)local_34c) * (local_400 - (float)local_34c) +
(local_3f8 - local_344) * (local_3f8 - local_344))))) {
local_2e4 = 3.4028235e+38;
goto LAB_0052b980;
}
LAB_0052b830:
local_698 = local_3f8;
local_694 = local_3fc;
local_69c = local_400;
local_2e4 = SQRT((local_400 - local_58c) * (local_400 - local_58c) +
(local_3f8 - local_584) * (local_3f8 - local_584) +
(local_3fc - local_588) * (local_3fc - local_588));
if (!bVar4) {
iVar18 = (**(code **)(*physprops + 0x18))();
if ((((local_3dc & 2) == 0) || (*(ushort *)(iVar18 + 0x4c) != 0x59)) || (!bVar5))
{
if (local_690 == 1) goto LAB_0052c445;
if ((uVar21 == *(ushort *)(iVar18 + 0x4c)) &&
((uVar21 == 0x4d || (uVar21 == 0x57)))) {
local_638 = local_638 + local_638;
}
if (local_638 * local_638 * local_56c <
(local_3f8 - local_344) * (local_3f8 - local_344) +
(local_400 - (float)local_34c) * (local_400 - (float)local_34c) +
(local_3fc - local_348) * (local_3fc - local_348)) {
local_2e4 = 3.4028235e+38;
}
goto LAB_0052b980;
}
}
}
else {
pIVar19 = (IHandleEntity *)(**(code **)(*(int *)local_30c + 0x144))();
if (pIVar19 != (IHandleEntity *)0x0) {
CTraceFilterSimpleList::AddEntityToIgnore
((CTraceFilterSimpleList *)local_5b8,pIVar19);
}
if (local_30c == (CBaseAnimating *)0x0) goto LAB_0052b0be;
if ((((local_304 == 0xffffffff) ||
(puVar11 = g_pEntityList + (local_304 & 0xfff) * 0x10,
puVar11 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar11 + 8) != local_304 >> 0xc)) ||
(*(CBaseAnimating **)(puVar11 + 4) != local_30c)) {
DevWarning("Multi-trace error: encountered a recycled entity %p (%s)!\n");
goto LAB_0052af31;
}
/* try { // try from 0052bd5e to 0052c995 has its CatchHandler @ 0052cc73 */
cVar9 = (**(code **)(*(int *)local_30c + 0x16c))();
if (cVar9 == '\0') goto LAB_0052b0be;
iVar18 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_30c);
cVar9 = IsASurvivorTeam(iVar18);
if (cVar9 == '\0') goto LAB_0052b0be;
if ((local_2bf != '\0') || (*(int *)(BulletFFThroughWalls._28_4_ + 0x30) != 0)) {
if (local_2bc == '\0') goto LAB_0052b0be;
local_2e4 = 3.4028235e+38;
if (local_2bf == '\0') goto LAB_0052ba81;
goto LAB_0052be37;
}
local_2e4 = 3.4028235e+38;
LAB_0052ba81:
local_438 = local_330;
local_458 = local_350;
local_454 = local_34c;
local_424 = local_31c;
local_41c = local_314;
local_45c = local_354;
local_450 = local_348;
local_437 = local_32f;
local_448 = local_340;
local_434 = local_32c;
local_428 = local_320;
local_460 = local_358;
local_430 = local_328;
local_444 = local_33c;
local_440 = local_338;
local_42c = local_324;
local_43c = local_334;
local_436 = local_32e;
local_42a = local_322;
local_420 = local_318;
local_429 = local_321;
local_418 = local_310;
local_690 = local_690 + -1;
local_416 = local_30e;
local_414 = local_30c;
local_410 = local_308;
local_44c = local_344;
if (local_690 == 0) goto LAB_0052bbb7;
}
LAB_0052af31:
if (*(float *)(local_590 + 0x9d0) <= local_2e4) goto LAB_0052bbb7;
uVar23 = CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::NextInorder((CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
*)&local_3c,(ushort)uVar23);
uVar23 = uVar23 & 0xffff;
} while ((uVar23 != 0xffff) && (iVar14 = iVar14 + -1, iVar14 != -1));
}
local_6b0 = local_6b0 + -1;
if (local_6b0 == 0) break;
}
}
LAB_0052bbb7:
ComputeInterveningImpacts
((BulletGroupTraceInfo_t *)&local_594,(BulletTraceInfo_t *)&local_358,
(CGameTrace *)&local_460);
if (*(int *)(sv_showdebugtracers._28_4_ + 0x30) != 0) {
NDebugOverlay::VertArrow
((Vector *)&local_580,(Vector *)&local_4a8,0.2,0xff,0,0,0xff,true,5.0);
}
local_2a4[0] = &PTR_EnumElement_00c341b0;
CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::RemoveAll((CUtlRBTree<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short,CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
*)&local_3c);
local_28 = 0xffff;
CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>
::Purge((CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>
*)&local_38);
local_26 = 0xffff;
CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>
::Purge((CUtlMemory<UtlRBTreeNode_t<CUtlMap<float,CTraceBulletEntityEnumerator::BulletTrace_t,unsigned_short>::Node_t,unsigned_short>,unsigned_short>
*)&local_38);
local_40 = local_244;
local_44 = 0;
local_5b8[0] = &PTR_ShouldHitEntity_00c54590;
local_59c = 0;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_5a8);
local_598 = local_5a8[0];
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_5a8);
if (local_6b4 < 1) break;
local_6b4 = local_6b4 + -1;
fVar29 = *(float *)(iVar8 + 0xc30);
bVar5 = false;
} while( true );
}
if (ThePlayerReporter != (PlayerReporter *)0x0) {
/* try { // try from 0052bca8 to 0052bcac has its CatchHandler @ 0052cd2a */
PlayerReporter::ApplyShotResult(ThePlayerReporter,param_1);
}
(**(code **)(*piVar12 + 0x6c))();
local_5dc[0] = &PTR_ShouldHitEntity_00c54590;
local_5c0 = 0;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_5cc);
local_5bc = local_5cc[0];
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_5cc);
LAB_0052bcf1:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar22 + -4) = &UNK_0052cd66;
__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.