IsBoxIntersectingRay
0x0058a000 · 261 bytes · __regparm2
_Z20IsBoxIntersectingRayRK6VectorS1_S1_S1_S1_f
Decompiled
undefined (6 params)
/* IsBoxIntersectingRay(Vector const&, Vector const&, Vector const&, Vector const&, Vector const&,
float) */
undefined4 __regparm2
IsBoxIntersectingRay
(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,Vector *param_5,
float param_6)
{
int iVar1;
uint uVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint uVar7;
undefined1 auVar8 [16];
undefined1 auVar9 [16];
float fVar10;
float fVar12;
float fVar13;
float fVar14;
undefined1 auVar11 [16];
float fVar15;
float fVar19;
float fVar20;
float fVar21;
undefined1 auVar16 [16];
undefined1 auVar17 [16];
undefined1 auVar18 [16];
undefined1 auVar22 [16];
undefined1 auVar23 [16];
undefined1 auVar24 [16];
undefined1 auVar25 [16];
undefined1 auVar26 [16];
undefined1 auVar27 [16];
float *in_stack_00000014;
float in_stack_00000018;
fVar15 = *(float *)param_3 - *(float *)param_5;
fVar19 = *(float *)(param_3 + 4) - *(float *)(param_5 + 4);
fVar20 = *(float *)(param_3 + 8) - *(float *)(param_5 + 8);
fVar21 = *(float *)(param_3 + 0xc) - *(float *)(param_5 + 0xc);
uVar2 = -(uint)(*(float *)param_6 < fVar15);
uVar4 = -(uint)(*(float *)((int)param_6 + 4) < fVar19);
uVar6 = -(uint)(*(float *)((int)param_6 + 8) < fVar20);
fVar10 = *(float *)param_4 - *(float *)param_5;
fVar12 = *(float *)(param_4 + 4) - *(float *)(param_5 + 4);
fVar13 = *(float *)(param_4 + 8) - *(float *)(param_5 + 8);
fVar14 = *(float *)(param_4 + 0xc) - *(float *)(param_5 + 0xc);
uVar3 = -(uint)(fVar10 < *(float *)param_6);
uVar5 = -(uint)(fVar12 < *(float *)((int)param_6 + 4));
uVar7 = -(uint)(fVar13 < *(float *)((int)param_6 + 8));
auVar9._0_4_ = -(uint)((float)0 < fVar15) & uVar2 | -(uint)(fVar10 < (float)0) & uVar3;
auVar9._4_4_ = -(uint)((float)0 < fVar19) & uVar4 | -(uint)(fVar12 < (float)0) & uVar5;
auVar9._8_4_ = -(uint)((float)0 < fVar20) & uVar6 | -(uint)(fVar13 < (float)0) & uVar7;
auVar9._12_4_ = 0;
iVar1 = movmskps(param_2,auVar9);
if (iVar1 != 0) {
return 0;
}
uVar2 = uVar2 ^ -(uint)((float)0 < fVar15) | uVar3 ^ -(uint)(fVar10 < (float)0);
uVar3 = uVar4 ^ -(uint)((float)0 < fVar19) | uVar5 ^ -(uint)(fVar12 < (float)0);
uVar4 = uVar6 ^ -(uint)((float)0 < fVar20) | uVar7 ^ -(uint)(fVar13 < (float)0);
uVar5 = -(uint)((float)0 < fVar21 != *(float *)((int)param_6 + 0xc) < fVar21 ||
fVar14 < *(float *)((int)param_6 + 0xc) != fVar14 < (float)0);
auVar17._0_8_ = CONCAT44(~uVar3,~uVar2) & 0xff7fffffff7fffff;
auVar17._8_4_ = ~uVar4 & 0xff7fffff;
auVar17._12_4_ = ~uVar5 & 0xff7fffff;
auVar16._0_4_ = (uint)((fVar15 - in_stack_00000018) * *in_stack_00000014) & uVar2;
auVar16._4_4_ = (uint)((fVar19 - in_stack_00000018) * in_stack_00000014[1]) & uVar3;
auVar16._8_4_ = (uint)((fVar20 - in_stack_00000018) * in_stack_00000014[2]) & uVar4;
auVar16._12_4_ = (uint)((fVar21 - in_stack_00000018) * in_stack_00000014[3]) & uVar5;
auVar23._0_8_ = CONCAT44(~uVar3,~uVar2) & 0x7f7fffff7f7fffff;
auVar23._8_4_ = ~uVar4 & 0x7f7fffff;
auVar23._12_4_ = ~uVar5 & 0x7f7fffff;
auVar11._0_4_ = (uint)((fVar10 + in_stack_00000018) * *in_stack_00000014) & uVar2;
auVar11._4_4_ = (uint)((fVar12 + in_stack_00000018) * in_stack_00000014[1]) & uVar3;
auVar11._8_4_ = (uint)((fVar13 + in_stack_00000018) * in_stack_00000014[2]) & uVar4;
auVar11._12_4_ = (uint)((fVar14 + in_stack_00000018) * in_stack_00000014[3]) & uVar5;
auVar26 = minps(auVar16 | auVar17,auVar11 | auVar23);
auVar17 = maxps(auVar16 | auVar17,auVar11 | auVar23);
auVar8._0_12_ = auVar26._4_12_;
auVar8._12_4_ = auVar26._0_4_;
auVar9 = maxps(auVar8,auVar26);
auVar22._0_12_ = auVar17._4_12_;
auVar22._12_4_ = auVar17._0_4_;
auVar23 = minps(auVar22,auVar17);
auVar27._0_8_ = auVar26._8_8_;
auVar27._8_4_ = auVar26._0_4_;
auVar27._12_4_ = auVar26._4_4_;
auVar18._0_8_ = auVar17._8_8_;
auVar18._8_4_ = auVar17._0_4_;
auVar18._12_4_ = auVar17._4_4_;
auVar9 = maxps(auVar9,auVar27);
auVar17 = minps(auVar23,auVar18);
auVar26._0_4_ = auVar9._0_4_;
auVar26._4_4_ = auVar26._0_4_;
auVar26._8_4_ = auVar26._0_4_;
auVar26._12_4_ = auVar26._0_4_;
auVar9 = maxps(auVar26,Four_Zeros);
auVar24._0_4_ = auVar17._0_4_;
auVar24._4_4_ = auVar24._0_4_;
auVar24._8_4_ = auVar24._0_4_;
auVar24._12_4_ = auVar24._0_4_;
auVar17 = minps(auVar24,Four_Ones);
auVar25._4_4_ = -(uint)((float)-(uint)(auVar17._4_4_ < auVar9._4_4_) == (float)0);
auVar25._0_4_ = -(uint)((float)-(uint)(auVar17._0_4_ < auVar9._0_4_) == (float)0);
auVar25._8_4_ = -(uint)((float)-(uint)(auVar17._8_4_ < auVar9._8_4_) == (float)0);
auVar25._12_4_ = -(uint)((float)-(uint)(auVar17._12_4_ < auVar9._12_4_) == (float)0);
iVar1 = movmskps(in_stack_00000014,auVar25);
return CONCAT31((int3)((uint)iVar1 >> 8),iVar1 == 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.