L L4D2node

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 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)