L L4D2node

CDispCollTree::AABBTree_BuildTreeTrisInSphere_r

0x000cc480 · 957 bytes · __thiscall

_ZN13CDispCollTree32AABBTree_BuildTreeTrisInSphere_rERK6VectorfiPtt

Decompiled

undefined (6 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CDispCollTree::AABBTree_BuildTreeTrisInSphere_r(Vector const&, float, int, unsigned short*,
   unsigned short) */

int __thiscall
CDispCollTree::AABBTree_BuildTreeTrisInSphere_r
          (CDispCollTree *this,Vector *param_1,float param_2,int param_3,ushort *param_4,
          ushort param_5)

{
  int iVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  char cVar5;
  float *pfVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  float fVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined4 local_594;
  undefined4 local_590;
  undefined4 local_588;
  undefined4 local_584;
  int local_580;
  int local_57c [347];
  
  iVar10 = 0;
  fVar12 = param_2 * param_2;
  fVar2 = *(float *)param_1;
  fVar3 = *(float *)(param_1 + 4);
  fVar4 = *(float *)(param_1 + 8);
  local_57c[0] = param_3;
  iVar11 = *(int *)(this + 0x98);
  iVar9 = 0;
  while( true ) {
    iVar1 = iVar9 + 1;
    if (iVar11 <= param_3) {
      local_594 = 0;
      local_590 = 0;
      if (_exit == 0) {
        local_580 = 0;
      }
      else {
        (**(code **)(_exit + 0x50))
                  (_exit,&local_594,0,0,0,0,"/data/src/engine/../public/dispcoll_common.cpp",0x2e6,
                   &AABBTree_BuildTreeTrisInSphere_r(Vector_const&,float,int,unsigned_short*,unsigned_short)
                    ::tm_fmt,"(%s)%s","Unaccounted","Tris");
        local_580 = _exit;
      }
      iVar11 = _DAT_0040b9d4;
      local_588 = local_594;
      local_584 = local_590;
                    /* try { // try from 000cc7eb to 000cc83d has its CatchHandler @ 000cc862 */
      if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
         (iVar8 = ThreadGetCurrentId(), iVar11 == iVar8)) {
        if ((char *)*_DAT_0040b030 != "Tris") {
          _DAT_0040b030 =
               (int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2a2913,&DAT_00000001,0x2a054b);
        }
        CVProfNode::EnterScope();
        DAT_0040b02c = '\0';
      }
      if (iVar10 < iVar9) {
        iVar11 = 0;
      }
      else {
        iVar11 = 0;
        while( true ) {
          iVar8 = iVar1;
          if (iVar11 + 1 < (int)(uint)param_5) {
            iVar9 = local_57c[iVar9];
            iVar1 = *(int *)(this + 0x98);
            param_4[iVar11] = *(ushort *)(*(int *)(this + 0xa0) + (iVar9 - iVar1) * 4);
            param_4[iVar11 + 1] = *(ushort *)(*(int *)(this + 0xa0) + 2 + (iVar9 - iVar1) * 4);
            iVar11 = iVar11 + 2;
          }
          if (iVar8 == iVar10 + 1) break;
          iVar1 = iVar8 + 1;
          iVar9 = iVar8;
        }
      }
      iVar9 = _DAT_0040b9d4;
      if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
         (iVar10 = ThreadGetCurrentId(), iVar9 == iVar10)) {
        cVar5 = CVProfNode::ExitScope();
        if (cVar5 != '\0') {
          _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
        }
        DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
      }
      if (local_580 == 0) {
                    /* WARNING: Read-only address (ram,0x002cf7b0) is written */
        return iVar11;
      }
      (**(code **)(local_580 + 0x54))(local_580,local_588,local_584,0,0,0);
      return iVar11;
    }
    pfVar6 = (float *)(param_3 * 0x60 + *(int *)(this + 0x90));
    auVar17._0_4_ = *pfVar6 - fVar2;
    auVar17._4_4_ = pfVar6[1] - fVar2;
    auVar17._8_4_ = pfVar6[2] - fVar2;
    auVar17._12_4_ = pfVar6[3] - fVar2;
    auVar15._0_4_ = pfVar6[4] - fVar3;
    auVar15._4_4_ = pfVar6[5] - fVar3;
    auVar15._8_4_ = pfVar6[6] - fVar3;
    auVar15._12_4_ = pfVar6[7] - fVar3;
    auVar13._0_4_ = pfVar6[8] - fVar4;
    auVar13._4_4_ = pfVar6[9] - fVar4;
    auVar13._8_4_ = pfVar6[10] - fVar4;
    auVar13._12_4_ = pfVar6[0xb] - fVar4;
    auVar18 = maxps(auVar17,Four_Zeros);
    auVar16 = maxps(auVar15,Four_Zeros);
    auVar13 = maxps(auVar13,Four_Zeros);
    auVar19._4_4_ = fVar2 - pfVar6[0xd];
    auVar19._0_4_ = fVar2 - pfVar6[0xc];
    auVar19._8_4_ = fVar2 - pfVar6[0xe];
    auVar19._12_4_ = fVar2 - pfVar6[0xf];
    auVar19 = maxps(auVar18,auVar19);
    auVar18._4_4_ = fVar3 - pfVar6[0x11];
    auVar18._0_4_ = fVar3 - pfVar6[0x10];
    auVar18._8_4_ = fVar3 - pfVar6[0x12];
    auVar18._12_4_ = fVar3 - pfVar6[0x13];
    auVar18 = maxps(auVar16,auVar18);
    auVar16._4_4_ = fVar4 - pfVar6[0x15];
    auVar16._0_4_ = fVar4 - pfVar6[0x14];
    auVar16._8_4_ = fVar4 - pfVar6[0x16];
    auVar16._12_4_ = fVar4 - pfVar6[0x17];
    auVar16 = maxps(auVar13,auVar16);
    auVar14._4_4_ =
         -(uint)(auVar16._4_4_ * auVar16._4_4_ +
                 auVar18._4_4_ * auVar18._4_4_ + auVar19._4_4_ * auVar19._4_4_ <= fVar12);
    auVar14._0_4_ =
         -(uint)(auVar16._0_4_ * auVar16._0_4_ +
                 auVar18._0_4_ * auVar18._0_4_ + auVar19._0_4_ * auVar19._0_4_ <= fVar12);
    auVar14._8_4_ =
         -(uint)(auVar16._8_4_ * auVar16._8_4_ +
                 auVar18._8_4_ * auVar18._8_4_ + auVar19._8_4_ * auVar19._8_4_ <= fVar12);
    auVar14._12_4_ =
         -(uint)(auVar16._12_4_ * auVar16._12_4_ +
                 auVar18._12_4_ * auVar18._12_4_ + auVar19._12_4_ * auVar19._12_4_ <= fVar12);
    uVar7 = movmskps(pfVar6,auVar14);
    if (uVar7 != 0) {
      iVar9 = param_3 * 4;
      if ((uVar7 & 1) != 0) {
        iVar10 = iVar10 + 1;
        local_57c[iVar10] = iVar9 + 1;
      }
      if ((uVar7 & 2) != 0) {
        iVar10 = iVar10 + 1;
        local_57c[iVar10] = iVar9 + 2;
      }
      if ((uVar7 & 4) != 0) {
        iVar10 = iVar10 + 1;
        local_57c[iVar10] = iVar9 + 3;
      }
      if ((uVar7 & 8) != 0) {
        iVar10 = iVar10 + 1;
        local_57c[iVar10] = iVar9 + 4;
      }
    }
    if (iVar10 < iVar1) break;
    param_3 = local_57c[iVar1];
    iVar9 = iVar1;
  }
  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)