L L4D2node

SurvivorAttack::FireWeapon

0x00919360 · 6257 bytes · __thiscall

_ZN14SurvivorAttack10FireWeaponEP11SurvivorBot

Decompiled

undefined (2 params)

/* WARNING: Removing unreachable block (ram,0x00919d36) */
/* WARNING: Removing unreachable block (ram,0x00919bc1) */
/* WARNING: Removing unreachable block (ram,0x00919b34) */
/* WARNING: Removing unreachable block (ram,0x00919ab0) */
/* WARNING: Removing unreachable block (ram,0x0091ac14) */
/* WARNING: Removing unreachable block (ram,0x0091ab91) */
/* WARNING: Removing unreachable block (ram,0x0091ac1c) */
/* WARNING: Removing unreachable block (ram,0x0091ac27) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* SurvivorAttack::FireWeapon(SurvivorBot*) */

undefined4 __thiscall SurvivorAttack::FireWeapon(SurvivorAttack *this,SurvivorBot *param_1)

{
  SurvivorAttack *pSVar1;
  uint *puVar2;
  float fVar3;
  float fVar4;
  SurvivorAttack SVar5;
  code *pcVar6;
  char cVar7;
  bool bVar8;
  SurvivorTeamSituation *this_00;
  CBaseEntity *pCVar9;
  int iVar10;
  int iVar11;
  float *pfVar12;
  int *piVar13;
  float *pfVar14;
  int *piVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  undefined *puVar19;
  double *pdVar20;
  double *pdVar21;
  undefined4 uVar22;
  bool bVar23;
  longdouble lVar24;
  float fVar25;
  float fVar26;
  double dVar27;
  undefined4 uStack_154;
  float local_11c;
  char local_115;
  int local_110;
  float local_10c;
  float local_100;
  float local_e0;
  float local_dc;
  float local_d8;
  float local_d4;
  float local_d0;
  float local_cc;
  uint local_c8;
  uint local_c4;
  uint local_c0;
  uint local_bc;
  uint local_b8;
  uint local_b4;
  float local_b0;
  float local_ac;
  float local_a8;
  undefined1 local_a4 [12];
  undefined **local_98;
  float local_94;
  float local_90;
  int *local_8c;
  float local_88;
  float local_84;
  undefined1 local_80 [16];
  float local_70;
  float local_6c;
  float local_68;
  int *local_24;
  
  if (_towlower == 0) {
    iVar18 = 0;
  }
  else {
    (**(code **)(_towlower + 0x50))();
    iVar18 = _towlower;
  }
  iVar10 = _DAT_0105db00;
                    /* try { // try from 009195de to 0091963e has its CatchHandler @ 0091ac0a */
  if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
     (iVar11 = ThreadGetCurrentId(), iVar10 == iVar11)) {
    if ((char *)*_DAT_0105d15c != "SurvivorAttack::FireWeapon") {
      _DAT_0105d15c =
           (int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd00a3d,(char *)0x0,0xd00a3d);
    }
    puVar2 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
    *puVar2 = *puVar2 | 4;
    CVProfNode::EnterScope();
    DAT_0105d158 = '\0';
  }
                    /* try { // try from 00919431 to 00919563 has its CatchHandler @ 0091ac08 */
  this_00 = (SurvivorTeamSituation *)SurvivorBot::GetTeamSituation(param_1);
  pdVar20 = (double *)&stack0xfffffeb4;
  if (((*(int *)(SurvivorBotDontShoot._28_4_ + 0x30) == 0) &&
      (((uVar17 = *(uint *)(param_1 + 0x2e28), uVar17 == 0xffffffff ||
        (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10, puVar19 == (undefined *)0xfffffffc)) ||
       ((*(uint *)(puVar19 + 8) != uVar17 >> 0xc ||
        (pdVar20 = (double *)&stack0xfffffeb4, *(int *)(puVar19 + 4) == 0)))))) &&
     ((((cVar7 = CTerrorGameRules::HasPlayerControlledZombies(), cVar7 == '\0' ||
        (uVar17 = *(uint *)(param_1 + 0x33c4), uVar17 == 0xffffffff)) ||
       (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10, puVar19 == (undefined *)0xfffffffc)) ||
      ((*(uint *)(puVar19 + 8) != uVar17 >> 0xc ||
       (pdVar20 = (double *)&stack0xfffffeb4, *(int *)(puVar19 + 4) == 0)))))) {
    pCVar9 = (CBaseEntity *)SelectTarget(this,param_1);
    if ((pCVar9 == (CBaseEntity *)0x0) ||
       (cVar7 = (**(code **)(*(int *)pCVar9 + 300))(), cVar7 == '\0')) {
                    /* try { // try from 00919681 to 009196bb has its CatchHandler @ 0091ac08 */
      cVar7 = INextBot::IsDebugging((INextBot *)(param_1 + 0x4028),1);
      pdVar20 = (double *)&stack0xfffffeb4;
      if (cVar7 != '\0') {
        (**(code **)(*(int *)param_1 + 0x9b8))();
        DevMsg("%3.2f: %s: NOT FIRING because target is dead/gone\n");
        pdVar20 = (double *)&stack0xfffffeb4;
      }
    }
    else {
      iVar10 = CTerrorPlayer::ClassifyZombie(pCVar9);
      if (iVar10 == 7) {
        piVar13 = (int *)__dynamic_cast();
        piVar13 = (int *)(**(code **)(*piVar13 + 0x594))();
        cVar7 = (**(code **)(*piVar13 + 0x114))();
        if (cVar7 != '\0') goto LAB_00919760;
        cVar7 = SurvivorTeamSituation::IsSurvivingTeamAllBots(this_00);
        if (cVar7 != '\0') {
                    /* try { // try from 00919715 to 0091a1ba has its CatchHandler @ 0091ac08 */
          piVar13 = (int *)(**(code **)(*(int *)param_1 + 0x9a4))();
          lVar24 = (longdouble)(**(code **)(*piVar13 + 0xd0))();
          if ((10.0 <= (float)lVar24) && (*(int *)(TheDirector + 0x1bc) < 2)) goto LAB_00919760;
        }
        cVar7 = INextBot::IsDebugging((INextBot *)(param_1 + 0x4028),1);
        pdVar20 = (double *)&stack0xfffffeb4;
        if (cVar7 != '\0') {
          (**(code **)(*(int *)param_1 + 0x9b8))();
          DevMsg("%3.2f: %s: NOT FIRING because target Witch is calm\n");
          pdVar20 = (double *)&stack0xfffffeb4;
        }
      }
      else if ((*(int *)(TheDirector + 0x1bc) < 1) ||
              (cVar7 = SurvivorBot::IsAnyWitchCloserThan
                                 (param_1,*(float *)(z_witch_wander_hear_radius._28_4_ + 0x2c) +
                                          24.0), cVar7 == '\0')) {
LAB_00919760:
        (**(code **)(*(int *)param_1 + 0x234))();
        uStack_154 = 0x919783;
        pfVar12 = (float *)(**(code **)(*(int *)pCVar9 + 0x288))();
        local_d4 = *pfVar12 - local_e0;
        local_d0 = pfVar12[1] - local_dc;
        local_cc = pfVar12[2] - local_d8;
        pdVar20 = (double *)&stack0xfffffeb0;
        if (iVar10 == 0) {
          uStack_154 = 0x9199fe;
          cVar7 = CDirectorChallengeMode::HeadshotOnly
                            (*(CDirectorChallengeMode **)(TheDirector + 0x648));
          pdVar20 = (double *)&stack0xfffffeb0;
          if (cVar7 != '\0') {
            uStack_154 = 0x919a18;
            (**(code **)(*(int *)pCVar9 + 0x234))();
            pdVar20 = (double *)&uStack_154;
            local_d0 = local_6c - local_dc;
            local_cc = local_68 - local_d8;
            local_d4 = local_70 - local_e0;
          }
        }
        *(float **)pdVar20 = &local_d4;
        *(undefined4 *)((int)pdVar20 + -4) = 0x919801;
        lVar24 = (longdouble)VectorNormalize(*(Vector **)pdVar20);
        local_100 = (float)lVar24;
        if (80.0 < local_100) {
          iVar11 = *(int *)param_1;
          *(int *)((int)pdVar20 + 4) = 10;
          *(SurvivorBot **)pdVar20 = param_1;
          pcVar6 = *(code **)(iVar11 + 0x908);
          *(undefined4 *)((int)pdVar20 + -4) = 0x9199c3;
          cVar7 = (*pcVar6)();
          if (cVar7 == '\0') {
            iVar11 = *(int *)param_1;
            *(int *)((int)pdVar20 + 4) = 0xb;
            *(SurvivorBot **)pdVar20 = param_1;
            pcVar6 = *(code **)(iVar11 + 0x908);
            *(undefined4 *)((int)pdVar20 + -4) = 0x9199de;
            cVar7 = (*pcVar6)();
            if (cVar7 == '\0') goto LAB_0091981c;
          }
        }
        else {
LAB_0091981c:
          local_10c = 0.3;
          if ((500.0 <= local_100) && (local_10c = 1.0, local_100 <= 3000.0)) {
            local_10c = (local_100 + -500.0) * 0.00027999998 + 0.3;
          }
          if (local_100 < 150.0) {
            iVar11 = *(int *)param_1;
            *(SurvivorBot **)pdVar20 = param_1;
            pcVar6 = *(code **)(iVar11 + 0x9ac);
            *(undefined4 *)((int)pdVar20 + -4) = 0x919a6a;
            piVar13 = (int *)(*pcVar6)();
            iVar11 = *piVar13;
            *(CBaseEntity **)((int)pdVar20 + 4) = pCVar9;
            *(int **)pdVar20 = piVar13;
            pcVar6 = *(code **)(iVar11 + 0xe4);
            *(undefined4 *)((int)pdVar20 + -4) = 0x919a79;
            cVar7 = (*pcVar6)();
            if (cVar7 == '\0') goto LAB_00919897;
            bVar8 = true;
LAB_00919a88:
            if (AllocTempVector()::s_vecTemp == '\0') {
              *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919ef0;
              iVar11 = __cxa_guard_acquire();
              if (iVar11 != 0) {
                *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919f04;
                __cxa_guard_release();
              }
            }
            if (AllocTempVector()::s_nIndex == '\0') {
              *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919ec1;
              iVar11 = __cxa_guard_acquire();
              if (iVar11 != 0) {
                *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                AllocTempVector()::s_nIndex = 0;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919edf;
                __cxa_guard_release();
              }
            }
            AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
            LOCK();
            UNLOCK();
            fVar25 = *(float *)(pCVar9 + 0x1a8);
            iVar11 = AllocTempVector()::s_nIndex * 0xc;
            bVar23 = AllocTempVector()::s_vecTemp == '\0';
            fVar26 = *(float *)(pCVar9 + 0x19c);
            *(float *)(AllocTempVector()::s_vecTemp + iVar11) = fVar25 - fVar26;
            *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 4) =
                 *(float *)(pCVar9 + 0x1ac) - *(float *)(pCVar9 + 0x1a0);
            *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 8) =
                 *(float *)(pCVar9 + 0x1b0) - *(float *)(pCVar9 + 0x1a4);
            if (bVar23) {
              *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919e8c;
              iVar11 = __cxa_guard_acquire();
              if (iVar11 != 0) {
                *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919ea8;
                __cxa_guard_release();
              }
            }
            if (AllocTempVector()::s_nIndex == '\0') {
              *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919f1d;
              iVar11 = __cxa_guard_acquire();
              if (iVar11 != 0) {
                *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                AllocTempVector()::s_nIndex = 0;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919f43;
                __cxa_guard_release();
              }
            }
            AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
            LOCK();
            UNLOCK();
            iVar11 = AllocTempVector()::s_nIndex * 0xc;
            *(float *)(AllocTempVector()::s_vecTemp + iVar11) =
                 *(float *)(pCVar9 + 0x1a8) - *(float *)(pCVar9 + 0x19c);
            fVar3 = *(float *)(pCVar9 + 0x1ac);
            fVar4 = *(float *)(pCVar9 + 0x1a0);
            *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 4) = fVar3 - fVar4;
            *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 8) =
                 *(float *)(pCVar9 + 0x1b0) - *(float *)(pCVar9 + 0x1a4);
            if (fVar25 - fVar26 <= fVar3 - fVar4) {
              if (AllocTempVector()::s_vecTemp == '\0') {
                *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a44c;
                iVar11 = __cxa_guard_acquire();
                if (iVar11 != 0) {
                  *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a460;
                  __cxa_guard_release();
                }
              }
              if (AllocTempVector()::s_nIndex == '\0') {
                *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a41d;
                iVar11 = __cxa_guard_acquire();
                if (iVar11 != 0) {
                  *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                  AllocTempVector()::s_nIndex = 0;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a43b;
                  __cxa_guard_release();
                }
              }
              AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
              LOCK();
              UNLOCK();
              iVar11 = AllocTempVector()::s_nIndex * 0xc;
              *(float *)(AllocTempVector()::s_vecTemp + iVar11) =
                   *(float *)(pCVar9 + 0x1a8) - *(float *)(pCVar9 + 0x19c);
              fVar25 = *(float *)(pCVar9 + 0x1ac) - *(float *)(pCVar9 + 0x1a0);
              *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 4) = fVar25;
              *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 8) =
                   *(float *)(pCVar9 + 0x1b0) - *(float *)(pCVar9 + 0x1a4);
            }
            else {
              if (AllocTempVector()::s_vecTemp == '\0') {
                *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a4a0;
                iVar11 = __cxa_guard_acquire();
                if (iVar11 != 0) {
                  *(char **)pdVar20 = &AllocTempVector()::s_vecTemp;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a4b4;
                  __cxa_guard_release();
                }
              }
              if (AllocTempVector()::s_nIndex == '\0') {
                *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a471;
                iVar11 = __cxa_guard_acquire();
                if (iVar11 != 0) {
                  *(char **)pdVar20 = &AllocTempVector()::s_nIndex;
                  AllocTempVector()::s_nIndex = 0;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a48f;
                  __cxa_guard_release();
                }
              }
              AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
              LOCK();
              UNLOCK();
              iVar11 = AllocTempVector()::s_nIndex * 0xc;
              fVar25 = *(float *)(pCVar9 + 0x1a8) - *(float *)(pCVar9 + 0x19c);
              *(float *)(AllocTempVector()::s_vecTemp + iVar11) = fVar25;
              *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 4) =
                   *(float *)(pCVar9 + 0x1ac) - *(float *)(pCVar9 + 0x1a0);
              *(float *)(AllocTempVector()::s_vecTemp + iVar11 + 8) =
                   *(float *)(pCVar9 + 0x1b0) - *(float *)(pCVar9 + 0x1a4);
            }
            *pdVar20 = (double)(fVar25 / local_100);
            *(undefined4 *)((int)pdVar20 + -4) = 0x919c35;
            dVar27 = atan(*pdVar20);
            *pdVar20 = dVar27;
            *(undefined4 *)((int)pdVar20 + -4) = 0x919c3d;
            dVar27 = cos(*pdVar20);
            iVar11 = *(int *)param_1;
            *(SurvivorBot **)pdVar20 = param_1;
            pcVar6 = *(code **)(iVar11 + 0x9a4);
            *(undefined4 *)((int)pdVar20 + -4) = 0x919c66;
            piVar13 = (int *)(*pcVar6)();
            iVar11 = *piVar13;
            *(int **)pdVar20 = piVar13;
            pcVar6 = *(code **)(iVar11 + 0xbc);
            *(undefined4 *)((int)pdVar20 + -4) = 0x919c71;
            pfVar12 = (float *)(*pcVar6)();
            if (((float)dVar27 <=
                 pfVar12[1] * local_d0 + *pfVar12 * local_d4 + pfVar12[2] * local_cc) || (bVar8)) {
              iVar11 = *(int *)param_1;
              *(SurvivorBot **)pdVar20 = param_1;
              pcVar6 = *(code **)(iVar11 + 0x7e8);
              *(undefined4 *)((int)pdVar20 + -4) = 0x919da2;
              cVar7 = (*pcVar6)();
              if (cVar7 == '\0') {
                *(int *)((int)pdVar20 + 0xc) = 0;
                *(int *)(pdVar20 + 1) = 0;
                *(SurvivorBot **)((int)pdVar20 + 4) = param_1;
                *(undefined1 **)pdVar20 = local_80;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919f6f;
                CTraceFilterSimple::CTraceFilterSimple
                          (*(CTraceFilterSimple **)pdVar20,*(IHandleEntity **)((int)pdVar20 + 4),
                           *(int *)(pdVar20 + 1),
                           *(_func_bool_IHandleEntity_ptr_int **)((int)pdVar20 + 0xc));
                iVar11 = *(int *)param_1;
                *(int *)((int)pdVar20 + 4) = 3;
                *(SurvivorBot **)pdVar20 = param_1;
                pcVar6 = *(code **)(iVar11 + 0x908);
                *(undefined4 *)((int)pdVar20 + -4) = 0x919f82;
                cVar7 = (*pcVar6)();
                if (cVar7 == '\0') {
                  iVar11 = *(int *)param_1;
                  *(int *)((int)pdVar20 + 4) = 4;
                  *(SurvivorBot **)pdVar20 = param_1;
                  pcVar6 = *(code **)(iVar11 + 0x908);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x919f9d;
                  cVar7 = (*pcVar6)();
                  local_bc = 0x40000000;
                  if ((cVar7 != '\0') && (local_bc = 0x3f800000, local_100 <= 2000.0)) {
                    local_100 = 2000.0;
                  }
                }
                else {
                  local_bc = 0x40800000;
                }
                *(int *)((int)pdVar20 + 0xc) = 0;
                *(int *)(pdVar20 + 1) = 0;
                local_c8 = local_bc ^ 0x80000000;
                *(float **)((int)pdVar20 + 4) = &local_b0;
                *(SurvivorBot **)pdVar20 = param_1;
                local_c4 = local_c8;
                local_c0 = local_c8;
                local_b8 = local_bc;
                local_b4 = local_bc;
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a026;
                CBasePlayer::EyeVectors
                          (*(CBasePlayer **)pdVar20,*(Vector **)((int)pdVar20 + 4),
                           *(Vector **)(pdVar20 + 1),*(Vector **)((int)pdVar20 + 0xc));
                fVar25 = local_b0 * local_100;
                fVar26 = local_ac * local_100;
                iVar11 = *(int *)param_1;
                *(SurvivorBot **)((int)pdVar20 + 4) = param_1;
                local_100 = local_a8 * local_100;
                *(undefined ****)pdVar20 = &local_98;
                pcVar6 = *(code **)(iVar11 + 0x234);
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a07f;
                (*pcVar6)();
                iVar11 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                *(undefined1 **)((int)pdVar20 + -4) = local_a4;
                local_8c = (int *)(fVar25 + (float)local_98);
                local_84 = local_100 + local_90;
                local_88 = fVar26 + local_94;
                pcVar6 = *(code **)(iVar11 + 0x234);
                *(undefined4 *)(pdVar20 + -1) = 0x91a0dc;
                (*pcVar6)();
                pdVar21 = pdVar20 + -1;
                *(float **)(pdVar20 + 2) = &local_70;
                *(undefined1 **)((int)pdVar20 + 0xc) = local_80;
                *(uint **)((int)pdVar20 + 4) = &local_bc;
                *(uint **)pdVar20 = &local_c8;
                *(int ***)((int)pdVar20 + -4) = &local_8c;
                *(int *)(pdVar20 + 1) = 0x46004003;
                *(undefined1 **)(pdVar20 + -1) = local_a4;
                *(undefined4 *)((int)pdVar20 + -0xc) = 0x91a121;
                UTIL_TraceHull(*(Vector **)(pdVar20 + -1),*(Vector **)((int)pdVar20 + -4),
                               *(Vector **)pdVar20,*(Vector **)((int)pdVar20 + 4),
                               *(uint *)(pdVar20 + 1),*(ITraceFilter **)((int)pdVar20 + 0xc),
                               *(CGameTrace **)(pdVar20 + 2));
                if (*(int *)(sb_allow_shoot_through_survivors._28_4_ + 0x30) == 0) {
                  *(float **)(pdVar20 + -1) = &local_70;
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91a138;
                  cVar7 = CGameTrace::DidHitNonWorldEntity(*(CGameTrace **)(pdVar20 + -1));
                  if (cVar7 == '\0') goto LAB_0091a140;
                  iVar11 = *local_24;
                  *(int **)(pdVar20 + -1) = local_24;
                    /* try { // try from 0091aa16 to 0091aa6a has its CatchHandler @ 0091ac08 */
                  pcVar6 = *(code **)(iVar11 + 0x16c);
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91aa1c;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') goto LAB_0091a140;
                  iVar11 = *local_24;
                  *(int **)(pdVar20 + -1) = local_24;
                  pcVar6 = *(code **)(iVar11 + 300);
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91aa32;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') goto LAB_0091a140;
                  *(int **)(pdVar20 + -1) = local_24;
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91aa45;
                  iVar11 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(pdVar20 + -1));
                  *(int *)(pdVar20 + -1) = iVar11;
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91aa4d;
                  cVar7 = IsASurvivorTeam(iVar11);
                  if (cVar7 == '\0') goto LAB_0091a140;
                  iVar11 = *local_24;
                  *(int **)(pdVar20 + -1) = local_24;
                  pcVar6 = *(code **)(iVar11 + 0x7e8);
                  *(undefined4 *)((int)pdVar20 + -0xc) = 0x91aa6b;
                  cVar7 = (*pcVar6)();
                  if ((((((cVar7 != '\0') && (*(char *)((int)local_24 + 0x39f1) == '\0')) &&
                        ((char)local_24[0xcf7] == '\0')) ||
                       (((uVar17 = local_24[0xfb8], uVar17 != 0xffffffff &&
                         (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                         puVar19 != (undefined *)0xfffffffc)) &&
                        ((*(uint *)(puVar19 + 8) == uVar17 >> 0xc && (*(int *)(puVar19 + 4) != 0))))
                       )) || (((uVar17 = local_24[0xf92], uVar17 != 0xffffffff &&
                               (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                               puVar19 != (undefined *)0xfffffffc)) &&
                              ((*(uint *)(puVar19 + 8) == uVar17 >> 0xc &&
                               (*(int *)(puVar19 + 4) != 0)))))) ||
                     (((((uVar17 = local_24[0xf9a], uVar17 != 0xffffffff &&
                         (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                         puVar19 != (undefined *)0xfffffffc)) &&
                        (*(uint *)(puVar19 + 8) == uVar17 >> 0xc)) && (*(int *)(puVar19 + 4) != 0))
                      || (((uVar17 = local_24[0xcf1], uVar17 != 0xffffffff &&
                           (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                           puVar19 != (undefined *)0xfffffffc)) &&
                          ((*(uint *)(puVar19 + 8) == uVar17 >> 0xc && (*(int *)(puVar19 + 4) != 0))
                          )))))) goto LAB_0091a140;
                  local_115 = *(char *)((int)local_24 + 0x39f1);
                }
                else {
LAB_0091a140:
                  local_115 = '\x01';
                }
                iVar11 = *(int *)param_1;
                *(int *)((int)pdVar20 + -4) = 3;
                *(SurvivorBot **)(pdVar20 + -1) = param_1;
                pcVar6 = *(code **)(iVar11 + 0x908);
                *(undefined4 *)((int)pdVar20 + -0xc) = 0x91a15a;
                cVar7 = (*pcVar6)();
                local_11c = 0.8;
                if (cVar7 != '\0') {
                  local_11c = 0.5;
                }
                *(int *)(pdVar20 + -1) = TheDirector;
                *(undefined4 *)((int)pdVar20 + -0xc) = 0x91a18b;
                piVar13 = (int *)CDirector::GetForbiddenTargets(*(CDirector **)(pdVar20 + -1));
                if (piVar13[3] < 1) {
LAB_0091a522:
                  local_100._0_1_ = local_115;
                  pdVar20 = pdVar21;
                }
                else if (local_115 == '\0') {
                  local_100._0_1_ = '\0';
                  pdVar20 = pdVar20 + -1;
                }
                else {
                  local_110 = 0;
                  pdVar21 = pdVar20 + -1;
                  do {
                    while (((uVar17 = *(uint *)(*piVar13 + local_110 * 4), uVar17 == 0xffffffff ||
                            (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                            puVar19 == (undefined *)0xfffffffc)) ||
                           ((*(uint *)(puVar19 + 8) != uVar17 >> 0xc ||
                            (piVar15 = *(int **)(puVar19 + 4), piVar15 == (int *)0x0))))) {
LAB_0091a50a:
                      local_110 = local_110 + 1;
                      if (piVar13[3] <= local_110) goto LAB_0091a522;
                    }
                    iVar11 = *(int *)(param_1 + 0x4028);
                    *(float *)(pdVar21 + 1) = *(float *)(car_alarm_distance._28_4_ + 0x2c) * 1.1;
                    *(int **)((int)pdVar21 + 4) = piVar15;
                    *(SurvivorBot **)pdVar21 = param_1 + 0x4028;
                    /* try { // try from 0091a7db to 0091a9c2 has its CatchHandler @ 0091ac08 */
                    pcVar6 = *(code **)(iVar11 + 0x114);
                    *(undefined4 *)((int)pdVar21 + -4) = 0x91a7e1;
                    cVar7 = (*pcVar6)();
                    if (cVar7 == '\0') goto LAB_0091a50a;
                    iVar11 = *(int *)param_1;
                    *(SurvivorBot **)((int)pdVar21 + 4) = param_1;
                    *(int ***)pdVar21 = &local_8c;
                    pcVar6 = *(code **)(iVar11 + 0x234);
                    *(undefined4 *)((int)pdVar21 + -4) = 0x91a7fe;
                    (*pcVar6)();
                    iVar11 = *piVar15;
                    *(int **)((int)pdVar21 + -4) = piVar15;
                    pcVar6 = *(code **)(iVar11 + 0x288);
                    *(undefined4 *)(pdVar21 + -1) = 0x91a812;
                    pfVar12 = (float *)(*pcVar6)();
                    local_98 = (undefined **)(*pfVar12 - (float)local_8c);
                    local_94 = pfVar12[1] - local_88;
                    fVar25 = pfVar12[2];
                    *(undefined ****)((int)pdVar21 + -4) = &local_98;
                    local_90 = fVar25 - local_84;
                    *(undefined4 *)(pdVar21 + -1) = 0x91a85b;
                    VectorNormalize(*(Vector **)((int)pdVar21 + -4));
                    local_100._0_1_ = local_115;
                    if (local_11c <
                        local_94 * local_ac + (float)local_98 * local_b0 + local_90 * local_a8) {
                      *(uint *)(pdVar21 + 1) = 0x461c4000;
                      *(uint *)((int)pdVar21 + 4) = 5;
                      *(int **)pdVar21 = piVar15;
                      *(undefined4 *)((int)pdVar21 + -4) = TheNavMesh;
                      *(undefined4 *)(pdVar21 + -1) = 0x91a900;
                      iVar16 = CNavMesh::GetNearestNavArea
                                         (*(CNavMesh **)((int)pdVar21 + -4),*(CBaseEntity **)pdVar21
                                          ,*(uint *)((int)pdVar21 + 4),*(float *)(pdVar21 + 1));
                      iVar11 = *(int *)param_1;
                      *(SurvivorBot **)((int)pdVar21 + -4) = param_1;
                      pcVar6 = *(code **)(iVar11 + 0x52c);
                      *(undefined4 *)(pdVar21 + -1) = 0x91a911;
                      iVar11 = (*pcVar6)();
                      if ((iVar11 != 0) && (iVar16 != 0)) {
                        *(uint *)((int)pdVar21 + 4) = 0;
                        *(int *)((int)pdVar21 + -4) = iVar11;
                        *(int *)pdVar21 = iVar16;
                        *(undefined4 *)(pdVar21 + -1) = 0x91a93d;
                        cVar7 = TerrorNavArea::IsPotentiallyVisible
                                          (*(TerrorNavArea **)((int)pdVar21 + -4),
                                           *(TerrorNavArea **)pdVar21,*(bool *)((int)pdVar21 + 4));
                        if (cVar7 != '\0') {
                          *(undefined4 *)pdVar21 = 1;
                          *(SurvivorBot **)((int)pdVar21 + -4) = param_1 + 0x4028;
                          *(undefined4 *)(pdVar21 + -1) = 0x91a95b;
                          cVar7 = INextBot::IsDebugging
                                            (*(INextBot **)((int)pdVar21 + -4),*(uint *)pdVar21);
                          if (cVar7 != '\0') {
                            iVar11 = *(int *)param_1;
                            *(SurvivorBot **)((int)pdVar21 + -4) = param_1;
                            pcVar6 = *(code **)(iVar11 + 0x9b8);
                            *(undefined4 *)(pdVar21 + -1) = 0x91a976;
                            uVar17 = (*pcVar6)();
                            *(uint *)(pdVar21 + 1) = uVar17;
                            fVar25 = *(float *)(gpGlobals + 0xc);
                            *(char **)((int)pdVar21 + -4) =
                                 "%3.2f: %s: NOT FIRING because we might hit the car alarm\n";
                            *pdVar21 = (double)fVar25;
                            *(undefined4 *)(pdVar21 + -1) = 0x91a996;
                            DevMsg(*(char **)((int)pdVar21 + -4));
                          }
                          local_100._0_1_ = '\0';
                        }
                      }
                    }
                    local_110 = local_110 + 1;
                    pdVar20 = (double *)((int)pdVar21 + -4);
                  } while ((local_110 < piVar13[3]) &&
                          (pdVar20 = (double *)((int)pdVar21 + -4),
                          pdVar21 = (double *)((int)pdVar21 + -4), local_100._0_1_ != '\0'));
                }
                iVar11 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                pcVar6 = *(code **)(iVar11 + 0x550);
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a1bb;
                cVar7 = (*pcVar6)();
                if (cVar7 == '\0') {
                  local_98 = &PTR_IsAllowed_00d00f08;
                  iVar11 = *(int *)param_1;
                  *(SurvivorBot **)pdVar20 = param_1;
                    /* try { // try from 0091a6b1 to 0091a78f has its CatchHandler @ 0091ac0e */
                  pcVar6 = *(code **)(iVar11 + 0x9ac);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a6b7;
                  piVar13 = (int *)(*pcVar6)();
                  iVar11 = *piVar13;
                  *(int **)pdVar20 = piVar13;
                  *(undefined ****)((int)pdVar20 + 4) = &local_98;
                  pcVar6 = *(code **)(iVar11 + 0xc4);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a6cc;
                  piVar13 = (int *)(*pcVar6)();
                  if (piVar13 == (int *)0x0) goto LAB_0091a1c3;
                  iVar11 = *piVar13;
                  *(int **)pdVar20 = piVar13;
                  pcVar6 = *(code **)(iVar11 + 0x16c);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a6e7;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') goto LAB_0091a1c3;
                  iVar11 = *(int *)param_1;
                  *(SurvivorBot **)pdVar20 = param_1;
                  pcVar6 = *(code **)(iVar11 + 0x9ac);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a6fa;
                  piVar15 = (int *)(*pcVar6)();
                  iVar11 = *piVar15;
                  *(int **)pdVar20 = piVar15;
                  *(int **)((int)pdVar20 + 4) = piVar13;
                  *(float *)((int)pdVar20 + 8) = local_11c;
                  pcVar6 = *(code **)(iVar11 + 0x100);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a71d;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') goto LAB_0091a1c3;
                  local_8c = piVar13;
                  *(int ***)pdVar20 = &local_8c;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a73f;
                  bVar8 = ForEachSurvivor<AnyoneTooCloseToBoomerCheck>
                                    (*(AnyoneTooCloseToBoomerCheck **)pdVar20);
                  if (bVar8) goto LAB_0091a1c3;
                  *(int *)((int)pdVar20 + 4) = 1;
                  *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a75d;
                  cVar7 = INextBot::IsDebugging(*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
                  if (cVar7 != '\0') {
                    iVar11 = *(int *)param_1;
                    *(SurvivorBot **)pdVar20 = param_1;
                    pcVar6 = *(code **)(iVar11 + 0x9b8);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a770;
                    iVar11 = (*pcVar6)();
                    *(int *)((int)pdVar20 + 0xc) = iVar11;
                    fVar25 = *(float *)(gpGlobals + 0xc);
                    *(char **)pdVar20 =
                         "%3.2f: %s: NOT FIRING because we would pop the Boomer on a teammate\n";
                    *(double *)((int)pdVar20 + 4) = (double)fVar25;
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a790;
                    DevMsg(*(char **)pdVar20);
                  }
                }
                else {
LAB_0091a1c3:
                  if (local_100._0_1_ != '\0') goto LAB_00919daa;
                }
              }
              else {
LAB_00919daa:
                iVar11 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                pcVar6 = *(code **)(iVar11 + 0x9ac);
                *(undefined4 *)((int)pdVar20 + -4) = 0x919db5;
                piVar13 = (int *)(*pcVar6)();
                iVar11 = *piVar13;
                *(int *)((int)pdVar20 + 8) = 0;
                *(CBaseEntity **)((int)pdVar20 + 4) = pCVar9;
                *(int **)pdVar20 = piVar13;
                pcVar6 = *(code **)(iVar11 + 0xf8);
                *(undefined4 *)((int)pdVar20 + -4) = 0x919dcc;
                uVar22 = (*pcVar6)();
                if ((char)uVar22 != '\0') {
                  iVar10 = *(int *)param_1;
                  *(int *)((int)pdVar20 + 4) = 1;
                  *(SurvivorBot **)pdVar20 = param_1;
                  pcVar6 = *(code **)(iVar10 + 0x908);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x919de9;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') {
                    iVar10 = *(int *)param_1;
                    *(int *)((int)pdVar20 + 4) = 2;
                    *(SurvivorBot **)pdVar20 = param_1;
                    /* try { // try from 0091a5e1 to 0091a69f has its CatchHandler @ 0091ac08 */
                    pcVar6 = *(code **)(iVar10 + 0x908);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a5e7;
                    cVar7 = (*pcVar6)();
                    if (cVar7 == '\0') {
                      iVar10 = *(int *)param_1;
                      *(int *)((int)pdVar20 + 4) = 0xb;
                      *(SurvivorBot **)pdVar20 = param_1;
                      pcVar6 = *(code **)(iVar10 + 0x908);
                      *(undefined4 *)((int)pdVar20 + -4) = 0x91a602;
                      cVar7 = (*pcVar6)();
                      if (cVar7 == '\0') {
                        if (this[0x32] == (SurvivorAttack)0x0) {
                          iVar10 = *(int *)param_1;
                          *(int *)((int)pdVar20 + 4) = -0x40800000;
                          *(SurvivorBot **)pdVar20 = param_1;
                          pcVar6 = *(code **)(iVar10 + 0x938);
                          *(undefined4 *)((int)pdVar20 + -4) = 0x91a65b;
                          (*pcVar6)();
                          *(int *)((int)pdVar20 + 4) = 1;
                          *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
                          *(undefined4 *)((int)pdVar20 + -4) = 0x91a671;
                          cVar7 = INextBot::IsDebugging
                                            (*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
                          if (cVar7 != '\0') {
                            iVar10 = *(int *)param_1;
                            *(SurvivorBot **)pdVar20 = param_1;
                            pcVar6 = *(code **)(iVar10 + 0x9b8);
                            *(undefined4 *)((int)pdVar20 + -4) = 0x91a680;
                            iVar10 = (*pcVar6)();
                            *(int *)((int)pdVar20 + 0xc) = iVar10;
                            fVar25 = *(float *)(gpGlobals + 0xc);
                            *(char **)pdVar20 = "%3.2f: %s: FIRE!\n";
                            *(double *)((int)pdVar20 + 4) = (double)fVar25;
                            *(undefined4 *)((int)pdVar20 + -4) = 0x91a6a0;
                            DevMsg(*(char **)pdVar20);
                          }
                        }
                        else {
                          iVar10 = *(int *)param_1;
                          *(SurvivorBot **)pdVar20 = param_1;
                          pcVar6 = *(code **)(iVar10 + 0x93c);
                          *(undefined4 *)((int)pdVar20 + -4) = 0x91a61e;
                          (*pcVar6)();
                          *(int *)((int)pdVar20 + 4) = 1;
                          *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
                          *(undefined4 *)((int)pdVar20 + -4) = 0x91a634;
                          cVar7 = INextBot::IsDebugging
                                            (*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
                          if (cVar7 != '\0') {
                            iVar10 = *(int *)param_1;
                            *(SurvivorBot **)pdVar20 = param_1;
                            pcVar6 = *(code **)(iVar10 + 0x9b8);
                            *(undefined4 *)((int)pdVar20 + -4) = 0x91a9a3;
                            iVar10 = (*pcVar6)();
                            *(int *)((int)pdVar20 + 0xc) = iVar10;
                            fVar25 = *(float *)(gpGlobals + 0xc);
                            *(char **)pdVar20 = "%3.2f: %s: Releasing trigger\n";
                            *(double *)((int)pdVar20 + 4) = (double)fVar25;
                            *(undefined4 *)((int)pdVar20 + -4) = 0x91a9c3;
                            DevMsg(*(char **)pdVar20);
                          }
                        }
                        this[0x32] = (SurvivorAttack)((byte)this[0x32] ^ 1);
                        goto LAB_0091956a;
                      }
                    }
                  }
                  pcVar6 = *(code **)(*(int *)param_1 + 0x938);
                  *(int *)((int)pdVar20 + 4) = 0x3e19999a;
                  *(undefined4 *)pdVar20 = 0x3dcccccd;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x919e0d;
                  lVar24 = (longdouble)RandomFloat();
                  *(SurvivorBot **)pdVar20 = param_1;
                  *(float *)((int)pdVar20 + 4) = (float)lVar24;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x919e26;
                  (*pcVar6)();
                  *(int *)((int)pdVar20 + 4) = 1;
                  *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x919e3c;
                  cVar7 = INextBot::IsDebugging(*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
                  if (cVar7 != '\0') {
                    iVar10 = *(int *)param_1;
                    *(SurvivorBot **)pdVar20 = param_1;
                    pcVar6 = *(code **)(iVar10 + 0x9b8);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x919e4f;
                    iVar10 = (*pcVar6)();
                    *(int *)((int)pdVar20 + 0xc) = iVar10;
                    fVar25 = *(float *)(gpGlobals + 0xc);
                    *(char **)pdVar20 = "%3.2f: %s: CONTINUOUS FIRE!\n";
                    *(double *)((int)pdVar20 + 4) = (double)fVar25;
                    *(undefined4 *)((int)pdVar20 + -4) = 0x919e6f;
                    DevMsg(*(char **)pdVar20);
                  }
                  goto LAB_0091956a;
                }
              }
              if ((((iVar10 != 0) || (*(int *)(SurvivorBotSidestepForHorde._28_4_ + 0x30) != 0)) ||
                  ((uVar17 = *(uint *)(this_00 + 0x10), uVar17 != 0xffffffff &&
                   (((puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                     puVar19 != (undefined *)0xfffffffc && (*(uint *)(puVar19 + 8) == uVar17 >> 0xc)
                     ) && (*(int *)(puVar19 + 4) != 0)))))) ||
                 (((uVar17 = *(uint *)(this_00 + 8), uVar17 != 0xffffffff &&
                   (puVar19 = g_pEntityList + (uVar17 & 0xfff) * 0x10,
                   puVar19 != (undefined *)0xfffffffc)) &&
                  ((*(uint *)(puVar19 + 8) == uVar17 >> 0xc && (*(int *)(puVar19 + 4) != 0)))))) {
                pSVar1 = this + 0x54;
                *(SurvivorAttack **)pdVar20 = pSVar1;
                    /* try { // try from 0091a256 to 0091a3ca has its CatchHandler @ 0091abd8 */
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a25b;
                lVar24 = (longdouble)CountdownTimer::Now();
                if (*(float *)(this + 0x5c) <= (float)lVar24) {
                  *(int *)((int)pdVar20 + 4) = 100;
                  *(undefined4 *)pdVar20 = 0;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a286;
                  iVar10 = RandomInt();
                  this[0x60] = (SurvivorAttack)(iVar10 < 0x32);
                  *(int *)((int)pdVar20 + 4) = 0x40400000;
                  *(undefined4 *)pdVar20 = 0x40000000;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a2a4;
                  lVar24 = (longdouble)RandomFloat();
                  fVar25 = (float)lVar24;
                  *(SurvivorAttack **)pdVar20 = pSVar1;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a2b2;
                  lVar24 = (longdouble)CountdownTimer::Now();
                  if ((float)lVar24 + fVar25 != *(float *)(this + 0x5c)) {
                    iVar10 = *(int *)(this + 0x54);
                    *(SurvivorAttack **)pdVar20 = pSVar1;
                    *(SurvivorAttack **)((int)pdVar20 + 4) = this + 0x5c;
                    pcVar6 = *(code **)(iVar10 + 4);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91aa03;
                    (*pcVar6)();
                    *(float *)(this + 0x5c) = (float)lVar24 + fVar25;
                  }
                  if (fVar25 != *(float *)(this + 0x58)) {
                    iVar10 = *(int *)(this + 0x54);
                    *(SurvivorAttack **)pdVar20 = pSVar1;
                    *(SurvivorAttack **)((int)pdVar20 + 4) = this + 0x58;
                    /* try { // try from 0091a9d8 to 0091aa02 has its CatchHandler @ 0091abd8 */
                    pcVar6 = *(code **)(iVar10 + 4);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a9db;
                    (*pcVar6)();
                    *(float *)(this + 0x58) = fVar25;
                  }
                }
                iVar10 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                pcVar6 = *(code **)(iVar10 + 0x9a0);
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a2fb;
                piVar13 = (int *)(*pcVar6)();
                iVar10 = *piVar13;
                *(int **)pdVar20 = piVar13;
                pcVar6 = *(code **)(iVar10 + 300);
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a308;
                pfVar12 = (float *)(*pcVar6)();
                iVar10 = *piVar13;
                *(int **)pdVar20 = piVar13;
                pcVar6 = *(code **)(iVar10 + 0x14c);
                *(undefined4 *)((int)pdVar20 + -4) = 0x91a315;
                pfVar14 = (float *)(*pcVar6)();
                fVar25 = pfVar14[2];
                fVar26 = *pfVar14;
                fVar3 = pfVar14[1];
                SVar5 = this[0x60];
                iVar10 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                if (SVar5 == (SurvivorAttack)0x0) {
                    /* try { // try from 0091a541 to 0091a5ce has its CatchHandler @ 0091abd8 */
                  pcVar6 = *(code **)(iVar10 + 0x9a0);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a547;
                  piVar13 = (int *)(*pcVar6)();
                  local_70 = *pfVar12 - -fVar3 * 25.0;
                  pcVar6 = *(code **)(*piVar13 + 0x15c);
                  local_6c = pfVar12[1] - fVar26 * 25.0;
                  fVar26 = pfVar12[2];
                  *(int *)((int)pdVar20 + 0xc) = 0;
                  *(float **)((int)pdVar20 + 8) = &local_70;
                  *(float **)((int)pdVar20 + 4) = pfVar12;
                  *(int **)pdVar20 = piVar13;
                  local_68 = fVar26 - fVar25 * 25.0;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a5b4;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') {
                    iVar10 = *(int *)param_1;
                    *(int *)((int)pdVar20 + 4) = -0x40800000;
                    *(SurvivorBot **)pdVar20 = param_1;
                    pcVar6 = *(code **)(iVar10 + 0x970);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a5cf;
                    (*pcVar6)();
                  }
                }
                else {
                  pcVar6 = *(code **)(iVar10 + 0x9a0);
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a34f;
                  piVar13 = (int *)(*pcVar6)();
                  pcVar6 = *(code **)(*piVar13 + 0x15c);
                  local_70 = -fVar3 * 25.0 + *pfVar12;
                  local_6c = fVar26 * 25.0 + pfVar12[1];
                  fVar26 = pfVar12[2];
                  *(int *)((int)pdVar20 + 0xc) = 0;
                  *(float **)((int)pdVar20 + 8) = &local_70;
                  *(float **)((int)pdVar20 + 4) = pfVar12;
                  local_68 = fVar25 * 25.0 + fVar26;
                  *(int **)pdVar20 = piVar13;
                  *(undefined4 *)((int)pdVar20 + -4) = 0x91a3b0;
                  cVar7 = (*pcVar6)();
                  if (cVar7 == '\0') {
                    iVar10 = *(int *)param_1;
                    *(int *)((int)pdVar20 + 4) = -0x40800000;
                    *(SurvivorBot **)pdVar20 = param_1;
                    pcVar6 = *(code **)(iVar10 + 0x968);
                    *(undefined4 *)((int)pdVar20 + -4) = 0x91a3cb;
                    (*pcVar6)();
                  }
                }
              }
            }
            else {
              *(int *)((int)pdVar20 + 4) = 1;
              *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919cd3;
              cVar7 = INextBot::IsDebugging(*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
              if (cVar7 != '\0') {
                iVar10 = *(int *)param_1;
                *(SurvivorBot **)pdVar20 = param_1;
                pcVar6 = *(code **)(iVar10 + 0x9b8);
                *(undefined4 *)((int)pdVar20 + -4) = 0x919ce6;
                iVar10 = (*pcVar6)();
                *(int *)((int)pdVar20 + 0xc) = iVar10;
                fVar25 = *(float *)(gpGlobals + 0xc);
                *(char **)pdVar20 = "%3.2f: %s: NOT FIRING because our aim is off\n";
                *(double *)((int)pdVar20 + 4) = (double)fVar25;
                *(undefined4 *)((int)pdVar20 + -4) = 0x919d09;
                DevMsg(*(char **)pdVar20);
              }
            }
          }
          else {
LAB_00919897:
            iVar11 = *(int *)param_1;
            *(SurvivorBot **)pdVar20 = param_1;
            pcVar6 = *(code **)(iVar11 + 0x9a4);
            *(undefined4 *)((int)pdVar20 + -4) = 0x9198a2;
            piVar13 = (int *)(*pcVar6)();
            iVar11 = *piVar13;
            *(int **)pdVar20 = piVar13;
            pcVar6 = *(code **)(iVar11 + 0xcc);
            *(undefined4 *)((int)pdVar20 + -4) = 0x9198ad;
            cVar7 = (*pcVar6)();
            if (cVar7 != '\0') {
              iVar11 = *(int *)param_1;
              *(SurvivorBot **)pdVar20 = param_1;
                    /* try { // try from 0091a3d5 to 0091a3e5 has its CatchHandler @ 0091ac08 */
              pcVar6 = *(code **)(iVar11 + 0x9a4);
              *(undefined4 *)((int)pdVar20 + -4) = 0x91a3db;
              piVar13 = (int *)(*pcVar6)();
              iVar11 = *piVar13;
              *(int **)pdVar20 = piVar13;
              pcVar6 = *(code **)(iVar11 + 0xd0);
              *(undefined4 *)((int)pdVar20 + -4) = 0x91a3e6;
              lVar24 = (longdouble)(*pcVar6)();
              if (local_10c <= (float)lVar24) {
                bVar8 = false;
                goto LAB_00919a88;
              }
            }
            *(int *)((int)pdVar20 + 4) = 1;
            *(SurvivorBot **)pdVar20 = param_1 + 0x4028;
            *(undefined4 *)((int)pdVar20 + -4) = 0x9198cb;
            cVar7 = INextBot::IsDebugging(*(INextBot **)pdVar20,*(uint *)((int)pdVar20 + 4));
            if (cVar7 != '\0') {
              iVar10 = *(int *)param_1;
              *(SurvivorBot **)pdVar20 = param_1;
              pcVar6 = *(code **)(iVar10 + 0x9b8);
              *(undefined4 *)((int)pdVar20 + -4) = 0x9198de;
              iVar10 = (*pcVar6)();
              *(int *)((int)pdVar20 + 0xc) = iVar10;
              fVar25 = *(float *)(gpGlobals + 0xc);
              *(char **)pdVar20 =
                   "%3.2f: %s: NOT FIRING because our head hasn\'t been still long enough\n";
              *(double *)((int)pdVar20 + 4) = (double)fVar25;
              *(undefined4 *)((int)pdVar20 + -4) = 0x919901;
              DevMsg(*(char **)pdVar20);
            }
          }
        }
      }
      else {
        (**(code **)(*(int *)param_1 + 0x9b8))();
        DevMsg("%3.2f: %s: NOT FIRING because I am very close to a calm witch.\n");
        pdVar20 = (double *)&stack0xfffffeb4;
      }
    }
  }
  uVar22 = 0;
LAB_0091956a:
  iVar10 = _DAT_0105db00;
  if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
    *(undefined4 *)((int)pdVar20 + -4) = 0x919587;
    iVar11 = ThreadGetCurrentId();
    if (iVar10 == iVar11) {
      *(int **)pdVar20 = _DAT_0105d15c;
      *(undefined4 *)((int)pdVar20 + -4) = 0x9196d5;
      cVar7 = CVProfNode::ExitScope();
      if (cVar7 != '\0') {
        _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
      }
      DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
    }
  }
  if (iVar18 != 0) {
    *(int *)((int)pdVar20 + 0x14) = 0;
    *(int *)((int)pdVar20 + 0x10) = 0;
    *(int *)((int)pdVar20 + 0xc) = 0;
    *(int *)pdVar20 = iVar18;
    *(int *)((int)pdVar20 + 4) = 0;
    *(int *)((int)pdVar20 + 8) = 0;
    pcVar6 = *(code **)(iVar18 + 0x54);
    *(undefined4 *)((int)pdVar20 + -4) = 0x9195cb;
    (*pcVar6)();
  }
  return uVar22;
}

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)