L L4D2node

TerrorNavArea::DrawSpawn

0x0097bf10 · 5966 bytes · __thiscall

_ZNK13TerrorNavArea9DrawSpawnEv

Decompiled

undefined (1 param)

/* TerrorNavArea::DrawSpawn() const */

void __thiscall TerrorNavArea::DrawSpawn(TerrorNavArea *this)

{
  TerrorNavArea TVar1;
  bool bVar2;
  Vector *pVVar3;
  char cVar4;
  int iVar5;
  int *piVar6;
  TerrorNavArea *pTVar7;
  uint *puVar8;
  uint *puVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  undefined *puVar13;
  uint uVar14;
  uint uVar15;
  int in_GS_OFFSET;
  longdouble lVar16;
  undefined8 uVar17;
  float local_178;
  Vector *local_170;
  Vector *local_16c;
  Vector *local_168;
  Vector *local_164;
  undefined4 local_15c;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150;
  undefined4 local_14c;
  undefined4 local_148;
  undefined4 local_144;
  undefined4 local_140;
  undefined4 local_13c;
  undefined4 local_138;
  undefined4 local_134;
  undefined4 local_130;
  undefined4 local_12c;
  undefined4 local_128;
  float local_124;
  uint local_120;
  undefined2 local_11c;
  undefined1 local_11a;
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (*(int *)(ZombieShowFlowDelta._28_4_ + 0x30) != 0) {
    DrawFlowDelta(this);
  }
  iVar5 = *(int *)(ZombieDebug._28_4_ + 0x30);
  if ((iVar5 < 2) && ((iVar5 == 0 || (this != *(TerrorNavArea **)(TheNavMesh + 0x474)))))
  goto LAB_0097c007;
  bVar2 = iVar5 < 3;
  if (this == *(TerrorNavArea **)(TheNavMesh + 0x648)) {
    uVar14 = *(uint *)(this + 300);
    local_120 = local_120 & 0xffffff00;
    if ((uVar14 & 2) != 0) {
      local_11a = 0;
      local_120 = 0x504d4520;
      local_11c = 0x5954;
    }
    puVar9 = &local_120;
    if ((uVar14 & 4) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " STOP_SCAN",0xb);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x40) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " FINALE",8);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x100) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " BATTLEFIELD",0xd);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x20) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " BATTLESTATION",0xf);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x2000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " NO_MOBS",9);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x8000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " RESCUE_VEHICLE",0x10);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x80) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " PLAYER_START",0xe);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x200) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " IGNORE_VISIBILITY",0x13);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x400) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " NOT_CLEARABLE",0xf);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x800) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " CHECKPOINT",0xc);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x1000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " OBSCURED",10);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x4000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " THREAT",8);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x80000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " NOTHREAT",10);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x100000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " LYINGDOWN",0xb);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x10000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " RESCUE_CLOSET",0xf);
    }
    puVar9 = &local_120;
    if ((uVar14 & 0x20000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " ESCAPE_ROUTE",0xe);
    }
    pVVar3 = (Vector *)&local_120;
    if ((*(uint *)(this + 0x54) & 0x10000) != 0) {
      do {
        local_164 = pVVar3;
        uVar10 = *(uint *)local_164 + 0xfefefeff & ~*(uint *)local_164;
        uVar15 = uVar10 & 0x80808080;
        pVVar3 = (Vector *)((int)local_164 + 4);
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)local_164 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = (uint *)((int)local_164 + 4);
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " TANK_ONLY",0xb);
    }
    puVar9 = &local_120;
    if ((*(uint *)(this + 0x54) & 0x20000) != 0) {
      do {
        puVar8 = puVar9;
        uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
        uVar15 = uVar10 & 0x80808080;
        puVar9 = puVar8 + 1;
      } while (uVar15 == 0);
      uVar11 = uVar15 >> 0x10;
      puVar9 = (uint *)((int)puVar8 + 6);
      if ((uVar10 & 0x8080) != 0) {
        puVar9 = puVar8 + 1;
        uVar11 = uVar15;
      }
      builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar11,(byte)uVar11))),
                      " MOB_ONLY",10);
    }
    if ((uVar14 & 0x40000) != 0) {
      uVar14 = *(uint *)(this + 0x174);
      puVar9 = &local_120;
      if ((((uVar14 == 0xffffffff) ||
           (puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
          || (*(uint *)(puVar13 + 8) != uVar14 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)) {
        do {
          puVar8 = puVar9;
          uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
          uVar14 = uVar10 & 0x80808080;
          puVar9 = puVar8 + 1;
        } while (uVar14 == 0);
        if ((uVar10 & 0x8080) == 0) {
          puVar9 = (uint *)((int)puVar8 + 6);
          uVar14 = uVar14 >> 0x10;
        }
        builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar14,(byte)uVar14))),
                        " DESTROYED_DOOR",0x10);
      }
      else {
        do {
          puVar8 = puVar9;
          uVar10 = *puVar8 + 0xfefefeff & ~*puVar8;
          uVar14 = uVar10 & 0x80808080;
          puVar9 = puVar8 + 1;
        } while (uVar14 == 0);
        if ((uVar10 & 0x8080) == 0) {
          puVar9 = (uint *)((int)puVar8 + 6);
          uVar14 = uVar14 >> 0x10;
        }
        builtin_strncpy((char *)((int)puVar9 + (-3 - (uint)CARRY1((byte)uVar14,(byte)uVar14))),
                        " DOOR",6);
      }
    }
    local_12c = *(undefined4 *)(this + 0x2c);
    local_128 = *(undefined4 *)(this + 0x30);
    local_124 = *(float *)(this + 0x34) + 25.0;
    NDebugOverlay::Text((Vector *)&local_12c,(char *)&local_120,!bVar2,0.01023);
  }
  local_15c = *(undefined4 *)(this + 4);
  local_14c = *(undefined4 *)(this + 8);
  local_148 = *(undefined4 *)(this + 0x24);
  local_150 = *(undefined4 *)(this + 0x10);
  local_158 = *(undefined4 *)(this + 8);
  local_140 = *(undefined4 *)(this + 0x14);
  local_144 = *(undefined4 *)(this + 4);
  local_13c = *(undefined4 *)(this + 0x28);
  local_154 = *(undefined4 *)(this + 0xc);
  local_138 = *(undefined4 *)(this + 0x10);
  local_134 = *(undefined4 *)(this + 0x14);
  local_130 = *(undefined4 *)(this + 0x18);
  if (*(int *)(ZombieShowBottlenecks._28_4_ + 0x30) == 0) {
    if (*(int *)(ZombieShowDamaging._28_4_ + 0x30) == 0) {
      if (*(int *)(ZombieShowPopulationDensity._28_4_ + 0x30) != 0) {
        uVar14 = (*(uint *)(this + 300) >> 0x11 & 3) - 1;
        if (uVar14 < 3) {
          iVar5 = *(int *)(CSWTCH_4643 + uVar14 * 4);
          local_164 = (Vector *)0xff;
          iVar12 = *(int *)(CSWTCH_4644 + uVar14 * 4);
        }
        else {
          iVar12 = 0;
          iVar5 = 0x32;
          local_164 = (Vector *)0x0;
        }
        NDebugOverlay::Triangle
                  ((Vector *)&local_15c,(Vector *)&local_138,(Vector *)&local_150,(int)local_164,
                   iVar5,iVar12,0xf,bVar2,0.01023);
        NDebugOverlay::Triangle
                  ((Vector *)&local_138,(Vector *)&local_15c,(Vector *)&local_144,(int)local_164,
                   iVar5,iVar12,0xf,bVar2,0.01023);
        if (*(int *)(this + 0x128) != 0) {
          V_snprintf((char *)&local_120,0x50,"%d",*(int *)(this + 0x128));
          NDebugOverlay::Text((Vector *)(this + 0x2c),(char *)&local_120,!bVar2,0.01023);
        }
        goto LAB_0097c007;
      }
      if ((*(uint *)(this + 0x54) & 0x10000) == 0) {
        if ((*(uint *)(this + 0x54) & 0x20000) != 0) {
          NDebugOverlay::Triangle
                    ((Vector *)&local_15c,(Vector *)&local_138,(Vector *)&local_150,0x96,0x96,0,0x80
                     ,bVar2,0.01023);
          uVar17 = 0x9600000096;
          goto LAB_0097c6de;
        }
      }
      else {
        NDebugOverlay::Triangle
                  ((Vector *)&local_15c,(Vector *)&local_138,(Vector *)&local_150,0,0x96,0,0x80,
                   bVar2,0.01023);
        uVar17 = 0x9600000000;
LAB_0097c6de:
        local_164 = (Vector *)&local_15c;
        NDebugOverlay::Triangle
                  ((Vector *)&local_138,local_164,(Vector *)&local_144,(int)uVar17,
                   (int)((ulonglong)uVar17 >> 0x20),0,0x80,bVar2,0.01023);
      }
      local_164 = (Vector *)&local_15c;
      local_168 = (Vector *)&local_138;
      local_16c = (Vector *)&local_144;
      local_170 = (Vector *)&local_150;
      if (*(int *)(ZombieShowFlowDistance._28_4_ + 0x30) != 0) {
        V_snprintf((char *)&local_120,0x50,"Flow: %3.0f / %3.0f",(double)*(float *)(this + 0x154),
                   (double)*(float *)(this + 0x158));
        local_12c = *(undefined4 *)(this + 0x2c);
        local_128 = *(undefined4 *)(this + 0x30);
        local_124 = *(float *)(this + 0x34) + 10.0;
        NDebugOverlay::Text((Vector *)&local_12c,(char *)&local_120,!bVar2,0.01023);
      }
      if (*(int *)(ZombieShowMutuallyVisibleSet._28_4_ + 0x30) == 0) {
        if (*(int *)(ZombieShowPotentiallyVisible._28_4_ + 0x30) == 0) {
          if (*(int *)(ZombieShowPotentiallyVisibleToSurvivorTeam._28_4_ + 0x30) == 0) {
            if (*(int *)(ZombieShowCompletelyVisibleToSurvivorTeam._28_4_ + 0x30) == 0) {
              if ((*(int *)(ZombieShowClear._28_4_ + 0x30) == 0) ||
                 (cVar4 = IsCleared(this,(CTerrorPlayer *)0x0), cVar4 == '\0')) goto LAB_0097c4b0;
              if (this[0x145] == (TerrorNavArea)0x0) {
                local_178 = 0.0;
LAB_0097d4ba:
                iVar12 = (int)(local_178 * 15.5 + 100.0);
                iVar5 = (int)(255.0 - local_178 * 15.5);
              }
              else {
                if (this[0x7d] != (TerrorNavArea)0x0) {
LAB_0097d5f9:
                  local_178 = 0.0;
                  if ((this[0x7d] == (TerrorNavArea)0x0) &&
                     (local_178 = 99999.9, 0.0 < *(float *)(this + 0x14c))) {
                    lVar16 = (longdouble)IntervalTimer::Now();
                    local_178 = (float)lVar16 - *(float *)(this + 0x14c);
                  }
                  goto LAB_0097d4ba;
                }
                local_178 = 0.0;
                if (*(float *)(this + 0x14c) <= 0.0) {
                  iVar5 = 100;
                  iVar12 = 0xff;
                }
                else {
                  iVar12 = 0xff;
                  lVar16 = (longdouble)IntervalTimer::Now();
                  iVar5 = 100;
                  if ((float)lVar16 - *(float *)(this + 0x14c) <= 10.0) {
                    if (this[0x145] == (TerrorNavArea)0x0) goto LAB_0097d4ba;
                    goto LAB_0097d5f9;
                  }
                }
              }
              NDebugOverlay::Triangle
                        (local_164,local_168,local_170,iVar12,iVar5,100,0x32,bVar2,0.01023);
              NDebugOverlay::Triangle
                        (local_168,local_164,local_16c,iVar12,iVar5,100,0x32,bVar2,0.01023);
              goto LAB_0097c4b0;
            }
            TVar1 = this[0x7e];
          }
          else {
            TVar1 = this[0x7d];
          }
          if (TVar1 != (TerrorNavArea)0x0) {
LAB_0097d17a:
            NDebugOverlay::Triangle(local_164,local_168,local_170,100,200,100,0x96,bVar2,0.01023);
            uVar17 = 0x9600000064;
            iVar12 = 200;
LAB_0097d1ec:
            iVar5 = 100;
            goto LAB_0097d090;
          }
        }
        else {
          piVar6 = (int *)UTIL_GetClosestPlayer((Vector *)(this + 0x2c),2,(float *)0x0);
          if ((piVar6 != (int *)0x0) && (iVar5 = (**(code **)(*piVar6 + 0x52c))(piVar6), iVar5 != 0)
             ) {
            pTVar7 = (TerrorNavArea *)(**(code **)(*piVar6 + 0x52c))(piVar6);
            cVar4 = IsCompletelyVisible(pTVar7,this);
            if (cVar4 == '\0') {
              cVar4 = IsPotentiallyVisible(pTVar7,this,false);
              if ((cVar4 == '\0') || (*(int *)(ZombieShowPotentiallyVisible._28_4_ + 0x30) != 1))
              goto LAB_0097c4b0;
              goto LAB_0097d17a;
            }
            NDebugOverlay::Triangle(local_164,local_168,local_170,100,100,200,0x96,bVar2,0.01023);
            uVar17 = 0x96000000c8;
            iVar12 = 100;
            goto LAB_0097d1ec;
          }
        }
      }
      else {
        pTVar7 = (TerrorNavArea *)CNavMesh::GetMarkedArea(TheNavMesh);
        if (((pTVar7 == (TerrorNavArea *)0x0) ||
            (iVar5 = ComputeVisibility(pTVar7,this,false,true,(bool *)0x0), iVar5 == 0)) ||
           (iVar5 = ComputeVisibility(this,pTVar7,false,true,(bool *)0x0), iVar5 == 0))
        goto LAB_0097c4b0;
        NDebugOverlay::Triangle(local_164,local_168,local_170,0xff,0,0xff,0x32,bVar2,0.01023);
        uVar17 = 0x32000000ff;
        iVar5 = 0xff;
        iVar12 = 0;
LAB_0097d090:
        NDebugOverlay::Triangle
                  (local_168,local_164,local_16c,iVar5,iVar12,(int)uVar17,
                   (int)((ulonglong)uVar17 >> 0x20),bVar2,0.01023);
      }
LAB_0097c4b0:
      if (*(int *)(ZombieShowEscapeRoute._28_4_ + 0x30) == 0) {
        uVar14 = *(uint *)(this + 300);
        if ((uVar14 & 0x8f9e6) == 0) {
          if ((short)uVar14 != 0) {
            NDebugOverlay::Triangle(local_164,local_168,local_170,0x32,0x32,0x4b,0x32,bVar2,0.01023)
            ;
            uVar17 = 0x320000004b;
            goto LAB_0097d273;
          }
        }
        else {
          if ((uVar14 & 4) == 0) {
            if ((uVar14 & 0x20) == 0) {
              if ((uVar14 & 0x4080) == 0) {
                if ((uVar14 & 0x80000) == 0) {
                  if ((uVar14 & 0x8800) == 0) {
                    if ((uVar14 & 0x2000) == 0) {
                      if ((uVar14 & 0x140) == 0) {
                        uVar14 = uVar14 & 0x1000;
                        uVar10 = ~-(uint)(uVar14 == 0) & 100;
                        iVar5 = (-(uint)(uVar14 == 0) & 0xffffffe7) + 100;
                        iVar12 = (-(uint)(uVar14 == 0) & 0xffffff9c) + 200;
                      }
                      else {
                        uVar10 = 200;
                        iVar5 = 200;
                        iVar12 = 100;
                      }
                    }
                    else {
                      uVar10 = 200;
                      iVar5 = 100;
                      iVar12 = 100;
                    }
                  }
                  else {
                    uVar10 = 200;
                    iVar5 = 200;
                    iVar12 = 0;
                  }
                }
                else {
                  uVar10 = 0xb4;
                  iVar5 = 0x69;
                  iVar12 = 0xff;
                }
              }
              else {
                uVar10 = 200;
                iVar5 = 0;
                iVar12 = 200;
              }
            }
            else {
              uVar10 = 0;
              iVar5 = 0xff;
              iVar12 = 0;
            }
          }
          else {
            uVar10 = 0;
            iVar5 = 0;
            iVar12 = 0x4b;
          }
          NDebugOverlay::Triangle
                    (local_164,local_168,local_170,iVar12,iVar5,uVar10,0x32,bVar2,0.01023);
          NDebugOverlay::Triangle
                    (local_168,local_164,local_16c,iVar12,iVar5,uVar10,0x32,bVar2,0.01023);
          if (this == *(TerrorNavArea **)(TheNavMesh + 0x604)) {
            local_12c = *(undefined4 *)(this + 0x2c);
            local_128 = *(undefined4 *)(this + 0x30);
            local_124 = *(float *)(this + 0x34) + 100.0;
            NDebugOverlay::VertArrow
                      ((Vector *)&local_12c,(Vector *)(this + 0x2c),5.0,0,0xff,0,0xff,bVar2,0.01023)
            ;
          }
        }
      }
      else if (((byte)this[0x12e] & 2) != 0) {
        NDebugOverlay::Triangle(local_164,local_168,local_170,0x32,0x32,0xfa,0x32,bVar2,0.01023);
        uVar17 = 0x32000000fa;
LAB_0097d273:
        NDebugOverlay::Triangle
                  (local_168,local_164,local_16c,0x32,0x32,(int)uVar17,
                   (int)((ulonglong)uVar17 >> 0x20),bVar2,0.01023);
      }
      iVar5 = 0x4b;
      iVar12 = 100;
      if (*(int *)(this + 0x128) != 0) {
        V_snprintf((char *)&local_120,0x50,"%d",*(int *)(this + 0x128));
        iVar12 = 200;
        NDebugOverlay::Text((Vector *)(this + 0x2c),(char *)&local_120,!bVar2,0.01023);
        iVar5 = 0x96;
      }
      if (*(int *)(ZombieShowTraffic._28_4_ + 0x30) != 0) {
        if ((this[0x38] != (TerrorNavArea)0x0) || (this[0x39] != (TerrorNavArea)0x0)) {
          V_snprintf((char *)&local_120,0x50,"S(%d) Z(%d)",(uint)(byte)this[0x38]);
          iVar12 = 0xff;
          NDebugOverlay::Text((Vector *)(this + 0x2c),(char *)&local_120,!bVar2,0.01023);
          iVar5 = 0;
        }
      }
      NDebugOverlay::Line(local_164,local_170,iVar12,iVar5,0,bVar2,0.01023);
      NDebugOverlay::Line(local_164,local_16c,iVar12,iVar5,0,bVar2,0.01023);
      NDebugOverlay::Line(local_16c,local_168,iVar12,iVar5,0,bVar2,0.01023);
      NDebugOverlay::Line(local_168,local_170,iVar12,iVar5,0,bVar2,0.01023);
      goto LAB_0097c007;
    }
    if (*(int *)(this + 0x70) < *(int *)(gpGlobals + 0x18)) goto LAB_0097c007;
  }
  else {
    cVar4 = IsBottleneck(this);
    if (cVar4 == '\0') goto LAB_0097c007;
  }
  NDebugOverlay::Triangle
            ((Vector *)&local_15c,(Vector *)&local_138,(Vector *)&local_150,0xff,0,0,0x80,bVar2,
             0.01023);
  NDebugOverlay::Triangle
            ((Vector *)&local_138,(Vector *)&local_15c,(Vector *)&local_144,0xff,0,0,0x80,bVar2,
             0.01023);
LAB_0097c007:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

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)