IntersectRayWithBox
0x000c6550 · 277 bytes · __cdecl
_Z19IntersectRayWithBoxRK6VectorS1_S1_S1_fP14BoxTraceInfo_t
Decompiled
undefined (6 params)
/* IntersectRayWithBox(Vector const&, Vector const&, Vector const&, Vector const&, float,
BoxTraceInfo_t*) */
BoxTraceInfo_t
IntersectRayWithBox(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,float param_5,
BoxTraceInfo_t *param_6)
{
bool bVar1;
int iVar2;
Vector *pVVar3;
Vector *pVVar4;
float fVar5;
float fVar6;
float fVar7;
pVVar3 = param_1 + -0xc;
*(undefined4 *)param_6 = 0xbf800000;
*(undefined4 *)(param_6 + 4) = 0x3f800000;
*(undefined4 *)(param_6 + 8) = 0xffffffff;
pVVar4 = param_2 + -0xc;
param_6[0xc] = (BoxTraceInfo_t)0x1;
iVar2 = 0;
do {
if (iVar2 < 3) {
fVar5 = *(float *)(param_3 + iVar2 * 4) - *(float *)(pVVar3 + 0xc);
fVar6 = fVar5 - *(float *)(pVVar4 + 0xc);
}
else {
fVar5 = *(float *)pVVar3 - *(float *)(param_4 + iVar2 * 4 + -0xc);
fVar6 = *(float *)pVVar4 + fVar5;
}
bVar1 = 0.0 < fVar5;
if ((0.0 < fVar6) && (bVar1 = false, 0.0 < fVar5)) {
param_6[0xc] = (BoxTraceInfo_t)0x0;
return (BoxTraceInfo_t)0x0;
}
if ((0.0 < fVar6) || (0.0 < fVar5)) {
if (bVar1) {
param_6[0xc] = (BoxTraceInfo_t)0x0;
}
if (fVar5 <= fVar6) {
fVar5 = (fVar5 + param_5) / (fVar5 - fVar6);
if (fVar5 < *(float *)(param_6 + 4)) {
*(float *)(param_6 + 4) = fVar5;
}
}
else {
fVar7 = fVar5 - param_5;
if (fVar7 <= 0.0) {
fVar7 = 0.0;
}
fVar7 = fVar7 / (fVar5 - fVar6);
if (*(float *)param_6 <= fVar7 && fVar7 != *(float *)param_6) {
*(float *)param_6 = fVar7;
*(int *)(param_6 + 8) = iVar2;
}
}
}
iVar2 = iVar2 + 1;
pVVar3 = pVVar3 + 4;
pVVar4 = pVVar4 + 4;
} while (iVar2 != 6);
if ((param_6[0xc] == (BoxTraceInfo_t)0x0) && (*(float *)param_6 < *(float *)(param_6 + 4))) {
return (BoxTraceInfo_t)(0.0 <= *(float *)param_6);
}
return param_6[0xc];
}
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.