IntersectRayWithBox
0x0011a6b0 · 1003 bytes · __cdecl
_Z19IntersectRayWithBoxRK5Ray_tRK13VectorAlignedS4_S4_P10CGameTrace
Decompiled
undefined (5 params)
/* IntersectRayWithBox(Ray_t const&, VectorAligned const&, VectorAligned const&, VectorAligned
const&, CGameTrace*) */
undefined4
IntersectRayWithBox(Ray_t *param_1,VectorAligned *param_2,VectorAligned *param_3,
VectorAligned *param_4,CGameTrace *param_5)
{
undefined4 uVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
undefined4 uVar6;
undefined4 unaff_EDI;
int iVar7;
int iVar8;
uint uVar9;
uint uVar10;
uint uVar11;
uint uVar12;
uint uVar13;
uint uVar14;
uint uVar15;
uint uVar16;
uint uVar17;
uint uVar18;
uint uVar19;
uint uVar20;
undefined1 auVar21 [16];
undefined1 auVar22 [16];
undefined1 auVar23 [16];
undefined1 auVar24 [16];
float fVar25;
float fVar28;
float fVar29;
float fVar30;
undefined1 auVar26 [16];
undefined1 auVar27 [16];
float fVar31;
float fVar35;
float fVar36;
float fVar37;
undefined1 auVar32 [16];
undefined1 auVar33 [16];
undefined1 auVar34 [16];
undefined1 auVar38 [16];
undefined1 auVar39 [16];
undefined1 auVar40 [16];
undefined1 auVar41 [16];
undefined1 auVar42 [16];
undefined1 auVar43 [16];
undefined1 auVar44 [16];
undefined1 auVar45 [16];
undefined1 auVar46 [16];
undefined1 auVar47 [16];
undefined1 auVar48 [16];
undefined1 auVar49 [16];
undefined1 auVar50 [16];
undefined1 auVar51 [16];
undefined1 auVar52 [16];
undefined1 auVar53 [16];
undefined1 auVar54 [16];
undefined1 auVar55 [16];
undefined1 auVar56 [16];
uVar6 = 0;
param_5[0x37] = (CGameTrace)0x0;
param_5[0x36] = (CGameTrace)0x0;
*(undefined4 *)(param_5 + 0x2c) = 0x3f800000;
uVar1 = vec3_origin;
fVar25 = (*(float *)param_4 - *(float *)param_1) + *(float *)(param_1 + 0x30);
fVar28 = (*(float *)(param_4 + 4) - *(float *)(param_1 + 4)) + *(float *)(param_1 + 0x34);
fVar29 = (*(float *)(param_4 + 8) - *(float *)(param_1 + 8)) + *(float *)(param_1 + 0x38);
fVar30 = (*(float *)(param_4 + 0xc) - *(float *)(param_1 + 0xc)) + *(float *)(param_1 + 0x3c);
fVar31 = (*(float *)param_3 - *(float *)param_1) - *(float *)(param_1 + 0x30);
fVar35 = (*(float *)(param_3 + 4) - *(float *)(param_1 + 4)) - *(float *)(param_1 + 0x34);
fVar36 = (*(float *)(param_3 + 8) - *(float *)(param_1 + 8)) - *(float *)(param_1 + 0x38);
fVar37 = (*(float *)(param_3 + 0xc) - *(float *)(param_1 + 0xc)) - *(float *)(param_1 + 0x3c);
uVar9 = -(uint)(fVar25 < *(float *)(param_1 + 0x10));
uVar13 = -(uint)(fVar28 < *(float *)(param_1 + 0x14));
uVar17 = -(uint)(fVar29 < *(float *)(param_1 + 0x18));
uVar10 = -(uint)((float)0 < fVar31);
uVar14 = -(uint)((float)0 < fVar35);
uVar18 = -(uint)((float)0 < fVar36);
uVar11 = -(uint)(fVar25 < (float)0);
uVar15 = -(uint)(fVar28 < (float)0);
uVar19 = -(uint)(fVar29 < (float)0);
uVar12 = -(uint)(*(float *)(param_1 + 0x10) < fVar31);
uVar16 = -(uint)(*(float *)(param_1 + 0x14) < fVar35);
uVar20 = -(uint)(*(float *)(param_1 + 0x18) < fVar36);
auVar39._0_4_ = uVar10 & uVar12 | uVar11 & uVar9;
auVar39._4_4_ = uVar14 & uVar16 | uVar15 & uVar13;
auVar39._8_4_ = uVar18 & uVar20 | uVar19 & uVar17;
auVar39._12_4_ = 0;
iVar7 = movmskps(unaff_EDI,auVar39);
if (iVar7 == 0) {
uVar9 = uVar12 ^ uVar10 | uVar9 ^ uVar11;
uVar12 = uVar16 ^ uVar14 | uVar13 ^ uVar15;
uVar13 = uVar20 ^ uVar18 | uVar17 ^ uVar19;
uVar16 = -(uint)(fVar30 < *(float *)(param_1 + 0x1c) != fVar30 < (float)0 ||
(float)0 < fVar37 != *(float *)(param_1 + 0x1c) < fVar37);
fVar2 = *(float *)param_2;
fVar3 = *(float *)(param_2 + 4);
fVar4 = *(float *)(param_2 + 8);
fVar5 = *(float *)(param_2 + 0xc);
auVar38._0_8_ = CONCAT44(fVar3 * fVar35,fVar2 * fVar31);
auVar38._8_4_ = fVar4 * fVar36;
auVar38._12_4_ = fVar5 * fVar37;
auVar43._0_4_ = fVar2 * fVar25;
auVar43._4_4_ = fVar3 * fVar28;
auVar43._8_4_ = fVar4 * fVar29;
auVar43._12_4_ = fVar5 * fVar30;
auVar49._8_4_ = auVar38._8_4_;
auVar49._0_8_ = auVar38._0_8_;
auVar49._12_4_ = auVar38._12_4_;
auVar50 = minps(auVar49,auVar43);
auVar39 = maxps(auVar38,auVar43);
auVar54._0_8_ = CONCAT44(~uVar12,~uVar9) & 0xff7fffffff7fffff;
auVar54._8_4_ = ~uVar13 & 0xff7fffff;
auVar54._12_4_ = ~uVar16 & 0xff7fffff;
auVar51._0_4_ = auVar50._0_4_ & uVar9;
auVar51._4_4_ = auVar50._4_4_ & uVar12;
auVar51._8_4_ = auVar50._8_4_ & uVar13;
auVar51._12_4_ = auVar50._12_4_ & uVar16;
auVar51 = auVar51 | auVar54;
auVar50._0_8_ = CONCAT44(~uVar12,~uVar9) & 0x7f7fffff7f7fffff;
auVar50._8_4_ = ~uVar13 & 0x7f7fffff;
auVar50._12_4_ = ~uVar16 & 0x7f7fffff;
auVar40._0_4_ = auVar39._0_4_ & uVar9;
auVar40._4_4_ = auVar39._4_4_ & uVar12;
auVar40._8_4_ = auVar39._8_4_ & uVar13;
auVar40._12_4_ = auVar39._12_4_ & uVar16;
auVar40 = auVar40 | auVar50;
auVar21._0_12_ = auVar40._4_12_;
auVar21._12_4_ = auVar40._0_4_;
auVar39 = minps(auVar21,auVar40);
auVar41._0_8_ = auVar40._8_8_;
auVar41._8_4_ = auVar40._0_4_;
auVar41._12_4_ = auVar40._4_4_;
auVar39 = minps(auVar39,auVar41);
auVar42._0_12_ = auVar51._4_12_;
auVar42._12_4_ = auVar51._0_4_;
auVar43 = maxps(auVar42,auVar51);
auVar52._0_8_ = auVar51._8_8_;
auVar52._8_4_ = auVar51._0_4_;
auVar52._12_4_ = auVar51._4_4_;
auVar22._0_4_ = auVar39._0_4_;
auVar22._4_4_ = auVar22._0_4_;
auVar22._8_4_ = auVar22._0_4_;
auVar22._12_4_ = auVar22._0_4_;
auVar39 = minps(auVar22,Four_Ones);
auVar43 = maxps(auVar43,auVar52);
auVar44._0_4_ = auVar43._0_4_;
auVar44._4_4_ = auVar44._0_4_;
auVar44._8_4_ = auVar44._0_4_;
auVar44._12_4_ = auVar44._0_4_;
auVar43 = maxps(auVar44,Four_Zeros);
auVar23._4_4_ = -(uint)((float)-(uint)(auVar39._4_4_ < auVar43._4_4_) == (float)0);
auVar23._0_4_ = -(uint)((float)-(uint)(auVar39._0_4_ < auVar43._0_4_) == (float)0);
auVar23._8_4_ = -(uint)((float)-(uint)(auVar39._8_4_ < auVar43._8_4_) == (float)0);
auVar23._12_4_ = -(uint)((float)-(uint)(auVar39._12_4_ < auVar43._12_4_) == (float)0);
iVar7 = movmskps(param_2,auVar23);
if (iVar7 == 0xf) {
auVar56._0_4_ = uVar11 | uVar10;
auVar56._4_4_ = uVar15 | uVar14;
auVar56._8_4_ = uVar19 | uVar18;
auVar56._12_4_ = 0;
iVar8 = movmskps(0xf,auVar56);
fVar31 = (fVar31 - 0.03125) * fVar2;
fVar35 = (fVar35 - 0.03125) * fVar3;
auVar32._0_8_ = CONCAT44(fVar35,fVar31);
auVar32._8_4_ = (fVar36 - 0.03125) * fVar4;
auVar32._12_4_ = (fVar37 - 0.03125) * fVar5;
auVar26._0_4_ = (fVar25 + 0.03125) * fVar2;
auVar26._4_4_ = (fVar28 + 0.03125) * fVar3;
auVar26._8_4_ = (fVar29 + 0.03125) * fVar4;
auVar26._12_4_ = (fVar30 + 0.03125) * fVar5;
auVar45._8_4_ = auVar32._8_4_;
auVar45._0_8_ = auVar32._0_8_;
auVar45._12_4_ = auVar32._12_4_;
uVar11 = -(uint)(fVar35 <= auVar26._4_4_);
auVar43 = minps(auVar45,auVar26);
auVar39 = maxps(auVar32,auVar26);
auVar46._0_4_ = auVar43._0_4_ & uVar9;
auVar46._4_4_ = auVar43._4_4_ & uVar12;
auVar46._8_4_ = auVar43._8_4_ & uVar13;
auVar46._12_4_ = auVar43._12_4_ & uVar16;
auVar46 = auVar46 | auVar54;
fVar25 = auVar46._0_4_;
auVar27._0_12_ = auVar46._4_12_;
auVar27._12_4_ = fVar25;
auVar33._0_4_ = auVar39._0_4_ & uVar9;
auVar33._4_4_ = auVar39._4_4_ & uVar12;
auVar33._8_4_ = auVar39._8_4_ & uVar13;
auVar33._12_4_ = auVar39._12_4_ & uVar16;
auVar33 = auVar33 | auVar50;
uVar9 = -(uint)(auVar46._4_4_ < fVar25);
auVar53._0_12_ = auVar33._4_12_;
auVar53._12_4_ = auVar33._0_4_;
auVar43 = minps(auVar53,auVar33);
auVar34._0_8_ = auVar33._8_8_;
auVar34._8_4_ = auVar33._0_4_;
auVar34._12_4_ = auVar33._4_4_;
auVar39 = maxps(auVar27,auVar46);
auVar47._0_8_ = auVar46._8_8_;
auVar47._8_4_ = fVar25;
auVar47._12_4_ = auVar46._4_4_;
auVar54 = minps(auVar43,auVar34);
auVar43 = maxps(auVar47,auVar39);
uVar10 = -(uint)(auVar46._8_4_ < auVar39._0_4_);
auVar55._0_4_ = auVar54._0_4_;
auVar55._4_4_ = auVar55._0_4_;
auVar55._8_4_ = auVar55._0_4_;
auVar55._12_4_ = auVar55._0_4_;
auVar54 = minps(auVar55,Four_Ones);
auVar48._0_4_ = auVar43._0_4_;
auVar48._4_4_ = auVar48._0_4_;
auVar48._8_4_ = auVar48._0_4_;
auVar48._12_4_ = auVar48._0_4_;
auVar39 = maxps(auVar48,Four_Zeros);
uVar9 = ~uVar10 & (-(uint)(auVar32._8_4_ <= auVar26._8_4_) & 2 |
~-(uint)(auVar32._8_4_ <= auVar26._8_4_) & 5) |
uVar10 & (~uVar9 & (uVar11 & 1 | ~uVar11 & 4) |
uVar9 & ~-(uint)(fVar31 <= auVar26._0_4_) & 3);
fVar28 = auVar54._0_4_;
fVar25 = auVar39._0_4_;
auVar24._4_4_ = -(uint)((float)-(uint)(auVar54._4_4_ < auVar39._4_4_) == (float)0);
auVar24._0_4_ = -(uint)((float)-(uint)(fVar28 < fVar25) == (float)0);
auVar24._8_4_ = -(uint)((float)-(uint)(auVar54._8_4_ < auVar39._8_4_) == (float)0);
auVar24._12_4_ = -(uint)((float)-(uint)(auVar54._12_4_ < auVar39._12_4_) == (float)0);
iVar7 = movmskps(0,auVar24);
if (iVar7 != 0xf) {
return 0;
}
if ((iVar8 == 0) || ((param_1[0x44] != (Ray_t)0x0 && (fVar25 < *(float *)(param_5 + 0x38)))))
{
param_5[0x37] = (CGameTrace)0x1;
*(undefined4 *)(param_5 + 0x30) = 1;
*(undefined4 *)(param_5 + 0x2c) = 0;
fVar25 = *(float *)(param_1 + 0x20) + *(float *)param_1;
fVar29 = *(float *)(param_1 + 0x24) + *(float *)(param_1 + 4);
fVar30 = *(float *)(param_1 + 0x28) + *(float *)(param_1 + 8);
*(float *)param_5 = fVar25;
*(float *)(param_5 + 4) = fVar29;
*(float *)(param_5 + 8) = fVar30;
*(float *)(param_5 + 0xc) = fVar25;
*(float *)(param_5 + 0x10) = fVar29;
*(float *)(param_5 + 0x14) = fVar30;
if (fVar28 < 1.0) {
if (*(float *)(param_5 + 0x38) <= fVar28 && fVar28 != *(float *)(param_5 + 0x38)) {
*(float *)(param_5 + 0x38) = fVar28;
fVar31 = *(float *)(param_1 + 0x18);
fVar35 = *(float *)(param_1 + 0x10);
*(float *)(param_5 + 4) = *(float *)(param_1 + 0x14) * fVar28 + fVar29;
*(float *)(param_5 + 8) = fVar31 * fVar28 + fVar30;
*(float *)param_5 = fVar28 * fVar35 + fVar25;
}
}
else {
param_5[0x36] = (CGameTrace)0x1;
}
}
else {
if (1.0 < fVar25) {
return 0;
}
*(float *)(param_5 + 0x2c) = fVar25;
*(undefined4 *)(param_5 + 0x18) = uVar1;
*(undefined4 *)(param_5 + 0x1c) = DAT_004024cc;
*(undefined4 *)(param_5 + 0x20) = DAT_004024d0;
if (uVar9 < 3) {
uVar1 = *(undefined4 *)
(IntersectRayWithBox(Ray_t_const&,VectorAligned_const&,VectorAligned_const&,VectorAligned_const&,CGameTrace*)
::signbits + uVar9 * 4);
*(uint *)(param_5 + 0x24) = *(uint *)(param_3 + uVar9 * 4) ^ 0x80000000;
*(undefined4 *)(param_5 + uVar9 * 4 + 0x18) = 0xbf800000;
param_5[0x29] = SUB41(uVar1,0);
}
else {
uVar9 = uVar9 - 3;
*(undefined4 *)(param_5 + 0x24) = *(undefined4 *)(param_4 + uVar9 * 4);
*(undefined4 *)(param_5 + uVar9 * 4 + 0x18) = 0x3f800000;
param_5[0x29] = (CGameTrace)0x0;
}
fVar25 = *(float *)(param_5 + 0x2c);
param_5[0x28] = SUB41(uVar9,0);
*(undefined4 *)(param_5 + 0x30) = 1;
fVar28 = *(float *)(param_1 + 0x24);
fVar29 = *(float *)(param_1 + 0x28);
fVar30 = *(float *)(param_1 + 4);
fVar31 = *(float *)(param_1 + 8);
if (fVar25 == 1.0) {
*(float *)(param_5 + 0xc) =
*(float *)(param_1 + 0x20) + *(float *)param_1 + *(float *)(param_1 + 0x10);
*(float *)(param_5 + 0x10) = fVar28 + fVar30 + *(float *)(param_1 + 0x14);
*(float *)(param_5 + 0x14) = fVar29 + fVar31 + *(float *)(param_1 + 0x18);
}
else {
*(float *)(param_5 + 0xc) =
*(float *)(param_1 + 0x10) * fVar25 + *(float *)(param_1 + 0x20) + *(float *)param_1;
*(float *)(param_5 + 0x10) = *(float *)(param_1 + 0x14) * fVar25 + fVar28 + fVar30;
*(float *)(param_5 + 0x14) = fVar25 * *(float *)(param_1 + 0x18) + fVar29 + fVar31;
}
}
uVar6 = 1;
}
}
return uVar6;
}
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.