L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)