L L4D2node

CStaticPropMgr::GetAllStaticPropsInOBB

0x001e73a0 · 1878 bytes · __thiscall

_ZN14CStaticPropMgr22GetAllStaticPropsInOBBERK6VectorS2_S2_S2_P10CUtlVectorIP12ICollideable10CUtlMemoryIS5_iEE

Decompiled

undefined (6 params)

/* CStaticPropMgr::GetAllStaticPropsInOBB(Vector const&, Vector const&, Vector const&, Vector
   const&, CUtlVector<ICollideable*, CUtlMemory<ICollideable*, int> >*) */

void __thiscall
CStaticPropMgr::GetAllStaticPropsInOBB
          (CStaticPropMgr *this,Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,
          CUtlVector *param_5)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  undefined4 uVar5;
  ICollideable *pIVar6;
  undefined4 uVar7;
  ICollideable *pIVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  int iVar11;
  float *pfVar12;
  undefined4 *puVar13;
  Vector *pVVar14;
  QAngle *pQVar15;
  float *pfVar16;
  uint uVar17;
  float *pfVar18;
  matrix3x4_t *pmVar19;
  int *piVar20;
  int iVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float local_190;
  float local_18c;
  float local_188;
  float local_184;
  float local_180;
  float local_17c;
  ICollideable *local_178;
  undefined4 local_174;
  undefined4 local_170;
  float local_16c [6];
  matrix3x4_t local_154 [48];
  float local_124;
  float local_120;
  float local_11c;
  float local_118;
  float local_114;
  float local_110;
  float local_10c;
  float local_108;
  float local_104;
  float local_100;
  float local_fc;
  float local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_e4;
  float local_e0;
  float local_dc;
  float local_d8;
  float local_d4;
  float local_d0 [21];
  float local_7c [24];
  float local_1c [3];
  
  if (param_5 != (CUtlVector *)0x0) {
    uVar17 = 0;
    fVar1 = *(float *)(param_1 + 4);
    fVar2 = *(float *)(param_1 + 8);
    fVar3 = *(float *)param_1;
    local_d8 = fVar1;
    local_11c = *(float *)(param_2 + 8);
    local_124 = *(float *)param_2;
    local_d4 = fVar2;
    local_120 = *(float *)(param_2 + 4);
    local_dc = fVar3;
    pfVar18 = local_d0;
    pfVar16 = &local_dc;
    fVar22 = fVar1;
    fVar23 = fVar3;
    fVar24 = fVar2;
    fVar25 = fVar1;
    fVar26 = fVar2;
    fVar27 = fVar3;
    while( true ) {
      pfVar12 = pfVar18;
      if ((uVar17 & 2) != 0) {
        *pfVar16 = *pfVar16 + *(float *)param_3;
        pfVar16[1] = pfVar16[1] + *(float *)(param_3 + 4);
        pfVar16[2] = pfVar16[2] + *(float *)(param_3 + 8);
      }
      if ((uVar17 & 4) != 0) {
        *pfVar16 = *pfVar16 + *(float *)param_4;
        pfVar16[1] = pfVar16[1] + *(float *)(param_4 + 4);
        pfVar16[2] = pfVar16[2] + *(float *)(param_4 + 8);
      }
      fVar4 = pfVar12[-3];
      uVar17 = uVar17 + 1;
      if (fVar4 <= fVar23) {
        fVar23 = fVar4;
      }
      if (fVar27 <= fVar4) {
        fVar27 = fVar4;
      }
      fVar4 = pfVar12[-2];
      if (fVar4 <= fVar22) {
        fVar22 = fVar4;
      }
      if (fVar25 <= fVar4) {
        fVar25 = fVar4;
      }
      fVar4 = pfVar12[-1];
      if (fVar4 <= fVar26) {
        fVar26 = fVar4;
      }
      if (fVar24 <= fVar4) {
        fVar24 = fVar4;
      }
      if (uVar17 == 8) break;
      *pfVar12 = fVar3;
      pfVar12[1] = fVar1;
      pfVar12[2] = fVar2;
      if ((uVar17 & 1) != 0) {
        *pfVar12 = local_124 + fVar3;
        pfVar12[1] = local_120 + fVar1;
        pfVar12[2] = local_11c + fVar2;
      }
      pfVar18 = pfVar12 + 3;
      pfVar16 = pfVar12;
    }
    VectorNormalize((Vector *)&local_124);
    local_16c[0] = (*(float *)(param_2 + 4) + *(float *)(param_1 + 4)) * local_120 +
                   (*(float *)param_2 + *(float *)param_1) * local_124 +
                   (*(float *)(param_2 + 8) + *(float *)(param_1 + 8)) * local_11c;
    local_114 = -local_120;
    local_118 = -local_124;
    local_110 = -local_11c;
    local_10c = *(float *)param_3;
    local_108 = *(float *)(param_3 + 4);
    local_104 = *(float *)(param_3 + 8);
    local_16c[1] = local_114 * *(float *)(param_1 + 4) + local_118 * *(float *)param_1 +
                   local_110 * *(float *)(param_1 + 8);
    VectorNormalize((Vector *)&local_10c);
    local_fc = -local_108;
    local_100 = -local_10c;
    local_f8 = -local_104;
    local_16c[2] = (*(float *)(param_3 + 4) + *(float *)(param_1 + 4)) * local_108 +
                   (*(float *)param_3 + *(float *)param_1) * local_10c +
                   (*(float *)(param_1 + 8) + *(float *)(param_3 + 8)) * local_104;
    local_16c[3] = local_fc * *(float *)(param_1 + 4) + local_100 * *(float *)param_1 +
                   local_f8 * *(float *)(param_1 + 8);
    local_f4 = *(float *)param_4;
    local_f0 = *(float *)(param_4 + 4);
    local_ec = *(float *)(param_4 + 8);
    VectorNormalize((Vector *)&local_f4);
    local_e4 = -local_f0;
    iVar11 = *(int *)(this + 0x2c);
    local_e0 = -local_ec;
    local_16c[4] = (*(float *)(param_4 + 4) + *(float *)(param_1 + 4)) * local_f0 +
                   (*(float *)param_4 + *(float *)param_1) * local_f4 +
                   (*(float *)(param_4 + 8) + *(float *)(param_1 + 8)) * local_ec;
    local_e8 = -local_f4;
    local_16c[5] = *(float *)(param_1 + 4) * local_e4 + local_e8 * *(float *)param_1 +
                   local_e0 * *(float *)(param_1 + 8);
    if (iVar11 != 0) {
      iVar21 = 0;
LAB_001e7868:
      do {
        piVar20 = (int *)(iVar21 * 0xd8 + *(int *)(this + 0x20));
        (**(code **)(*piVar20 + 0x6c))(piVar20,&local_190,&local_184);
        if ((((fVar23 <= local_184) && (fVar22 <= local_180)) && (fVar26 <= local_17c)) &&
           (((local_190 <= fVar27 && (local_18c <= fVar25)) && (local_188 <= fVar24)))) {
          puVar13 = (undefined4 *)(**(code **)(*piVar20 + 0x34))(piVar20);
          uVar5 = puVar13[1];
          pIVar6 = (ICollideable *)*puVar13;
          uVar7 = puVar13[2];
          puVar13 = (undefined4 *)(**(code **)(*piVar20 + 0x38))(piVar20);
          pIVar8 = (ICollideable *)*puVar13;
          uVar9 = puVar13[1];
          uVar10 = puVar13[2];
          pVVar14 = (Vector *)(**(code **)(*piVar20 + 0x4c))(piVar20);
          pQVar15 = (QAngle *)(**(code **)(*piVar20 + 0x50))(piVar20);
          AngleMatrix(pQVar15,pVVar14,local_154);
          pfVar18 = local_7c;
          uVar17 = 0;
          local_178 = pIVar6;
          while( true ) {
            local_174 = uVar5;
            if ((uVar17 & 2) != 0) {
              local_174 = uVar9;
            }
            local_170 = uVar7;
            if ((uVar17 & 4) != 0) {
              local_170 = uVar10;
            }
            uVar17 = uVar17 + 1;
            VectorTransform((float *)&local_178,local_154,pfVar18);
            if (uVar17 == 8) break;
            local_178 = pIVar6;
            if ((uVar17 & 1) != 0) {
              local_178 = pIVar8;
            }
            pfVar18 = pfVar18 + 3;
          }
          pmVar19 = (matrix3x4_t *)local_16c;
          pfVar18 = &local_124;
          do {
            pfVar16 = local_7c;
            while (0.0 <= ((*pfVar16 * *pfVar18 + pfVar16[1] * pfVar18[1]) - *(float *)pmVar19) +
                          pfVar16[2] * pfVar18[2]) {
              pfVar16 = pfVar16 + 3;
              if (pfVar16 == local_1c) {
                iVar21 = iVar21 + 1;
                if (iVar11 == iVar21) {
                  return;
                }
                goto LAB_001e7868;
              }
            }
            pfVar18 = pfVar18 + 3;
            pmVar19 = pmVar19 + 4;
          } while (pmVar19 != local_154);
          local_178 = (ICollideable *)(piVar20 + 2);
          CUtlVector<ICollideable*,CUtlMemory<ICollideable*,int>>::InsertBefore
                    ((CUtlVector<ICollideable*,CUtlMemory<ICollideable*,int>> *)param_5,
                     *(int *)(param_5 + 0xc),&local_178);
        }
        iVar21 = iVar21 + 1;
      } while (iVar11 != iVar21);
    }
  }
  return;
}

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)