L L4D2node

CCoreDispInfo::CreateBoundingBoxes

0x000c3200 · 468 bytes · __thiscall

_ZN13CCoreDispInfo19CreateBoundingBoxesEP14CoreDispBBox_ti

Decompiled

undefined (3 params)

/* CCoreDispInfo::CreateBoundingBoxes(CoreDispBBox_t*, int) */

void __thiscall
CCoreDispInfo::CreateBoundingBoxes(CCoreDispInfo *this,CoreDispBBox_t *param_1,int param_2)

{
  float fVar1;
  float fVar2;
  float fVar3;
  uint uVar4;
  CoreDispBBox_t *pCVar5;
  CoreDispBBox_t *pCVar6;
  int iVar7;
  int iVar8;
  CoreDispBBox_t *pCVar9;
  int iVar10;
  int iVar11;
  uint local_30;
  int local_2c;
  int local_28;
  
  if (0 < param_2) {
    pCVar6 = param_1;
    pCVar9 = param_1 + 0xc;
    do {
      *(undefined4 *)pCVar6 = 0x7f7fffff;
      pCVar5 = pCVar6 + 0x18;
      *(undefined4 *)(pCVar6 + 4) = 0x7f7fffff;
      *(undefined4 *)(pCVar6 + 8) = 0x7f7fffff;
      *(undefined4 *)pCVar9 = 0x800000;
      *(undefined4 *)(pCVar9 + 4) = 0x800000;
      *(undefined4 *)(pCVar9 + 8) = 0x800000;
      pCVar6 = pCVar5;
      pCVar9 = pCVar9 + 0x18;
    } while (pCVar5 != param_1 + param_2 * 0x18);
  }
  uVar4 = 1 << ((byte)*(undefined4 *)(this + 0xc) & 0x1f);
  if (0 < (int)uVar4) {
    local_30 = 0;
    local_28 = 0;
    local_2c = uVar4 + 1;
    do {
      local_30 = local_30 + 1;
      pCVar6 = param_1 + local_28 * 0x18;
      iVar11 = ~uVar4 + local_2c;
      iVar7 = (local_2c + 1) - iVar11;
      do {
        iVar8 = 0;
        iVar10 = iVar11;
        while( true ) {
          iVar10 = iVar10 * 0x90 + *(int *)(this + 0x1b8);
          fVar1 = *(float *)(iVar10 + 0x28);
          fVar2 = *(float *)(iVar10 + 0x2c);
          fVar3 = *(float *)(iVar10 + 0x30);
          if (fVar1 < *(float *)pCVar6) {
            *(float *)pCVar6 = fVar1;
          }
          if (fVar2 < *(float *)(pCVar6 + 4)) {
            *(float *)(pCVar6 + 4) = fVar2;
          }
          if (fVar3 < *(float *)(pCVar6 + 8)) {
            *(float *)(pCVar6 + 8) = fVar3;
          }
          if (*(float *)(pCVar6 + 0xc) <= fVar1 && fVar1 != *(float *)(pCVar6 + 0xc)) {
            *(float *)(pCVar6 + 0xc) = fVar1;
          }
          if (*(float *)(pCVar6 + 0x10) <= fVar2 && fVar2 != *(float *)(pCVar6 + 0x10)) {
            *(float *)(pCVar6 + 0x10) = fVar2;
          }
          if (*(float *)(pCVar6 + 0x14) <= fVar3 && fVar3 != *(float *)(pCVar6 + 0x14)) {
            *(float *)(pCVar6 + 0x14) = fVar3;
          }
          iVar8 = iVar8 + 1;
          if (iVar8 == 4) break;
          iVar10 = iVar7 + iVar11;
          if (((iVar8 != 2) && (iVar10 = iVar11 + 1, iVar8 != 3)) &&
             (iVar10 = iVar11 - ~uVar4, iVar8 != 1)) {
            iVar10 = iVar11;
          }
        }
        iVar11 = iVar11 + 1;
        pCVar6 = pCVar6 + 0x18;
      } while (iVar11 != local_2c + -1);
      local_28 = local_28 + uVar4;
      local_2c = local_2c + uVar4 + 1;
    } while (local_30 != uVar4);
  }
  if (0 < param_2) {
    pCVar6 = param_1 + param_2 * 0x18;
    do {
      iVar7 = 0;
      do {
        *(float *)(param_1 + iVar7 * 4) = *(float *)(param_1 + iVar7 * 4) - 1.0;
        *(float *)(param_1 + iVar7 * 4 + 0xc) = *(float *)(param_1 + iVar7 * 4 + 0xc) + 1.0;
        iVar7 = iVar7 + 1;
      } while (iVar7 != 3);
      param_1 = param_1 + 0x18;
    } while (param_1 != pCVar6);
  }
  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)