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