CC_KDTreeTest
0x00b29ac0 · 4745 bytes · __cdecl
_Z13CC_KDTreeTestRK8CCommand
Decompiled
undefined (1 param)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CC_KDTreeTest(CCommand const&) */
void CC_KDTreeTest(CCommand *param_1)
{
float fVar1;
longdouble lVar2;
longdouble lVar3;
char cVar4;
int iVar5;
float *pfVar6;
float *pfVar7;
int iVar8;
float *pfVar9;
long lVar10;
ushort in_FPUStatusWord;
longdouble lVar11;
longdouble lVar12;
double dVar13;
double dVar14;
double dVar15;
int iVar16;
undefined4 uVar17;
undefined4 uVar18;
undefined4 uVar19;
CBaseEntity *local_fb04;
int local_fac4;
undefined **local_fab4;
undefined ***local_fab0;
float local_faa8;
float local_faa4;
float local_faa0;
undefined **local_fa9c;
undefined ***local_fa98;
int local_fa94;
undefined **local_fa90;
undefined ***local_fa8c;
int local_fa88;
undefined4 local_fa84;
int local_fa80;
undefined **local_fa7c;
float *local_fa78;
undefined4 local_fa74;
undefined4 local_fa70;
int local_fa6c;
float local_ea7c;
float local_ea78;
float local_ea74;
float local_ea6c;
float local_ea68;
float local_ea64;
float local_ea5c;
float local_ea58;
float local_ea54;
float local_ea4c;
float local_ea48;
float local_ea44;
undefined4 local_ea3c;
undefined1 local_ea38;
undefined1 local_ea37;
float local_754c [3];
Vector local_7540 [9988];
float local_4e3c [5003];
Msg("Testing kd-tree entity queries.");
local_fb04 = (CBaseEntity *)0x0;
if (*(int *)(gpGlobals + 0x14) < 2) {
local_fb04 = (CBaseEntity *)UTIL_PlayerByIndex(1);
}
if (((byte)local_fb04[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(local_fb04);
}
local_faa8 = *(float *)(local_fb04 + 0x2e0);
local_faa4 = *(float *)(local_fb04 + 0x2e4);
local_faa0 = *(float *)(local_fb04 + 0x2e8);
if (CC_KDTreeTest(CCommand_const&)::bFirst != '\0') {
iVar16 = 0;
pfVar7 = operator_new__(30000);
dVar15 = 0.0;
dVar14 = 0.0;
dVar13 = 0.0;
CC_KDTreeTest(CCommand_const&)::vecTargets = pfVar7;
do {
dVar13 = dVar13 + 307807.5;
do {
dVar13 = dVar13 - (dVar13 / 128.0) * 128.0;
} while ((in_FPUStatusWord & 0x400) != 0);
dVar14 = dVar14 + 191900.0;
dVar13 = ABS(dVar13);
do {
dVar14 = dVar14 - (dVar14 / 6.2831854820251465) * 6.2831854820251465;
} while ((in_FPUStatusWord & 0x400) != 0);
dVar15 = dVar15 + 4994975.0;
dVar14 = ABS(dVar14);
do {
dVar15 = dVar15 - (dVar15 / 3.1415927410125732) * 3.1415927410125732;
} while ((in_FPUStatusWord & 0x400) != 0);
dVar15 = ABS(dVar15);
lVar2 = (longdouble)fcos((longdouble)(float)dVar14);
lVar11 = (longdouble)fsin((longdouble)(float)dVar14);
lVar3 = (longdouble)fcos((longdouble)(float)dVar15);
lVar12 = (longdouble)fsin((longdouble)(float)dVar15);
pfVar7 = (float *)((int)pfVar7 + iVar16);
local_754c[0] = (float)((double)(float)lVar2 * (double)(float)lVar12 * dVar13);
*pfVar7 = local_754c[0];
local_754c[0] = local_754c[0] - local_faa8;
pfVar7[2] = (float)((double)(float)lVar3 * dVar13);
local_754c[1] = (float)((double)(float)lVar11 * (double)(float)lVar12 * dVar13);
pfVar7[1] = local_754c[1];
local_754c[1] = local_754c[1] - local_faa4;
local_754c[2] = (float)((double)(float)lVar3 * dVar13) - local_faa0;
VectorNormalize((Vector *)local_754c);
pfVar7 = CC_KDTreeTest(CCommand_const&)::vecTargets;
pfVar9 = (float *)((int)CC_KDTreeTest(CCommand_const&)::vecTargets + iVar16);
iVar16 = iVar16 + 0xc;
pfVar9[1] = local_754c[1] * 1024.0 + local_faa4;
pfVar9[2] = local_754c[2] * 1024.0 + local_faa0;
*pfVar9 = local_754c[0] * 1024.0 + local_faa8;
} while (iVar16 != 30000);
CC_KDTreeTest(CCommand_const&)::bFirst = '\0';
}
lVar10 = 0;
if (1 < *(int *)param_1) {
lVar10 = strtol(*(char **)(param_1 + 0x40c),(char **)0x0,10);
}
vtune(1);
_DAT_0105d154 = _DAT_0105d1e4;
if (DAT_0105d158 == '\0') {
CVProfNode::Resume();
}
_DAT_0105d154 = _DAT_0105d154 + 1;
if (_DAT_0105d154 == 1) {
CVProfNode::EnterScope();
}
iVar16 = 0x105d160;
CVProfNode::Reset();
_DAT_0105d1dc = 0;
if (_DAT_0105d154 != 0) {
_DAT_0105d1dc = 1;
CVProfNode::ExitScope();
CVProfNode::MarkFrame();
iVar16 = 0x105d160;
CVProfNode::EnterScope();
}
if (lVar10 == 1) {
local_fa9c = (undefined **)0x0;
local_fa98 = (undefined ***)0x0;
if (___atan2f_finite == 0) {
local_fa88 = 0;
}
else {
iVar16 = ___atan2f_finite;
(**(code **)(___atan2f_finite + 0x50))
(___atan2f_finite,&local_fa9c,0,0,0,0,"/data/src/game/server/util.cpp",0xc87,
&CC_KDTreeTest(CCommand_const&)::tm_fmt,"(%s)%s","Unaccounted","TraceTotal");
local_fa88 = ___atan2f_finite;
}
iVar5 = _DAT_0105db00;
local_fa90 = local_fa9c;
local_fa8c = local_fa98;
/* try { // try from 00b2a551 to 00b2a555 has its CatchHandler @ 00b2adb0 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar16 = ThreadGetCurrentId(iVar16), iVar5 == iVar16)) {
if ((char *)*_DAT_0105d15c != "TraceTotal") {
/* try { // try from 00b2ab8a to 00b2ab9b has its CatchHandler @ 00b2adb0 */
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd48670,(char *)0x1,0xbfafa1);
}
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
iVar16 = 0;
do {
/* try { // try from 00b2a56a to 00b2a7a4 has its CatchHandler @ 00b2adb2 */
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
iVar8 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
pfVar7 = (float *)((int)CC_KDTreeTest(CCommand_const&)::vecTargets + iVar16);
local_ea6c = *pfVar7 - local_faa8;
local_ea68 = pfVar7[1] - local_faa4;
local_ea3c = 0;
local_ea64 = pfVar7[2] - local_faa0;
local_ea37 = local_ea68 * local_ea68 + local_ea6c * local_ea6c + local_ea64 * local_ea64 !=
0.0;
local_ea4c = (*(float *)(iVar5 + 0x18) - *(float *)(iVar8 + 0xc)) * 0.5;
local_ea48 = (*(float *)(iVar5 + 0x1c) - *(float *)(iVar8 + 0x10)) * 0.5;
local_ea44 = (*(float *)(iVar5 + 0x20) - *(float *)(iVar8 + 0x14)) * 0.5;
local_ea38 = local_ea4c * local_ea4c + local_ea48 * local_ea48 + local_ea44 * local_ea44 <
1e-06;
local_ea5c = (*(float *)(iVar5 + 0x18) + *(float *)(iVar8 + 0xc)) * 0.5;
local_ea7c = local_faa8 + local_ea5c;
local_ea58 = (*(float *)(iVar5 + 0x1c) + *(float *)(iVar8 + 0x10)) * 0.5;
local_ea5c = -local_ea5c;
local_ea78 = local_faa4 + local_ea58;
local_ea58 = -local_ea58;
local_ea54 = (*(float *)(iVar5 + 0x20) + *(float *)(iVar8 + 0x14)) * 0.5;
local_ea74 = local_faa0 + local_ea54;
local_ea54 = -local_ea54;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)&local_fa7c,(IHandleEntity *)local_fb04,0,
(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_ea7c,0x200400b,(CTraceFilterSimple *)&local_fa7c,
(Vector *)local_754c);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)local_754c,local_7540,0xff,0xff,0,true,-1.0);
}
iVar5 = _DAT_0105db00;
iVar16 = iVar16 + 0xc;
} while (iVar16 != 30000);
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar16 = ThreadGetCurrentId(), iVar5 == iVar16)) {
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
if (local_fa88 != 0) {
(**(code **)(local_fa88 + 0x54))(local_fa88,local_fa90,local_fa8c,0,0,0);
}
}
else if (lVar10 < 2) {
if (lVar10 == 0) {
local_fa9c = (undefined **)0x0;
local_fa98 = (undefined ***)0x0;
if (___atan2f_finite == 0) {
local_fa88 = 0;
}
else {
iVar16 = ___atan2f_finite;
(**(code **)(___atan2f_finite + 0x50))
(___atan2f_finite,&local_fa9c,0,0,0,0,"/data/src/game/server/util.cpp",0xc7c,
&CC_KDTreeTest(CCommand_const&)::tm_fmt,"(%s)%s","Unaccounted","TraceTotal");
local_fa88 = ___atan2f_finite;
}
iVar5 = _DAT_0105db00;
local_fa90 = local_fa9c;
local_fa8c = local_fa98;
/* try { // try from 00b2a262 to 00b2a266 has its CatchHandler @ 00b2ad72 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar16 = ThreadGetCurrentId(iVar16), iVar5 == iVar16)) {
if ((char *)*_DAT_0105d15c != "TraceTotal") {
/* try { // try from 00b2ad30 to 00b2ad41 has its CatchHandler @ 00b2ad72 */
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd48670,(char *)0x1,0xbfafa1);
}
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
iVar16 = 0;
do {
pfVar7 = (float *)((int)CC_KDTreeTest(CCommand_const&)::vecTargets + iVar16);
local_ea6c = *pfVar7 - local_faa8;
local_ea68 = pfVar7[1] - local_faa4;
local_ea64 = pfVar7[2] - local_faa0;
local_ea44 = 0.0;
local_ea48 = 0.0;
local_ea4c = 0.0;
local_ea3c = 0;
local_ea38 = 1;
local_ea54 = 0.0;
local_ea58 = 0.0;
local_ea7c = local_faa8;
local_ea5c = 0.0;
local_ea78 = local_faa4;
local_ea37 = local_ea64 * local_ea64 + local_ea6c * local_ea6c + local_ea68 * local_ea68 !=
0.0;
local_ea74 = local_faa0;
/* try { // try from 00b2a372 to 00b2a3e3 has its CatchHandler @ 00b2ad4e */
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)&local_fa7c,(IHandleEntity *)0x0,0,
(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_ea7c,0x400b,(CTraceFilterSimple *)&local_fa7c,
(Vector *)local_754c);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)local_754c,local_7540,0xff,0,0,true,-1.0);
}
iVar5 = _DAT_0105db00;
iVar16 = iVar16 + 0xc;
} while (iVar16 != 30000);
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar16 = ThreadGetCurrentId(), iVar5 == iVar16)) {
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
if (local_fa88 != 0) {
(**(code **)(local_fa88 + 0x54))(local_fa88,local_fa90,local_fa8c,0,0,0);
}
}
}
else if (lVar10 == 2) {
pfVar7 = &local_ea7c;
pfVar6 = CC_KDTreeTest(CCommand_const&)::vecTargets + 2;
pfVar9 = local_754c;
do {
*pfVar7 = local_faa8;
iVar16 = 3;
pfVar7[1] = local_faa4;
pfVar7[2] = local_faa0;
*pfVar9 = local_faa8;
pfVar9[1] = local_faa4;
pfVar9[2] = local_faa0;
do {
if (pfVar6[-2] < *pfVar7) {
*pfVar7 = pfVar6[-2];
}
if (pfVar6[-1] < pfVar7[1]) {
pfVar7[1] = pfVar6[-1];
}
if (*pfVar6 < pfVar7[2]) {
pfVar7[2] = *pfVar6;
}
fVar1 = pfVar6[-2];
if (*pfVar9 <= fVar1 && fVar1 != *pfVar9) {
*pfVar9 = fVar1;
}
fVar1 = pfVar6[-1];
if (pfVar9[1] <= fVar1 && fVar1 != pfVar9[1]) {
pfVar9[1] = fVar1;
}
fVar1 = *pfVar6;
if (pfVar9[2] <= fVar1 && fVar1 != pfVar9[2]) {
pfVar9[2] = fVar1;
}
iVar16 = iVar16 + -1;
} while (iVar16 != 0);
pfVar7 = pfVar7 + 3;
pfVar9 = pfVar9 + 3;
pfVar6 = pfVar6 + 3;
} while (pfVar7 != local_754c);
local_fab4 = (undefined **)0x0;
local_fab0 = (undefined ***)0x0;
if (___atan2f_finite == 0) {
local_fa94 = 0;
}
else {
(**(code **)(___atan2f_finite + 0x50))
(___atan2f_finite,&local_fab4,0,0,0,0,"/data/src/game/server/util.cpp",0xca6,
&CC_KDTreeTest(CCommand_const&)::tm_fmt,"(%s)%s","Unaccounted","TraceTotal");
local_fa94 = ___atan2f_finite;
}
iVar16 = _DAT_0105db00;
local_fa9c = local_fab4;
local_fa98 = local_fab0;
/* try { // try from 00b2a037 to 00b2a03b has its CatchHandler @ 00b2adac */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar5 = ThreadGetCurrentId(), iVar16 == iVar5)) {
if ((char *)*_DAT_0105d15c != "TraceTotal") {
/* try { // try from 00b2ac36 to 00b2ac47 has its CatchHandler @ 00b2adac */
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd48670,(char *)0x1,0xbfafa1);
}
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
iVar16 = 0;
iVar5 = 0;
do {
local_fa90 = &PTR_EnumElement_00d48ce8;
local_fa88 = 0x400;
local_fa84 = 0;
local_fa80 = 0;
/* try { // try from 00b2a0c5 to 00b2a0f4 has its CatchHandler @ 00b2ad88 */
local_fa8c = &local_fa7c;
(**(code **)(*partition + 0x38))
(partition,0x10,(int)&local_ea7c + iVar5,(int)local_754c + iVar5,0,&local_fa90);
iVar5 = iVar5 + 0xc;
iVar16 = iVar16 + local_fa80;
} while (iVar5 != 30000);
Msg("Count = %d\n",iVar16);
iVar16 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar5 = ThreadGetCurrentId(), iVar16 == iVar5)) {
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
if (local_fa94 != 0) {
(**(code **)(local_fa94 + 0x54))(local_fa94,local_fa9c,local_fa98,0,0,0);
}
}
else if (lVar10 == 3) {
pfVar7 = CC_KDTreeTest(CCommand_const&)::vecTargets;
pfVar9 = local_754c;
do {
pfVar6 = pfVar9 + 1;
*pfVar9 = SQRT((*pfVar7 - local_faa8) * (*pfVar7 - local_faa8) +
(pfVar7[2] - local_faa0) * (pfVar7[2] - local_faa0) +
(pfVar7[1] - local_faa4) * (pfVar7[1] - local_faa4)) * 0.5;
pfVar7 = pfVar7 + 3;
pfVar9 = pfVar6;
} while (pfVar6 != local_4e3c);
local_fa9c = (undefined **)0x0;
local_fa98 = (undefined ***)0x0;
if (___atan2f_finite == 0) {
local_fa88 = 0;
}
else {
(**(code **)(___atan2f_finite + 0x50))
(___atan2f_finite,&local_fa9c,0,0,0,0,"/data/src/game/server/util.cpp",0xcc0,
&CC_KDTreeTest(CCommand_const&)::tm_fmt,"(%s)%s","Unaccounted","TraceTotal");
local_fa88 = ___atan2f_finite;
}
iVar16 = _DAT_0105db00;
local_fa90 = local_fa9c;
local_fa8c = local_fa98;
/* try { // try from 00b29d23 to 00b29d27 has its CatchHandler @ 00b2ad86 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar5 = ThreadGetCurrentId(), iVar16 == iVar5)) {
if ((char *)*_DAT_0105d15c != "TraceTotal") {
/* try { // try from 00b2acb3 to 00b2acc4 has its CatchHandler @ 00b2ad86 */
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd48670,(char *)0x1,0xbfafa1);
}
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
local_fac4 = 0;
pfVar7 = local_754c;
do {
local_fa78 = &local_ea7c;
local_fa7c = &PTR_EnumElement_00d48ce8;
local_fa74 = 0x400;
local_fa70 = 0;
local_fa6c = 0;
/* try { // try from 00b29db6 to 00b29de1 has its CatchHandler @ 00b2ad76 */
(**(code **)(*partition + 0x3c))(partition,0x10,&local_faa8,*pfVar7,0,&local_fa7c);
pfVar7 = pfVar7 + 1;
local_fac4 = local_fac4 + local_fa6c;
} while (local_4e3c != pfVar7);
Msg("Count = %d\n",local_fac4);
iVar16 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar5 = ThreadGetCurrentId(), iVar16 == iVar5)) {
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
if (local_fa88 != 0) {
(**(code **)(local_fa88 + 0x54))(local_fa88,local_fa90,local_fa8c,0,0,0);
}
}
iVar16 = _DAT_0105d154;
if (_DAT_0105d154 != 0) {
_DAT_0105d1dc = _DAT_0105d1dc + 1;
CVProfNode::ExitScope();
CVProfNode::MarkFrame();
CVProfNode::EnterScope();
iVar16 = _DAT_0105d154;
}
_DAT_0105d154 = 0;
_DAT_0105d1e4 = iVar16;
if (DAT_0105d158 == '\0') {
CVProfNode::Pause();
}
uVar19 = 0xffffffff;
uVar18 = 0;
uVar17 = 0xfffffdfb;
CVProfile::OutputReport(0x105c148,(char *)0xfffffdfb,0);
vtune(0,uVar17,uVar18,uVar19);
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.