L L4D2node

nav_trouble_report

0x0098fec0 · 11295 bytes · __cdecl

_ZL18nav_trouble_reportRK8CCommand

Decompiled

undefined (1 param)

/* WARNING: Type propagation algorithm not settling */
/* nav_trouble_report(CCommand const&) */

void nav_trouble_report(CCommand *param_1)

{
  char *pcVar1;
  CNavArea *pCVar2;
  CNavArea *pCVar3;
  CNavLadder *pCVar4;
  CNavLadder *pCVar5;
  CNavMesh *pCVar6;
  bool bVar7;
  bool bVar8;
  char *pcVar9;
  int iVar10;
  uint uVar11;
  int *piVar12;
  undefined4 uVar13;
  CNavArea **ppCVar14;
  int iVar15;
  NavAreaCollector *pNVar16;
  CNavLadder **ppCVar17;
  int iVar18;
  CUtlMemory<CNavLadder*,int> *pCVar19;
  float fVar20;
  NavAreaCollector *pNVar21;
  int iVar22;
  char cVar23;
  bool bVar24;
  longdouble lVar25;
  longdouble lVar26;
  float fVar27;
  float fVar28;
  Vector *pVVar29;
  CTraceFilterSimple *pCVar30;
  CTraceFilterSimple *this;
  Vector *pVVar31;
  float in_stack_fffffcd8;
  int local_30c;
  CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *local_308;
  int local_304;
  uint local_300;
  int local_2f4;
  CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *local_2f0;
  CUtlMemory<CNavLadder*,int> *local_2ec;
  CNavArea *local_2e8;
  CNavArea *local_2e4;
  CNavArea *local_2e0;
  SelectOverlappingAreas local_2d1;
  CNavArea *local_2d0;
  CNavArea *local_2cc;
  CNavArea *local_2c8;
  CNavArea *local_2c4;
  CNavArea *local_2c0;
  CNavArea *local_2bc;
  CNavArea *local_2b8;
  CBaseEntity *local_2b4;
  CNavArea *local_2b0;
  CNavArea *local_2ac;
  CNavArea *local_2a8;
  CNavArea *local_2a4;
  CNavArea *local_2a0;
  CNavArea *local_29c;
  CNavArea *local_298;
  CNavArea *local_294;
  CNavLadder *local_290;
  CNavLadder *local_28c;
  CNavLadder *local_288;
  CNavLadder *local_284;
  CNavLadder *local_280;
  CNavLadder *local_27c;
  CNavArea *local_278;
  NavAreaCollector *local_274;
  float local_270;
  char *local_26c;
  NavAreaCollector *local_268;
  float local_264;
  char *local_260;
  NavAreaCollector *local_25c;
  float local_258;
  char *local_254;
  NavAreaCollector *local_250;
  float local_24c;
  char *local_248;
  NavAreaCollector *local_244;
  float local_240;
  char *local_23c;
  NavAreaCollector *local_238;
  float local_234;
  char *local_230;
  NavAreaCollector *local_22c;
  float local_228;
  char *local_224;
  CUtlMemory<CNavLadder*,int> *local_220;
  NavAreaCollector *local_21c;
  char *local_218;
  CUtlMemory<CNavLadder*,int> *local_214;
  NavAreaCollector *local_210;
  char *local_20c;
  CUtlMemory<CNavLadder*,int> *local_208;
  NavAreaCollector *local_204;
  char *local_200;
  int local_1fc;
  undefined4 local_1f8;
  undefined4 local_1f4;
  int local_1f0;
  int local_1ec;
  undefined **local_1e8;
  undefined4 local_1e4;
  undefined4 local_1e0;
  NavAreaCollector *local_1dc;
  undefined **local_1d8;
  NavAreaCollector local_1d4 [4];
  float *local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8;
  float local_1c4;
  float *local_1c0;
  float local_1bc;
  float local_1b8;
  float local_1b4;
  float local_1b0;
  float local_1ac;
  float local_1a8;
  float local_1a4;
  float local_19c;
  float local_198;
  float local_194;
  float local_18c;
  float local_188;
  float local_184;
  undefined4 local_17c;
  undefined1 local_178;
  undefined1 local_177;
  float local_16c;
  float local_168;
  float local_164;
  float local_15c;
  float local_158;
  float local_154;
  float local_14c;
  float local_148;
  float local_144;
  float local_13c;
  float local_138;
  float local_134;
  undefined4 local_12c;
  undefined1 local_128;
  undefined1 local_127;
  float local_11c;
  float local_118;
  float local_114;
  float local_10c;
  float local_108;
  float local_104;
  float local_fc;
  float local_f8;
  float local_f4;
  float local_ec;
  float local_e8;
  float local_e4;
  undefined4 local_dc;
  undefined1 local_d8;
  undefined1 local_d7;
  CNavArea *local_cc;
  float local_c8;
  char *local_c4;
  float local_c0;
  float local_bc;
  char *local_b8;
  undefined4 local_b4;
  float local_ac;
  float local_a8;
  float local_a4;
  float local_9c;
  float local_98;
  float local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  NavAreaCollector *local_70;
  float local_6c;
  char *local_68;
  CUtlMemory<CNavLadder*,int> *local_64;
  NavAreaCollector *local_60;
  char *local_5c;
  float local_44;
  char local_39;
  int local_24;
  
  if (1 < *(int *)param_1) {
    pcVar1 = *(char **)(param_1 + 0x40c);
    iVar22 = 0;
    pcVar9 = "orphan";
    do {
      iVar10 = _V_stricmp(pcVar9,pcVar1);
      if (iVar10 == 0) {
        local_300 = *(uint *)(troubleReportTable + iVar22 * 8 + 4);
        uVar11 = local_300 & 1;
        goto LAB_0098ff24;
      }
      iVar22 = iVar22 + 1;
      pcVar9 = *(char **)(troubleReportTable + iVar22 * 8);
    } while (pcVar9 != (char *)0x0);
  }
  local_300 = 0xffffffff;
  uVar11 = 1;
LAB_0098ff24:
  iVar22 = CNavMesh::GetMarkedArea(TheNavMesh);
  if (iVar22 == 0) {
    s_testNavID = 0;
  }
  else {
    s_testNavID = *(int *)(iVar22 + 0x8c);
  }
  local_1d0 = (float *)0x0;
  local_1cc = 0;
  local_1c8 = 0;
  local_1c4 = 0.0;
  local_1c0 = (float *)0x0;
  local_1d4[0] = (NavAreaCollector)0x1;
  if (uVar11 != 0) {
                    /* try { // try from 009910f3 to 009910f7 has its CatchHandler @ 0099240a */
    SelectOrphanAreas(local_1d4);
  }
  if ((local_300 & 2) != 0) {
                    /* try { // try from 00990db2 to 00990dfe has its CatchHandler @ 0099240a */
    SelectOrphanBattlefieldAreas(local_1d4);
  }
  if ((local_300 & 4) != 0) {
    SelectOrphanFinaleAreas(local_1d4);
  }
  fVar20 = local_270;
  fVar27 = local_1c4;
  if ((local_300 & 8) != 0) {
    SelectOrphanCheckpointAreas(local_1d4);
    fVar20 = local_270;
    fVar27 = local_1c4;
  }
  local_270 = fVar27;
  local_1c4 = local_270;
  if ((local_300 & 0x10) != 0) {
    local_26c = "Overlap check";
    local_274 = local_1d4;
                    /* try { // try from 00990e42 to 00990e46 has its CatchHandler @ 00992af7 */
    CNavMesh::ClearSelectedSet(TheNavMesh);
    iVar22 = 0;
    if (0 < DAT_00fe6000) {
      do {
                    /* try { // try from 00991124 to 009911e5 has its CatchHandler @ 00992af7 */
        cVar23 = SelectOverlappingAreas::operator()(&local_2d1,(CNavArea *)TheNavAreas[iVar22]);
        if (cVar23 == '\0') break;
        iVar22 = iVar22 + 1;
      } while (iVar22 < DAT_00fe6000);
      iVar22 = 0;
      if (0 < DAT_00fe6000) {
        do {
          pCVar2 = (CNavArea *)TheNavAreas[iVar22];
          cVar23 = CNavMesh::IsInSelectedSet(TheNavMesh,pCVar2);
          if (cVar23 != '\0') {
            if (s_testNavID < 1) {
              cVar23 = IsAreaTestable(pCVar2);
            }
            else {
              cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
            }
            if (cVar23 != '\0') {
              local_2d0 = pCVar2;
              if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_009911d0:
                CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                          ((CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *)&local_1d0,
                           (int)local_1c4,&local_2d0);
              }
              else if (pCVar2 != (CNavArea *)*local_1d0) {
                fVar20 = 0.0;
                do {
                  fVar20 = (float)((int)fVar20 + 1);
                  if (fVar20 == local_1c4) goto LAB_009911d0;
                } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                if ((int)fVar20 < 0) goto LAB_009911d0;
              }
            }
          }
          iVar22 = iVar22 + 1;
        } while (iVar22 < DAT_00fe6000);
      }
    }
    if ((int)local_270 < *(int *)(local_274 + 0x10)) {
      Warning("%s found %d areas\n",local_26c,*(int *)(local_274 + 0x10) - (int)local_270);
      fVar20 = local_270;
    }
    else {
      Msg("%s passed\n",local_26c);
      fVar20 = local_270;
    }
  }
  local_270 = fVar20;
  if ((local_300 & 0x20) != 0) {
                    /* try { // try from 00990ea8 to 00990ec4 has its CatchHandler @ 0099240a */
    SelectCornerToCornerAreas(local_1d4);
  }
  if ((local_300 & 0x40) != 0) {
    SelectClimbUpFromStairs(local_1d4);
  }
  if ((local_300 & 0x80) != 0) {
    local_2f0 = (CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *)&local_1d0;
    local_260 = "Connection to overlapping area check";
    local_268 = local_1d4;
    local_264 = local_1c4;
    if (0 < DAT_00fe6000) {
      local_2e8 = (CNavArea *)0x0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[(int)local_2e8];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if (cVar23 != '\0') {
                    /* try { // try from 00990f5e to 00990fba has its CatchHandler @ 00992b4c */
          CNavArea::GetExtent(pCVar2,(Extent *)&local_cc);
          local_2e0 = pCVar2 + 0x58;
          do {
            if ((local_2e0 != (CNavArea *)0x0) && (piVar12 = *(int **)local_2e0, 0 < *piVar12)) {
              iVar22 = 0;
              do {
                pCVar3 = (CNavArea *)piVar12[iVar22 * 2 + 1];
                if (pCVar3 != (CNavArea *)0x0) {
                  CNavArea::GetExtent(pCVar3,(Extent *)&local_70);
                  local_cc = (CNavArea *)((float)local_cc + 1.0);
                  local_64 = (CUtlMemory<CNavLadder*,int> *)((float)local_64 - 1.0);
                  local_68 = local_c4;
                  local_c8 = local_c8 + 1.0;
                  local_c0 = local_c0 - 1.0;
                  local_bc = local_bc - 1.0;
                  local_70 = (NavAreaCollector *)((float)local_70 + 1.0);
                  local_5c = local_b8;
                  local_6c = local_6c + 1.0;
                  local_60 = (NavAreaCollector *)((float)local_60 - 1.0);
                  if (((((float)local_cc <= (float)local_64) && ((float)local_70 <= local_c0)) &&
                      (local_c8 <= (float)local_60)) &&
                     ((local_6c <= local_bc && ((float)local_c4 <= (float)local_b8)))) {
                    local_2cc = pCVar2;
                    if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00991cf0:
                    /* try { // try from 00991d07 to 00991d67 has its CatchHandler @ 00992b4c */
                      CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                (local_2f0,(int)local_1c4,&local_2cc);
                      if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4))
                      goto LAB_00991d2b;
LAB_00991d4c:
                      local_2c8 = pCVar3;
                      CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                (local_2f0,(int)local_1c4,&local_2c8);
                    }
                    else {
                      if (pCVar2 != (CNavArea *)*local_1d0) {
                        fVar20 = 0.0;
                        do {
                          fVar20 = (float)((int)fVar20 + 1);
                          if (fVar20 == local_1c4) goto LAB_00991cf0;
                        } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                        if ((int)fVar20 < 0) goto LAB_00991cf0;
                      }
LAB_00991d2b:
                      fVar20 = 0.0;
                      local_2c8 = pCVar3;
                      if (pCVar3 != (CNavArea *)*local_1d0) {
                        do {
                          fVar20 = (float)((int)fVar20 + 1);
                          if (fVar20 == local_1c4) goto LAB_00991d4c;
                        } while (pCVar3 != (CNavArea *)local_1d0[(int)fVar20]);
                        if ((int)fVar20 < 0) goto LAB_00991d4c;
                      }
                    }
                  }
                  piVar12 = *(int **)local_2e0;
                }
                iVar22 = iVar22 + 1;
              } while (iVar22 < *piVar12);
            }
            local_2e0 = local_2e0 + 4;
          } while (local_2e0 != pCVar2 + 0x68);
        }
        local_2e8 = (CNavArea *)((int)local_2e8 + 1);
      } while ((int)local_2e8 < DAT_00fe6000);
      if ((int)local_264 < *(int *)(local_268 + 0x10)) {
        Warning("%s found %d areas\n",local_260,*(int *)(local_268 + 0x10) - (int)local_264);
        goto LAB_0098ffec;
      }
    }
    Msg("%s passed\n",local_260);
  }
LAB_0098ffec:
  local_2f0 = (CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *)&local_1d0;
  if ((local_300 & 0x100) != 0) {
    local_25c = local_1d4;
    local_254 = "Long horizontal connection check";
    local_258 = local_1c4;
    if (0 < DAT_00fe6000) {
      local_304 = 0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[local_304];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if (cVar23 != '\0') {
          local_2e4 = (CNavArea *)0x0;
          local_2ec = (CUtlMemory<CNavLadder*,int> *)(pCVar2 + 0x58);
          do {
            if ((local_2ec != (CUtlMemory<CNavLadder*,int> *)0x0) &&
               (piVar12 = *(int **)local_2ec, 0 < *piVar12)) {
              iVar22 = 0;
              do {
                pCVar3 = (CNavArea *)piVar12[iVar22 * 2 + 1];
                if (pCVar3 != (CNavArea *)0x0) {
                    /* try { // try from 00991e9c to 0099229d has its CatchHandler @ 00992b2d */
                  CNavArea::ComputePortal(pCVar2,pCVar3,local_2e4,&local_16c,&local_1e8);
                  if (((1.0 <= (float)local_1e8) &&
                      (CNavArea::ComputePortal
                                 (pCVar3,pCVar2,*(undefined4 *)(CSWTCH_1258 + (int)local_2e4 * 4),
                                  &local_11c,&local_1e8), ABS(local_164 - local_114) <= 5.0)) &&
                     (625.0 <= (local_16c - local_11c) * (local_16c - local_11c) +
                               (local_168 - local_118) * (local_168 - local_118))) {
                    fVar28 = local_11c + local_16c;
                    fVar27 = local_118 + local_168;
                    fVar20 = (local_114 + local_164) * 0.5;
                    CTraceFilterSimple::CTraceFilterSimple
                              ((CTraceFilterSimple *)&local_cc,(IHandleEntity *)0x0,0,
                               (_func_bool_IHandleEntity_ptr_int *)0x0);
                    local_1a4 = (fVar20 - 41.8) - fVar20;
                    local_1ac = 0.0;
                    local_1a8 = 0.0;
                    local_cc = (CNavArea *)&PTR_ShouldHitEntity_00ca1b68;
                    local_bc = 2.10195e-44;
                    local_17c = 0;
                    local_177 = local_1a4 * local_1a4 != 0.0;
                    local_18c = ((float)WalkableTraceMaxs - WalkableTraceMins) * 0.5;
                    local_19c = ((float)WalkableTraceMaxs + WalkableTraceMins) * 0.5;
                    local_188 = ((float)DAT_0101692c - DAT_01016938) * 0.5;
                    local_198 = ((float)DAT_0101692c + DAT_01016938) * 0.5;
                    local_184 = (DAT_01016930 - DAT_0101693c) * 0.5;
                    local_194 = (DAT_01016930 + DAT_0101693c) * 0.5;
                    local_178 = local_18c * local_18c + local_184 * local_184 +
                                local_188 * local_188 < 1e-06;
                    local_1bc = fVar28 * 0.5 + local_19c;
                    local_19c = -local_19c;
                    local_1b8 = fVar27 * 0.5 + local_198;
                    local_198 = -local_198;
                    local_1b4 = fVar20 + local_194;
                    local_194 = -local_194;
                    (**(code **)(*enginetrace + 0x14))
                              (enginetrace,&local_1bc,0x2420b,&local_cc,(Vector *)&local_70);
                    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                      in_stack_fffffcd8 = 1.4013e-45;
                      DebugDrawLine((Vector *)&local_70,(Vector *)&local_64,0xff,0xff,0,true,-1.0);
                    }
                    if ((local_39 != '\0') || (local_44 < 1.0)) {
                      local_2c4 = pCVar2;
                      if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00992228:
                        CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                  (local_2f0,(int)local_1c4,&local_2c4);
                        if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4))
                        goto LAB_00992263;
LAB_00992282:
                        local_2c0 = pCVar3;
                        CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                  (local_2f0,(int)local_1c4,&local_2c0);
                      }
                      else {
                        if (pCVar2 != (CNavArea *)*local_1d0) {
                          fVar20 = 0.0;
                          do {
                            fVar20 = (float)((int)fVar20 + 1);
                            if (fVar20 == local_1c4) goto LAB_00992228;
                          } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                          if ((int)fVar20 < 0) goto LAB_00992228;
                        }
LAB_00992263:
                        fVar20 = 0.0;
                        local_2c0 = pCVar3;
                        if (pCVar3 != (CNavArea *)*local_1d0) {
                          do {
                            fVar20 = (float)((int)fVar20 + 1);
                            if (fVar20 == local_1c4) goto LAB_00992282;
                          } while (pCVar3 != (CNavArea *)local_1d0[(int)fVar20]);
                          if ((int)fVar20 < 0) goto LAB_00992282;
                        }
                      }
                    }
                  }
                  piVar12 = *(int **)local_2ec;
                }
                iVar22 = iVar22 + 1;
              } while (iVar22 < *piVar12);
            }
            local_2e4 = (CNavArea *)((int)local_2e4 + 1);
            local_2ec = local_2ec + 4;
          } while (local_2e4 != (CNavArea *)0x4);
        }
        local_304 = local_304 + 1;
      } while (local_304 < DAT_00fe6000);
      if ((int)local_258 < *(int *)(local_25c + 0x10)) {
        Warning("%s found %d areas\n",local_254,*(int *)(local_25c + 0x10) - (int)local_258);
        goto LAB_0098fffc;
      }
    }
    Msg("%s passed\n",local_254);
  }
LAB_0098fffc:
  if ((local_300 & 0x200) != 0) {
    local_250 = local_1d4;
    local_248 = "Double connections check";
    local_24c = local_1c4;
    if (0 < DAT_00fe6000) {
      local_2e8 = (CNavArea *)0x0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[(int)local_2e8];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if (cVar23 != '\0') {
          local_2e4 = pCVar2 + 0x58;
          local_70 = (NavAreaCollector *)0x0;
          local_6c = 0.0;
          local_68 = (char *)0x0;
          local_64 = (CUtlMemory<CNavLadder*,int> *)0x0;
          local_60 = (NavAreaCollector *)0x0;
          do {
            if ((local_2e4 != (CNavArea *)0x0) &&
               (local_2e0 = *(CNavArea **)local_2e4, 0 < *(int *)local_2e0)) {
              iVar22 = 0;
              do {
                while ((pCVar3 = *(CNavArea **)((int)local_2e0 + (iVar22 * 2 + 1) * 4),
                       pCVar3 == (CNavArea *)0x0 || ((int)local_64 < 1))) {
LAB_00991b2c:
                  iVar22 = iVar22 + 1;
                  if (*(int *)local_2e0 <= iVar22) goto LAB_00991b39;
                }
                if (pCVar3 != *(CNavArea **)local_70) {
                  pCVar19 = (CUtlMemory<CNavLadder*,int> *)0x0;
                  do {
                    pCVar19 = pCVar19 + 1;
                    if (pCVar19 == local_64) goto LAB_00991b2c;
                  } while (pCVar3 != *(CNavArea **)(local_70 + (int)pCVar19 * 4));
                  if ((int)pCVar19 < 0) goto LAB_00991b2c;
                }
                local_2bc = pCVar2;
                if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00991bc0:
                    /* try { // try from 00991bd7 to 00991c55 has its CatchHandler @ 00992b6b */
                  CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                            (local_2f0,(int)local_1c4,&local_2bc);
                  if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4))
                  goto LAB_00991bfb;
LAB_00991c18:
                  local_2b8 = pCVar3;
                  CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                            (local_2f0,(int)local_1c4,&local_2b8);
                }
                else {
                  if (pCVar2 != (CNavArea *)*local_1d0) {
                    fVar20 = 0.0;
                    do {
                      fVar20 = (float)((int)fVar20 + 1);
                      if (fVar20 == local_1c4) goto LAB_00991bc0;
                    } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                    if ((int)fVar20 < 0) goto LAB_00991bc0;
                  }
LAB_00991bfb:
                  local_2b8 = pCVar3;
                  if (pCVar3 != (CNavArea *)*local_1d0) {
                    fVar20 = 0.0;
                    do {
                      fVar20 = (float)((int)fVar20 + 1);
                      if (fVar20 == local_1c4) goto LAB_00991c18;
                    } while (pCVar3 != (CNavArea *)local_1d0[(int)fVar20]);
                    if ((int)fVar20 < 0) goto LAB_00991c18;
                  }
                }
                local_cc = pCVar3;
                CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                          ((CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *)&local_70,
                           (int)local_64,&local_cc);
                iVar22 = iVar22 + 1;
                local_2e0 = *(CNavArea **)local_2e4;
              } while (iVar22 < *(int *)local_2e0);
            }
LAB_00991b39:
            local_2e4 = local_2e4 + 4;
          } while (local_2e4 != pCVar2 + 0x68);
          local_64 = (CUtlMemory<CNavLadder*,int> *)0x0;
          CUtlMemory<CNavArea*,int>::Purge((CUtlMemory<CNavArea*,int> *)&local_70);
          local_60 = local_70;
          CUtlMemory<CNavArea*,int>::Purge((CUtlMemory<CNavArea*,int> *)&local_70);
        }
        local_2e8 = (CNavArea *)((int)local_2e8 + 1);
      } while ((int)local_2e8 < DAT_00fe6000);
      if ((int)local_24c < *(int *)(local_250 + 0x10)) {
        Warning("%s found %d areas\n",local_248,*(int *)(local_250 + 0x10) - (int)local_24c);
        goto LAB_0099000c;
      }
    }
    Msg("%s passed\n",local_248);
  }
LAB_0099000c:
  if ((local_300 & 0x400) != 0) {
    local_23c = "Floating/interpenetrating world check";
    local_244 = local_1d4;
    local_1fc = 0;
    local_1f8 = 0;
    local_1f4 = 0;
    local_240 = local_1c4;
    local_1f0 = 0;
    local_1ec = 0;
    local_2b4 = (CBaseEntity *)0x0;
    while (local_2b4 = (CBaseEntity *)
                       CGlobalEntityList::FindEntityByClassname
                                 ((CGlobalEntityList *)gEntList,local_2b4,"func_nav_blocker"),
          local_2b4 != (CBaseEntity *)0x0) {
                    /* try { // try from 00990817 to 00990d2c has its CatchHandler @ 009923b2 */
      CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
                ((CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> *)&local_1fc,local_1f0,
                 &local_2b4);
    }
    local_2b4 = (CBaseEntity *)0x0;
    if (0 < DAT_00fe6000) {
      iVar22 = 0;
      do {
        while( true ) {
          pCVar2 = (CNavArea *)TheNavAreas[iVar22];
          if (s_testNavID < 1) {
            cVar23 = IsAreaTestable(pCVar2);
          }
          else {
            cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
          }
          if ((((cVar23 == '\0') || (*(int *)(gpGlobals + 0x18) <= *(int *)(pCVar2 + 0x70))) ||
              (cVar23 = CNavArea::IsBlocked(pCVar2,-1,false), cVar23 != '\0')) ||
             ((*(uint *)(pCVar2 + 0x54) & 0x30000) != 0)) goto LAB_00990872;
          CNavArea::GetExtent(pCVar2,(Extent *)&local_1bc);
          if (0 < local_1f0) {
            local_2e4 = (CNavArea *)0x0;
            do {
              iVar10 = *(int *)(local_1fc + (int)local_2e4 * 4);
              (**(code **)(*(int *)(iVar10 + 0x194) + 0x3c))(iVar10 + 0x194,&local_70,&local_64);
              local_64 = (CUtlMemory<CNavLadder*,int> *)((float)local_64 + 100.0);
              local_70 = (NavAreaCollector *)((float)local_70 - 100.0);
              local_6c = local_6c - 100.0;
              local_68 = (char *)((float)local_68 - 100.0);
              local_60 = (NavAreaCollector *)((float)local_60 + 100.0);
              local_5c = (char *)((float)local_5c + 100.0);
              if ((((local_1bc <= (float)local_64) && ((float)local_70 <= local_1b0)) &&
                  ((local_1b8 <= (float)local_60 &&
                   ((local_6c <= local_1ac && (local_1b4 <= (float)local_5c)))))) &&
                 ((float)local_68 <= local_1a8)) goto LAB_00990872;
              local_2e4 = (CNavArea *)((int)local_2e4 + 1);
            } while ((int)local_2e4 < local_1f0);
          }
          local_220 = *(CUtlMemory<CNavLadder*,int> **)(pCVar2 + 0x2c);
          local_21c = *(NavAreaCollector **)(pCVar2 + 0x30);
          local_218 = (char *)(*(float *)(pCVar2 + 0x34) + 18.0);
          local_208 = WalkableTraceMaxs;
          local_200 = (char *)0x418c0000;
          local_20c = (char *)((float)local_218 + 1000.0);
          local_204 = DAT_0101692c;
          this = (CTraceFilterSimple *)&local_1e8;
          local_214 = local_220;
          local_210 = local_21c;
          CTraceFilterSimple::CTraceFilterSimple
                    (this,(IHandleEntity *)0x0,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
          local_1e8 = &PTR_ShouldHitEntity_00ca1b68;
          local_1d8 = (undefined **)0x7;
          local_15c = (float)local_214 - (float)local_220;
          local_12c = 0;
          local_154 = (float)local_20c - (float)local_218;
          local_158 = (float)local_210 - (float)local_21c;
          local_127 = local_154 * local_154 + local_15c * local_15c + local_158 * local_158 != 0.0;
          local_13c = ((float)local_208 - WalkableTraceMins) * 0.5;
          local_138 = ((float)local_204 - DAT_01016938) * 0.5;
          local_134 = ((float)local_200 - DAT_0101693c) * 0.5;
          local_14c = ((float)local_208 + WalkableTraceMins) * 0.5;
          local_148 = ((float)local_204 + DAT_01016938) * 0.5;
          local_144 = ((float)local_200 + DAT_0101693c) * 0.5;
          local_128 = local_138 * local_138 + local_134 * local_134 + local_13c * local_13c < 1e-06;
          local_16c = (float)local_220 + local_14c;
          local_168 = (float)local_21c + local_148;
          local_164 = (float)local_218 + local_144;
          local_14c = -local_14c;
          local_148 = -local_148;
          local_144 = -local_144;
          pVVar29 = (Vector *)&local_16c;
          fVar20 = 2.29743e-41;
          pCVar30 = this;
          pVVar31 = (Vector *)&local_70;
          (**(code **)(*enginetrace + 0x14))(enginetrace);
          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
            pVVar29 = (Vector *)&local_64;
            in_stack_fffffcd8 = 1.4013e-45;
            pVVar31 = (Vector *)0x0;
            pCVar30 = (CTraceFilterSimple *)0xff;
            fVar20 = 3.57331e-43;
            DebugDrawLine((Vector *)&local_70,pVVar29,0xff,0xff,0,true,-1.0);
          }
          if (local_39 != '\0') break;
          local_220 = local_64;
          local_21c = local_60;
          local_218 = local_5c;
          local_10c = (float)local_214 - (float)local_64;
          local_20c = (char *)(*(float *)(pCVar2 + 0x34) + 18.0);
          local_dc = 0;
          local_108 = (float)local_210 - (float)local_60;
          local_104 = (float)local_20c - (float)local_5c;
          local_d7 = local_108 * local_108 + local_10c * local_10c + local_104 * local_104 != 0.0;
          local_ec = ((float)local_208 - WalkableTraceMins) * 0.5;
          local_e8 = ((float)local_204 - DAT_01016938) * 0.5;
          local_e4 = ((float)local_200 - DAT_0101693c) * 0.5;
          local_fc = ((float)local_208 + WalkableTraceMins) * 0.5;
          local_f8 = ((float)local_204 + DAT_01016938) * 0.5;
          local_d8 = local_e4 * local_e4 + local_e8 * local_e8 + local_ec * local_ec < 1e-06;
          local_11c = (float)local_64 + local_fc;
          local_118 = (float)local_60 + local_f8;
          local_fc = -local_fc;
          local_f4 = (DAT_0101693c + (float)local_200) * 0.5;
          local_f8 = -local_f8;
          local_114 = (float)local_5c + local_f4;
          local_f4 = -local_f4;
          pVVar29 = (Vector *)&local_11c;
          fVar20 = 2.29743e-41;
                    /* try { // try from 009925e7 to 00992660 has its CatchHandler @ 009923b2 */
          pCVar30 = this;
          pVVar31 = (Vector *)&local_70;
          (**(code **)(*enginetrace + 0x14))(enginetrace);
          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
            pVVar29 = (Vector *)&local_64;
            in_stack_fffffcd8 = 1.4013e-45;
            pVVar31 = (Vector *)0x0;
            pCVar30 = (CTraceFilterSimple *)0xff;
            fVar20 = 3.57331e-43;
            DebugDrawLine((Vector *)&local_70,pVVar29,0xff,0xff,0,true,-1.0);
          }
          if (local_39 == '\0') {
            local_220 = *(CUtlMemory<CNavLadder*,int> **)(pCVar2 + 0x2c);
            local_21c = *(NavAreaCollector **)(pCVar2 + 0x30);
            local_b8 = (char *)((float)local_210 - (float)local_21c);
            local_b4 = 0xc2b20000;
            local_8c = 0;
            local_218 = (char *)(*(float *)(pCVar2 + 0x34) + 18.0);
            local_20c = (char *)(*(float *)(pCVar2 + 0x34) - 71.0);
            local_bc = (float)local_214 - (float)local_220;
            local_87 = (float)local_b8 * (float)local_b8 + local_bc * local_bc != -7921.0;
            local_9c = ((float)local_208 - WalkableTraceMins) * 0.5;
            local_98 = ((float)local_204 - DAT_01016938) * 0.5;
            local_94 = ((float)local_200 - DAT_0101693c) * 0.5;
            local_ac = ((float)local_208 + WalkableTraceMins) * 0.5;
            local_a8 = ((float)local_204 + DAT_01016938) * 0.5;
            local_a4 = ((float)local_200 + DAT_0101693c) * 0.5;
            local_cc = (CNavArea *)((float)local_220 + local_ac);
            local_88 = local_98 * local_98 + local_9c * local_9c + local_94 * local_94 < 1e-06;
            local_c8 = (float)local_21c + local_a8;
            local_c4 = (char *)((float)local_218 + local_a4);
            local_ac = -local_ac;
            local_a8 = -local_a8;
            local_a4 = -local_a4;
            pVVar29 = (Vector *)&local_cc;
            fVar20 = 9.569845e-38;
                    /* try { // try from 009928f0 to 0099297b has its CatchHandler @ 009923b2 */
            pVVar31 = (Vector *)&local_70;
            (**(code **)(*enginetrace + 0x14))(enginetrace);
            if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
              pVVar29 = (Vector *)&local_64;
              in_stack_fffffcd8 = 1.4013e-45;
              pVVar31 = (Vector *)0x0;
              this = (CTraceFilterSimple *)0xff;
              fVar20 = 3.57331e-43;
              DebugDrawLine((Vector *)&local_70,pVVar29,0xff,0xff,0,true,-1.0);
            }
            if (local_39 == '\0') {
              if (local_44 < 1.0) {
                    /* try { // try from 00992c4d to 00992d22 has its CatchHandler @ 009923b2 */
                DrawTroubleSweptHull
                          (pCVar2,(Vector *)&local_220,(Vector *)&local_214,(Vector *)&local_208,
                           pVVar29,fVar20,(float)this,(float)pVVar31,in_stack_fffffcd8);
              }
              else {
                DrawTroubleSweptHull
                          (pCVar2,(Vector *)&local_220,(Vector *)&local_214,(Vector *)&local_208,
                           pVVar29,fVar20,(float)this,(float)pVVar31,in_stack_fffffcd8);
                local_2a4 = pCVar2;
                if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_009929b9:
                  ppCVar14 = &local_2a4;
                  goto LAB_00990d17;
                }
                if (pCVar2 != (CNavArea *)*local_1d0) {
                  fVar20 = 0.0;
                  do {
                    fVar20 = (float)((int)fVar20 + 1);
                    if (fVar20 == local_1c4) goto LAB_009929b9;
                  } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                  if ((int)fVar20 < 0) goto LAB_009929b9;
                }
              }
            }
            else {
              if (((*(int *)(pCVar2 + 0x8c) == s_testNavID) ||
                  (*(int *)(pCVar2 + 0x8c) == *(int *)(nav_trouble_test_area._28_4_ + 0x30))) &&
                 (0.0 < *(float *)(nav_trouble_test_debug_duration._28_4_ + 0x2c))) {
                in_stack_fffffcd8 = 0.0;
                NDebugOverlay::Box((Vector *)&local_220,(Vector *)&WalkableTraceMins,
                                   (Vector *)&local_208,0xff,0,0,0,
                                   *(float *)(nav_trouble_test_debug_duration._28_4_ + 0x2c));
              }
              if ((local_24 == 0) || (local_24 == g_WorldEntity)) {
                local_2a8 = pCVar2;
                if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00992cc0:
                  ppCVar14 = &local_2a8;
                  goto LAB_00990d17;
                }
                if (pCVar2 != (CNavArea *)*local_1d0) {
                  fVar20 = 0.0;
                  do {
                    fVar20 = (float)((int)fVar20 + 1);
                    if (fVar20 == local_1c4) goto LAB_00992cc0;
                  } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                  if ((int)fVar20 < 0) goto LAB_00992cc0;
                }
              }
            }
          }
          else {
            DrawTroubleSweptHull
                      (pCVar2,(Vector *)&local_220,(Vector *)&local_214,(Vector *)&local_208,pVVar29
                       ,fVar20,(float)pCVar30,(float)pVVar31,in_stack_fffffcd8);
            local_2ac = pCVar2;
            if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_0099269e:
              ppCVar14 = &local_2ac;
              goto LAB_00990d17;
            }
            if (pCVar2 != (CNavArea *)*local_1d0) {
              fVar20 = 0.0;
              do {
                fVar20 = (float)((int)fVar20 + 1);
                if (fVar20 == local_1c4) goto LAB_0099269e;
              } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
              if ((int)fVar20 < 0) goto LAB_0099269e;
            }
          }
LAB_00990872:
          iVar22 = iVar22 + 1;
          if (DAT_00fe6000 <= iVar22) goto LAB_00990d3c;
        }
        DrawTroubleSweptHull
                  (pCVar2,(Vector *)&local_220,(Vector *)&local_214,(Vector *)&local_208,pVVar29,
                   fVar20,(float)pCVar30,(float)pVVar31,in_stack_fffffcd8);
        local_2b0 = pCVar2;
        if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4)) {
          if (pCVar2 != (CNavArea *)*local_1d0) {
            fVar20 = 0.0;
            do {
              fVar20 = (float)((int)fVar20 + 1);
              if (fVar20 == local_1c4) goto LAB_00990d11;
            } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
            if ((int)fVar20 < 0) goto LAB_00990d11;
          }
          goto LAB_00990872;
        }
LAB_00990d11:
        ppCVar14 = &local_2b0;
LAB_00990d17:
        CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                  (local_2f0,(int)local_1c4,ppCVar14);
        iVar22 = iVar22 + 1;
      } while (iVar22 < DAT_00fe6000);
    }
LAB_00990d3c:
    local_1f0 = 0;
    CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)&local_1fc);
    local_1ec = local_1fc;
    CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)&local_1fc);
    if ((int)local_240 < *(int *)(local_244 + 0x10)) {
      Warning("%s found %d areas\n",local_23c,*(int *)(local_244 + 0x10) - (int)local_240);
    }
    else {
      Msg("%s passed\n",local_23c);
    }
  }
  if ((local_300 & 0x800) != 0) {
                    /* try { // try from 009905c1 to 009905c5 has its CatchHandler @ 0099240a */
    SelectAreasWithNonWalkableConnections(local_1d4);
  }
  if ((local_300 & 0x10000) != 0) {
    local_238 = local_1d4;
    local_230 = "Long vertical connection check";
    local_234 = local_1c4;
    if (0 < DAT_00fe6000) {
      local_2ec = (CUtlMemory<CNavLadder*,int> *)0x0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[(int)local_2ec];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if (cVar23 != '\0') {
          local_2e8 = pCVar2 + 0x58;
          do {
            if ((local_2e8 != (CNavArea *)0x0) && (piVar12 = *(int **)local_2e8, 0 < *piVar12)) {
              iVar22 = 0;
              do {
                pCVar3 = (CNavArea *)piVar12[iVar22 * 2 + 1];
                if (pCVar3 != (CNavArea *)0x0) {
                    /* try { // try from 009906ab to 0099078d has its CatchHandler @ 00992aaa */
                  lVar25 = (longdouble)CNavArea::GetZDeltaAtEdgeToArea(pCVar2,pCVar3);
                  lVar26 = (longdouble)CNavArea::GetZDeltaAtEdgeToArea(pCVar2,pCVar2);
                  if (((float)lVar26 < -180.0) || (180.0 < (float)lVar25)) {
                    local_2a0 = pCVar2;
                    if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00990718:
                      CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                (local_2f0,(int)local_1c4,&local_2a0);
                      if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4))
                      goto LAB_00990753;
LAB_00990772:
                      local_29c = pCVar3;
                      CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                (local_2f0,(int)local_1c4,&local_29c);
                    }
                    else {
                      if (pCVar2 != (CNavArea *)*local_1d0) {
                        fVar20 = 0.0;
                        do {
                          fVar20 = (float)((int)fVar20 + 1);
                          if (fVar20 == local_1c4) goto LAB_00990718;
                        } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                        if ((int)fVar20 < 0) goto LAB_00990718;
                      }
LAB_00990753:
                      fVar20 = 0.0;
                      local_29c = pCVar3;
                      if (pCVar3 != (CNavArea *)*local_1d0) {
                        do {
                          fVar20 = (float)((int)fVar20 + 1);
                          if (fVar20 == local_1c4) goto LAB_00990772;
                        } while (pCVar3 != (CNavArea *)local_1d0[(int)fVar20]);
                        if ((int)fVar20 < 0) goto LAB_00990772;
                      }
                    }
                  }
                  piVar12 = *(int **)local_2e8;
                }
                iVar22 = iVar22 + 1;
              } while (iVar22 < *piVar12);
            }
            local_2e8 = local_2e8 + 4;
          } while (local_2e8 != pCVar2 + 0x68);
        }
        local_2ec = (CUtlMemory<CNavLadder*,int> *)((int)local_2ec + 1);
      } while ((int)local_2ec < DAT_00fe6000);
      if ((int)local_234 < *(int *)(local_238 + 0x10)) {
        Warning("%s found %d areas\n",local_230,*(int *)(local_238 + 0x10) - (int)local_234);
        goto LAB_0099003c;
      }
    }
    Msg("%s passed\n",local_230);
  }
LAB_0099003c:
  if ((local_300 & 0x20000) != 0) {
    local_22c = local_1d4;
    local_224 = "Short vertical one way connection check";
    local_228 = local_1c4;
    if (0 < DAT_00fe6000) {
      local_2f4 = 0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[local_2f4];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if (cVar23 != '\0') {
          local_2e4 = (CNavArea *)0x0;
          local_2e0 = pCVar2 + 0x58;
          do {
            if ((local_2e0 != (CNavArea *)0x0) && (piVar12 = *(int **)local_2e0, 0 < *piVar12)) {
              iVar22 = 0;
              do {
                pCVar3 = (CNavArea *)piVar12[iVar22 * 2 + 1];
                if (pCVar3 != (CNavArea *)0x0) {
                    /* try { // try from 00990123 to 0099024d has its CatchHandler @ 009929e9 */
                  cVar23 = CNavArea::IsConnected
                                     (pCVar3,pCVar2,
                                      *(undefined4 *)(CSWTCH_1258 + (int)local_2e4 * 4));
                  if (cVar23 == '\0') {
                    lVar25 = (longdouble)CNavArea::GetZDeltaAtEdgeToArea(pCVar2,pCVar3);
                    lVar26 = (longdouble)CNavArea::GetZDeltaAtEdgeToArea(pCVar2,pCVar2);
                    if ((ABS((float)lVar25) <= 32.0) && (ABS(-(float)lVar26) <= 32.0)) {
                      local_298 = pCVar2;
                      if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_009901d0:
                        CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                  (local_2f0,(int)local_1c4,&local_298);
                        if ((local_1d4[0] != (NavAreaCollector)0x0) && (0 < (int)local_1c4))
                        goto LAB_0099020b;
LAB_00990232:
                        local_294 = pCVar3;
                        CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                                  (local_2f0,(int)local_1c4,&local_294);
                      }
                      else {
                        if (pCVar2 != (CNavArea *)*local_1d0) {
                          fVar20 = 0.0;
                          do {
                            fVar20 = (float)((int)fVar20 + 1);
                            if (fVar20 == local_1c4) goto LAB_009901d0;
                          } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
                          if ((int)fVar20 < 0) goto LAB_009901d0;
                        }
LAB_0099020b:
                        fVar20 = 0.0;
                        local_294 = pCVar3;
                        if (pCVar3 != (CNavArea *)*local_1d0) {
                          do {
                            fVar20 = (float)((int)fVar20 + 1);
                            if (fVar20 == local_1c4) goto LAB_00990232;
                          } while (pCVar3 != (CNavArea *)local_1d0[(int)fVar20]);
                          if ((int)fVar20 < 0) goto LAB_00990232;
                        }
                      }
                    }
                  }
                  piVar12 = *(int **)local_2e0;
                }
                iVar22 = iVar22 + 1;
              } while (iVar22 < *piVar12);
            }
            local_2e4 = (CNavArea *)((int)local_2e4 + 1);
            local_2e0 = local_2e0 + 4;
          } while (local_2e4 != (CNavArea *)0x4);
        }
        local_2f4 = local_2f4 + 1;
      } while (local_2f4 < DAT_00fe6000);
      if ((int)local_228 < *(int *)(local_22c + 0x10)) {
        Warning("%s found %d areas\n",local_224,*(int *)(local_22c + 0x10) - (int)local_228);
        goto LAB_009902b9;
      }
    }
    Msg("%s passed\n",local_224);
  }
LAB_009902b9:
  pCVar6 = TheNavMesh;
  local_1e8 = (undefined **)0x0;
  local_1e4 = 0;
  local_1e0 = 0;
  local_1dc = (NavAreaCollector *)0x0;
  local_1d8 = (undefined **)0x0;
  pNVar21 = local_1dc;
  if ((local_300 & 0x1000) != 0) {
    local_218 = "Disconnected ladder check";
    local_21c = (NavAreaCollector *)0x0;
    local_220 = (CUtlMemory<CNavLadder*,int> *)&local_1e8;
    if (0 < *(int *)(TheNavMesh + 0x51c)) {
      local_304 = 0;
      local_30c = 0;
      local_308 = (CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *)&local_1e8;
      do {
        bVar24 = true;
        pCVar5 = *(CNavLadder **)(*(int *)(pCVar6 + 0x510) + local_30c * 4);
        if ((*(int *)(pCVar5 + 0x24) == 0) && (*(int *)(pCVar5 + 0x28) == 0)) {
          bVar24 = *(int *)(pCVar5 + 0x2c) != 0;
        }
        if (DAT_00fe6000 < 1) {
LAB_00991417:
          if ((!bVar24) && (*(int *)(pCVar5 + 0x34) == 0)) {
            local_288 = pCVar5;
            if (local_304 < 1) {
LAB_00991790:
              ppCVar17 = &local_288;
LAB_009916b0:
                    /* try { // try from 009916c7 to 009916cb has its CatchHandler @ 00992a4f */
              CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>>::InsertBefore
                        (local_308,local_304,ppCVar17);
              local_308 = (CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *)local_220;
              local_304 = *(int *)(local_220 + 0xc);
            }
            else if (pCVar5 != (CNavLadder *)**(int **)local_308) {
              iVar22 = 0;
              do {
                iVar22 = iVar22 + 1;
                if (iVar22 == local_304) goto LAB_00991790;
              } while (pCVar5 != (CNavLadder *)(*(int **)local_308)[iVar22]);
              if (iVar22 < 0) {
                ppCVar17 = &local_288;
                goto LAB_009916b0;
              }
            }
          }
        }
        else {
          bVar8 = false;
          bVar7 = false;
          local_2e4 = (CNavArea *)TheNavAreas;
          do {
            piVar12 = *(int **)(*(int *)local_2e4 + 0x6c);
            iVar22 = *piVar12;
            if (0 < iVar22) {
              iVar10 = 0;
              do {
                if (pCVar5 == (CNavLadder *)piVar12[iVar10 + 1]) {
                  bVar7 = true;
                }
                iVar10 = iVar10 + 1;
              } while (iVar10 != iVar22);
            }
            piVar12 = *(int **)(*(int *)local_2e4 + 0x68);
            iVar22 = *piVar12;
            if (0 < iVar22) {
              iVar10 = 0;
              do {
                if (pCVar5 == (CNavLadder *)piVar12[iVar10 + 1]) {
                  bVar8 = true;
                }
                iVar10 = iVar10 + 1;
              } while (iVar10 != iVar22);
            }
            local_2e4 = (CNavArea *)((int)local_2e4 + 4);
          } while (local_2e4 != (CNavArea *)(TheNavAreas + DAT_00fe6000));
          if ((bVar7) && (*(int *)(pCVar5 + 0x34) == 0)) {
            local_290 = pCVar5;
            if (local_304 < 1) {
LAB_009916aa:
              ppCVar17 = &local_290;
              goto LAB_009916b0;
            }
            if (pCVar5 != (CNavLadder *)**(int **)local_308) {
              iVar22 = 0;
              do {
                iVar22 = iVar22 + 1;
                if (iVar22 == local_304) goto LAB_009916aa;
              } while (pCVar5 != (CNavLadder *)(*(int **)local_308)[iVar22]);
              if (iVar22 < 0) goto LAB_009916aa;
            }
          }
          else {
            if (!bVar8) goto LAB_00991417;
            if (!bVar24) {
              local_28c = pCVar5;
              if (local_304 < 1) {
LAB_00991722:
                ppCVar17 = &local_28c;
                goto LAB_009916b0;
              }
              if (pCVar5 != (CNavLadder *)**(int **)local_308) {
                iVar22 = 0;
                do {
                  iVar22 = iVar22 + 1;
                  if (iVar22 == local_304) goto LAB_00991722;
                } while (pCVar5 != (CNavLadder *)(*(int **)local_308)[iVar22]);
                if (iVar22 < 0) {
                  ppCVar17 = &local_28c;
                  goto LAB_009916b0;
                }
              }
            }
          }
        }
        local_30c = local_30c + 1;
      } while (local_30c < *(int *)(pCVar6 + 0x51c));
      if ((int)local_21c < local_304) {
        Warning("%s found %d ladders\n",local_218,local_304 - (int)local_21c);
        pCVar6 = TheNavMesh;
        pNVar21 = local_1dc;
        goto joined_r0x00991470;
      }
    }
    Msg("%s passed\n",local_218);
    pCVar6 = TheNavMesh;
    pNVar21 = local_1dc;
  }
joined_r0x00991470:
  TheNavMesh = pCVar6;
  local_1dc = pNVar21;
  if ((local_300 & 0x2000) != 0) {
    local_20c = "Overlapping ladder check";
    local_2f4 = 0;
    iVar22 = *(int *)(pCVar6 + 0x51c);
    local_2ec = (CUtlMemory<CNavLadder*,int> *)&local_1e8;
    local_214 = (CUtlMemory<CNavLadder*,int> *)&local_1e8;
    local_210 = pNVar21;
LAB_009914ba:
    if (local_2f4 < iVar22) {
      iVar18 = local_2f4 + 1;
      iVar10 = local_2f4 * 4;
      iVar15 = *(int *)(pCVar6 + 0x510);
      pCVar5 = *(CNavLadder **)(iVar15 + local_2f4 * 4);
      local_2f4 = iVar18;
      local_2e0 = (CNavArea *)iVar18;
      if (iVar18 < iVar22) {
        do {
          iVar10 = iVar10 + 4;
          pCVar4 = *(CNavLadder **)(iVar15 + iVar10);
          if (((*(float *)(pCVar5 + 0xc) - *(float *)(pCVar4 + 0xc)) *
               (*(float *)(pCVar5 + 0xc) - *(float *)(pCVar4 + 0xc)) +
               (*(float *)(pCVar5 + 4) - *(float *)(pCVar4 + 4)) *
               (*(float *)(pCVar5 + 4) - *(float *)(pCVar4 + 4)) +
               (*(float *)(pCVar5 + 8) - *(float *)(pCVar4 + 8)) *
               (*(float *)(pCVar5 + 8) - *(float *)(pCVar4 + 8)) < 2500.0) &&
             ((*(float *)(pCVar5 + 0x18) - *(float *)(pCVar4 + 0x18)) *
              (*(float *)(pCVar5 + 0x18) - *(float *)(pCVar4 + 0x18)) +
              (*(float *)(pCVar5 + 0x14) - *(float *)(pCVar4 + 0x14)) *
              (*(float *)(pCVar5 + 0x14) - *(float *)(pCVar4 + 0x14)) +
              (*(float *)(pCVar5 + 0x10) - *(float *)(pCVar4 + 0x10)) *
              (*(float *)(pCVar5 + 0x10) - *(float *)(pCVar4 + 0x10)) < 2500.0)) {
            local_284 = pCVar5;
            if ((int)pNVar21 < 1) {
LAB_009915d8:
                    /* try { // try from 009915ef to 0099164d has its CatchHandler @ 00992a08 */
              CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>>::InsertBefore
                        ((CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *)local_2ec,
                         (int)pNVar21,&local_284);
              pNVar21 = *(NavAreaCollector **)(local_214 + 0xc);
              local_2ec = local_214;
              if (0 < (int)pNVar21) goto LAB_0099160d;
LAB_00991632:
              local_280 = pCVar4;
              CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>>::InsertBefore
                        ((CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *)local_2ec,
                         (int)pNVar21,&local_280);
              pNVar21 = *(NavAreaCollector **)(local_214 + 0xc);
              local_2ec = local_214;
            }
            else {
              if (pCVar5 != (CNavLadder *)**(int **)local_2ec) {
                pNVar16 = (NavAreaCollector *)0x0;
                do {
                  pNVar16 = pNVar16 + 1;
                  if (pNVar16 == pNVar21) goto LAB_009915d8;
                } while (pCVar5 != (CNavLadder *)(*(int **)local_2ec)[(int)pNVar16]);
                if ((int)pNVar16 < 0) goto LAB_009915d8;
              }
LAB_0099160d:
              pNVar16 = (NavAreaCollector *)0x0;
              local_280 = pCVar4;
              if (pCVar4 != (CNavLadder *)**(int **)local_2ec) {
                do {
                  pNVar16 = pNVar16 + 1;
                  if (pNVar16 == pNVar21) goto LAB_00991632;
                } while (pCVar4 != (CNavLadder *)(*(int **)local_2ec)[(int)pNVar16]);
                if ((int)pNVar16 < 0) goto LAB_00991632;
              }
            }
            iVar22 = *(int *)(pCVar6 + 0x51c);
          }
          if (iVar22 <= (int)local_2e0 + 1) break;
          iVar15 = *(int *)(pCVar6 + 0x510);
          local_2e0 = (CNavArea *)((int)local_2e0 + 1);
        } while( true );
      }
      goto LAB_009914ba;
    }
    if ((int)local_210 < (int)pNVar21) {
      Warning("%s found %d ladders\n",local_20c,(int)pNVar21 - (int)local_210);
    }
    else {
      Msg("%s passed\n",local_20c);
    }
  }
  pCVar6 = TheNavMesh;
  if ((local_300 & 0x4000) != 0) {
    local_200 = "Non-climbable ladder check";
    local_204 = local_1dc;
    local_208 = (CUtlMemory<CNavLadder*,int> *)&local_1e8;
    if (0 < *(int *)(TheNavMesh + 0x51c)) {
      iVar22 = 0;
      do {
        pCVar5 = *(CNavLadder **)(*(int *)(pCVar6 + 0x510) + iVar22 * 4);
        local_6c = *(float *)(pCVar5 + 0x14) - 50.0;
        local_68 = (char *)(*(float *)(pCVar5 + 0x18) - 50.0);
        local_70 = (NavAreaCollector *)(*(float *)(pCVar5 + 0x10) - 50.0);
        local_60 = (NavAreaCollector *)(*(float *)(pCVar5 + 8) + 50.0);
        local_5c = (char *)(*(float *)(pCVar5 + 0xc) + 50.0);
        local_64 = (CUtlMemory<CNavLadder*,int> *)(*(float *)(pCVar5 + 4) + 50.0);
                    /* try { // try from 009918e5 to 00991989 has its CatchHandler @ 00992a1d */
        iVar10 = CGlobalEntityList::FindEntityByClassnameWithin
                           ((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,"func_simpleladder",
                            (Vector *)&local_70,(Vector *)&local_64);
        if ((iVar10 == 0) &&
           (iVar10 = CGlobalEntityList::FindEntityByClassnameWithin
                               ((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,"func_nav_blocker",
                                (Vector *)&local_70,(Vector *)&local_64), iVar10 == 0)) {
          iVar10 = *(int *)(local_208 + 0xc);
          local_27c = pCVar5;
          if (iVar10 < 1) {
LAB_00991974:
            CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>>::InsertBefore
                      ((CUtlVector<CNavLadder*,CUtlMemory<CNavLadder*,int>> *)local_208,iVar10,
                       &local_27c);
          }
          else if (pCVar5 != (CNavLadder *)**(int **)local_208) {
            iVar18 = 0;
            do {
              iVar18 = iVar18 + 1;
              if (iVar18 == iVar10) goto LAB_00991974;
            } while (pCVar5 != (CNavLadder *)(*(int **)local_208)[iVar18]);
            if (iVar18 < 0) goto LAB_00991974;
          }
        }
        iVar22 = iVar22 + 1;
      } while (iVar22 < *(int *)(pCVar6 + 0x51c));
      if ((int)local_204 < *(int *)(local_208 + 0xc)) {
        Warning("%s found %d ladders\n",local_200,*(int *)(local_208 + 0xc) - (int)local_204);
        goto LAB_00990327;
      }
    }
    Msg("%s passed\n",local_200);
  }
LAB_00990327:
  if ((local_300 & 0x8000) != 0) {
    local_70 = local_1d4;
    local_68 = "Tiny nav area check";
    local_6c = local_1c4;
    if (0 < DAT_00fe6000) {
      iVar22 = 0;
      do {
        pCVar2 = (CNavArea *)TheNavAreas[iVar22];
        if (s_testNavID < 1) {
          cVar23 = IsAreaTestable(pCVar2);
        }
        else {
          cVar23 = s_testNavID == *(int *)(pCVar2 + 0x8c);
        }
        if ((cVar23 != '\0') &&
           ((*(float *)(pCVar2 + 0x10) - *(float *)(pCVar2 + 4) < 1.0 ||
            (*(float *)(pCVar2 + 0x14) - *(float *)(pCVar2 + 8) < 1.0)))) {
          local_278 = pCVar2;
          if ((local_1d4[0] == (NavAreaCollector)0x0) || ((int)local_1c4 < 1)) {
LAB_00990533:
                    /* try { // try from 00990544 to 00990548 has its CatchHandler @ 009926a9 */
            CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                      (local_2f0,(int)local_1c4,&local_278);
          }
          else if (pCVar2 != (CNavArea *)*local_1d0) {
            fVar20 = 0.0;
            do {
              fVar20 = (float)((int)fVar20 + 1);
              if (fVar20 == local_1c4) goto LAB_00990533;
            } while (pCVar2 != (CNavArea *)local_1d0[(int)fVar20]);
            if ((int)fVar20 < 0) goto LAB_00990533;
          }
        }
        iVar22 = iVar22 + 1;
      } while (iVar22 < DAT_00fe6000);
      if ((int)local_6c < *(int *)(local_70 + 0x10)) {
        Warning("%s found %d areas\n",local_68,*(int *)(local_70 + 0x10) - (int)local_6c);
        goto LAB_009903e5;
      }
    }
    Msg("%s passed\n",local_68);
  }
LAB_009903e5:
  s_testNavID = 0;
                    /* try { // try from 009903f7 to 0099045b has its CatchHandler @ 009926e7 */
  CNavMesh::ClearSelectedSet(TheNavMesh);
  iVar22 = 0;
  if (0 < (int)local_1c4) {
    do {
      CNavMesh::AddToSelectedSet(TheNavMesh,(CNavArea *)local_1d0[iVar22]);
      iVar22 = iVar22 + 1;
    } while (iVar22 < (int)local_1c4);
  }
  iVar22 = CNavMesh::GetSelecteSetSize(TheNavMesh);
  if ((iVar22 == 0) && (local_1dc == (NavAreaCollector *)0x0)) {
    Msg("No trouble areas selected\n");
  }
  else {
                    /* try { // try from 00990556 to 00990596 has its CatchHandler @ 009926e7 */
    uVar13 = CNavMesh::GetSelecteSetSize(TheNavMesh);
    Warning("Selected %d trouble areas\n",uVar13);
    iVar22 = 0;
    if (0 < (int)local_1dc) {
      do {
        Warning("Ladder %d isn\'t fully connected or overlaps another ladder\n",
                *(undefined4 *)(local_1e8[iVar22] + 0x4c));
        iVar22 = iVar22 + 1;
      } while (iVar22 < (int)local_1dc);
    }
  }
  local_1dc = (NavAreaCollector *)0x0;
  CUtlMemory<CNavLadder*,int>::Purge((CUtlMemory<CNavLadder*,int> *)&local_1e8);
  local_1d8 = local_1e8;
  CUtlMemory<CNavLadder*,int>::Purge((CUtlMemory<CNavLadder*,int> *)&local_1e8);
  local_1c4 = 0.0;
  CUtlMemory<CNavArea*,int>::Purge((CUtlMemory<CNavArea*,int> *)local_2f0);
  local_1c0 = local_1d0;
  CUtlMemory<CNavArea*,int>::Purge((CUtlMemory<CNavArea*,int> *)local_2f0);
  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)