CM_RayLeafnums_r
0x0011aab0 · 1292 bytes · __cdecl
_Z16CM_RayLeafnums_rRK5Ray_tP17CCollisionBSPDataiffRK6VectorS6_PiiRi
Decompiled
undefined (10 params)
/* CM_RayLeafnums_r(Ray_t const&, CCollisionBSPData*, int, float, float, Vector const&, Vector
const&, int*, int, int&) */
void CM_RayLeafnums_r(Ray_t *param_1,CCollisionBSPData *param_2,int param_3,float param_4,
float param_5,Vector *param_6,Vector *param_7,int *param_8,int param_9,
int *param_10)
{
float fVar1;
float *pfVar2;
uint uVar3;
int iVar4;
undefined4 *puVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
int local_40;
float local_3c;
float local_28;
float local_24;
float local_20;
if (*param_10 < param_9) {
if (param_1[0x44] == (Ray_t)0x0) {
if (-1 < param_3) {
do {
puVar5 = (undefined4 *)(*(int *)param_2 + param_3 * 0xc);
pfVar2 = (float *)*puVar5;
uVar3 = (uint)*(byte *)(pfVar2 + 4);
if (*(byte *)(pfVar2 + 4) < 3) {
fVar8 = *(float *)(param_1 + uVar3 * 4 + 0x30);
fVar6 = *(float *)(param_7 + uVar3 * 4) - pfVar2[3];
fVar7 = *(float *)(param_6 + uVar3 * 4) - pfVar2[3];
if (fVar8 < fVar6) goto LAB_0011ac26;
LAB_0011acec:
if ((-fVar8 <= fVar7) || (-fVar8 <= fVar6)) goto LAB_0011ad0b;
param_3 = puVar5[2];
}
else {
fVar8 = *pfVar2;
fVar9 = pfVar2[1];
fVar1 = pfVar2[2];
fVar7 = (*(float *)(param_6 + 4) * fVar9 + *(float *)param_6 * fVar8 +
*(float *)(param_6 + 8) * fVar1) - pfVar2[3];
fVar6 = (*(float *)param_7 * fVar8 - pfVar2[3]) + *(float *)(param_7 + 4) * fVar9 +
*(float *)(param_7 + 8) * fVar1;
fVar8 = ABS(fVar9 * *(float *)(param_1 + 0x34)) +
ABS(fVar8 * *(float *)(param_1 + 0x30)) +
ABS(fVar1 * *(float *)(param_1 + 0x38));
if (fVar6 <= fVar8) goto LAB_0011acec;
LAB_0011ac26:
if (fVar7 <= fVar8) goto LAB_0011acec;
param_3 = puVar5[1];
}
} while (-1 < param_3);
}
}
else if (-1 < param_3) {
do {
while( true ) {
puVar5 = (undefined4 *)(*(int *)param_2 + param_3 * 0xc);
pfVar2 = (float *)*puVar5;
uVar3 = (uint)*(byte *)(pfVar2 + 4);
if (*(byte *)(pfVar2 + 4) < 3) break;
fVar7 = (*(float *)param_6 * *pfVar2 - pfVar2[3]) + *(float *)(param_6 + 4) * pfVar2[1] +
*(float *)(param_6 + 8) * pfVar2[2];
fVar6 = (*pfVar2 * *(float *)param_7 - pfVar2[3]) + pfVar2[1] * *(float *)(param_7 + 4) +
pfVar2[2] * *(float *)(param_7 + 8);
fVar8 = 0.0;
if (0.0 < fVar6) goto LAB_0011ab25;
LAB_0011aba1:
if ((-fVar8 <= fVar7) || (-fVar8 <= fVar6)) {
LAB_0011ad0b:
if (fVar7 < fVar6) {
local_40 = 0;
iVar4 = 1;
fVar9 = 1.0 / (fVar7 - fVar6);
fVar6 = (fVar7 + fVar8 + 0.03125) * fVar9;
fVar9 = ((fVar7 - fVar8) + -0.03125) * fVar9;
if (fVar6 <= 0.0) {
fVar6 = 0.0;
}
if (fVar9 <= 0.0) {
fVar9 = 0.0;
}
if (1.0 <= fVar6) {
fVar6 = 1.0;
}
if (1.0 <= fVar9) {
fVar9 = 1.0;
}
local_3c = fVar6 * (param_5 - param_4);
}
else if (fVar6 < fVar7) {
iVar4 = 0;
local_40 = 1;
fVar9 = 1.0 / (fVar7 - fVar6);
fVar6 = ((fVar7 - fVar8) + -0.03125) * fVar9;
fVar9 = (fVar7 + fVar8 + 0.03125) * fVar9;
if (fVar6 <= 0.0) {
fVar6 = 0.0;
}
if (fVar9 <= 0.0) {
fVar9 = 0.0;
}
if (1.0 <= fVar6) {
fVar6 = 1.0;
}
if (1.0 <= fVar9) {
fVar9 = 1.0;
}
local_3c = fVar6 * (param_5 - param_4);
}
else {
fVar6 = 0.0;
local_40 = 1;
fVar9 = 1.0;
local_3c = 0.0;
iVar4 = 0;
}
local_28 = (*(float *)param_7 - *(float *)param_6) * fVar9 + *(float *)param_6;
local_24 = (*(float *)(param_7 + 4) - *(float *)(param_6 + 4)) * fVar9 +
*(float *)(param_6 + 4);
local_20 = (*(float *)(param_7 + 8) - *(float *)(param_6 + 8)) * fVar9 +
*(float *)(param_6 + 8);
CM_RayLeafnums_r(param_1,param_2,puVar5[iVar4 + 1],param_4,
(param_5 - param_4) * fVar9 + param_4,param_6,(Vector *)&local_28,
param_8,param_9,param_10);
local_28 = (*(float *)param_7 - *(float *)param_6) * fVar6 + *(float *)param_6;
local_24 = (*(float *)(param_7 + 4) - *(float *)(param_6 + 4)) * fVar6 +
*(float *)(param_6 + 4);
local_20 = (*(float *)(param_7 + 8) - *(float *)(param_6 + 8)) * fVar6 +
*(float *)(param_6 + 8);
CM_RayLeafnums_r(param_1,param_2,puVar5[local_40 + 1],local_3c + param_4,param_5,
(Vector *)&local_28,param_7,param_8,param_9,param_10);
return;
}
param_3 = puVar5[2];
if (param_3 < 0) goto LAB_0011abc4;
}
fVar6 = *(float *)(param_7 + uVar3 * 4) - pfVar2[3];
fVar8 = *(float *)(param_1 + uVar3 * 4 + 0x30);
fVar7 = *(float *)(param_6 + uVar3 * 4) - pfVar2[3];
if (fVar6 <= fVar8) goto LAB_0011aba1;
LAB_0011ab25:
if (fVar7 <= fVar8) goto LAB_0011aba1;
param_3 = puVar5[1];
} while (-1 < param_3);
}
LAB_0011abc4:
param_8[*param_10] = ~param_3;
*param_10 = *param_10 + 1;
}
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.