L L4D2node

CNavArea::Load

0x0071dbb0 · 8278 bytes · __cdecl

_ZN8CNavArea4LoadER10CUtlBufferjj

Decompiled

undefined (3 params)

/* CNavArea::Load(CUtlBuffer&, unsigned int, unsigned int) */

undefined4 CNavArea::Load(CUtlBuffer *param_1,uint param_2,uint param_3)

{
  size_t sVar1;
  SpotOrder SVar2;
  ushort uVar3;
  int *piVar4;
  undefined2 uVar5;
  char cVar6;
  byte bVar7;
  int iVar8;
  void *pvVar9;
  uint *puVar10;
  int iVar11;
  int iVar12;
  undefined4 *puVar13;
  uint uVar14;
  uint uVar15;
  undefined4 uVar16;
  CUtlBuffer *pCVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  double dVar22;
  float fVar23;
  undefined8 in_stack_ffffff2c;
  uint local_ac;
  uint local_a8;
  uint local_a4;
  uint local_a0;
  byte local_91;
  undefined4 local_90;
  undefined4 local_8c;
  undefined4 local_88;
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  undefined1 local_70;
  undefined1 local_6f;
  undefined1 local_6e;
  undefined1 local_6d;
  undefined1 local_6c;
  undefined1 local_6b;
  undefined1 local_6a;
  undefined1 local_69;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined1 local_48 [12];
  undefined1 local_3c [12];
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  uVar16 = (undefined4)((ulonglong)in_stack_ffffff2c >> 0x20);
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar14 = 0;
    if (cVar6 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        iVar8 = *(int *)(param_2 + 0xc);
        uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
      }
      else {
        puVar13 = (undefined4 *)
                  ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (puVar13 == (undefined4 *)0x0) {
          puVar13 = &local_64;
        }
        local_60 = (float)local_64;
        local_60._1_3_ = (undefined3)(local_64 >> 8);
        local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
        local_60._2_2_ = (undefined2)(local_64 >> 0x10);
        local_60._0_2_ =
             CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
        local_60._3_1_ = (undefined1)(local_64 >> 0x18);
        local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
        local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
        _V_memcpy(&local_64,&local_60,4);
        iVar8 = *(int *)(param_2 + 0xc);
        uVar14 = local_64;
      }
      *(int *)(param_2 + 0xc) = iVar8 + 4;
    }
  }
  else {
    local_64 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
    uVar14 = local_64;
  }
  uVar15 = m_nextID;
  *(uint *)(param_1 + 0x8c) = uVar14;
  if (uVar15 <= uVar14) {
    m_nextID = uVar14 + 1;
  }
  if (param_3 < 9) {
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
      cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
      uVar14 = 0;
      if (cVar6 != '\0') {
        uVar14 = (uint)*(byte *)(*(int *)param_2 +
                                (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
        *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
      }
    }
    else {
      local_60 = (float)((uint)local_60 & 0xffffff00);
      CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
      uVar14 = (uint)local_60 & 0xff;
    }
  }
  else if (param_3 < 0xd) {
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
      cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,2);
      uVar14 = 0;
      if (cVar6 != '\0') {
        if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
          iVar8 = *(int *)(param_2 + 0xc);
          uVar3 = *(ushort *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
        }
        else {
          puVar13 = (undefined4 *)
                    ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
          if (puVar13 == (undefined4 *)0x0) {
            puVar13 = &local_64;
          }
          uVar5 = local_60._2_2_;
          local_60 = (float)CONCAT22(local_60._2_2_,(ushort)local_64);
          local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 1));
          local_60._0_2_ = CONCAT11(*(undefined1 *)puVar13,*(undefined1 *)((int)puVar13 + 1));
          local_60 = (float)CONCAT22(uVar5,(undefined2)local_60);
          _V_memcpy(&local_64,&local_60,2);
          iVar8 = *(int *)(param_2 + 0xc);
          uVar3 = (ushort)local_64;
        }
        uVar14 = (uint)uVar3;
        *(int *)(param_2 + 0xc) = iVar8 + 2;
      }
    }
    else {
      local_64 = local_64 & 0xffff0000;
      CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
      uVar14 = local_64 & 0xffff;
    }
  }
  else if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar14 = 0;
    if (cVar6 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        iVar8 = *(int *)(param_2 + 0xc);
        uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
      }
      else {
        puVar13 = (undefined4 *)
                  ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (puVar13 == (undefined4 *)0x0) {
          puVar13 = &local_64;
        }
        local_60 = (float)local_64;
        local_60._1_3_ = (undefined3)(local_64 >> 8);
        local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
        local_60._2_2_ = (undefined2)(local_64 >> 0x10);
        local_60._0_2_ =
             CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
        local_60._3_1_ = (undefined1)(local_64 >> 0x18);
        local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
        local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
        _V_memcpy(&local_64,&local_60,4);
        iVar8 = *(int *)(param_2 + 0xc);
        uVar14 = local_64;
      }
      uVar14 = uVar14 & 0x67ffffff;
      *(int *)(param_2 + 0xc) = iVar8 + 4;
    }
  }
  else {
    local_64 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%d",&local_64);
    uVar14 = local_64 & 0x67ffffff;
  }
  *(uint *)(param_1 + 0x54) = uVar14;
  CUtlBuffer::Get((CUtlBuffer *)param_2,param_1 + 4,0xc);
  dVar22 = (double)CONCAT44(uVar16,0xc);
  CUtlBuffer::Get((CUtlBuffer *)param_2,param_1 + 0x10,0xc);
  fVar21 = *(float *)(param_1 + 0x10) - *(float *)(param_1 + 4);
  fVar19 = (*(float *)(param_1 + 0x10) + *(float *)(param_1 + 4)) * 0.5;
  fVar20 = (*(float *)(param_1 + 0x14) + *(float *)(param_1 + 8)) * 0.5;
  fVar18 = (*(float *)(param_1 + 0x18) + *(float *)(param_1 + 0xc)) * 0.5;
  *(float *)(param_1 + 0x2c) = fVar19;
  *(float *)(param_1 + 0x30) = fVar20;
  *(float *)(param_1 + 0x34) = fVar18;
  if ((fVar21 <= 0.0) ||
     (fVar23 = *(float *)(param_1 + 0x14) - *(float *)(param_1 + 8), fVar23 <= 0.0)) {
    dVar22 = (double)fVar19;
    *(undefined4 *)(param_1 + 0x20) = 0;
    *(undefined4 *)(param_1 + 0x1c) = 0;
    DevWarning("Degenerate Navigation Area #%d at setpos %g %g %g\n",*(undefined4 *)(param_1 + 0x8c)
               ,dVar22,(double)fVar20,(double)fVar18);
  }
  else {
    *(float *)(param_1 + 0x1c) = 1.0 / fVar21;
    *(float *)(param_1 + 0x20) = 1.0 / fVar23;
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar14 = 0;
    if (cVar6 != '\0') {
      iVar8 = *(int *)(param_2 + 0xc);
      uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
      local_64 = uVar14;
      if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
        local_64._3_1_ = (undefined1)(uVar14 >> 0x18);
        dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),4);
        local_64._2_1_ = (undefined1)(uVar14 >> 0x10);
        local_60._0_2_ = CONCAT11(local_64._2_1_,local_64._3_1_);
        local_64._1_1_ = (undefined1)(uVar14 >> 8);
        local_60._0_3_ = CONCAT12(local_64._1_1_,(undefined2)local_60);
        local_64._0_1_ = (byte)uVar14;
        local_60 = (float)CONCAT13((byte)local_64,(undefined3)local_60);
        _V_memcpy(&local_64,&local_60,4);
        iVar8 = *(int *)(param_2 + 0xc);
      }
      *(int *)(param_2 + 0xc) = iVar8 + 4;
      uVar14 = local_64;
    }
  }
  else {
    dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),&local_64);
    local_64 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_64);
    uVar14 = local_64;
  }
  *(uint *)(param_1 + 0x24) = uVar14;
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar14 = 0;
    if (cVar6 != '\0') {
      iVar8 = *(int *)(param_2 + 0xc);
      uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
      local_64 = uVar14;
      if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
        local_64._3_1_ = (undefined1)(uVar14 >> 0x18);
        dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),4);
        local_64._2_1_ = (undefined1)(uVar14 >> 0x10);
        local_60._0_2_ = CONCAT11(local_64._2_1_,local_64._3_1_);
        local_64._1_1_ = (undefined1)(uVar14 >> 8);
        local_60._0_3_ = CONCAT12(local_64._1_1_,(undefined2)local_60);
        local_64._0_1_ = (byte)uVar14;
        local_60 = (float)CONCAT13((byte)local_64,(undefined3)local_60);
        _V_memcpy(&local_64,&local_60,4);
        iVar8 = *(int *)(param_2 + 0xc);
      }
      *(int *)(param_2 + 0xc) = iVar8 + 4;
      uVar14 = local_64;
    }
  }
  else {
    dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),&local_64);
    local_64 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_64);
    uVar14 = local_64;
  }
  *(uint *)(param_1 + 0x28) = uVar14;
  ComputeMinMaxCornerZ((CNavArea *)param_1);
  if ((0.05 <= ABS(*(float *)(param_1 + 0x24) - *(float *)(param_1 + 0x18))) ||
     (0.05 <= ABS(*(float *)(param_1 + 0x28) - *(float *)(param_1 + 0x18)))) {
    *(uint *)(param_1 + 0x54) = *(uint *)(param_1 + 0x54) & 0xdfffffff;
  }
  else {
    *(uint *)(param_1 + 0x54) = *(uint *)(param_1 + 0x54) | 0x20000000;
  }
  CheckWaterLevel((CNavArea *)param_1);
  pCVar17 = param_1;
  do {
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
      cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
      if (cVar6 == '\0') {
        local_a0 = 0;
      }
      else {
        if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
          iVar8 = *(int *)(param_2 + 0xc);
          local_a0 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
        }
        else {
          puVar13 = (undefined4 *)
                    ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
          if (puVar13 == (undefined4 *)0x0) {
            puVar13 = &local_64;
          }
          local_60 = (float)local_64;
          local_60._1_3_ = (undefined3)(local_64 >> 8);
          local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
          local_60._2_2_ = (undefined2)(local_64 >> 0x10);
          local_60._0_2_ =
               CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
          local_60._3_1_ = (undefined1)(local_64 >> 0x18);
          local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
          dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),4);
          local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
          _V_memcpy(&local_64,&local_60,4);
          iVar8 = *(int *)(param_2 + 0xc);
          local_a0 = local_64;
        }
        *(int *)(param_2 + 0xc) = iVar8 + 4;
      }
    }
    else {
      dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),&local_64);
      local_64 = 0;
      CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
      local_a0 = local_64;
    }
    piVar4 = *(int **)(pCVar17 + 0x58);
    if (*piVar4 < (int)local_a0) {
      if ((CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>::
           StaticData()::staticData == '\0') &&
         (iVar8 = __cxa_guard_acquire(&CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>
                                       ::StaticData()::staticData), iVar8 != 0)) {
        __cxa_guard_release(&CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>
                             ::StaticData()::staticData);
      }
      if (piVar4 == &CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>::
                     StaticData()::staticData) {
        puVar13 = malloc(local_a0 * 8 + 4);
        *(undefined4 **)(pCVar17 + 0x58) = puVar13;
        *puVar13 = 0;
      }
      else {
        sVar1 = local_a0 * 8 + 4;
        iVar8 = malloc_usable_size(*(undefined4 *)(pCVar17 + 0x58));
        if (iVar8 < (int)sVar1) {
          pvVar9 = realloc(*(void **)(pCVar17 + 0x58),sVar1);
          *(void **)(pCVar17 + 0x58) = pvVar9;
        }
      }
    }
    uVar14 = 0;
    if (local_a0 != 0) {
      do {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          uVar15 = 0;
          if (cVar6 == '\0') goto LAB_0071dea9;
          if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
            iVar8 = *(int *)(param_2 + 0xc);
            uVar15 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
          }
          else {
            puVar13 = (undefined4 *)
                      ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
            if (puVar13 == (undefined4 *)0x0) {
              puVar13 = &local_64;
            }
            local_60 = (float)local_64;
            local_60._1_3_ = (undefined3)(local_64 >> 8);
            local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
            local_60._2_2_ = (undefined2)(local_64 >> 0x10);
            local_60._0_2_ =
                 CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
            local_60._3_1_ = (undefined1)(local_64 >> 0x18);
            local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
            dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),4);
            local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
            _V_memcpy(&local_64,&local_60,4);
            iVar8 = *(int *)(param_2 + 0xc);
            uVar15 = local_64;
          }
          cVar6 = *(char *)(param_2 + 0x14);
          *(int *)(param_2 + 0xc) = iVar8 + 4;
        }
        else {
          dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),&local_64);
          local_64 = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
          uVar15 = local_64;
LAB_0071dea9:
          cVar6 = *(char *)(param_2 + 0x14);
        }
        if (cVar6 != '\0') {
          return 5;
        }
        if (*(uint *)(param_1 + 0x8c) != uVar15) {
          piVar4 = *(int **)(pCVar17 + 0x58);
          iVar8 = *piVar4;
          if ((CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>::
               StaticData()::staticData == '\0') &&
             (iVar12 = __cxa_guard_acquire(&CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>
                                            ::StaticData()::staticData), iVar12 != 0)) {
            __cxa_guard_release(&CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>
                                 ::StaticData()::staticData);
          }
          if (piVar4 == &CUtlVectorUltraConservative<NavConnect,CUtlVectorUltraConservativeAllocator>
                         ::StaticData()::staticData) {
            puVar13 = malloc((iVar8 + 1) * 8 + 4);
            *(undefined4 **)(pCVar17 + 0x58) = puVar13;
            *puVar13 = 0;
            pvVar9 = *(void **)(pCVar17 + 0x58);
          }
          else {
            sVar1 = (iVar8 + 1) * 8 + 4;
            iVar12 = malloc_usable_size(*(undefined4 *)(pCVar17 + 0x58));
            if (iVar12 < (int)sVar1) {
              pvVar9 = realloc(*(void **)(pCVar17 + 0x58),sVar1);
              *(void **)(pCVar17 + 0x58) = pvVar9;
            }
            else {
              pvVar9 = *(void **)(pCVar17 + 0x58);
            }
          }
          *(uint *)((int)pvVar9 + iVar8 * 8 + 4) = uVar15;
          *(undefined4 *)((int)pvVar9 + iVar8 * 8 + 8) = 0xbf800000;
          **(int **)(pCVar17 + 0x58) = **(int **)(pCVar17 + 0x58) + 1;
        }
        uVar14 = uVar14 + 1;
      } while (uVar14 != local_a0);
    }
    pCVar17 = pCVar17 + 4;
  } while (pCVar17 != param_1 + 0x10);
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
    if (cVar6 != '\0') {
      local_a0 = (uint)*(byte *)(*(int *)param_2 +
                                (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
      *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
      goto LAB_0071e0e0;
    }
    if (param_3 != 1) goto LAB_0071e43c;
    if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071ef1e;
LAB_0071eb17:
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
    if (cVar6 != '\0') {
      SVar2 = *(SpotOrder *)(*(int *)param_2 + (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)))
      ;
      *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
LAB_0071eb43:
      if ((byte)SVar2 != 0) {
        local_a0 = 0;
        do {
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
            if (cVar6 == '\0') goto LAB_0071eb81;
            if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
              puVar13 = (undefined4 *)
                        ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (puVar13 == (undefined4 *)0x0) {
                puVar13 = &local_64;
              }
              local_60 = (float)local_64;
              local_60._1_3_ = (undefined3)(local_64 >> 8);
              local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
              local_60._2_2_ = (undefined2)(local_64 >> 0x10);
              local_60._0_2_ =
                   CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
              local_60._3_1_ = (undefined1)(local_64 >> 0x18);
              local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
              local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
              _V_memcpy(&local_64,&local_60,4);
            }
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 4;
            if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071eb8b;
LAB_0071eca1:
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
            if (cVar6 == '\0') goto LAB_0071eba6;
            if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
              puVar13 = (undefined4 *)
                        ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (puVar13 == (undefined4 *)0x0) {
                puVar13 = &local_64;
              }
              local_60 = (float)local_64;
              local_60._1_3_ = (undefined3)(local_64 >> 8);
              local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
              local_60._2_2_ = (undefined2)(local_64 >> 0x10);
              local_60._0_2_ =
                   CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
              local_60._3_1_ = (undefined1)(local_64 >> 0x18);
              local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
              local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
              _V_memcpy(&local_64,&local_60,4);
            }
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 4;
            if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071ebb0;
LAB_0071ed10:
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
            if (cVar6 == '\0') goto LAB_0071ebc8;
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
            if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071ebd2;
LAB_0071ed36:
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
            if (cVar6 == '\0') goto LAB_0071ebed;
            if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
              puVar13 = (undefined4 *)
                        ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (puVar13 == (undefined4 *)0x0) {
                puVar13 = &local_64;
              }
              local_60 = (float)local_64;
              local_60._1_3_ = (undefined3)(local_64 >> 8);
              local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
              local_60._2_2_ = (undefined2)(local_64 >> 0x10);
              local_60._0_2_ =
                   CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
              local_60._3_1_ = (undefined1)(local_64 >> 0x18);
              local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
              local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
              _V_memcpy(&local_64,&local_60,4);
            }
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 4;
            if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071ebf7;
LAB_0071eda5:
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
            if (cVar6 != '\0') {
              *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
            }
          }
          else {
            local_64 = 0;
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
LAB_0071eb81:
            if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071eca1;
LAB_0071eb8b:
            local_64 = 0;
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
LAB_0071eba6:
            if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071ed10;
LAB_0071ebb0:
            local_60 = (float)((uint)local_60 & 0xffffff00);
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
LAB_0071ebc8:
            if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071ed36;
LAB_0071ebd2:
            local_64 = 0;
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
LAB_0071ebed:
            if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071eda5;
LAB_0071ebf7:
            local_60 = (float)((uint)local_60 & 0xffffff00);
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
          }
          local_a0 = local_a0 + 1;
        } while ((int)local_a0 < (int)(uint)(byte)SVar2);
      }
    }
  }
  else {
    dVar22 = (double)CONCAT44((int)((ulonglong)dVar22 >> 0x20),&local_60);
    local_60 = (float)((uint)local_60 & 0xffffff00);
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
    local_a0 = (uint)local_60 & 0xff;
LAB_0071e0e0:
    local_a4 = 0;
    if (param_3 == 1) {
      if (local_a0 != 0) {
        do {
          CUtlBuffer::Get((CUtlBuffer *)param_2,&local_60,0xc);
          iVar11 = (**(code **)(*TheNavMesh + 0x1c))(TheNavMesh);
          *(float *)(iVar11 + 4) = local_60;
          *(undefined4 *)(iVar11 + 8) = local_5c;
          *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) | 1;
          *(undefined4 *)(iVar11 + 0xc) = local_58;
          piVar4 = *(int **)(param_1 + 0xcc);
          iVar12 = *piVar4;
          iVar8 = iVar12 + 1;
          if (piVar4 == &CUtlVectorUltraConservative<HidingSpot*,CUtlVectorUltraConservativeAllocator>
                         ::StaticData()::staticData) {
            puVar13 = malloc(iVar8 * 4 + 4);
            *(undefined4 **)(param_1 + 0xcc) = puVar13;
            *puVar13 = 0;
            pvVar9 = *(void **)(param_1 + 0xcc);
          }
          else {
            sVar1 = iVar8 * 4 + 4;
            iVar8 = malloc_usable_size(piVar4);
            if (iVar8 < (int)sVar1) {
              pvVar9 = realloc(*(void **)(param_1 + 0xcc),sVar1);
              *(void **)(param_1 + 0xcc) = pvVar9;
            }
            else {
              pvVar9 = *(void **)(param_1 + 0xcc);
            }
          }
          local_a4 = local_a4 + 1;
          *(int *)((int)pvVar9 + iVar12 * 4 + 4) = iVar11;
          **(int **)(param_1 + 0xcc) = **(int **)(param_1 + 0xcc) + 1;
        } while (local_a4 != local_a0);
      }
LAB_0071ef14:
      if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071eb17;
LAB_0071ef1e:
      local_60 = (float)((uint)local_60 & 0xffffff00);
      CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
      SVar2 = local_60._0_1_;
      goto LAB_0071eb43;
    }
    if (local_a0 != 0) {
      do {
        uVar16 = (undefined4)((ulonglong)dVar22 >> 0x20);
        pCVar17 = (CUtlBuffer *)(**(code **)(*TheNavMesh + 0x1c))(TheNavMesh);
        dVar22 = (double)CONCAT44(uVar16,param_3);
        uVar14 = param_2;
        HidingSpot::Load(pCVar17,param_2);
        piVar4 = *(int **)(param_1 + 0xcc);
        iVar12 = *piVar4;
        iVar8 = iVar12 + 1;
        if (piVar4 == &CUtlVectorUltraConservative<HidingSpot*,CUtlVectorUltraConservativeAllocator>
                       ::StaticData()::staticData) {
          puVar13 = malloc(iVar8 * 4 + 4);
          *(undefined4 **)(param_1 + 0xcc) = puVar13;
          *puVar13 = 0;
          pvVar9 = *(void **)(param_1 + 0xcc);
        }
        else {
          sVar1 = iVar8 * 4 + 4;
          iVar8 = malloc_usable_size(piVar4,uVar14,dVar22);
          if (iVar8 < (int)sVar1) {
            pvVar9 = realloc(*(void **)(param_1 + 0xcc),sVar1);
            *(void **)(param_1 + 0xcc) = pvVar9;
          }
          else {
            pvVar9 = *(void **)(param_1 + 0xcc);
          }
        }
        local_a4 = local_a4 + 1;
        *(CUtlBuffer **)((int)pvVar9 + iVar12 * 4 + 4) = pCVar17;
        **(int **)(param_1 + 0xcc) = **(int **)(param_1 + 0xcc) + 1;
      } while (local_a4 != local_a0);
    }
LAB_0071e43c:
    if (param_3 < 0xf) goto LAB_0071ef14;
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    if (cVar6 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        iVar8 = *(int *)(param_2 + 0xc);
        local_a8 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
      }
      else {
        puVar13 = (undefined4 *)
                  ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (puVar13 == (undefined4 *)0x0) {
          puVar13 = &local_64;
        }
        local_60 = (float)local_64;
        local_60._1_3_ = (undefined3)(local_64 >> 8);
        local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
        local_60._2_2_ = (undefined2)(local_64 >> 0x10);
        local_60._0_2_ =
             CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
        local_60._3_1_ = (undefined1)(local_64 >> 0x18);
        local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
        local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
        _V_memcpy(&local_64,&local_60,4);
        iVar8 = *(int *)(param_2 + 0xc);
        local_a8 = local_64;
      }
      *(int *)(param_2 + 0xc) = iVar8 + 4;
      goto LAB_0071e477;
    }
    if (param_3 < 3) {
      return 0;
    }
  }
  else {
    local_64 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
    local_a8 = local_64;
LAB_0071e477:
    if (param_3 < 3) {
      if (local_a8 == 0) {
        return 0;
      }
      local_a0 = 0;
      do {
        local_60 = 0.0;
        local_5c = 0xbf800000;
        local_54 = 0;
        local_50 = 0xbf800000;
        local_30 = 0;
        local_2c = 0;
        local_28 = 0;
        local_24 = 0;
        local_20 = 0;
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          if (cVar6 == '\0') {
            local_60 = 0.0;
            goto LAB_0071f1f3;
          }
          if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
            iVar8 = *(int *)(param_2 + 0xc);
            local_60 = (float)*(undefined4 *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
          }
          else {
            puVar13 = (undefined4 *)
                      ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
            if (puVar13 == (undefined4 *)0x0) {
              puVar13 = &local_90;
            }
            local_78 = local_90;
            local_78 = CONCAT31((int3)((uint)local_90 >> 8),*(undefined1 *)((int)puVar13 + 3));
            local_78._2_2_ = (undefined2)((uint)local_90 >> 0x10);
            local_78._0_2_ =
                 CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
            local_78._3_1_ = (undefined1)((uint)local_90 >> 0x18);
            local_78._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_78);
            local_78 = CONCAT13(*(undefined1 *)puVar13,(undefined3)local_78);
            _V_memcpy(&local_90,&local_78,4);
            iVar8 = *(int *)(param_2 + 0xc);
            local_60 = (float)local_90;
          }
          *(int *)(param_2 + 0xc) = iVar8 + 4;
          if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071f200;
LAB_0071f5ea:
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          if (cVar6 == '\0') {
            local_54 = 0;
          }
          else {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              iVar8 = *(int *)(param_2 + 0xc);
              local_54 = *(undefined4 *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
            }
            else {
              puVar13 = (undefined4 *)
                        ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (puVar13 == (undefined4 *)0x0) {
                puVar13 = &local_8c;
              }
              local_74 = local_8c;
              local_74 = CONCAT31((int3)((uint)local_8c >> 8),*(undefined1 *)((int)puVar13 + 3));
              local_74._2_2_ = (undefined2)((uint)local_8c >> 0x10);
              local_74._0_2_ =
                   CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
              local_74._3_1_ = (undefined1)((uint)local_8c >> 0x18);
              local_74._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_74);
              local_74 = CONCAT13(*(undefined1 *)puVar13,(undefined3)local_74);
              _V_memcpy(&local_8c,&local_74,4);
              iVar8 = *(int *)(param_2 + 0xc);
              local_54 = local_8c;
            }
            *(int *)(param_2 + 0xc) = iVar8 + 4;
          }
        }
        else {
          local_90 = 0;
                    /* try { // try from 0071f1e8 to 0071f706 has its CatchHandler @ 0071fb53 */
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_90);
          local_60 = (float)local_90;
LAB_0071f1f3:
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071f5ea;
LAB_0071f200:
          local_8c = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_8c);
          local_54 = local_8c;
        }
        CUtlBuffer::Get((CUtlBuffer *)param_2,local_48,0xc);
        CUtlBuffer::Get((CUtlBuffer *)param_2,local_3c,0xc);
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
          if (cVar6 != '\0') {
            bVar7 = *(byte *)(*(int *)param_2 + (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20))
                             );
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
            goto LAB_0071f28d;
          }
        }
        else {
          local_91 = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_91);
          bVar7 = local_91;
LAB_0071f28d:
          uVar14 = (uint)bVar7;
          if (uVar14 != 0) {
            iVar8 = 0;
            do {
              while ((*(byte *)(param_2 + 0x15) & 1) != 0) {
                local_88 = 0;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_88);
LAB_0071f2c4:
                if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071f3e0;
LAB_0071f2ce:
                local_84 = 0;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_84);
LAB_0071f2ec:
                if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071f460;
LAB_0071f2f6:
                local_80 = 0;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_80);
LAB_0071f314:
                if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071f4e0;
LAB_0071f31e:
                local_7c = 0;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_7c);
LAB_0071f33c:
                iVar8 = iVar8 + 1;
                if ((int)uVar14 <= iVar8) goto LAB_0071f560;
              }
              cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
              if (cVar6 == '\0') goto LAB_0071f2c4;
              iVar12 = *(int *)(param_2 + 0xc);
              uVar16 = *(undefined4 *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
              local_88 = uVar16;
              if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
                local_88._3_1_ = (undefined1)((uint)uVar16 >> 0x18);
                local_70 = local_88._3_1_;
                local_88._2_1_ = (undefined1)((uint)uVar16 >> 0x10);
                local_6f = local_88._2_1_;
                local_88._1_1_ = (undefined1)((uint)uVar16 >> 8);
                local_6e = local_88._1_1_;
                local_88._0_1_ = (undefined1)uVar16;
                local_6d = (undefined1)local_88;
                _V_memcpy(&local_88,&local_70,4);
                iVar12 = *(int *)(param_2 + 0xc);
              }
              *(int *)(param_2 + 0xc) = iVar12 + 4;
              if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071f2ce;
LAB_0071f3e0:
              cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
              if (cVar6 == '\0') goto LAB_0071f2ec;
              iVar12 = *(int *)(param_2 + 0xc);
              uVar16 = *(undefined4 *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
              local_84 = uVar16;
              if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
                local_84._3_1_ = (undefined1)((uint)uVar16 >> 0x18);
                local_6c = local_84._3_1_;
                local_84._2_1_ = (undefined1)((uint)uVar16 >> 0x10);
                local_6b = local_84._2_1_;
                local_84._1_1_ = (undefined1)((uint)uVar16 >> 8);
                local_6a = local_84._1_1_;
                local_84._0_1_ = (undefined1)uVar16;
                local_69 = (undefined1)local_84;
                _V_memcpy(&local_84,&local_6c,4);
                iVar12 = *(int *)(param_2 + 0xc);
              }
              *(int *)(param_2 + 0xc) = iVar12 + 4;
              if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071f2f6;
LAB_0071f460:
              cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
              if (cVar6 == '\0') goto LAB_0071f314;
              iVar12 = *(int *)(param_2 + 0xc);
              uVar16 = *(undefined4 *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
              local_80 = uVar16;
              if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
                local_80._3_1_ = (undefined1)((uint)uVar16 >> 0x18);
                local_80._2_1_ = (undefined1)((uint)uVar16 >> 0x10);
                local_80._1_1_ = (undefined1)((uint)uVar16 >> 8);
                local_80._0_1_ = (undefined1)uVar16;
                local_68 = CONCAT13((undefined1)local_80,
                                    CONCAT12(local_80._1_1_,CONCAT11(local_80._2_1_,local_80._3_1_))
                                   );
                _V_memcpy(&local_80,&local_68,4);
                iVar12 = *(int *)(param_2 + 0xc);
              }
              *(int *)(param_2 + 0xc) = iVar12 + 4;
              if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071f31e;
LAB_0071f4e0:
              cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
              if (cVar6 == '\0') goto LAB_0071f33c;
              iVar12 = *(int *)(param_2 + 0xc);
              uVar16 = *(undefined4 *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
              local_7c = uVar16;
              if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
                local_7c._3_1_ = (undefined1)((uint)uVar16 >> 0x18);
                local_7c._2_1_ = (undefined1)((uint)uVar16 >> 0x10);
                local_64._0_2_ = CONCAT11(local_7c._2_1_,local_7c._3_1_);
                local_7c._1_1_ = (undefined1)((uint)uVar16 >> 8);
                local_64._0_3_ = CONCAT12(local_7c._1_1_,(ushort)local_64);
                local_7c._0_1_ = (undefined1)uVar16;
                local_64 = CONCAT13((undefined1)local_7c,(undefined3)local_64);
                _V_memcpy(&local_7c,&local_64,4);
                iVar12 = *(int *)(param_2 + 0xc);
              }
              iVar8 = iVar8 + 1;
              *(int *)(param_2 + 0xc) = iVar12 + 4;
            } while (iVar8 < (int)uVar14);
          }
        }
LAB_0071f560:
        local_24 = 0;
        CUtlMemory<SpotOrder,int>::Purge((CUtlMemory<SpotOrder,int> *)&local_30);
        local_20 = local_30;
        CUtlMemory<SpotOrder,int>::Purge((CUtlMemory<SpotOrder,int> *)&local_30);
        local_a0 = local_a0 + 1;
        if (local_a0 == local_a8) {
          return 0;
        }
      } while( true );
    }
    local_ac = 0;
    if (local_a8 != 0) {
      do {
        puVar10 = ::operator_new(0x44);
        *puVar10 = 0;
        puVar10[1] = 0xbf800000;
        puVar10[3] = 0;
        puVar10[4] = 0xbf800000;
        puVar10[0xc] = 0;
        puVar10[0xd] = 0;
        puVar10[0xe] = 0;
        puVar10[0xf] = 0;
        puVar10[0x10] = 0;
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          uVar14 = 0;
          if (cVar6 == '\0') goto LAB_0071e510;
          if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
            iVar8 = *(int *)(param_2 + 0xc);
            uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
          }
          else {
            puVar13 = (undefined4 *)
                      ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
            if (puVar13 == (undefined4 *)0x0) {
              puVar13 = &local_64;
            }
            local_60 = (float)local_64;
            local_60._1_3_ = (undefined3)(local_64 >> 8);
            local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
            local_60._2_2_ = (undefined2)(local_64 >> 0x10);
            local_60._0_2_ =
                 CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
            local_60._3_1_ = (undefined1)(local_64 >> 0x18);
            local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
            local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
            _V_memcpy(&local_64,&local_60,4);
            iVar8 = *(int *)(param_2 + 0xc);
            uVar14 = local_64;
          }
          *(int *)(param_2 + 0xc) = iVar8 + 4;
          *puVar10 = uVar14;
          if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071e51c;
LAB_0071e950:
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
          uVar14 = 0;
          if (cVar6 != '\0') {
            uVar14 = (uint)*(byte *)(*(int *)param_2 +
                                    (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
          }
        }
        else {
          local_64 = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
          uVar14 = local_64;
LAB_0071e510:
          *puVar10 = uVar14;
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071e950;
LAB_0071e51c:
          local_60 = (float)((uint)local_60 & 0xffffff00);
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
          uVar14 = (uint)local_60 & 0xff;
        }
        puVar10[2] = uVar14;
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          uVar14 = 0;
          if (cVar6 == '\0') goto LAB_0071e569;
          if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
            iVar8 = *(int *)(param_2 + 0xc);
            uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
          }
          else {
            puVar13 = (undefined4 *)
                      ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
            if (puVar13 == (undefined4 *)0x0) {
              puVar13 = &local_64;
            }
            local_60 = (float)local_64;
            local_60._1_3_ = (undefined3)(local_64 >> 8);
            local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
            local_60._2_2_ = (undefined2)(local_64 >> 0x10);
            local_60._0_2_ =
                 CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
            local_60._3_1_ = (undefined1)(local_64 >> 0x18);
            local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
            local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
            _V_memcpy(&local_64,&local_60,4);
            iVar8 = *(int *)(param_2 + 0xc);
            uVar14 = local_64;
          }
          *(int *)(param_2 + 0xc) = iVar8 + 4;
          puVar10[3] = uVar14;
          if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071e576;
LAB_0071e898:
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
          uVar14 = 0;
          if (cVar6 != '\0') {
            uVar14 = (uint)*(byte *)(*(int *)param_2 +
                                    (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
          }
        }
        else {
          local_64 = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
          uVar14 = local_64;
LAB_0071e569:
          puVar10[3] = uVar14;
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071e898;
LAB_0071e576:
          local_60 = (float)((uint)local_60 & 0xffffff00);
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
          uVar14 = (uint)local_60 & 0xff;
        }
        puVar10[5] = uVar14;
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
          if (cVar6 != '\0') {
            SVar2 = *(SpotOrder *)
                     (*(int *)param_2 + (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
            *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
            goto LAB_0071e5c1;
          }
        }
        else {
          local_60 = (float)((uint)local_60 & 0xffffff00);
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_60);
          SVar2 = local_60._0_1_;
LAB_0071e5c1:
          if (SVar2 != (SpotOrder)0x0) {
            iVar8 = 1;
            do {
              if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
                cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
                uVar16 = 0;
                if (cVar6 == '\0') goto LAB_0071e609;
                if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
                  iVar12 = *(int *)(param_2 + 0xc);
                  local_5c = *(undefined4 *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
                }
                else {
                  puVar13 = (undefined4 *)
                            ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2)
                  ;
                  if (puVar13 == (undefined4 *)0x0) {
                    puVar13 = &local_68;
                  }
                  local_64 = local_68;
                  local_64 = CONCAT31((int3)((uint)local_68 >> 8),*(undefined1 *)((int)puVar13 + 3))
                  ;
                  local_64._2_2_ = (undefined2)((uint)local_68 >> 0x10);
                  local_64._0_2_ =
                       CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3))
                  ;
                  local_64._3_1_ = (undefined1)((uint)local_68 >> 0x18);
                  local_64._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(ushort)local_64);
                  local_64 = CONCAT13(*(undefined1 *)puVar13,(undefined3)local_64);
                  _V_memcpy(&local_68,&local_64,4);
                  iVar12 = *(int *)(param_2 + 0xc);
                  local_5c = local_68;
                }
                *(int *)(param_2 + 0xc) = iVar12 + 4;
                if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071e616;
LAB_0071e6d4:
                cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
                local_60 = 0.0;
                if (cVar6 != '\0') {
                  bVar7 = *(byte *)(*(int *)param_2 +
                                   (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
                  *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
                  goto LAB_0071e635;
                }
              }
              else {
                local_68 = 0;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_68);
                uVar16 = local_68;
LAB_0071e609:
                local_5c = uVar16;
                if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071e6d4;
LAB_0071e616:
                local_64 = local_64 & 0xffffff00;
                CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
                bVar7 = (byte)local_64;
LAB_0071e635:
                local_60 = ((float)bVar7 + 0.0) * 0.003921569;
              }
              iVar8 = iVar8 + 1;
              CUtlVector<SpotOrder,CUtlMemory<SpotOrder,int>>::InsertBefore
                        ((CUtlVector<SpotOrder,CUtlMemory<SpotOrder,int>> *)(puVar10 + 0xc),
                         puVar10[0xf],(SpotOrder *)&local_60);
            } while (iVar8 != (byte)SVar2 + 1);
          }
        }
        piVar4 = *(int **)(param_1 + 0xd0);
        iVar12 = *piVar4;
        iVar8 = iVar12 + 1;
        if (piVar4 == &CUtlVectorUltraConservative<SpotEncounter*,CUtlVectorUltraConservativeAllocator>
                       ::StaticData()::staticData) {
          puVar13 = malloc(iVar8 * 4 + 4);
          *(undefined4 **)(param_1 + 0xd0) = puVar13;
          *puVar13 = 0;
          pvVar9 = *(void **)(param_1 + 0xd0);
        }
        else {
          sVar1 = iVar8 * 4 + 4;
          iVar8 = malloc_usable_size(piVar4);
          if (iVar8 < (int)sVar1) {
            pvVar9 = realloc(*(void **)(param_1 + 0xd0),sVar1);
            *(void **)(param_1 + 0xd0) = pvVar9;
          }
          else {
            pvVar9 = *(void **)(param_1 + 0xd0);
          }
        }
        local_ac = local_ac + 1;
        *(uint **)((int)pvVar9 + iVar12 * 4 + 4) = puVar10;
        **(int **)(param_1 + 0xd0) = **(int **)(param_1 + 0xd0) + 1;
      } while (local_ac != local_a8);
    }
  }
  if (param_3 < 5) {
    return 0;
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,2);
    uVar16 = 0;
    if (cVar6 == '\0') goto LAB_0071ef89;
    if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
      iVar8 = *(int *)(param_2 + 0xc);
      uVar3 = *(ushort *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
    }
    else {
      puVar13 = (undefined4 *)
                ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
      if (puVar13 == (undefined4 *)0x0) {
        puVar13 = &local_64;
      }
      uVar5 = local_60._2_2_;
      local_60 = (float)CONCAT22(local_60._2_2_,(ushort)local_64);
      local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 1));
      local_60._0_2_ = CONCAT11(*(undefined1 *)puVar13,*(undefined1 *)((int)puVar13 + 1));
      local_60 = (float)CONCAT22(uVar5,(undefined2)local_60);
      _V_memcpy(&local_64,&local_60,2);
      iVar8 = *(int *)(param_2 + 0xc);
      uVar3 = (ushort)local_64;
    }
    *(int *)(param_2 + 0xc) = iVar8 + 2;
  }
  else {
    local_64 = local_64 & 0xffff0000;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
    uVar3 = (ushort)local_64;
  }
  uVar16 = 0;
  if ((uVar3 != 0) && ((int)(uVar3 - 1) < DAT_00fe6b50)) {
    uVar16 = *(undefined4 *)(placeDirectory + (uVar3 - 1) * 4);
  }
LAB_0071ef89:
  *(undefined4 *)(param_1 + 0x94) = uVar16;
  if (6 < param_3) {
    local_a8 = 0;
    pCVar17 = param_1;
    do {
      if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
        cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
        if (cVar6 != '\0') {
          if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
            iVar8 = *(int *)(param_2 + 0xc);
            local_a0 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
          }
          else {
            puVar13 = (undefined4 *)
                      ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
            if (puVar13 == (undefined4 *)0x0) {
              puVar13 = &local_64;
            }
            local_60 = (float)local_64;
            local_60._1_3_ = (undefined3)(local_64 >> 8);
            local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
            local_60._2_2_ = (undefined2)(local_64 >> 0x10);
            local_60._0_2_ =
                 CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3));
            local_60._3_1_ = (undefined1)(local_64 >> 0x18);
            local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
            local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
            _V_memcpy(&local_64,&local_60,4);
            iVar8 = *(int *)(param_2 + 0xc);
            local_a0 = local_64;
          }
          *(int *)(param_2 + 0xc) = iVar8 + 4;
          goto LAB_0071efd9;
        }
      }
      else {
        local_64 = 0;
        CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
        local_a0 = local_64;
LAB_0071efd9:
        local_a4 = 0;
        if (local_a0 != 0) {
          do {
            if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
              uVar14 = 0;
              cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
              if (cVar6 != '\0') {
                if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
                  iVar8 = *(int *)(param_2 + 0xc);
                  uVar14 = *(uint *)(*(int *)param_2 + (iVar8 - *(int *)(param_2 + 0x20)));
                }
                else {
                  puVar13 = (undefined4 *)
                            ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2)
                  ;
                  if (puVar13 == (undefined4 *)0x0) {
                    puVar13 = &local_64;
                  }
                  local_60 = (float)local_64;
                  local_60._1_3_ = (undefined3)(local_64 >> 8);
                  local_60 = (float)CONCAT31(local_60._1_3_,*(undefined1 *)((int)puVar13 + 3));
                  local_60._2_2_ = (undefined2)(local_64 >> 0x10);
                  local_60._0_2_ =
                       CONCAT11(*(undefined1 *)((int)puVar13 + 2),*(undefined1 *)((int)puVar13 + 3))
                  ;
                  local_60._3_1_ = (undefined1)(local_64 >> 0x18);
                  local_60._0_3_ = CONCAT12(*(undefined1 *)((int)puVar13 + 1),(undefined2)local_60);
                  local_60 = (float)CONCAT13(*(undefined1 *)puVar13,(undefined3)local_60);
                  _V_memcpy(&local_64,&local_60,4);
                  iVar8 = *(int *)(param_2 + 0xc);
                  uVar14 = local_64;
                }
                *(int *)(param_2 + 0xc) = iVar8 + 4;
              }
            }
            else {
              local_64 = 0;
              CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_64);
              uVar14 = local_64;
            }
            piVar4 = *(int **)(pCVar17 + 0x68);
            iVar8 = *piVar4;
            if (iVar8 < 1) {
LAB_0071f03d:
              if (piVar4 == &CUtlVectorUltraConservative<NavLadderConnect,CUtlVectorUltraConservativeAllocator>
                             ::StaticData()::staticData) {
                puVar13 = malloc((iVar8 + 1) * 4 + 4);
                *(undefined4 **)(pCVar17 + 0x68) = puVar13;
                *puVar13 = 0;
                pvVar9 = *(void **)(pCVar17 + 0x68);
              }
              else {
                sVar1 = (iVar8 + 1) * 4 + 4;
                iVar12 = malloc_usable_size(piVar4);
                if (iVar12 < (int)sVar1) {
                  pvVar9 = realloc(*(void **)(pCVar17 + 0x68),sVar1);
                  *(void **)(pCVar17 + 0x68) = pvVar9;
                }
                else {
                  pvVar9 = *(void **)(pCVar17 + 0x68);
                }
              }
              *(uint *)((int)pvVar9 + iVar8 * 4 + 4) = uVar14;
              **(int **)(pCVar17 + 0x68) = **(int **)(pCVar17 + 0x68) + 1;
            }
            else if (uVar14 != piVar4[1]) {
              iVar12 = 0;
              do {
                if (iVar12 + 1 == iVar8) goto LAB_0071f03d;
                iVar11 = iVar12 + 2;
                iVar12 = iVar12 + 1;
              } while (piVar4[iVar11] != uVar14);
            }
            local_a4 = local_a4 + 1;
          } while (local_a4 != local_a0);
        }
      }
      local_a8 = local_a8 + 1;
      pCVar17 = pCVar17 + 4;
    } while (local_a8 != 2);
    if (param_3 != 7) {
      iVar8 = 0;
      do {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
          uVar14 = 0;
          if (cVar6 != '\0') {
            iVar12 = *(int *)(param_2 + 0xc);
            uVar14 = *(uint *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
            local_64 = uVar14;
            if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
              local_64._3_1_ = (undefined1)(uVar14 >> 0x18);
              local_64._2_1_ = (undefined1)(uVar14 >> 0x10);
              local_60._0_2_ = CONCAT11(local_64._2_1_,local_64._3_1_);
              local_64._1_1_ = (undefined1)(uVar14 >> 8);
              local_60._0_3_ = CONCAT12(local_64._1_1_,(undefined2)local_60);
              local_64._0_1_ = (byte)uVar14;
              local_60 = (float)CONCAT13((byte)local_64,(undefined3)local_60);
              _V_memcpy(&local_64,&local_60,4);
              iVar12 = *(int *)(param_2 + 0xc);
            }
            *(int *)(param_2 + 0xc) = iVar12 + 4;
            uVar14 = local_64;
          }
        }
        else {
          local_64 = 0;
          CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_64);
          uVar14 = local_64;
        }
        *(uint *)(param_1 + iVar8 * 4 + 0xd4) = uVar14;
        iVar8 = iVar8 + 1;
      } while (iVar8 != 2);
      if (10 < param_3) {
        iVar8 = 0;
        do {
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
            cVar6 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
            uVar14 = 0;
            if (cVar6 != '\0') {
              iVar12 = *(int *)(param_2 + 0xc);
              uVar14 = *(uint *)(*(int *)param_2 + (iVar12 - *(int *)(param_2 + 0x20)));
              local_64 = uVar14;
              if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
                local_64._3_1_ = (undefined1)(uVar14 >> 0x18);
                local_64._2_1_ = (undefined1)(uVar14 >> 0x10);
                local_60._0_2_ = CONCAT11(local_64._2_1_,local_64._3_1_);
                local_64._1_1_ = (undefined1)(uVar14 >> 8);
                local_60._0_3_ = CONCAT12(local_64._1_1_,(undefined2)local_60);
                local_64._0_1_ = (byte)uVar14;
                local_60 = (float)CONCAT13((byte)local_64,(undefined3)local_60);
                _V_memcpy(&local_64,&local_60,4);
                iVar12 = *(int *)(param_2 + 0xc);
              }
              *(int *)(param_2 + 0xc) = iVar12 + 4;
              uVar14 = local_64;
            }
          }
          else {
            local_64 = 0;
            CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_64);
            uVar14 = local_64;
          }
          *(uint *)(param_1 + iVar8 * 4 + 0xdc) = uVar14;
          iVar8 = iVar8 + 1;
        } while (iVar8 != 4);
        RecomputeAverageLightIntensity((CNavArea *)param_1);
      }
    }
  }
  return 0;
}

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)