L L4D2node

COverlayMgr::LoadOverlays

0x001d4410 · 2516 bytes · __thiscall

_ZN11COverlayMgr12LoadOverlaysEv

Decompiled

undefined (1 param)

/* COverlayMgr::LoadOverlays() */

undefined4 __thiscall COverlayMgr::LoadOverlays(COverlayMgr *this)

{
  int iVar1;
  int iVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  ushort uVar6;
  uint uVar7;
  undefined2 uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  undefined4 uVar15;
  uint *puVar16;
  int *piVar17;
  int iVar18;
  int in_GS_OFFSET;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  undefined1 *local_4c4;
  float *local_4c0;
  uint local_4b4;
  CMapLoadHelper local_4a0 [288];
  CMapLoadHelper local_380 [288];
  CMapLoadHelper local_260 [288];
  CMapLoadHelper local_140 [288];
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  CMapLoadHelper::CMapLoadHelper(local_4a0,0x2d);
                    /* try { // try from 001d4457 to 001d445b has its CatchHandler @ 001d4e41 */
  CMapLoadHelper::CMapLoadHelper(local_380,0x32);
                    /* try { // try from 001d446d to 001d4471 has its CatchHandler @ 001d4e3d */
  CMapLoadHelper::CMapLoadHelper(local_260,0x3c);
                    /* try { // try from 001d4483 to 001d4487 has its CatchHandler @ 001d4e39 */
  CMapLoadHelper::CMapLoadHelper(local_140,0x3d);
                    /* try { // try from 001d4491 to 001d4dca has its CatchHandler @ 001d4df7 */
  iVar9 = CMapLoadHelper::LumpBase(local_4a0);
  uVar10 = CMapLoadHelper::LumpSize(local_4a0);
  if (uVar10 == (uVar10 / 0x160) * 0x160) {
    iVar11 = CMapLoadHelper::LumpBase(local_380);
    uVar10 = CMapLoadHelper::LumpSize(local_380);
    if (uVar10 == (uVar10 / 0x460) * 0x460) {
      local_4c0 = (float *)CMapLoadHelper::LumpBase(local_260);
      uVar10 = CMapLoadHelper::LumpSize(local_260);
      if ((uVar10 & 7) == 0) {
        local_4c4 = (undefined1 *)CMapLoadHelper::LumpBase(local_140);
        uVar10 = CMapLoadHelper::LumpSize(local_140);
        if ((uVar10 & 3) == 0) {
          uVar10 = CMapLoadHelper::LumpSize(local_4a0);
          uVar10 = uVar10 / 0x160;
          uVar12 = CMapLoadHelper::LumpSize(local_380);
          uVar12 = uVar12 / 0x460;
          CUtlVector<moverlay_t,CUtlMemory<moverlay_t,int>>::SetCount
                    ((CUtlVector<moverlay_t,CUtlMemory<moverlay_t,int>> *)(this + 0x28),
                     uVar10 + uVar12);
          if (uVar10 != 0) {
            local_4b4 = 0;
            iVar18 = iVar9;
            do {
              puVar16 = (uint *)(local_4b4 * 0xa8 + *(int *)(this + 0x28));
              if (local_4c4 != (undefined1 *)0x0) {
                *(undefined1 *)(puVar16 + 0x29) = *local_4c4;
                *(undefined1 *)((int)puVar16 + 0xa5) = local_4c4[1];
                *(undefined1 *)((int)puVar16 + 0xa6) = local_4c4[2];
                *(undefined1 *)((int)puVar16 + 0xa7) = local_4c4[3];
                local_4c4 = local_4c4 + 4;
              }
              *puVar16 = local_4b4;
              uVar8 = CMapLoadHelper::BoundsCheck_texinfo(local_4a0,(int)*(short *)(iVar18 + 4));
              *(undefined2 *)(puVar16 + 1) = uVar8;
              *(short *)((int)puVar16 + 6) = (short)((int)(uint)*(ushort *)(iVar18 + 6) >> 0xe);
              puVar16[8] = *(uint *)(iVar18 + 0x108);
              puVar16[9] = *(uint *)(iVar18 + 0x10c);
              puVar16[10] = *(uint *)(iVar18 + 0x110);
              puVar16[0xb] = *(uint *)(iVar18 + 0x114);
              if (local_4c0 == (float *)0x0) {
                puVar16[0x25] = 0xbf800000;
                puVar16[0x26] = 0;
                puVar16[0x27] = 0x3f800000;
              }
              else {
                puVar16[0x25] = (uint)*local_4c0;
                puVar16[0x26] = (uint)local_4c0[1];
                puVar16[0x27] = (uint)(1.0 / (local_4c0[1] - *local_4c0));
                local_4c0 = local_4c0 + 2;
              }
              fVar3 = *(float *)(iVar18 + 0x148);
              puVar16[0x18] = (uint)fVar3;
              iVar13 = iVar18 - iVar9;
              fVar4 = *(float *)(iVar13 + 0x14c + iVar9);
              puVar16[0x19] = (uint)fVar4;
              fVar5 = *(float *)(iVar13 + 0x150 + iVar9);
              puVar16[0x1a] = (uint)fVar5;
              puVar16[0xc] = *(uint *)(iVar18 + 0x118);
              puVar16[0xd] = *(uint *)(iVar13 + 0x11c + iVar9);
              fVar20 = *(float *)(iVar13 + 0x120 + iVar9);
              puVar16[0xe] = (uint)fVar20;
              puVar16[0xf] = *(uint *)(iVar18 + 0x124);
              puVar16[0x10] = *(uint *)(iVar13 + 0x128 + iVar9);
              fVar19 = *(float *)(iVar13 + 300 + iVar9);
              puVar16[0x11] = (uint)fVar19;
              puVar16[0x12] = *(uint *)(iVar18 + 0x130);
              puVar16[0x13] = *(uint *)(iVar13 + 0x134 + iVar9);
              fVar21 = *(float *)(iVar13 + 0x138 + iVar9);
              puVar16[0x14] = (uint)fVar21;
              puVar16[0x15] = *(uint *)(iVar18 + 0x13c);
              puVar16[0x16] = *(uint *)(iVar13 + 0x140 + iVar9);
              puVar16[0x17] = *(uint *)(iVar13 + 0x144 + iVar9);
              fVar24 = *(float *)(iVar18 + 0x154);
              puVar16[0x21] = (uint)fVar24;
              fVar23 = *(float *)(iVar13 + 0x158 + iVar9);
              puVar16[0x22] = (uint)fVar23;
              fVar22 = *(float *)(iVar13 + 0x15c + iVar9);
              puVar16[0x1b] = (uint)fVar20;
              puVar16[0x1c] = (uint)fVar19;
              puVar16[0x23] = (uint)fVar22;
              puVar16[0x1d] = (uint)fVar21;
              if (fVar20 == 0.0) {
                if (fVar19 == 0.0) {
                  if (fVar21 == 0.0) {
                    Warning("Bad overlay basis at (%f %f %f)!\n",(double)fVar3,(double)fVar4,
                            (double)fVar5);
                    fVar23 = (float)puVar16[0x22];
                    fVar21 = (float)puVar16[0x1d];
                    fVar22 = (float)puVar16[0x23];
                    fVar19 = (float)puVar16[0x1c];
                    fVar20 = (float)puVar16[0x1b];
                    fVar24 = (float)puVar16[0x21];
                  }
                  else {
                    fVar20 = 0.0;
                    fVar19 = 0.0;
                  }
                }
                else {
                  fVar20 = 0.0;
                }
              }
              puVar16[0x1e] = (uint)(fVar21 * fVar23 - fVar19 * fVar22);
              puVar16[0x1f] = (uint)(fVar22 * fVar20 - fVar21 * fVar24);
              puVar16[0x20] = (uint)(fVar19 * fVar24 - fVar20 * fVar23);
              VectorNormalize((Vector *)(puVar16 + 0x1e));
              puVar16[0xe] = 0;
              puVar16[0x11] = 0;
              puVar16[0x14] = 0;
              uVar6 = *(ushort *)(iVar18 + 6);
              puVar16[6] = 0;
              if ((uVar6 & 0x3fff) != 0) {
                CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>>::GrowVector
                          ((CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>> *)(puVar16 + 3),
                           uVar6 & 0x3fff);
                CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>>::ShiftElementsRight
                          ((CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>> *)(puVar16 + 3),0,
                           uVar6 & 0x3fff);
              }
              iVar13 = 0;
              if ((*(ushort *)(iVar18 + 6) & 0x3fff) != 0) {
                do {
                  uVar7 = puVar16[3];
                  iVar1 = iVar13 * 4;
                  iVar14 = CMapLoadHelper::GetMap();
                  iVar2 = iVar13 * 4;
                  iVar13 = iVar13 + 1;
                  *(int *)(uVar7 + iVar1) =
                       *(int *)(iVar18 + 8 + iVar2) * 0x20 + *(int *)(iVar14 + 0x78);
                } while (iVar13 < (int)(*(ushort *)(iVar18 + 6) & 0x3fff));
              }
              local_4b4 = local_4b4 + 1;
              iVar18 = iVar18 + 0x160;
              *(undefined2 *)(puVar16 + 2) = 0xffff;
              puVar16[0x24] = 0;
            } while (uVar10 != local_4b4);
          }
          if (uVar12 != 0) {
            local_4b4 = 0;
            local_4c0 = (float *)(uVar10 * 0xa8);
            iVar9 = iVar11;
            do {
              piVar17 = (int *)((int)local_4c0 + *(int *)(this + 0x28));
              *piVar17 = local_4b4 + uVar10;
              uVar8 = CMapLoadHelper::BoundsCheck_texinfo(local_380,(int)*(short *)(iVar9 + 4));
              *(undefined2 *)(piVar17 + 1) = uVar8;
              *(short *)((int)piVar17 + 6) = (short)((int)(uint)*(ushort *)(iVar9 + 6) >> 0xe);
              iVar18 = iVar9 - iVar11;
              piVar17[8] = *(int *)(iVar9 + 0x408);
              piVar17[9] = *(int *)(iVar9 + 0x40c);
              piVar17[10] = *(int *)(iVar9 + 0x410);
              piVar17[0xb] = *(int *)(iVar9 + 0x414);
              fVar3 = *(float *)(iVar9 + 0x448);
              piVar17[0x18] = (int)fVar3;
              fVar4 = *(float *)(iVar18 + 0x44c + iVar11);
              piVar17[0x19] = (int)fVar4;
              fVar5 = *(float *)(iVar18 + 0x450 + iVar11);
              piVar17[0x1a] = (int)fVar5;
              piVar17[0xc] = *(int *)(iVar9 + 0x418);
              piVar17[0xd] = *(int *)(iVar18 + 0x41c + iVar11);
              fVar20 = *(float *)(iVar18 + 0x420 + iVar11);
              piVar17[0xe] = (int)fVar20;
              piVar17[0xf] = *(int *)(iVar9 + 0x424);
              piVar17[0x10] = *(int *)(iVar18 + 0x428 + iVar11);
              fVar19 = *(float *)(iVar18 + 0x42c + iVar11);
              piVar17[0x11] = (int)fVar19;
              piVar17[0x12] = *(int *)(iVar9 + 0x430);
              piVar17[0x13] = *(int *)(iVar18 + 0x434 + iVar11);
              fVar21 = *(float *)(iVar18 + 0x438 + iVar11);
              piVar17[0x14] = (int)fVar21;
              piVar17[0x15] = *(int *)(iVar9 + 0x43c);
              piVar17[0x16] = *(int *)(iVar18 + 0x440 + iVar11);
              piVar17[0x17] = *(int *)(iVar18 + 0x444 + iVar11);
              fVar24 = *(float *)(iVar9 + 0x454);
              piVar17[0x21] = (int)fVar24;
              fVar23 = *(float *)(iVar18 + 0x458 + iVar11);
              piVar17[0x22] = (int)fVar23;
              fVar22 = *(float *)(iVar18 + 0x45c + iVar11);
              piVar17[0x1b] = (int)fVar20;
              piVar17[0x1c] = (int)fVar19;
              piVar17[0x23] = (int)fVar22;
              piVar17[0x1d] = (int)fVar21;
              if (fVar20 == 0.0) {
                if (fVar19 == 0.0) {
                  if (fVar21 == 0.0) {
                    Warning("Bad overlay basis at (%f %f %f)!\n",(double)fVar3,(double)fVar4,
                            (double)fVar5);
                    fVar23 = (float)piVar17[0x22];
                    fVar21 = (float)piVar17[0x1d];
                    fVar22 = (float)piVar17[0x23];
                    fVar19 = (float)piVar17[0x1c];
                    fVar20 = (float)piVar17[0x1b];
                    fVar24 = (float)piVar17[0x21];
                  }
                  else {
                    fVar20 = 0.0;
                    fVar19 = 0.0;
                  }
                }
                else {
                  fVar20 = 0.0;
                }
              }
              piVar17[0x1e] = (int)(fVar21 * fVar23 - fVar19 * fVar22);
              piVar17[0x1f] = (int)(fVar22 * fVar20 - fVar21 * fVar24);
              piVar17[0x20] = (int)(fVar19 * fVar24 - fVar20 * fVar23);
              VectorNormalize((Vector *)(piVar17 + 0x1e));
              piVar17[0xe] = 0;
              piVar17[0x11] = 0;
              piVar17[0x14] = 0;
              uVar6 = *(ushort *)(iVar9 + 6);
              piVar17[6] = 0;
              if ((uVar6 & 0x3fff) != 0) {
                CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>>::GrowVector
                          ((CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>> *)(piVar17 + 3),
                           uVar6 & 0x3fff);
                CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>>::ShiftElementsRight
                          ((CUtlVector<msurface2_t*,CUtlMemory<msurface2_t*,int>> *)(piVar17 + 3),0,
                           uVar6 & 0x3fff);
              }
              iVar18 = 0;
              if ((*(ushort *)(iVar9 + 6) & 0x3fff) != 0) {
                do {
                  iVar2 = piVar17[3];
                  iVar13 = iVar18 * 4;
                  iVar14 = CMapLoadHelper::GetMap();
                  iVar1 = iVar18 * 4;
                  iVar18 = iVar18 + 1;
                  *(int *)(iVar2 + iVar13) =
                       *(int *)(iVar9 + 8 + iVar1) * 0x20 + *(int *)(iVar14 + 0x78);
                } while (iVar18 < (int)(*(ushort *)(iVar9 + 6) & 0x3fff));
              }
              local_4b4 = local_4b4 + 1;
              iVar9 = iVar9 + 0x460;
              local_4c0 = (float *)((int)local_4c0 + 0xa8);
              *(undefined2 *)(piVar17 + 2) = 0xffff;
              piVar17[0x24] = 0;
            } while (uVar12 != local_4b4);
          }
          uVar15 = 1;
          goto LAB_001d44fa;
        }
      }
    }
  }
  uVar15 = 0;
LAB_001d44fa:
  CMapLoadHelper::~CMapLoadHelper(local_140);
  CMapLoadHelper::~CMapLoadHelper(local_260);
  CMapLoadHelper::~CMapLoadHelper(local_380);
  CMapLoadHelper::~CMapLoadHelper(local_4a0);
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar15;
}

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)