CM_GetTraceDataForBSP
0x0011ec60 · 513 bytes · __cdecl
_Z21CM_GetTraceDataForBSPRK6VectorS1_R14CTraceListData
Decompiled
undefined (3 params)
/* CM_GetTraceDataForBSP(Vector const&, Vector const&, CTraceListData&) */
void CM_GetTraceDataForBSP(Vector *param_1,Vector *param_2,CTraceListData *param_3)
{
undefined4 *puVar1;
float fVar2;
float fVar3;
float fVar4;
float *pfVar5;
TraceInfo_t *pTVar6;
uint uVar7;
uint uVar8;
uint uVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
TraceInfo_t *local_1020;
uint auStack_101c [1027];
uVar8 = 0;
fVar2 = *(float *)param_2;
fVar3 = *(float *)(param_2 + 4);
fVar4 = *(float *)(param_2 + 8);
fVar14 = (*(float *)param_1 + fVar2) * 0.5;
fVar13 = (*(float *)(param_1 + 4) + fVar3) * 0.5;
fVar12 = (*(float *)(param_1 + 8) + fVar4) * 0.5;
local_1020 = (TraceInfo_t *)BeginTrace();
uVar7 = 0;
uVar9 = 0;
pTVar6 = local_1020;
while( true ) {
while (-1 < (int)uVar7) {
puVar1 = (undefined4 *)(g_BSPData + uVar7 * 0xc);
pfVar5 = (float *)*puVar1;
fVar10 = ((fVar14 * *pfVar5 + fVar13 * pfVar5[1]) - pfVar5[3]) + fVar12 * pfVar5[2];
fVar11 = ABS(pfVar5[1] * (fVar3 - fVar13)) + ABS(*pfVar5 * (fVar2 - fVar14)) +
ABS(pfVar5[2] * (fVar4 - fVar12));
if (fVar10 < fVar11) {
if (-fVar11 <= fVar10) {
auStack_101c[uVar9] = puVar1[1];
uVar9 = uVar9 + 1 & 0x3ff;
}
uVar7 = puVar1[2];
}
else {
uVar7 = puVar1[1];
}
}
CM_GetTraceDataForLeaf(pTVar6,~uVar7,param_3);
if (uVar8 == uVar9) break;
uVar7 = auStack_101c[uVar8];
uVar8 = uVar8 + 1 & 0x3ff;
pTVar6 = local_1020;
}
EndTrace(&local_1020);
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.