CM_TestInDispTree
0x00124b60 · 679 bytes · __cdecl
_Z17CM_TestInDispTreeP11TraceInfo_tPKtiRK6VectorS5_S5_iP10CGameTrace
Decompiled
undefined (8 params)
/* CM_TestInDispTree(TraceInfo_t*, unsigned short const*, int, Vector const&, Vector const&, Vector
const&, int, CGameTrace*) */
void CM_TestInDispTree(TraceInfo_t *param_1,ushort *param_2,int param_3,Vector *param_4,
Vector *param_5,Vector *param_6,int param_7,CGameTrace *param_8)
{
int *piVar1;
ushort uVar2;
int iVar3;
int iVar4;
char cVar5;
Vector *pVVar6;
ushort *puVar7;
CDispCollTree *this;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float *local_50;
Vector *local_4c;
float local_34;
float local_30;
float local_2c;
float local_28;
float local_24;
float local_20;
fVar8 = 0.0;
if (*(float *)param_5 == 0.0) {
fVar12 = *(float *)(param_5 + 8);
fVar9 = *(float *)param_6;
if (*(float *)(param_5 + 4) == 0.0) {
if (fVar12 != 0.0) goto LAB_00124bb6;
fVar10 = *(float *)(param_6 + 4);
fVar11 = *(float *)(param_6 + 8);
if (fVar9 == 0.0) {
if (fVar10 == 0.0) {
if (fVar11 == 0.0) goto LAB_00124d03;
fVar10 = 0.0;
fVar9 = 0.0;
fVar12 = 0.0;
}
else {
fVar9 = 0.0;
fVar12 = 0.0;
}
}
else {
fVar12 = 0.0;
}
}
else {
fVar10 = *(float *)(param_6 + 4);
fVar11 = *(float *)(param_6 + 8);
fVar8 = *(float *)(param_5 + 4);
}
}
else {
fVar8 = *(float *)(param_5 + 4);
fVar12 = *(float *)(param_5 + 8);
fVar9 = *(float *)param_6;
LAB_00124bb6:
fVar10 = *(float *)(param_6 + 4);
fVar11 = *(float *)(param_6 + 8);
}
local_30 = fVar8 + *(float *)(param_4 + 4);
local_34 = *(float *)param_5 + *(float *)param_4;
local_24 = *(float *)(param_4 + 4) + fVar10;
local_28 = *(float *)param_4 + fVar9;
local_2c = fVar12 + *(float *)(param_4 + 8);
local_20 = *(float *)(param_4 + 8) + fVar11;
iVar3 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 0x14 + 0x150);
iVar4 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 4 + 0x120);
if (0 < param_3) {
puVar7 = param_2;
do {
uVar2 = *puVar7;
pVVar6 = (Vector *)((uint)uVar2 * 0x30 + g_pDispBounds);
if (((*(uint *)(pVVar6 + 0x24) & param_7) != 0) &&
(piVar1 = (int *)(iVar3 + *(int *)(pVVar6 + 0x20) * 4), iVar4 != *piVar1)) {
*piVar1 = iVar4;
cVar5 = IsBoxIntersectingBox((Vector *)&local_34,(Vector *)&local_28,pVVar6,pVVar6 + 0x10);
if (cVar5 != '\0') {
this = (CDispCollTree *)((uint)uVar2 * 0xf4 + g_pDispCollTrees);
cVar5 = CDispCollTree::AABBTree_IntersectAABB
(this,(Vector *)&local_34,(Vector *)&local_28);
if (cVar5 != '\0') {
param_8[0x37] = (CGameTrace)0x1;
param_8[0x36] = (CGameTrace)0x1;
*(undefined4 *)(param_8 + 0x2c) = 0;
*(undefined4 *)(param_8 + 0x38) = 0;
*(undefined4 *)(param_8 + 0x30) = *(undefined4 *)(this + 0x20);
return;
}
}
}
puVar7 = puVar7 + 1;
} while (puVar7 != param_2 + param_3);
}
LAB_00124d03:
local_4c = (Vector *)&local_28;
local_50 = &local_34;
CM_PreStab(param_1,param_2,param_3,local_4c,param_7,(int *)local_50);
CM_Stab(param_1,param_4,local_4c,(int)local_34);
if ((*(int *)(param_1 + 0x114) != 0) && (param_1[0x8b] != (TraceInfo_t)0x0)) {
param_1[0x8a] = (TraceInfo_t)0x1;
*(undefined4 *)(param_1 + 0x80) = 0;
*(undefined4 *)(param_1 + 0x8c) = 0;
return;
}
param_1[0x8b] = (TraceInfo_t)0x0;
param_1[0x8a] = (TraceInfo_t)0x0;
*(undefined4 *)(param_1 + 0x84) = 0;
*(undefined4 *)(param_1 + 0x80) = 0x3f800000;
*(undefined4 *)(param_1 + 0x8c) = 0;
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.