L L4D2node

CDispInfo::UpdateNodeBoundingBoxes_R

0x00132280 · 614 bytes · __thiscall

_ZN9CDispInfo25UpdateNodeBoundingBoxes_RERK10CVertIndexii

Decompiled

undefined (4 params)

/* CDispInfo::UpdateNodeBoundingBoxes_R(CVertIndex const&, int, int) */

void __thiscall
CDispInfo::UpdateNodeBoundingBoxes_R(CDispInfo *this,CVertIndex *param_1,int param_2,int param_3)

{
  short sVar1;
  short sVar2;
  ushort uVar3;
  float *pfVar4;
  int iVar5;
  ushort *puVar6;
  ushort *puVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  int local_30;
  ushort local_20;
  short local_1e;
  ushort local_1c [6];
  
  sVar1 = *(short *)(param_1 + 2);
  iVar8 = *(int *)(*(int *)(this + 0x1dc) + 0x24);
  sVar2 = *(short *)param_1;
  puVar7 = (ushort *)(param_2 * 0x1c + *(int *)(this + 0x24c));
  puVar7[8] = 0xffff;
  puVar7[9] = 0xff7f;
  puVar7[10] = 0xffff;
  puVar7[0xb] = 0xff7f;
  puVar7[0xc] = 0xffff;
  puVar7[0xd] = 0xff7f;
  puVar7[2] = 0xffff;
  puVar7[3] = 0x7f7f;
  puVar7[4] = 0xffff;
  puVar7[5] = 0x7f7f;
  puVar7[6] = 0xffff;
  puVar7[7] = 0x7f7f;
  if ((param_3 + 1 < *(int *)(this + 0x184)) && ((*(byte *)((int)puVar7 + 3) & 1) != 0)) {
    iVar10 = param_2 + 1;
    iVar5 = *(int *)(this + 0x1dc);
    iVar9 = 0;
    do {
      UpdateNodeBoundingBoxes_R
                (this,(CVertIndex *)
                      ((sVar1 * iVar8 + (int)sVar2) * 0x10 + *(int *)(iVar5 + 8) + iVar9 * 4),iVar10
                 ,param_3 + 1);
      iVar5 = iVar10 * 0x1c + *(int *)(this + 0x24c);
      if (*(float *)(iVar5 + 4) != 3.4028235e+38) {
        fVar12 = *(float *)(puVar7 + 8);
        if (*(float *)(puVar7 + 8) <= *(float *)(iVar5 + 0x10)) {
          fVar12 = *(float *)(iVar5 + 0x10);
        }
        *(float *)(puVar7 + 8) = fVar12;
        fVar12 = *(float *)(puVar7 + 10);
        if (*(float *)(puVar7 + 10) <= *(float *)(iVar5 + 0x14)) {
          fVar12 = *(float *)(iVar5 + 0x14);
        }
        *(float *)(puVar7 + 10) = fVar12;
        fVar12 = *(float *)(puVar7 + 0xc);
        if (*(float *)(puVar7 + 0xc) <= *(float *)(iVar5 + 0x18)) {
          fVar12 = *(float *)(iVar5 + 0x18);
        }
        *(float *)(puVar7 + 0xc) = fVar12;
        fVar12 = *(float *)(puVar7 + 2);
        if (*(float *)(iVar5 + 4) <= *(float *)(puVar7 + 2)) {
          fVar12 = *(float *)(iVar5 + 4);
        }
        *(float *)(puVar7 + 2) = fVar12;
        fVar12 = *(float *)(puVar7 + 4);
        if (*(float *)(iVar5 + 8) <= *(float *)(puVar7 + 4)) {
          fVar12 = *(float *)(iVar5 + 8);
        }
        *(float *)(puVar7 + 4) = fVar12;
        fVar12 = *(float *)(puVar7 + 6);
        if (*(float *)(iVar5 + 0xc) <= *(float *)(puVar7 + 6)) {
          fVar12 = *(float *)(iVar5 + 0xc);
        }
        *(float *)(puVar7 + 6) = fVar12;
      }
      iVar5 = *(int *)(this + 0x1dc);
      iVar9 = iVar9 + 1;
      iVar10 = iVar10 + *(int *)(iVar5 + 8 + (param_3 + 0xc) * 4);
    } while (iVar9 != 4);
  }
  if ((byte)puVar7[1] != 0) {
    local_30 = 0;
    fVar12 = *(float *)(puVar7 + 8);
    fVar16 = *(float *)(puVar7 + 10);
    fVar14 = *(float *)(puVar7 + 0xc);
    fVar13 = *(float *)(puVar7 + 2);
    iVar8 = *puVar7 + 1;
    fVar11 = *(float *)(puVar7 + 4);
    fVar15 = *(float *)(puVar7 + 6);
    do {
      iVar10 = *(int *)(this + 0xe4) * 2;
      uVar3 = *(short *)(*(int *)(this + 0xd8) + (iVar8 + -1) * iVar10) - *(short *)(this + 0x2c);
      local_20 = *(short *)(*(int *)(this + 0xd8) + iVar8 * iVar10) - *(short *)(this + 0x2c);
      local_1e = *(short *)(*(int *)(this + 0xd8) + (iVar8 + 1) * iVar10) - *(short *)(this + 0x2c);
      puVar6 = &local_20;
      while( true ) {
        pfVar4 = (float *)((uint)uVar3 * *(int *)(this + 0x34) + *(int *)(this + 0x88));
        if (fVar12 <= *pfVar4) {
          fVar12 = *pfVar4;
        }
        *(float *)(puVar7 + 8) = fVar12;
        if (fVar16 <= pfVar4[1]) {
          fVar16 = pfVar4[1];
        }
        *(float *)(puVar7 + 10) = fVar16;
        if (fVar14 <= pfVar4[2]) {
          fVar14 = pfVar4[2];
        }
        *(float *)(puVar7 + 0xc) = fVar14;
        if (*pfVar4 <= fVar13) {
          fVar13 = *pfVar4;
        }
        *(float *)(puVar7 + 2) = fVar13;
        if (pfVar4[1] <= fVar11) {
          fVar11 = pfVar4[1];
        }
        *(float *)(puVar7 + 4) = fVar11;
        if (pfVar4[2] <= fVar15) {
          fVar15 = pfVar4[2];
        }
        *(float *)(puVar7 + 6) = fVar15;
        if (puVar6 == local_1c) break;
        uVar3 = *puVar6;
        puVar6 = puVar6 + 1;
      }
      local_30 = local_30 + 3;
      iVar8 = iVar8 + 3;
    } while (local_30 < (int)(uint)(byte)puVar7[1]);
  }
  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)