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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.