CTerrorPlayer::FindUseEntity
0x00519da0 · 9739 bytes · __thiscall
_ZN13CTerrorPlayer13FindUseEntityEfffPbb
Decompiled
undefined (6 params)
/* WARNING: Removing unreachable block (ram,0x0051b8fc) */
/* WARNING: Removing unreachable block (ram,0x0051b8af) */
/* WARNING: Removing unreachable block (ram,0x0051c47c) */
/* WARNING: Removing unreachable block (ram,0x0051c3d4) */
/* CTerrorPlayer::FindUseEntity(float, float, float, bool*, bool) */
CTerrorPlayer * __thiscall
CTerrorPlayer::FindUseEntity
(CTerrorPlayer *this,float param_1,float param_2,float param_3,bool *param_4,bool param_5)
{
CBaseEntity **ppCVar1;
bool bVar2;
CBaseEntity *pCVar3;
code *pcVar4;
IHandleEntity *pIVar5;
bool bVar6;
bool bVar7;
undefined1 *puVar8;
size_t sVar9;
IHandleEntity **ppIVar10;
char cVar11;
undefined *puVar12;
uint uVar13;
int iVar14;
int *piVar15;
int iVar16;
Vector *pVVar17;
CTerrorPlayer *pCVar18;
matrix3x4_t *pmVar19;
Vector *pVVar20;
Vector *pVVar21;
int iVar22;
float *pfVar23;
undefined4 *puVar24;
CBaseEntity **ppCVar25;
uint uVar26;
size_t sVar27;
int *piVar28;
int iVar29;
int in_GS_OFFSET;
bool bVar30;
longdouble lVar31;
float fVar32;
float fVar33;
float fVar34;
CBaseEntity *local_13f0;
float local_13ec;
Vector *local_13d4;
float local_13d0;
CBaseEntity *local_13cc;
bool local_13c3;
int local_13bc;
float local_13b8;
CBaseEntity *local_1398;
float local_1394;
float local_1390;
float local_138c;
Vector local_1388 [12];
float local_137c;
float local_1378;
float local_1374;
float local_1370;
float local_136c;
float local_1368;
undefined **local_1364;
float local_1360;
float local_135c;
undefined **local_1358;
float local_1354;
float local_1350;
Vector local_134c [12];
float local_1340 [6];
float local_1328;
float local_131c;
float local_1318;
float local_1314;
float local_1310;
float local_130c;
float local_1308;
float local_1304;
float local_1300;
float local_12fc;
undefined **local_12f8 [4];
undefined4 local_12e8 [3];
undefined4 local_12dc;
undefined4 local_12d8;
CTerrorPlayer *local_12d4;
undefined4 local_12d0;
undefined **local_12cc;
float local_12c8;
float local_12c4;
float local_12bc;
float local_12b8;
float local_12b4;
undefined4 local_12ac;
undefined4 local_12a8;
undefined4 local_12a4;
undefined4 local_129c;
undefined4 local_1298;
undefined4 local_1294;
undefined4 local_128c;
undefined1 local_1288;
undefined1 local_1287;
undefined **local_127c;
float local_1278;
float local_1274;
float local_126c;
float local_1268;
float local_1264;
undefined4 local_125c;
undefined4 local_1258;
undefined4 local_1254;
undefined4 local_124c;
undefined4 local_1248;
undefined4 local_1244;
undefined4 local_123c;
undefined1 local_1238;
undefined1 local_1237;
Vector local_1220 [12];
Vector local_1214 [8];
float local_120c;
CBaseEntity *local_11d4;
IHandleEntity *local_11cc;
float local_11c8;
float local_11c4;
float local_11c0;
float local_11bc;
float local_11b8;
float local_11b4;
undefined4 local_11ac;
undefined4 local_11a8;
undefined4 local_11a4;
undefined4 local_119c;
undefined4 local_1198;
undefined4 local_1194;
undefined4 local_118c;
undefined1 local_1188;
undefined1 local_1187;
undefined1 *local_116c;
undefined4 local_1168;
undefined4 local_1164;
undefined4 local_1160;
undefined1 local_115c [1024];
size_t local_d5c;
undefined1 *local_d58;
IHandleEntity **local_d54;
undefined4 local_d50;
undefined4 local_d4c;
undefined4 local_d48;
IHandleEntity *local_d44 [256];
size_t local_944;
IHandleEntity **local_940;
undefined **local_93c;
float local_938;
float local_934;
Vector local_930 [4];
float local_92c;
float local_928;
float local_924;
undefined4 local_91c;
undefined4 local_918;
undefined4 local_914;
float local_910;
undefined4 local_90c;
undefined4 local_908;
undefined4 local_904;
undefined4 local_8fc;
undefined1 local_8f8;
undefined1 local_8f7;
CBaseEntity *local_8f0;
CFmtStrN<256> local_12c [5];
char local_127 [263];
int local_20;
piVar28 = (int *)&stack0xffffebe4;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if ((param_1 < param_2) || (param_2 <= 0.0)) {
param_2 = param_1;
}
if (param_3 <= 0.0) {
piVar15 = (int *)GetActiveTerrorWeapon(this);
if ((piVar15 == (int *)0x0) || (cVar11 = (**(code **)(*piVar15 + 0x690))(), cVar11 == '\0')) {
param_3 = *(float *)(ZombieUseTolerance._28_4_ + 0x2c);
}
else {
param_3 = 0.98;
}
}
local_13d0 = 0.0;
if (param_4 != (bool *)0x0) {
*param_4 = false;
}
cVar11 = IsPerformingAction();
if ((((cVar11 == '\0') && (this[0x186] != (CTerrorPlayer)0x9)) &&
(cVar11 = IsDominatedBySpecialInfected(this), cVar11 == '\0')) &&
((cVar11 = IsGettingUp(this), cVar11 == '\0' &&
(cVar11 = CTerrorPlayerAnimState::IsPounded(*(CTerrorPlayerAnimState **)(this + 0x2910)),
cVar11 == '\0')))) {
uVar26 = *(uint *)(this + 0x2e28);
bVar30 = false;
if (((uVar26 == 0xffffffff) ||
((puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
(*(uint *)(puVar12 + 8) != uVar26 >> 0xc)))) || (*(int *)(puVar12 + 4) == 0)) {
uVar13 = *(uint *)(this + 0x2e24);
if ((((uVar13 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar13 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar12 + 8) == uVar13 >> 0xc)) && (*(int *)(puVar12 + 4) != 0)) {
if (param_4 != (bool *)0x0) {
if ((uVar26 != 0xffffffff) &&
(piVar15 = (int *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4), piVar15 != (int *)0x0)
) goto LAB_0051b203;
goto LAB_0051b20b;
}
goto LAB_0051b226;
}
uVar26 = *(uint *)(this + 0x2d64);
if (uVar26 != 0xffffffff) {
uVar13 = uVar26 & 0xfff;
puVar24 = (undefined4 *)(g_pEntityList + uVar13 * 0x10 + 4);
if (((puVar24 != (undefined4 *)0x0) &&
(*(uint *)(g_pEntityList + uVar13 * 0x10 + 8) == uVar26 >> 0xc)) &&
(*(int *)(g_pEntityList + uVar13 * 0x10 + 4) != 0)) {
if (param_4 != (bool *)0x0) {
*param_4 = true;
uVar26 = *(uint *)(this + 0x2d64);
if (((uVar26 == 0xffffffff) ||
(puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4),
puVar24 == (undefined4 *)0x0)) || (puVar24[1] != uVar26 >> 0xc)) goto LAB_0051a260;
}
local_13cc = (CBaseEntity *)*puVar24;
piVar28 = (int *)&stack0xffffebe4;
goto LAB_0051a262;
}
}
CBasePlayer::EyeVectors((CBasePlayer *)this,(Vector *)&local_1394,(Vector *)0x0,local_1388);
local_1370 = param_2 * local_1394;
local_137c = local_1394 * param_1;
local_136c = param_2 * local_1390;
local_1378 = local_1390 * param_1;
local_1368 = param_2 * local_138c;
local_1374 = local_138c * param_1;
(**(code **)(*(int *)this + 0x234))();
(**(code **)(*(int *)this + 0x234))();
piVar28 = (int *)&stack0xffffebdc;
local_1358 = local_93c;
local_1354 = local_938;
local_1350 = local_934;
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
local_1354 = *(float *)(this + 0x2e4);
local_1358 = *(undefined ***)(this + 0x2e0);
CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_12f8,4);
local_12f8[0] = &PTR_ShouldHitEntity_00c2d308;
local_12d4 = this;
/* try { // try from 0051a05c to 0051a060 has its CatchHandler @ 0051c492 */
local_12d0 = GetActiveTerrorWeapon(this);
/* try { // try from 0051a074 to 0051a200 has its CatchHandler @ 0051c486 */
CTraceFilterSimpleList::AddEntityToIgnore
((CTraceFilterSimpleList *)local_12f8,(IHandleEntity *)this);
local_8f8 = 1;
local_904 = 0;
local_92c = local_137c;
local_928 = local_1378;
local_908 = 0;
local_924 = local_1374;
local_90c = 0;
local_8fc = 0;
local_914 = 0;
local_918 = 0;
local_91c = 0;
local_8f7 = local_1378 * local_1378 + local_137c * local_137c + local_1374 * local_1374 != 0.0
;
local_93c = local_1364;
local_938 = local_1360;
local_934 = local_135c;
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_1220,local_1214,0xff,0,0,true,-1.0);
}
if (g_DebugFindUseEntity == '\0') {
LAB_0051a318:
bVar30 = false;
}
else {
if (*(int *)(this + 0x30) == 0) {
iVar14 = 0;
}
else {
iVar14 = *(int *)(this + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
}
if (*(int *)(sv_debug_player_use._28_4_ + 0x30) != iVar14) goto LAB_0051a318;
Msg();
bVar30 = true;
}
fVar33 = param_2 * param_2;
local_1398 = local_11d4;
if (local_11d4 == (CBaseEntity *)0x0) {
local_13f0 = (CBaseEntity *)0x0;
LAB_0051a380:
local_13bc = 0;
local_13c3 = false;
local_13ec = 0.0;
local_13cc = (CBaseEntity *)0x0;
}
else {
/* try { // try from 0051a366 to 0051a36b has its CatchHandler @ 0051c486 */
cVar11 = (**(code **)(*(int *)this + 0x6e4))();
if (cVar11 == '\0') {
local_13f0 = local_1398;
goto LAB_0051a380;
}
if ((AllocTempVector()::s_vecTemp == '\0') && (iVar14 = __cxa_guard_acquire(), iVar14 != 0))
{
__cxa_guard_release();
}
if ((AllocTempVector()::s_nIndex == '\0') && (iVar14 = __cxa_guard_acquire(), iVar14 != 0))
{
AllocTempVector()::s_nIndex = 0;
__cxa_guard_release();
}
AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
LOCK();
UNLOCK();
iVar14 = AllocTempVector()::s_nIndex * 0xc;
if ((AllocTempVector()::s_vecTemp == '\0') && (iVar16 = __cxa_guard_acquire(), iVar16 != 0))
{
__cxa_guard_release();
}
if ((AllocTempVector()::s_nIndex == '\0') && (iVar16 = __cxa_guard_acquire(), iVar16 != 0))
{
AllocTempVector()::s_nIndex = 0;
__cxa_guard_release();
}
AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
LOCK();
UNLOCK();
iVar16 = AllocTempVector()::s_nIndex * 0xc;
*(float *)(AllocTempVector()::s_vecTemp + iVar16) =
(*(float *)(this + 0x1a8) - *(float *)(this + 0x19c)) * 0.5 + *(float *)(this + 0x19c);
*(float *)(AllocTempVector()::s_vecTemp + iVar16 + 4) =
(*(float *)(this + 0x1ac) - *(float *)(this + 0x1a0)) * 0.5 + *(float *)(this + 0x1a0);
*(float *)(AllocTempVector()::s_vecTemp + iVar16 + 8) =
(*(float *)(this + 0x1b0) - *(float *)(this + 0x1a4)) * 0.5 + *(float *)(this + 0x1a4);
/* try { // try from 0051b9b3 to 0051bc2f has its CatchHandler @ 0051c486 */
if (((((byte)this[0x1b4] & 0x40) == 0) && (((byte)this[0x1b6] & 0xfd) != 0)) &&
((pfVar23 = (float *)(**(code **)(*(int *)(this + 0x194) + 0x24))(),
vec3_angle != *pfVar23 || ((DAT_01053d40 != pfVar23[1] || (DAT_01053d44 != pfVar23[2])))
))) {
pmVar19 = (matrix3x4_t *)(**(code **)(*(int *)(this + 0x194) + 0x28))();
VectorTransform((float *)(AllocTempVector()::s_vecTemp + iVar16),pmVar19,
(float *)(AllocTempVector()::s_vecTemp + iVar14));
fVar34 = *(float *)(AllocTempVector()::s_vecTemp + iVar14 + 8);
}
else {
pfVar23 = (float *)(**(code **)(*(int *)(this + 0x194) + 0x20))();
*(float *)(AllocTempVector()::s_vecTemp + iVar14) =
*pfVar23 + *(float *)(AllocTempVector()::s_vecTemp + iVar16);
*(float *)(AllocTempVector()::s_vecTemp + iVar14 + 4) =
pfVar23[1] + *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 4);
fVar34 = pfVar23[2] + *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 8);
*(float *)(AllocTempVector()::s_vecTemp + iVar14 + 8) = fVar34;
}
iVar14 = (**(code **)(*(int *)(this + 0x194) + 8))();
fVar32 = *(float *)(iVar14 + 8);
iVar14 = (**(code **)(*(int *)(this + 0x194) + 4))();
IntervalDistance(local_120c,fVar34 + *(float *)(iVar14 + 8),fVar34 + fVar32);
lVar31 = (longdouble)
CCollisionProperty::CalcSqrDistanceFromPoint
((CCollisionProperty *)(local_1398 + 0x194),(Vector *)&local_1358);
pCVar3 = local_1398;
fVar34 = (float)lVar31;
if (param_1 * param_1 <= fVar34) {
LAB_0051bdb9:
local_13f0 = local_1398;
local_13bc = 0;
local_13ec = 0.0;
local_13c3 = false;
local_13cc = (CBaseEntity *)0x0;
}
else {
fVar32 = fVar33;
if ((local_1398 == (CBaseEntity *)0x0) ||
(cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))(), cVar11 == '\0')) {
pCVar3 = (CBaseEntity *)0x0;
}
else {
uVar26 = *(uint *)(pCVar3 + 0x3e68);
if (((((((uVar26 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar12 + 8) == uVar26 >> 0xc)) && (*(int *)(puVar12 + 4) != 0)) ||
(((uVar26 = *(uint *)(pCVar3 + 0x3e48), uVar26 != 0xffffffff &&
(puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar12 + 8) == uVar26 >> 0xc && (*(int *)(puVar12 + 4) != 0)))))) ||
(((uVar26 = *(uint *)(pCVar3 + 0x33c4), uVar26 != 0xffffffff &&
(puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar12 + 8) == uVar26 >> 0xc &&
((*(int *)(puVar12 + 4) != 0 && (pCVar3[0x39f1] == (CBaseEntity)0x0)))))))) ||
(cVar11 = (**(code **)(*(int *)pCVar3 + 0x7e8))(), cVar11 == '\0')) {
if (param_1 == *(float *)(player_use_radius._28_4_ + 0x2c)) {
if (9216.0 < fVar34) goto LAB_0051bdb9;
fVar32 = 9216.0;
}
else {
fVar32 = 9216.0;
}
}
}
if (bVar30) {
/* try { // try from 0051c304 to 0051c37c has its CatchHandler @ 0051c486 */
NDebugOverlay::Line((Vector *)&local_1358,local_1214,0,0xff,0,true,0.5);
NDebugOverlay::Cross3D(local_1214,16.0,0,0xff,0,true,0.5);
if (local_1398 != (CBaseEntity *)0x0) {
CBaseEntity::GetDebugName(local_1398);
}
Msg();
}
local_13cc = local_1398;
if ((pCVar3 == (CBaseEntity *)0x0) || (local_13bc = 2, !param_5)) {
local_13bc = (**(code **)(*(int *)local_1398 + 0xa8))();
}
local_13ec = 1.0;
local_13c3 = fVar34 <= fVar32 || param_2 == param_1;
local_13f0 = local_1398;
}
}
local_13d4 = (Vector *)&local_1358;
local_116c = local_115c;
local_d54 = local_d44;
local_1168 = 0x100;
local_1164 = 0xffffffff;
local_1160 = 0;
local_d5c = 0;
local_d50 = 0x100;
local_d4c = 0xffffffff;
local_d48 = 0;
local_944 = 0;
local_d58 = local_116c;
local_940 = local_d54;
/* try { // try from 0051a471 to 0051a547 has its CatchHandler @ 0051c481 */
CEntitySphereQuery::CEntitySphereQuery
((CEntitySphereQuery *)&local_93c,local_13d4,param_1 + 32.0,0);
while( true ) {
local_1398 = (CBaseEntity *)
CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)&local_93c);
if (local_1398 == (CBaseEntity *)0x0) break;
if (((this != (CTerrorPlayer *)local_1398) && (local_13cc != local_1398)) &&
(cVar11 = (**(code **)(*(int *)this + 0x6e4))(), cVar11 != '\0')) {
CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,256u,int>>::InsertBefore
((CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,256u,int>> *)
&local_116c,local_d5c,&local_1398);
iVar14 = (**(code **)(*(int *)local_1398 + 0xa8))();
if (iVar14 != 2) {
local_11cc = (IHandleEntity *)local_1398;
CUtlVector<IHandleEntity*,CUtlMemoryFixedGrowable<IHandleEntity*,256u,int>>::
InsertBefore((CUtlVector<IHandleEntity*,CUtlMemoryFixedGrowable<IHandleEntity*,256u,int>>
*)&local_d54,local_944,&local_11cc);
}
}
local_93c = (undefined **)((int)local_93c + 1);
}
if (1 < (int)local_d5c) {
if (local_116c == (undefined1 *)0x0) {
iVar14 = local_d5c - 1;
do {
if (0 < iVar14) {
iVar29 = 0;
iVar16 = 1;
do {
while( true ) {
ppCVar1 = (CBaseEntity **)(local_116c + iVar16 * 4);
ppCVar25 = (CBaseEntity **)(local_116c + iVar29);
iVar22 = EntityEntindexCompare(ppCVar25,ppCVar1);
if (-1 < iVar22) break;
iVar16 = iVar16 + 1;
pCVar3 = *ppCVar25;
iVar29 = iVar29 + 4;
*ppCVar25 = *ppCVar1;
*ppCVar1 = pCVar3;
if (iVar14 + 1 == iVar16) goto LAB_0051bcfb;
}
iVar16 = iVar16 + 1;
iVar29 = iVar29 + 4;
} while (iVar14 + 1 != iVar16);
}
LAB_0051bcfb:
iVar14 = iVar14 + -1;
} while (iVar14 != -1);
}
else {
/* try { // try from 0051a5b0 to 0051a60f has its CatchHandler @ 0051c481 */
qsort(local_116c,local_d5c,4,EntityEntindexCompare);
}
}
if (1 < (int)local_944) {
if (local_d54 == (IHandleEntity **)0x0) {
iVar14 = local_944 - 1;
do {
if (0 < iVar14) {
iVar29 = 0;
iVar16 = 1;
do {
/* try { // try from 0051bd65 to 0051bd69 has its CatchHandler @ 0051c481 */
while (iVar22 = IHandleEntityEntindexCompare
((IHandleEntity **)((int)local_d54 + iVar29),
local_d54 + iVar16), iVar22 < 0) {
iVar22 = iVar16 + 1;
puVar24 = (undefined4 *)((int)local_d54 + iVar29);
iVar29 = iVar29 + 4;
pIVar5 = (IHandleEntity *)*puVar24;
*puVar24 = local_d54[iVar16];
local_d54[iVar16] = pIVar5;
iVar16 = iVar22;
if (iVar14 < iVar22) goto LAB_0051bda0;
}
iVar16 = iVar16 + 1;
iVar29 = iVar29 + 4;
} while (iVar16 <= iVar14);
}
LAB_0051bda0:
iVar14 = iVar14 + -1;
} while (iVar14 != -1);
}
else {
qsort(local_d54,local_944,4,IHandleEntityEntindexCompare);
}
}
if (0 < (int)local_944) {
CTraceFilterSimpleList::AddEntitiesToIgnore
((CTraceFilterSimpleList *)local_12f8,local_944,local_d54);
}
sVar9 = local_d5c;
if (0 < (int)local_d5c) {
sVar27 = 0;
do {
local_1398 = *(CBaseEntity **)(local_116c + sVar27 * 4);
if (bVar30) {
if (((((byte)local_1398[0x14d] & 8) != 0) &&
(CBaseEntity::CalcAbsolutePosition(local_1398), ((byte)local_1398[0x14d] & 8) != 0))
&& (CBaseEntity::CalcAbsolutePosition(local_1398), ((byte)local_1398[0x14d] & 8) != 0
)) {
CBaseEntity::CalcAbsolutePosition(local_1398);
}
/* try { // try from 0051a6c1 to 0051af8a has its CatchHandler @ 0051c3e0 */
CBaseEntity::GetDebugName(local_1398);
Msg();
}
cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))();
if ((cVar11 == '\0') || (!param_5)) {
iVar14 = (**(code **)(*(int *)local_1398 + 0xa8))();
if (local_13bc <= iVar14) goto LAB_0051a76c;
}
else {
iVar14 = 2;
if (local_13bc < 3) {
LAB_0051a76c:
lVar31 = (longdouble)
CCollisionProperty::CalcSqrDistanceFromPoint
((CCollisionProperty *)(local_1398 + 0x194),local_13d4);
fVar34 = (float)lVar31;
if (bVar30) {
CCollisionProperty::CalcNearestPoint
((CCollisionProperty *)(local_1398 + 0x194),local_13d4,
(Vector *)&local_93c);
CFmtStrN<256>::CFmtStrN(local_12c,"%d: %f");
NDebugOverlay::Text((Vector *)&local_93c,local_127,true,0.5);
}
if (fVar34 <= param_1 * param_1) {
bVar7 = fVar34 <= fVar33;
bVar6 = param_2 == param_1;
bVar2 = bVar7 || bVar6;
if (((bVar7 || bVar6) || (local_13c3 == false)) &&
((cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))(), cVar11 == '\0' ||
((param_1 != *(float *)(player_use_radius._28_4_ + 0x2c) || (fVar34 <= 9216.0)))
))) {
CCollisionProperty::CollisionAABBToWorldAABB
((CCollisionProperty *)(local_1398 + 0x194),
(Vector *)(local_1398 + 0x19c),(Vector *)(local_1398 + 0x1a8),
local_134c,(Vector *)local_1340);
(**(code **)(*(int *)(local_1398 + 0x194) + 0xc))();
fVar34 = local_1328 - local_1340[0];
pVVar17 = (Vector *)&local_137c;
if (bVar2) {
pVVar17 = (Vector *)&local_1370;
}
iVar16 = (**(code **)(*(int *)(local_1398 + 0x194) + 0x2c))();
if (iVar16 == 3) {
/* try { // try from 0051b7cb to 0051b875 has its CatchHandler @ 0051c3e0 */
pmVar19 = (matrix3x4_t *)(**(code **)(*(int *)(local_1398 + 0x194) + 0x28))();
pVVar20 = (Vector *)(**(code **)(*(int *)(local_1398 + 0x194) + 4))();
pVVar21 = (Vector *)(**(code **)(*(int *)(local_1398 + 0x194) + 8))();
cVar11 = IntersectRayWithOBB((Vector *)&local_1364,pVVar17,pmVar19,pVVar20,
pVVar21,0.0,(CBaseTrace *)&local_11cc);
if (cVar11 == '\0') goto LAB_0051a64b;
VectorTransform(&local_11c0,pmVar19,&local_1310);
}
else {
cVar11 = IntersectRayWithBox((Vector *)&local_1364,pVVar17,local_134c,
(Vector *)local_1340,1.0,(CBaseTrace *)&local_11cc,
(float *)0x0);
if (cVar11 == '\0') {
local_93c = (undefined **)(*(float *)pVVar17 * 0.5 + (float)local_1364);
local_938 = *(float *)(pVVar17 + 4) * 0.5 + local_1360;
local_934 = *(float *)(pVVar17 + 8) * 0.5 + local_135c;
/* try { // try from 0051b770 to 0051b7a3 has its CatchHandler @ 0051c3e0 */
pVVar17 = (Vector *)(**(code **)(*(int *)local_1398 + 0x288))();
CalcClosestPointOnLineSegment
(pVVar17,(Vector *)&local_1364,(Vector *)&local_93c,
(Vector *)&local_1310,(float *)0x0);
}
else {
local_1310 = local_11c0;
local_130c = local_11bc;
local_1308 = local_11b8;
}
}
fVar32 = fVar34;
if (0.0 < fVar34) {
local_93c = (undefined **)((float)local_1364 - local_1310);
local_938 = local_1360 - local_130c;
local_934 = local_135c - local_1308;
lVar31 = (longdouble)VectorNormalize((Vector *)&local_93c);
fVar32 = (float)lVar31 - 1.0;
if (fVar34 <= (float)lVar31 - 1.0) {
fVar32 = fVar34;
}
if (0.0 < fVar32) {
fVar34 = local_934;
if (local_934 <= 0.0) {
fVar34 = 0.0;
}
local_130c = local_938 * fVar32 + local_130c;
local_1308 = fVar34 * fVar32 + local_1308;
local_1310 = fVar32 * (float)local_93c + local_1310;
}
}
CCollisionProperty::CalcNearestPoint
((CCollisionProperty *)(local_1398 + 0x194),(Vector *)&local_1310,
(Vector *)&local_131c);
if (0.0 < fVar32) {
local_93c = (undefined **)((float)local_1364 - local_131c);
local_938 = local_1360 - local_1318;
local_934 = local_135c - local_1314;
lVar31 = (longdouble)VectorNormalize((Vector *)&local_93c);
fVar34 = (float)lVar31 - 1.0;
if (fVar32 <= (float)lVar31 - 1.0) {
fVar34 = fVar32;
}
if (0.0 < fVar34) {
fVar32 = local_13d0;
if (0.0 <= local_934) {
fVar32 = local_934;
}
local_1314 = fVar32 * fVar34 + local_1314;
local_1318 = local_938 * fVar34 + local_1318;
local_131c = fVar34 * (float)local_93c + local_131c;
}
}
if (bVar30) {
NDebugOverlay::Cross3D((Vector *)&local_1310,5.0,0,0xff,0,true,0.5);
NDebugOverlay::Cross3D((Vector *)&local_131c,5.0,0,0,0xff,true,0.5);
}
local_1304 = local_131c - (float)local_1364;
local_1300 = local_1318 - local_1360;
local_12fc = local_1314 - local_135c;
VectorNormalize((Vector *)&local_1304);
fVar34 = local_138c * local_12fc +
local_1394 * local_1304 + local_1390 * local_1300;
if ((param_3 <= fVar34) &&
((((bVar7 || bVar6 && (local_13c3 == false)) || (local_13ec < fVar34)) ||
(local_13bc < iVar14)))) {
local_1288 = 1;
local_1294 = 0;
local_12cc = local_1364;
local_12c4 = local_135c;
local_12bc = local_131c - (float)local_1364;
local_1298 = 0;
local_12b4 = local_1314 - local_135c;
local_129c = 0;
local_128c = 0;
local_12b8 = local_1318 - local_1360;
local_12a4 = 0;
local_12a8 = 0;
local_12c8 = local_1360;
local_12ac = 0;
local_1287 = local_12bc * local_12bc + local_12b4 * local_12b4 +
local_12b8 * local_12b8 != 0.0;
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_93c,local_930,0xff,0,0,true,-1.0);
}
if ((local_910 == 1.0) || (local_8f0 == local_1398)) {
local_13cc = local_1398;
local_13ec = fVar34;
local_13c3 = bVar2;
local_13bc = iVar14;
}
else {
/* try { // try from 0051be2f to 0051bf84 has its CatchHandler @ 0051c3e0 */
pfVar23 = (float *)(**(code **)(*(int *)local_1398 + 0x288))();
local_126c = *pfVar23 - (float)local_1364;
local_1268 = pfVar23[1] - local_1360;
local_1238 = 1;
local_1244 = 0;
local_1264 = pfVar23[2] - local_135c;
local_1248 = 0;
local_124c = 0;
local_123c = 0;
local_1254 = 0;
local_1258 = 0;
local_125c = 0;
local_127c = local_1364;
local_1278 = local_1360;
local_1274 = local_135c;
local_1237 = local_1268 * local_1268 + local_126c * local_126c +
local_1264 * local_1264 != 0.0;
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_93c,local_930,0xff,0,0,true,-1.0);
}
if ((local_910 == 1.0) || (local_8f0 == local_1398)) {
local_13cc = local_1398;
local_13ec = fVar34;
local_13c3 = bVar2;
local_13bc = iVar14;
}
}
}
}
}
}
}
LAB_0051a64b:
sVar27 = sVar27 + 1;
} while (sVar27 != sVar9);
}
if (bVar30) {
if (local_13cc == (CBaseEntity *)0x0) {
NDebugOverlay::Line(local_13d4,local_1214,0xff,0,0,true,0.5);
NDebugOverlay::Cross3D(local_1214,16.0,0xff,0,0,true,0.5);
Msg();
LAB_0051b27b:
cVar11 = (**(code **)(*engine + 0x1f8))();
local_13b8 = 0.7;
if (cVar11 == '\0') {
local_13b8 = 0.85;
}
if (*(int *)(gpGlobals + 0x14) < 1) {
local_13cc = (CBaseEntity *)0x0;
piVar28 = (int *)&stack0xffffebdc;
}
else {
local_13cc = (CBaseEntity *)0x0;
iVar14 = 1;
piVar28 = (int *)&stack0xffffebdc;
do {
*piVar28 = iVar14;
/* try { // try from 0051b2e4 to 0051b6d9 has its CatchHandler @ 0051c466 */
piVar28[-1] = 0x51b2e9;
pCVar18 = (CTerrorPlayer *)UTIL_PlayerByIndex(*piVar28);
piVar15 = piVar28;
if (pCVar18 != (CTerrorPlayer *)0x0) {
iVar16 = *(int *)pCVar18;
*piVar28 = (int)pCVar18;
pcVar4 = *(code **)(iVar16 + 0x16c);
piVar28[-1] = 0x51b2fa;
cVar11 = (*pcVar4)();
if (((((cVar11 != '\0') && (this != pCVar18)) &&
((uVar26 = *(uint *)(pCVar18 + 0x3e68), uVar26 == 0xffffffff ||
(((puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 == (undefined *)0xfffffffc ||
(*(uint *)(puVar12 + 8) != uVar26 >> 0xc)) || (*(int *)(puVar12 + 4) == 0)))
))) && (((uVar26 = *(uint *)(pCVar18 + 0x3e48), uVar26 == 0xffffffff ||
(puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar12 + 8) != uVar26 >> 0xc ||
(*(int *)(puVar12 + 4) == 0)))))) &&
(((uVar26 = *(uint *)(pCVar18 + 0x33c4), uVar26 == 0xffffffff ||
(puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
puVar12 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar12 + 8) != uVar26 >> 0xc ||
((*(int *)(puVar12 + 4) == 0 || (pCVar18[0x39f1] != (CTerrorPlayer)0x0))))))))
{
iVar16 = *(int *)pCVar18;
*piVar28 = (int)pCVar18;
pcVar4 = *(code **)(iVar16 + 0x7e8);
piVar28[-1] = 0x51b3a2;
cVar11 = (*pcVar4)();
if (cVar11 != '\0') {
*piVar28 = (int)pCVar18;
piVar28[-1] = 0x51b3b2;
iVar16 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar28);
*piVar28 = iVar16;
piVar28[-1] = 0x51b3ba;
cVar11 = IsASurvivorTeam(iVar16);
if (cVar11 != '\0') {
if (((byte)pCVar18[0x14d] & 8) != 0) {
*piVar28 = (int)pCVar18;
/* try { // try from 0051b7ac to 0051b7b0 has its CatchHandler @ 0051c466 */
piVar28[-1] = 0x51b7b1;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar28);
}
pCVar3 = *(CBaseEntity **)(pCVar18 + 0x2e0);
fVar33 = *(float *)(pCVar18 + 0x2e4);
fVar34 = *(float *)(pCVar18 + 0x2e8);
if (pCVar18[0x39f1] != (CTerrorPlayer)0x0) {
if (((byte)this[0x14d] & 8) != 0) {
*piVar28 = (int)this;
/* try { // try from 0051bdf8 to 0051bdfc has its CatchHandler @ 0051c466 */
piVar28[-1] = 0x51bdfd;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar28);
}
if (fVar34 < *(float *)(this + 0x2e8)) {
iVar16 = *g_pGameRules;
*piVar28 = (int)g_pGameRules;
pcVar4 = *(code **)(iVar16 + 0x7c);
piVar28[-1] = 0x51b434;
iVar16 = (*pcVar4)();
fVar34 = fVar34 + *(float *)(iVar16 + 8);
}
}
iVar16 = *(int *)this;
piVar28[1] = (int)this;
*piVar28 = (int)&local_1304;
pcVar4 = *(code **)(iVar16 + 0x234);
piVar28[-1] = 0x51b45e;
(*pcVar4)();
local_1310 = (float)pCVar3 - local_1304;
local_130c = fVar33 - local_1300;
local_1308 = fVar34 - local_12fc;
piVar15 = piVar28 + -1;
if (local_130c * local_130c + local_1310 * local_1310 +
local_1308 * local_1308 <
*(float *)(player_incap_use_radius._28_4_ + 0x2c) *
*(float *)(player_incap_use_radius._28_4_ + 0x2c)) {
piVar28[-1] = (int)&local_1310;
piVar28[-2] = 0x51b4e2;
VectorNormalize((Vector *)piVar28[-1]);
fVar32 = local_1308 * local_138c +
local_1310 * local_1394 + local_130c * local_1390;
piVar15 = piVar28 + -1;
if (local_13b8 < fVar32) {
piVar28[2] = 0;
piVar28[1] = 0;
*piVar28 = 0;
piVar28[-1] = (int)&local_127c;
piVar28[-2] = 0x51b55e;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)piVar28[-1],(IHandleEntity *)*piVar28,
piVar28[1],(_func_bool_IHandleEntity_ptr_int *)piVar28[2]);
iVar16 = *(int *)this;
local_127c = &PTR_ShouldHitEntity_00c54558;
*piVar28 = (int)this;
piVar28[-1] = (int)&local_12cc;
pcVar4 = *(code **)(iVar16 + 0x234);
piVar28[-2] = 0x51b57d;
(*pcVar4)();
local_1194 = 0;
local_1188 = 1;
local_11bc = (float)local_12cc - (float)pCVar3;
local_1198 = 0;
local_11b8 = local_12c8 - fVar33;
local_119c = 0;
local_118c = 0;
local_11b4 = local_12c4 - fVar34;
local_11a4 = 0;
local_11a8 = 0;
local_11ac = 0;
local_1187 = local_11bc * local_11bc + local_11b8 * local_11b8 +
local_11b4 * local_11b4 != 0.0;
iVar16 = *enginetrace;
piVar28[2] = (int)&local_93c;
piVar28[1] = (int)&local_127c;
*piVar28 = 0x200608b;
piVar28[-1] = (int)&local_11cc;
piVar28[-2] = (int)enginetrace;
pcVar4 = *(code **)(iVar16 + 0x14);
piVar28[-3] = 0x51b68e;
local_11cc = (IHandleEntity *)pCVar3;
local_11c8 = fVar33;
local_11c4 = fVar34;
(*pcVar4)();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
piVar28[4] = -0x40800000;
piVar28[-1] = (int)local_930;
piVar28[3] = 1;
piVar28[2] = 0;
piVar28[1] = 0;
*piVar28 = 0xff;
piVar28[-2] = (int)&local_93c;
piVar28[-3] = 0x51b6da;
DebugDrawLine((Vector *)piVar28[-2],(Vector *)piVar28[-1],*piVar28,
piVar28[1],piVar28[2],SUB41(piVar28[3],0),
(float)piVar28[4]);
}
piVar15 = piVar28 + -2;
if (local_910 == 1.0) {
local_13c3 = true;
piVar15 = piVar28 + -2;
local_13cc = (CBaseEntity *)pCVar18;
local_13b8 = fVar32;
}
}
}
}
}
}
}
iVar14 = iVar14 + 1;
piVar28 = piVar15;
} while (iVar14 <= *(int *)(gpGlobals + 0x14));
}
}
else {
if (local_13cc == local_13f0) {
NDebugOverlay::Line(local_13d4,local_1214,0,0xff,0,true,0.5);
NDebugOverlay::Cross3D(local_1214,16.0,0,0xff,0,true,0.5);
}
else {
local_93c = (undefined **)0x41000000;
local_938 = 8.0;
local_934 = 8.0;
local_11cc = (IHandleEntity *)0xc1000000;
local_11c8 = -8.0;
local_11c4 = -8.0;
/* try { // try from 0051b004 to 0051b28a has its CatchHandler @ 0051c481 */
pVVar17 = (Vector *)(**(code **)(*(int *)local_13cc + 0x288))();
NDebugOverlay::Box(pVVar17,(Vector *)&local_11cc,(Vector *)&local_93c,0,0xff,0,1,0.5);
}
/* try { // try from 0051c0b0 to 0051c2c3 has its CatchHandler @ 0051c481 */
if (((((byte)local_13cc[0x14d] & 8) != 0) &&
(CBaseEntity::CalcAbsolutePosition(local_13cc), ((byte)local_13cc[0x14d] & 8) != 0))
&& (CBaseEntity::CalcAbsolutePosition(local_13cc), ((byte)local_13cc[0x14d] & 8) != 0))
{
CBaseEntity::CalcAbsolutePosition(local_13cc);
}
CBaseEntity::GetDebugName(local_13cc);
Msg();
piVar28 = (int *)&stack0xffffebdc;
}
}
else if (local_13cc == (CBaseEntity *)0x0) goto LAB_0051b27b;
if (param_4 != (bool *)0x0) {
*param_4 = local_13c3;
}
local_944 = 0;
*piVar28 = (int)&local_d54;
piVar28[-1] = 0x51b13a;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
ppIVar10 = local_d54;
*piVar28 = (int)&local_d54;
local_940 = ppIVar10;
piVar28[-1] = 0x51b14e;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
local_d5c = 0;
*piVar28 = (int)&local_116c;
piVar28[-1] = 0x51b166;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar28);
puVar8 = local_116c;
*piVar28 = (int)&local_116c;
local_d58 = puVar8;
piVar28[-1] = 0x51b17a;
CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar28);
*piVar28 = (int)local_12e8;
local_12f8[0] = &PTR_ShouldHitEntity_00c54590;
local_12dc = 0;
piVar28[-1] = 0x51b196;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
*piVar28 = (int)local_12e8;
local_12d8 = local_12e8[0];
piVar28[-1] = 0x51b1aa;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
goto LAB_0051a262;
}
if (param_4 == (bool *)0x0) {
puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4);
}
else {
piVar15 = (int *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4);
LAB_0051b203:
if (piVar15[1] == uVar26 >> 0xc) {
bVar30 = *piVar15 != 0;
}
LAB_0051b20b:
*param_4 = bVar30;
uVar26 = *(uint *)(this + 0x2e28);
LAB_0051b226:
if ((uVar26 == 0xffffffff) ||
(puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4),
puVar24 == (undefined4 *)0x0)) goto LAB_0051a260;
}
if (puVar24[1] == uVar26 >> 0xc) {
local_13cc = (CBaseEntity *)*puVar24;
goto LAB_0051a262;
}
}
LAB_0051a260:
local_13cc = (CBaseEntity *)0x0;
piVar28 = (int *)&stack0xffffebe4;
LAB_0051a262:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined4 *)((int)piVar28 + -4) = 0x51c3ca;
__stack_chk_fail();
}
return (CTerrorPlayer *)local_13cc;
}
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.