IsBoxIntersectingRay
0x000c5b90 · 307 bytes · __regparm2
_Z20IsBoxIntersectingRayRK6VectorS1_S1_S1_f
Decompiled
undefined (5 params)
/* IsBoxIntersectingRay(Vector const&, Vector const&, Vector const&, Vector const&, float) */
undefined4 __regparm2
IsBoxIntersectingRay(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,float param_5)
{
undefined4 uVar1;
int iVar2;
float fVar3;
float fVar5;
float fVar6;
float fVar7;
undefined1 auVar4 [16];
float fVar8;
float fVar10;
float fVar11;
float fVar12;
undefined1 auVar9 [16];
undefined1 auVar13 [16];
undefined1 auVar14 [16];
undefined1 auVar15 [16];
undefined1 auVar16 [16];
undefined1 auVar17 [16];
float fVar18;
float fVar23;
float fVar24;
undefined1 auVar19 [16];
float fVar25;
undefined1 auVar20 [16];
undefined1 auVar21 [16];
undefined1 auVar22 [16];
uint uVar26;
uint uVar29;
uint uVar30;
uint uVar31;
undefined1 auVar27 [16];
undefined1 auVar28 [16];
undefined1 (*in_stack_00000010) [16];
float in_stack_00000014;
auVar19 = *in_stack_00000010;
fVar18 = auVar19._12_4_;
fVar23 = auVar19._0_4_;
fVar24 = auVar19._4_4_;
fVar25 = auVar19._8_4_;
fVar8 = (*(float *)param_3 - *(float *)param_5) - in_stack_00000014;
fVar10 = (*(float *)(param_3 + 4) - *(float *)((int)param_5 + 4)) - in_stack_00000014;
fVar11 = (*(float *)(param_3 + 8) - *(float *)((int)param_5 + 8)) - in_stack_00000014;
fVar12 = (*(float *)(param_3 + 0xc) - *(float *)((int)param_5 + 0xc)) - in_stack_00000014;
uVar1 = 0;
fVar3 = (*(float *)param_4 - *(float *)param_5) + in_stack_00000014;
fVar5 = (*(float *)(param_4 + 4) - *(float *)((int)param_5 + 4)) + in_stack_00000014;
fVar6 = (*(float *)(param_4 + 8) - *(float *)((int)param_5 + 8)) + in_stack_00000014;
fVar7 = (*(float *)(param_4 + 0xc) - *(float *)((int)param_5 + 0xc)) + in_stack_00000014;
auVar15._0_4_ =
-(uint)(fVar23 < fVar8) & -(uint)((float)0 < fVar8) |
-(uint)(fVar3 < (float)0) & -(uint)(fVar3 < fVar23);
auVar15._4_4_ =
-(uint)(fVar24 < fVar10) & -(uint)((float)0 < fVar10) |
-(uint)(fVar5 < (float)0) & -(uint)(fVar5 < fVar24);
auVar15._8_4_ =
-(uint)(fVar25 < fVar11) & -(uint)((float)0 < fVar11) |
-(uint)(fVar6 < (float)0) & -(uint)(fVar6 < fVar25);
auVar15._12_4_ = 0;
iVar2 = movmskps(param_2,auVar15);
if (iVar2 == 0) {
uVar26 = -(uint)((float)0 < fVar8) ^ -(uint)(fVar23 < fVar8) |
-(uint)(fVar3 < fVar23) ^ -(uint)(fVar3 < (float)0);
uVar29 = -(uint)((float)0 < fVar10) ^ -(uint)(fVar24 < fVar10) |
-(uint)(fVar5 < fVar24) ^ -(uint)(fVar5 < (float)0);
uVar30 = -(uint)((float)0 < fVar11) ^ -(uint)(fVar25 < fVar11) |
-(uint)(fVar6 < fVar25) ^ -(uint)(fVar6 < (float)0);
uVar31 = -(uint)(fVar7 < (float)0 != fVar7 < fVar18 || fVar18 < fVar12 != (float)0 < fVar12);
auVar13._0_8_ =
CONCAT44(-(uint)(fVar24 == (float)0),-(uint)(fVar23 == (float)0)) & 0x3400000034000000;
auVar13._8_4_ = -(uint)(fVar25 == (float)0) & 0x34000000;
auVar13._12_4_ = -(uint)(fVar18 == (float)0) & 0x34000000;
auVar13 = auVar13 | auVar19;
auVar19 = rcpps(auVar19,auVar13);
fVar18 = auVar19._0_4_;
fVar23 = auVar19._4_4_;
fVar24 = auVar19._8_4_;
fVar25 = auVar19._12_4_;
fVar18 = (fVar18 + fVar18) - fVar18 * fVar18 * auVar13._0_4_;
fVar23 = (fVar23 + fVar23) - fVar23 * fVar23 * auVar13._4_4_;
fVar24 = (fVar24 + fVar24) - fVar24 * fVar24 * auVar13._8_4_;
fVar25 = (fVar25 + fVar25) - fVar25 * fVar25 * auVar13._12_4_;
auVar19._0_8_ = CONCAT44(~uVar29,~uVar26) & 0xff7fffffff7fffff;
auVar19._8_4_ = ~uVar30 & 0xff7fffff;
auVar19._12_4_ = ~uVar31 & 0xff7fffff;
auVar9._0_4_ = (uint)(fVar8 * fVar18) & uVar26;
auVar9._4_4_ = (uint)(fVar10 * fVar23) & uVar29;
auVar9._8_4_ = (uint)(fVar11 * fVar24) & uVar30;
auVar9._12_4_ = (uint)(fVar12 * fVar25) & uVar31;
auVar20._0_4_ = (uint)(fVar18 * fVar3) & uVar26;
auVar20._4_4_ = (uint)(fVar23 * fVar5) & uVar29;
auVar20._8_4_ = (uint)(fVar24 * fVar6) & uVar30;
auVar20._12_4_ = (uint)(fVar25 * fVar7) & uVar31;
auVar21._0_8_ = CONCAT44(~uVar29,~uVar26) & 0x7f7fffff7f7fffff;
auVar21._8_4_ = ~uVar30 & 0x7f7fffff;
auVar21._12_4_ = ~uVar31 & 0x7f7fffff;
auVar27 = minps(auVar9 | auVar19,auVar20 | auVar21);
auVar21 = maxps(auVar20 | auVar21,auVar9 | auVar19);
auVar4._0_12_ = auVar27._4_12_;
auVar4._12_4_ = auVar27._0_4_;
auVar19 = maxps(auVar4,auVar27);
auVar14._0_12_ = auVar21._4_12_;
auVar14._12_4_ = auVar21._0_4_;
auVar15 = minps(auVar14,auVar21);
auVar28._0_8_ = auVar27._8_8_;
auVar28._8_4_ = auVar27._0_4_;
auVar28._12_4_ = auVar27._4_4_;
auVar22._0_8_ = auVar21._8_8_;
auVar22._8_4_ = auVar21._0_4_;
auVar22._12_4_ = auVar21._4_4_;
auVar19 = maxps(auVar19,auVar28);
auVar15 = minps(auVar15,auVar22);
auVar27._0_4_ = auVar19._0_4_;
auVar27._4_4_ = auVar27._0_4_;
auVar27._8_4_ = auVar27._0_4_;
auVar27._12_4_ = auVar27._0_4_;
auVar19 = maxps(auVar27,Four_Zeros);
auVar16._0_4_ = auVar15._0_4_;
auVar16._4_4_ = auVar16._0_4_;
auVar16._8_4_ = auVar16._0_4_;
auVar16._12_4_ = auVar16._0_4_;
auVar15 = minps(auVar16,Four_Ones);
auVar17._4_4_ = -(uint)((float)-(uint)(auVar15._4_4_ < auVar19._4_4_) == (float)0);
auVar17._0_4_ = -(uint)((float)-(uint)(auVar15._0_4_ < auVar19._0_4_) == (float)0);
auVar17._8_4_ = -(uint)((float)-(uint)(auVar15._8_4_ < auVar19._8_4_) == (float)0);
auVar17._12_4_ = -(uint)((float)-(uint)(auVar15._12_4_ < auVar19._12_4_) == (float)0);
iVar2 = movmskps(0,auVar17);
uVar1 = CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 0xf);
}
return uVar1;
}
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.