IntersectRayWithBoxBrush
0x0011a300 · 928 bytes · __regparm2
_Z24IntersectRayWithBoxBrushP11TraceInfo_tPK8cbrush_tP11cboxbrush_t
Decompiled
undefined (3 params)
/* IntersectRayWithBoxBrush(TraceInfo_t*, cbrush_t const*, cboxbrush_t*) */
undefined4 __regparm2
IntersectRayWithBoxBrush(TraceInfo_t *param_1,cbrush_t *param_2,cboxbrush_t *param_3)
{
ushort uVar1;
undefined *puVar2;
undefined4 uVar3;
undefined1 auVar4 [16];
undefined1 auVar5 [16];
undefined1 auVar6 [16];
int iVar7;
undefined **ppuVar8;
int iVar9;
uint uVar10;
uint uVar11;
uint uVar12;
uint uVar13;
uint uVar14;
uint uVar15;
uint uVar16;
uint uVar17;
uint uVar18;
uint uVar19;
uint uVar20;
uint uVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar35;
float fVar36;
float fVar37;
undefined1 auVar31 [16];
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];
undefined1 auVar57 [16];
undefined1 auVar58 [16];
undefined1 auVar59 [16];
undefined4 *in_stack_00000008;
float *in_stack_0000000c;
uVar3 = vec3_origin;
fVar22 = (in_stack_0000000c[4] - *(float *)param_3) + *(float *)(param_3 + 0x30);
fVar24 = (in_stack_0000000c[5] - *(float *)(param_3 + 4)) + *(float *)(param_3 + 0x34);
fVar26 = (in_stack_0000000c[6] - *(float *)(param_3 + 8)) + *(float *)(param_3 + 0x38);
fVar28 = (in_stack_0000000c[7] - *(float *)(param_3 + 0xc)) + *(float *)(param_3 + 0x3c);
fVar30 = (*in_stack_0000000c - *(float *)param_3) - *(float *)(param_3 + 0x30);
fVar35 = (in_stack_0000000c[1] - *(float *)(param_3 + 4)) - *(float *)(param_3 + 0x34);
fVar36 = (in_stack_0000000c[2] - *(float *)(param_3 + 8)) - *(float *)(param_3 + 0x38);
fVar37 = (in_stack_0000000c[3] - *(float *)(param_3 + 0xc)) - *(float *)(param_3 + 0x3c);
uVar10 = -(uint)(fVar22 < *(float *)(param_3 + 0x3c));
uVar14 = -(uint)(fVar24 < *(float *)(param_3 + 0x40));
uVar18 = -(uint)(fVar26 < *(float *)(param_3 + 0x44));
uVar11 = -(uint)((float)0 < fVar30);
uVar15 = -(uint)((float)0 < fVar35);
uVar19 = -(uint)((float)0 < fVar36);
uVar12 = -(uint)(fVar22 < (float)0);
uVar16 = -(uint)(fVar24 < (float)0);
uVar20 = -(uint)(fVar26 < (float)0);
uVar13 = -(uint)(*(float *)(param_3 + 0x3c) < fVar30);
uVar17 = -(uint)(*(float *)(param_3 + 0x40) < fVar35);
uVar21 = -(uint)(*(float *)(param_3 + 0x44) < fVar36);
auVar42._0_4_ = uVar11 & uVar13 | uVar12 & uVar10;
auVar42._4_4_ = uVar15 & uVar17 | uVar16 & uVar14;
auVar42._8_4_ = uVar19 & uVar21 | uVar20 & uVar18;
auVar42._12_4_ = 0;
iVar7 = movmskps(param_1,auVar42);
if (iVar7 == 0) {
fVar23 = *(float *)(param_3 + 0x48);
fVar25 = *(float *)(param_3 + 0x4c);
fVar27 = *(float *)(param_3 + 0x50);
fVar29 = *(float *)(param_3 + 0x54);
uVar10 = uVar13 ^ uVar11 | uVar10 ^ uVar12;
uVar13 = uVar17 ^ uVar15 | uVar14 ^ uVar16;
uVar14 = uVar21 ^ uVar19 | uVar18 ^ uVar20;
uVar17 = -(uint)(fVar28 < *(float *)(param_3 + 0x48) != fVar28 < (float)0 ||
(float)0 < fVar37 != *(float *)(param_3 + 0x48) < fVar37);
auVar41._0_8_ = CONCAT44(fVar25 * fVar35,fVar23 * fVar30);
auVar41._8_4_ = fVar27 * fVar36;
auVar41._12_4_ = fVar29 * fVar37;
auVar46._0_4_ = fVar23 * fVar22;
auVar46._4_4_ = fVar25 * fVar24;
auVar46._8_4_ = fVar27 * fVar26;
auVar46._12_4_ = fVar29 * fVar28;
auVar52._8_4_ = auVar41._8_4_;
auVar52._0_8_ = auVar41._0_8_;
auVar52._12_4_ = auVar41._12_4_;
auVar53 = minps(auVar52,auVar46);
auVar42 = maxps(auVar41,auVar46);
auVar58._0_8_ = CONCAT44(~uVar13,~uVar10) & 0xff7fffffff7fffff;
auVar58._8_4_ = ~uVar14 & 0xff7fffff;
auVar58._12_4_ = ~uVar17 & 0xff7fffff;
auVar54._0_4_ = auVar53._0_4_ & uVar10;
auVar54._4_4_ = auVar53._4_4_ & uVar13;
auVar54._8_4_ = auVar53._8_4_ & uVar14;
auVar54._12_4_ = auVar53._12_4_ & uVar17;
auVar54 = auVar54 | auVar58;
auVar53._0_8_ = CONCAT44(~uVar13,~uVar10) & 0x7f7fffff7f7fffff;
auVar53._8_4_ = ~uVar14 & 0x7f7fffff;
auVar53._12_4_ = ~uVar17 & 0x7f7fffff;
auVar43._0_4_ = auVar42._0_4_ & uVar10;
auVar43._4_4_ = auVar42._4_4_ & uVar13;
auVar43._8_4_ = auVar42._8_4_ & uVar14;
auVar43._12_4_ = auVar42._12_4_ & uVar17;
auVar43 = auVar43 | auVar53;
auVar38._0_12_ = auVar43._4_12_;
auVar38._12_4_ = auVar43._0_4_;
auVar42 = minps(auVar38,auVar43);
auVar44._0_8_ = auVar43._8_8_;
auVar44._8_4_ = auVar43._0_4_;
auVar44._12_4_ = auVar43._4_4_;
auVar42 = minps(auVar42,auVar44);
auVar45._0_12_ = auVar54._4_12_;
auVar45._12_4_ = auVar54._0_4_;
auVar46 = maxps(auVar45,auVar54);
auVar55._0_8_ = auVar54._8_8_;
auVar55._8_4_ = auVar54._0_4_;
auVar55._12_4_ = auVar54._4_4_;
auVar39._0_4_ = auVar42._0_4_;
auVar39._4_4_ = auVar39._0_4_;
auVar39._8_4_ = auVar39._0_4_;
auVar39._12_4_ = auVar39._0_4_;
auVar42 = minps(auVar39,Four_Ones);
auVar46 = maxps(auVar46,auVar55);
auVar47._0_4_ = auVar46._0_4_;
auVar47._4_4_ = auVar47._0_4_;
auVar47._8_4_ = auVar47._0_4_;
auVar47._12_4_ = auVar47._0_4_;
auVar46 = maxps(auVar47,Four_Zeros);
auVar40._4_4_ = -(uint)((float)-(uint)(auVar42._4_4_ < auVar46._4_4_) == (float)0);
auVar40._0_4_ = -(uint)((float)-(uint)(auVar42._0_4_ < auVar46._0_4_) == (float)0);
auVar40._8_4_ = -(uint)((float)-(uint)(auVar42._8_4_ < auVar46._8_4_) == (float)0);
auVar40._12_4_ = -(uint)((float)-(uint)(auVar42._12_4_ < auVar46._12_4_) == (float)0);
iVar7 = movmskps(0,auVar40);
if (iVar7 == 0xf) {
auVar59._0_4_ = uVar12 | uVar11;
auVar59._4_4_ = uVar16 | uVar15;
auVar59._8_4_ = uVar20 | uVar19;
auVar59._12_4_ = 0;
iVar9 = movmskps(param_2,auVar59);
fVar30 = (fVar30 - 0.03125) * fVar23;
fVar35 = (fVar35 - 0.03125) * fVar25;
auVar31._0_8_ = CONCAT44(fVar35,fVar30);
auVar31._8_4_ = (fVar36 - 0.03125) * fVar27;
auVar31._12_4_ = (fVar37 - 0.03125) * fVar29;
fVar23 = (fVar22 + 0.03125) * fVar23;
fVar25 = (fVar24 + 0.03125) * fVar25;
fVar27 = (fVar26 + 0.03125) * fVar27;
fVar29 = (fVar28 + 0.03125) * fVar29;
auVar48._8_4_ = auVar31._8_4_;
auVar48._0_8_ = auVar31._0_8_;
auVar48._12_4_ = auVar31._12_4_;
auVar4._4_4_ = fVar25;
auVar4._0_4_ = fVar23;
auVar4._8_4_ = fVar27;
auVar4._12_4_ = fVar29;
auVar46 = minps(auVar48,auVar4);
auVar5._4_4_ = fVar25;
auVar5._0_4_ = fVar23;
auVar5._8_4_ = fVar27;
auVar5._12_4_ = fVar29;
auVar42 = maxps(auVar31,auVar5);
uVar12 = -(uint)(fVar35 <= fVar25);
auVar49._0_4_ = auVar46._0_4_ & uVar10;
auVar49._4_4_ = auVar46._4_4_ & uVar13;
auVar49._8_4_ = auVar46._8_4_ & uVar14;
auVar49._12_4_ = auVar46._12_4_ & uVar17;
auVar49 = auVar49 | auVar58;
auVar32._0_4_ = auVar42._0_4_ & uVar10;
auVar32._4_4_ = auVar42._4_4_ & uVar13;
auVar32._8_4_ = auVar42._8_4_ & uVar14;
auVar32._12_4_ = auVar42._12_4_ & uVar17;
auVar32 = auVar32 | auVar53;
auVar56._0_12_ = auVar32._4_12_;
auVar56._12_4_ = auVar32._0_4_;
auVar42 = minps(auVar56,auVar32);
auVar33._0_8_ = auVar32._8_8_;
auVar33._8_4_ = auVar32._0_4_;
auVar33._12_4_ = auVar32._4_4_;
auVar46 = minps(auVar42,auVar33);
fVar22 = auVar49._0_4_;
auVar34._0_12_ = auVar49._4_12_;
auVar34._12_4_ = fVar22;
auVar42 = maxps(auVar34,auVar49);
uVar10 = -(uint)(auVar49._4_4_ < fVar22);
auVar50._0_8_ = auVar49._8_8_;
auVar50._8_4_ = fVar22;
auVar50._12_4_ = auVar49._4_4_;
auVar57._0_4_ = auVar46._0_4_;
auVar57._4_4_ = auVar57._0_4_;
auVar57._8_4_ = auVar57._0_4_;
auVar57._12_4_ = auVar57._0_4_;
auVar58 = minps(auVar57,Four_Ones);
auVar46 = maxps(auVar50,auVar42);
uVar11 = -(uint)(auVar49._8_4_ < auVar42._0_4_);
auVar51._0_4_ = auVar46._0_4_;
auVar51._4_4_ = auVar51._0_4_;
auVar51._8_4_ = auVar51._0_4_;
auVar51._12_4_ = auVar51._0_4_;
auVar42 = maxps(auVar51,Four_Zeros);
uVar10 = ~uVar11 & (-(uint)(auVar31._8_4_ <= fVar27) & 2 |
~-(uint)(auVar31._8_4_ <= fVar27) & 5) |
uVar11 & (~uVar10 & (uVar12 & 1 | ~uVar12 & 4) |
uVar10 & ~-(uint)(fVar30 <= fVar23) & 3);
fVar24 = auVar58._0_4_;
fVar22 = auVar42._0_4_;
auVar6._4_4_ = -(uint)((float)-(uint)(auVar58._4_4_ < auVar42._4_4_) == (float)0);
auVar6._0_4_ = -(uint)((float)-(uint)(fVar24 < fVar22) == (float)0);
auVar6._8_4_ = -(uint)((float)-(uint)(auVar58._8_4_ < auVar42._8_4_) == (float)0);
auVar6._12_4_ = -(uint)((float)-(uint)(auVar58._12_4_ < auVar42._12_4_) == (float)0);
iVar7 = movmskps(0xf,auVar6);
if (iVar7 == 0xf) {
if ((iVar9 == 0) ||
((param_3[0x100] != (cboxbrush_t)0x0 && (fVar22 < *(float *)(param_3 + 0x8c))))) {
param_3[0x8b] = (cboxbrush_t)0x1;
*(undefined4 *)(param_3 + 0x84) = *in_stack_00000008;
if (fVar24 < 1.0) {
if ((*(float *)(param_3 + 0x8c) <= fVar24 && fVar24 != *(float *)(param_3 + 0x8c)) &&
(*(float *)(param_3 + 0x8c) = fVar24, puVar2 = CCollisionBSPData::nullsurface,
*(float *)(param_3 + 0x80) <= fVar24)) {
*(undefined4 *)(param_3 + 0x80) = 0x3f800000;
uVar3 = DAT_00340c94;
*(undefined **)(param_3 + 0x90) = puVar2;
*(undefined4 *)(param_3 + 0x94) = uVar3;
}
}
else {
param_3[0x8a] = (cboxbrush_t)0x1;
*(undefined4 *)(param_3 + 0x80) = 0;
}
}
else if (fVar22 < *(float *)(param_3 + 0x80)) {
*(float *)(param_3 + 0x80) = fVar22;
ppuVar8 = &CCollisionBSPData::nullsurface;
*(undefined4 *)(param_3 + 0x114) = 0;
iVar7 = *(int *)(param_3 + 0x104);
*(undefined4 *)(param_3 + 0x6c) = uVar3;
*(undefined4 *)(param_3 + 0x70) = DAT_004024cc;
*(undefined4 *)(param_3 + 0x74) = DAT_004024d0;
uVar1 = *(ushort *)((int)in_stack_0000000c + uVar10 * 2 + 0x20);
if (uVar1 != 0xffff) {
if (*(int *)(iVar7 + 0x250) <= (int)(uint)uVar1) {
Error("Cannot load corrupted map.\n");
}
ppuVar8 = (undefined **)(*(int *)(iVar7 + 0x24c) + (uint)uVar1 * 8);
}
puVar2 = *ppuVar8;
*(undefined **)(param_3 + 0x94) = ppuVar8[1];
*(undefined **)(param_3 + 0x90) = puVar2;
if (uVar10 < 3) {
uVar3 = *(undefined4 *)
(IntersectRayWithBoxBrush(TraceInfo_t*,cbrush_t_const*,cboxbrush_t*)::signbits
+ uVar10 * 4);
*(float *)(param_3 + 0x78) = -in_stack_0000000c[uVar10];
*(undefined4 *)(param_3 + uVar10 * 4 + 0x6c) = 0xbf800000;
param_3[0x7d] = SUB41(uVar3,0);
}
else {
*(float *)(param_3 + 0x78) = in_stack_0000000c[uVar10 + 1];
*(undefined4 *)(param_3 + (uVar10 - 3) * 4 + 0x6c) = 0x3f800000;
param_3[0x7d] = (cboxbrush_t)0x0;
uVar10 = uVar10 - 3;
}
param_3[0x7c] = SUB41(uVar10,0);
*(undefined4 *)(param_3 + 0x84) = *in_stack_00000008;
return 1;
}
}
}
}
/* WARNING: Read-only address (ram,0x002cf7a0) is written */
/* WARNING: Read-only address (ram,0x002cf7b0) is written */
return 0;
}
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.