IsBoxIntersectingRayNoLowest
0x0011c250 · 256 bytes · __regparm2
_Z28IsBoxIntersectingRayNoLowestU8__vectorfS_RKS_S1_S1_S1_
Decompiled
undefined (6 params)
/* IsBoxIntersectingRayNoLowest(float __vector(4), float __vector(4), float __vector(4) const&,
float __vector(4) const&, float __vector(4) const&, float __vector(4) const&) */
undefined4 __regparm2
IsBoxIntersectingRayNoLowest
(_func_float_int *param_1,_func_float_int *param_2,_func_float_int **param_3,
_func_float_int **param_4,_func_float_int **param_5,_func_float_int **param_6)
{
_func_float_int *p_Var1;
_func_float_int *p_Var2;
_func_float_int *p_Var3;
int iVar4;
float in_XMM0_Da;
float fVar5;
float in_XMM0_Db;
float fVar7;
float in_XMM0_Dc;
float fVar8;
float in_XMM0_Dd;
undefined1 auVar6 [16];
float in_XMM1_Da;
float fVar9;
float in_XMM1_Db;
float fVar12;
float in_XMM1_Dc;
float fVar13;
float in_XMM1_Dd;
undefined1 auVar10 [16];
undefined1 auVar11 [16];
uint uVar14;
uint uVar15;
uint uVar16;
undefined1 auVar17 [16];
uint uVar18;
uint uVar20;
uint uVar21;
undefined1 auVar19 [16];
float local_1c;
float fStack_18;
float fStack_14;
uVar14 = -(uint)(-1.1920929e-07 <= (float)*param_4 && (float)*param_4 <= (float)0x34000000);
uVar15 = -(uint)(-1.1920929e-07 <= (float)param_4[1] && (float)param_4[1] <= (float)0x34000000);
uVar16 = -(uint)(-1.1920929e-07 <= (float)param_4[2] && (float)param_4[2] <= (float)0x34000000);
fVar5 = in_XMM0_Da - (float)*param_6;
fVar7 = in_XMM0_Db - (float)param_6[1];
fVar8 = in_XMM0_Dc - (float)param_6[2];
fVar9 = in_XMM1_Da + (float)*param_6;
fVar12 = in_XMM1_Db + (float)param_6[1];
fVar13 = in_XMM1_Dc + (float)param_6[2];
p_Var1 = *param_3;
p_Var2 = param_3[1];
p_Var3 = param_3[2];
uVar18 = -(uint)((float)p_Var1 < fVar5 || fVar9 < (float)p_Var1);
uVar20 = -(uint)((float)p_Var2 < fVar7 || fVar12 < (float)p_Var2);
uVar21 = -(uint)((float)p_Var3 < fVar8 || fVar13 < (float)p_Var3);
auVar6._0_8_ = CONCAT44((fVar7 - (float)p_Var2) * (float)param_5[1],
(fVar5 - (float)p_Var1) * (float)*param_5);
auVar6._8_4_ = (fVar8 - (float)p_Var3) * (float)param_5[2];
auVar6._12_4_ = ((in_XMM0_Dd - (float)param_6[3]) - (float)param_3[3]) * (float)param_5[3];
auVar10._0_4_ = (fVar9 - (float)p_Var1) * (float)*param_5;
auVar10._4_4_ = (fVar12 - (float)p_Var2) * (float)param_5[1];
auVar10._8_4_ = (fVar13 - (float)p_Var3) * (float)param_5[2];
auVar10._12_4_ = ((in_XMM1_Dd + (float)param_6[3]) - (float)param_3[3]) * (float)param_5[3];
auVar17._8_4_ = auVar6._8_4_;
auVar17._0_8_ = auVar6._0_8_;
auVar17._12_4_ = auVar6._12_4_;
auVar17 = maxps(auVar17,auVar10);
auVar6 = minps(auVar6,auVar10);
auVar11._4_4_ = -(uint)((float)(uVar20 & uVar15) == (float)0);
auVar11._0_4_ = -(uint)((float)(uVar18 & uVar14) == (float)0);
auVar11._8_4_ = -(uint)((float)(uVar21 & uVar16) == (float)0);
auVar11._12_4_ = 0xffffffff;
fStack_18 = auVar17._4_4_;
iVar4 = movmskps(param_2,auVar11);
local_1c = auVar17._0_4_;
if (local_1c <= fStack_18) {
fStack_18 = local_1c;
}
fStack_14 = auVar17._8_4_;
fVar5 = fStack_18;
if (fStack_14 <= fStack_18) {
fVar5 = fStack_14;
}
fStack_18 = auVar6._4_4_;
local_1c = auVar6._0_4_;
if (fStack_18 <= local_1c) {
fStack_18 = local_1c;
}
fStack_14 = auVar6._8_4_;
if (fStack_18 <= fStack_14) {
fStack_18 = fStack_14;
}
if (iVar4 != 0xf) {
return 0;
}
auVar19._4_4_ =
-(uint)((float)(~(~uVar20 & uVar15) &
-(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
fVar5 < fStack_18)) == (float)0);
auVar19._0_4_ =
-(uint)((float)(~(~uVar18 & uVar14) &
-(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
fVar5 < fStack_18)) == (float)0);
auVar19._8_4_ =
-(uint)((float)(~(~uVar21 & uVar16) &
-(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
fVar5 < fStack_18)) == (float)0);
auVar19._12_4_ = 0xffffffff;
iVar4 = movmskps(0,auVar19);
return CONCAT31((int3)((uint)iVar4 >> 8),iVar4 == 0xf);
}
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.