L L4D2node

CVoxelHash::RenderObjectsInPlayerLeafs

0x001df1b0 · 1285 bytes · __cdecl

_ZN10CVoxelHash26RenderObjectsInPlayerLeafsERK6VectorS2_f

Decompiled

undefined (3 params)

/* CVoxelHash::RenderObjectsInPlayerLeafs(Vector const&, Vector const&, float) */

void CVoxelHash::RenderObjectsInPlayerLeafs(Vector *param_1,Vector *param_2,float param_3)

{
  undefined4 *puVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  uint uVar11;
  ushort uVar12;
  int iVar13;
  undefined4 uVar14;
  int iVar15;
  int iVar16;
  undefined4 uVar17;
  char cVar18;
  int *piVar19;
  undefined4 *puVar20;
  uint uVar21;
  uint uVar22;
  uint uVar23;
  undefined4 *puVar24;
  byte bVar25;
  uint uVar26;
  int iVar27;
  uint *puVar28;
  uint uVar29;
  uint uVar30;
  undefined4 *local_74;
  CUtlHashFast<int,CUtlHashFastNoHash> local_68 [72];
  undefined4 local_20;
  
  fVar2 = *(float *)param_2;
  fVar3 = *(float *)param_1;
  bVar25 = (char)*(undefined4 *)(param_1 + 0x104c) * '\x02' + 8;
  fVar4 = *(float *)(param_2 + 4);
  fVar5 = *(float *)(param_1 + 4);
  fVar6 = *(float *)(param_2 + 8);
  fVar7 = *(float *)(param_1 + 8);
  fVar8 = *(float *)param_3;
  fVar9 = *(float *)((int)param_3 + 4);
  fVar10 = *(float *)((int)param_3 + 8);
  iVar13 = *(int *)(param_1 + 0x1048);
  piVar19 = (int *)___tls_get_addr();
  iVar27 = *(int *)(iVar13 + 0xdc);
  uVar14 = *(undefined4 *)(iVar13 + 0x3c + *piVar19 * 4);
  puVar20 = *(undefined4 **)(iVar13 + 0xd8);
  if (puVar20 != (undefined4 *)0x0) {
    do {
      cVar18 = ThreadInterlockedAssignIf64(iVar13 + 0xd8,*puVar20,iVar27 + -1,puVar20,iVar27);
      if (cVar18 != '\0') {
        uVar12 = *(ushort *)(iVar13 + 0xd4);
        local_74 = puVar20 + 2;
        puVar24 = (undefined4 *)puVar20[4];
        if (uVar12 <= *(ushort *)(puVar20 + 2)) {
          if (puVar24 != (undefined4 *)0x0) {
            memset(puVar24,0,(uint)*(ushort *)((int)puVar20 + 10) << 2);
          }
          goto LAB_001df38c;
        }
        uVar21 = (int)(uVar12 + 0x1f) >> 5;
        if (uVar21 == *(ushort *)((int)puVar20 + 10)) goto LAB_001df61e;
        if (puVar24 == (undefined4 *)0x0) goto LAB_001df603;
        puVar1 = puVar20 + 3;
        if (puVar24 == puVar1) {
          if (uVar21 != 1) {
            puVar24 = malloc(uVar21 * 4);
            puVar20[4] = puVar24;
            *puVar24 = puVar20[3];
            puVar24 = (undefined4 *)puVar20[4];
          }
        }
        else if (uVar21 == 1) {
          puVar20[3] = *puVar24;
          free(puVar24);
          puVar20[4] = puVar1;
          puVar24 = puVar1;
        }
        else {
          puVar24 = realloc(puVar24,uVar21 * 4);
          puVar20[4] = puVar24;
        }
        goto LAB_001df61a;
      }
      puVar20 = *(undefined4 **)(iVar13 + 0xd8);
      iVar27 = *(int *)(iVar13 + 0xdc);
    } while (puVar20 != (undefined4 *)0x0);
  }
  puVar20 = operator_new(0x18);
  puVar20[2] = 0;
  local_74 = puVar20 + 2;
  puVar20[3] = 0;
  puVar20[4] = 0;
  uVar12 = *(ushort *)(iVar13 + 0xd4);
  if (*(ushort *)(puVar20 + 2) < uVar12) {
    uVar21 = (int)(uVar12 + 0x1f) >> 5;
    if (uVar21 != *(ushort *)((int)puVar20 + 10)) {
LAB_001df603:
      if (uVar21 == 1) {
        puVar24 = puVar20 + 3;
        puVar20[4] = puVar24;
      }
      else {
        puVar24 = malloc(uVar21 * 4);
        puVar20[4] = puVar24;
      }
LAB_001df61a:
      *(short *)((int)puVar20 + 10) = (short)uVar21;
LAB_001df61e:
      if (puVar24 != (undefined4 *)0x0) {
        memset(puVar24,0,uVar21 << 2);
      }
    }
    *(ushort *)(puVar20 + 2) = uVar12;
  }
LAB_001df38c:
  piVar19 = (int *)___tls_get_addr();
  *(undefined4 **)(iVar13 + 0x3c + *piVar19 * 4) = local_74;
  iVar13 = *(int *)(param_1 + 0x1048);
  CUtlHashFast<int,CUtlHashFastNoHash>::CUtlHashFast(local_68);
  local_20 = *(undefined4 *)(iVar13 + 0x38);
  uVar29 = (int)(fVar6 - fVar7) >> (bVar25 & 0x1f) & 0x3ff;
  uVar21 = (int)(fVar2 - fVar3) >> (bVar25 & 0x1f) & 0x7ff;
  uVar30 = (uint)((ushort)((int)(fVar10 - fVar7) >> (bVar25 & 0x1f)) & 0x3ff);
  do {
    if (((int)(fVar8 - fVar3) >> (bVar25 & 0x1f) & 0x7ffU) < uVar21) {
      iVar27 = *(int *)(param_1 + 0x1048);
      iVar13 = iVar27 + *piVar19 * 4;
      iVar15 = *(int *)(iVar13 + 0x3c);
      do {
        iVar16 = *(int *)(iVar27 + 0xdc);
        uVar17 = *(undefined4 *)(iVar27 + 0xd8);
        *(undefined4 *)(iVar15 + -8) = uVar17;
                    /* try { // try from 001df583 to 001df587 has its CatchHandler @ 001df5e0 */
        cVar18 = ThreadInterlockedAssignIf64
                           (iVar27 + 0xd8,iVar15 + -8,iVar16 + 0x10001,uVar17,iVar16);
      } while (cVar18 == '\0');
      *(undefined4 *)(iVar13 + 0x3c) = uVar14;
      CUtlHashFast<int,CUtlHashFastNoHash>::~CUtlHashFast(local_68);
      return;
    }
    for (uVar11 = (int)(fVar4 - fVar5) >> (bVar25 & 0x1f) & 0x7ff;
        uVar11 <= ((int)(fVar9 - fVar5) >> (bVar25 & 0x1f) & 0x7ffU); uVar11 = uVar11 + 1) {
      if (uVar29 <= uVar30) {
        uVar26 = uVar29;
LAB_001df478:
        do {
          uVar22 = uVar21 & 0x7ff | (uVar11 & 0x7ff) << 0xb;
          uVar23 = uVar22 | uVar26 << 0x16;
          uVar22 = ((((uVar21 & 0xff) + 0xaaaaaaaa) * 0x21 + ((uVar22 & 0xff00) >> 8)) * 0x21 +
                   ((int)uVar23 >> 0x10 & 0xffU)) * 0x21 + ((uVar26 << 0x16) >> 0x18);
          puVar28 = *(uint **)(param_1 + (((int)uVar22 >> 0x10 ^ uVar22) & 0x1ff) * 8 + 0xc);
          while (puVar28 != (uint *)0x0) {
            if (uVar23 == *puVar28) {
              if ((puVar28 != (uint *)&DAT_ffffffff) && (uVar22 = puVar28[1], uVar22 != 0))
              goto LAB_001df5c8;
              break;
            }
            puVar28 = (uint *)puVar28[3];
            if (*(uint **)(param_1 + (((int)uVar22 >> 0x10 ^ uVar22) & 0x1ff) * 8 + 0xc) == puVar28)
            break;
          }
          uVar26 = uVar26 + 1;
        } while (uVar26 <= uVar30);
      }
LAB_001df4ff:
    }
    uVar21 = uVar21 + 1;
  } while( true );
LAB_001df5c8:
  do {
    uVar22 = *(uint *)(uVar22 + 8);
  } while (uVar22 != 0);
  uVar26 = uVar26 + 1;
  if (uVar30 < uVar26) goto LAB_001df4ff;
  goto LAB_001df478;
}

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)