L L4D2node

CTerrorPlayer::Event_Killed

0x009dfa70 · 13505 bytes · __thiscall

_ZN13CTerrorPlayer12Event_KilledERK15CTakeDamageInfo

Decompiled

undefined (2 params)

/* CTerrorPlayer::Event_Killed(CTakeDamageInfo const&) */

void __thiscall CTerrorPlayer::Event_Killed(CTerrorPlayer *this,CTakeDamageInfo *param_1)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  CTerrorPlayer CVar6;
  uint uVar7;
  CBaseEdict *pCVar8;
  char cVar9;
  char cVar10;
  undefined1 uVar11;
  int iVar12;
  char *pcVar13;
  CBaseCombatWeapon *this_00;
  undefined4 uVar14;
  undefined4 *puVar15;
  int iVar16;
  CBaseEntity *pCVar17;
  QAngle *pQVar18;
  Vector *pVVar19;
  CTerrorPlayer *pCVar20;
  uint *puVar21;
  int iVar22;
  CVomit *this_01;
  float *pfVar23;
  CInferno *pCVar24;
  int *piVar25;
  code *pcVar26;
  undefined *puVar27;
  int *piVar28;
  uint uVar29;
  float fVar30;
  undefined *puVar31;
  int in_GS_OFFSET;
  bool bVar32;
  byte bVar33;
  longdouble lVar34;
  float local_29c;
  float local_284;
  CBaseEntity *local_280;
  undefined1 local_270 [12];
  undefined4 local_264;
  undefined4 local_260;
  uint local_25c;
  undefined4 local_258;
  undefined4 local_254;
  undefined4 local_250;
  float local_24c;
  float local_248;
  CTerrorPlayer *local_244;
  CTerrorPlayer *local_23c;
  float local_238;
  float local_234;
  undefined4 local_230;
  float local_22c;
  float local_228;
  float local_224;
  undefined4 local_21c;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_20c;
  undefined4 local_208;
  undefined4 local_204;
  undefined4 local_1fc;
  undefined1 local_1f8;
  undefined1 local_1f7;
  undefined4 local_1ec;
  undefined4 local_1e8;
  uint local_1e4;
  undefined4 local_1e0;
  undefined4 local_1dc;
  undefined4 local_1d8;
  undefined4 local_1d4;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8;
  undefined4 local_1c4;
  undefined4 local_1c0;
  undefined4 local_1bc;
  uint local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  undefined4 local_1ac;
  undefined4 local_1a8;
  uint local_1a4;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined4 local_198;
  undefined4 local_194;
  undefined4 local_190;
  CTerrorPlayer *local_180;
  char *local_17c;
  char *local_178;
  float local_174;
  float local_170;
  CTerrorPlayer *local_16c;
  undefined4 local_168;
  uint local_164;
  undefined4 local_160;
  float local_154;
  char local_149;
  CBaseEntity *local_134;
  char local_120 [4];
  undefined4 local_11c [63];
  int local_20;
  
  bVar33 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  cVar9 = (**(code **)(*(int *)this + 0x558))(this);
  (**(code **)(*(int *)this + 0x234))(local_270,this);
  *(undefined4 *)(this + 0x2d48) = *(undefined4 *)(gpGlobals + 0xc);
  if (((byte)this[0x14d] & 8) != 0) {
    CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
  }
  *(undefined4 *)(this + 0x2d3c) = *(undefined4 *)(this + 0x2e0);
  *(undefined4 *)(this + 0x2d40) = *(undefined4 *)(this + 0x2e4);
  *(undefined4 *)(this + 0x2d44) = *(undefined4 *)(this + 0x2e8);
  cVar10 = CTerrorGameRules::HasPlayerControlledZombies();
  if ((((cVar10 != '\0') && (uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
      (pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 != (CBaseEntity *)0x0)))) {
    if ((*(char **)(pCVar17 + 0x7c) != "trigger_hurt") &&
       (cVar10 = CBaseEntity::ClassMatchesComplex(pCVar17,"trigger_hurt"), cVar10 == '\0')) {
      pCVar17 = (CBaseEntity *)0x0;
      uVar7 = *(uint *)(param_1 + 0x34);
      if (((uVar7 != 0xffffffff) &&
          (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
        pCVar17 = *(CBaseEntity **)(puVar27 + 4);
      }
      if ((*(char **)(pCVar17 + 0x7c) != "trigger_hurt_ghost") &&
         (cVar10 = CBaseEntity::ClassMatchesComplex(pCVar17,"trigger_hurt_ghost"), cVar10 == '\0'))
      goto LAB_009dfb40;
    }
    uVar7 = *(uint *)(this + 0x2a4c);
    if ((uVar7 == 0xffffffff) ||
       (((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
         (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
        (*(CTerrorPlayer **)(puVar27 + 4) == (CTerrorPlayer *)0x0)))) {
      cVar10 = CTerrorPlayerAnimState::IsHitByCharger(*(CTerrorPlayerAnimState **)(this + 0x2910));
      if (cVar10 == '\0') {
        uVar7 = *(uint *)(this + 0x2a48);
        if (((uVar7 != 0xffffffff) &&
            (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
           && ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc && (*(int *)(puVar27 + 4) != 0)))) {
          AddSurvivorDamage(this,300,0,*(undefined4 *)(*(int *)(puVar27 + 4) + 0x2ba0));
          piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                     (gameeventmanager,"charger_carry_kill",0,0);
          if (piVar28 != (int *)0x0) {
            pcVar26 = *(code **)(*piVar28 + 0x30);
            uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
            (*pcVar26)(piVar28,"userid",uVar14);
            iVar12 = 0;
            local_280 = *(CBaseEntity **)(*piVar28 + 0x30);
            uVar7 = *(uint *)(this + 0x2a48);
            if (((uVar7 != 0xffffffff) &&
                (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                puVar27 != (undefined *)0xfffffffc)) && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
              iVar12 = *(int *)(puVar27 + 4);
            }
            uVar14 = *(undefined4 *)(iVar12 + 0x30);
            iVar12 = *engine;
            goto LAB_009e1647;
          }
        }
      }
      else {
        pCVar20 = (CTerrorPlayer *)GetOtherResponsibleForMovement(this);
        if ((pCVar20 != (CTerrorPlayer *)0x0) &&
           (cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 != '\0')) {
          AddSurvivorDamage(pCVar20,300,0,*(undefined4 *)(this + 0x2ba0));
        }
      }
    }
    else {
      AddSurvivorDamage(*(CTerrorPlayer **)(puVar27 + 4),300,0,*(undefined4 *)(this + 0x2ba0));
      piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                 (gameeventmanager,"charger_carry_kill",0,0);
      if (piVar28 != (int *)0x0) {
        iVar12 = 0;
        pcVar26 = *(code **)(*piVar28 + 0x30);
        uVar7 = *(uint *)(this + 0x2a4c);
        if (((uVar7 != 0xffffffff) &&
            (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
          iVar12 = *(int *)(puVar27 + 4);
        }
        uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(iVar12 + 0x30));
        (*pcVar26)(piVar28,"userid",uVar14);
        uVar14 = *(undefined4 *)(this + 0x30);
        local_280 = *(CBaseEntity **)(*piVar28 + 0x30);
        iVar12 = *engine;
LAB_009e1647:
        uVar14 = (**(code **)(iVar12 + 0x40))(engine,uVar14);
        (*(code *)local_280)(piVar28,"victim",uVar14);
        (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
      }
    }
  }
LAB_009dfb40:
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  cVar10 = IsASurvivorTeam(iVar12);
  if (cVar10 == '\0') {
    *(undefined4 *)(this + 0x2d5c) = 0;
  }
  else {
    iVar12 = *(int *)(this + 0x3974);
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar8 = *(CBaseEdict **)(this + 0x30);
      if (pCVar8 != (CBaseEdict *)0x0) {
        *(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
        iVar16 = CBaseEdict::GetChangeAccessor(pCVar8);
        *(undefined2 *)(iVar16 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(int *)(this + 0x3974) = iVar12 + 1;
    uVar7 = *(uint *)(param_1 + 0x34);
    if (((uVar7 != 0xffffffff) &&
        (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
       ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
        (((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 != (CTerrorPlayer *)0x0 &&
          (cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 != '\0')) &&
         (iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)pCVar20), iVar12 == 3)))))) {
      OnKilledSurvivor(pCVar20,*(undefined4 *)(this + 0x2ba0));
    }
    if ((((byte)param_1[0x4a] & 0x10) != 0) || (this[0x33dc] != (CTerrorPlayer)0x0)) {
      CBaseEntity::EmitSound((CBaseEntity *)this,"Player.NeckSnap",0.0,(float *)0x0);
    }
    local_23c = (CTerrorPlayer *)0xc61c3c00;
    local_238 = 2.8026e-45;
    local_234 = 0.0;
    local_230 = 0;
    local_22c = 0.0;
    local_228 = 0.0;
    ForEachTerrorPlayer<HighestFlowDistance>((HighestFlowDistance *)&local_23c);
    *(CTerrorPlayer **)(this + 0x2d5c) = local_23c;
    iVar12 = (**(code **)(*(int *)this + 0x52c))(this);
    if ((iVar12 != 0) && (fVar30 = *(float *)(iVar12 + 0x154), 0.0 <= fVar30)) {
      if (fVar30 <= *(float *)(this + 0x2d5c)) {
        fVar30 = *(float *)(this + 0x2d5c);
      }
      *(float *)(this + 0x2d5c) = fVar30;
    }
    UpdateActiveSet(this,(CNavArea *)0x0,(CNavArea *)0x0);
    (**(code **)(*(int *)(this + 0x3ab4) + 0x5c))(this + 0x3ab4,this[0x3e40]);
    if (((byte)this[0x14d] & 0x10) != 0) {
      CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
    }
    if (*(float *)(this + 0x274) * *(float *)(this + 0x274) +
        *(float *)(this + 0x278) * *(float *)(this + 0x278) < 100.0) {
      if (((byte)this[0x14d] & 0x10) != 0) {
        CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
      }
      if (*(float *)(this + 0x27c) <= 10.0 && *(float *)(this + 0x27c) != 10.0) {
        if (((byte)this[0x14d] & 8) != 0) {
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
        }
        local_264 = *(undefined4 *)(this + 0x2e0);
        local_260 = *(undefined4 *)(this + 0x2e4);
        local_25c = *(uint *)(this + 0x2e8);
        iVar12 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
        cVar10 = UTIL_IsGroundLevel(48.0,(Vector *)&local_264,*(float *)(iVar12 + 0x38),0x400b,
                                    (CBaseEntity *)this,false);
        if (cVar10 != '\0') {
          local_1ec = local_264;
          local_1e8 = local_260;
          local_1e4 = local_25c;
          local_1dc = 0;
          local_1d8 = 0;
          local_1d4 = 0xc2960000;
          local_1a8 = CONCAT22(local_1a8._2_2_,0x100);
          local_1b4 = 0;
          local_1b8 = 0;
          local_1bc = 0;
          local_1ac = 0;
          local_1a8 = CONCAT31(local_1a8._1_3_,1);
          local_1c4 = 0;
          local_1c8 = 0;
          local_1cc = 0;
          CTraceFilterSimple::CTraceFilterSimple
                    ((CTraceFilterSimple *)&local_24c,(IHandleEntity *)this,1,
                     (_func_bool_IHandleEntity_ptr_int *)0x0);
          (**(code **)(*enginetrace + 0x14))
                    (enginetrace,(Vector *)&local_1ec,0x400b,(CTraceFilterSimple *)&local_24c,
                     (Vector *)&local_180);
          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
            DebugDrawLine((Vector *)&local_180,(Vector *)&local_174,0xff,0,0,true,-1.0);
          }
          if ((((local_154 < 1.0) && (local_149 == '\0')) && (local_134 != (CBaseEntity *)0x0)) &&
             ((*(char **)(local_134 + 0x7c) != "prop_*" &&
              (cVar10 = CBaseEntity::ClassMatchesComplex(local_134,"prop_*"), cVar10 == '\0')))) {
            local_1e4 = local_164 ^ 0x80000000;
            local_24c = local_174;
            local_1ec = local_168;
            local_1e8 = local_160;
            local_248 = local_170;
            local_244 = local_16c;
            VectorAngles((Vector *)&local_1ec,(QAngle *)&local_258);
            for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
                iVar12 = *(int *)(iVar12 + 4)) {
              *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
            }
                    /* try { // try from 009e06d2 to 009e06d6 has its CatchHandler @ 009e3088 */
            DispatchParticleEffect
                      ("blood_bleedout",local_24c,local_248,local_244,local_258,local_254,local_250,
                       this,0,0xffffffff);
            for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
                iVar12 = *(int *)(iVar12 + 4)) {
              *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
            }
          }
        }
      }
    }
  }
  local_280 = (CBaseEntity *)&local_1ec;
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 8)) {
    if (*(int *)(this + 0x3088) != 0) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar8 = *(CBaseEdict **)(this + 0x30);
        if (pCVar8 != (CBaseEdict *)0x0) {
          *(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
          iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
          *(undefined2 *)(iVar12 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      *(undefined4 *)(this + 0x3088) = 0;
    }
  }
  else {
    iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
    if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 4)) {
      piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                 (gameeventmanager,"spitter_killed",0,0);
      if (piVar28 != (int *)0x0) {
        uVar7 = *(uint *)(param_1 + 0x34);
        if ((((uVar7 == 0xffffffff) ||
             (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc))
            || (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
           ((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
            (cVar10 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar10 == '\0')))) {
          pcVar26 = *(code **)(*piVar28 + 0x30);
          uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
          (*pcVar26)(piVar28,"userid",uVar14);
          pcVar26 = *(code **)(*piVar28 + 0x30);
          uVar14 = 0;
        }
        else {
          pcVar26 = *(code **)(*piVar28 + 0x30);
          uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
          (*pcVar26)(piVar28,"userid",uVar14);
          pcVar26 = *(code **)(*piVar28 + 0x30);
          uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
        }
        (*pcVar26)(piVar28,"attacker",uVar14);
        (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
      }
    }
    else {
      iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
      if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 2)) {
        uVar7 = *(uint *)(this + 0x30bc);
        if ((((uVar7 != 0xffffffff) &&
             (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
            && ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
                ((*(int *)(puVar27 + 4) != 0 &&
                 (this_01 = (CVomit *)
                            __dynamic_cast(*(int *)(puVar27 + 4),&CBaseAbility::typeinfo,
                                           &CVomit::typeinfo,0), this_01 != (CVomit *)0x0)))))) &&
           (cVar10 = (**(code **)(*(int *)this_01 + 0x354))(this_01), cVar10 != '\0')) {
          CVomit::StopVomitEffect(this_01);
        }
        VisibilityMonitor_RemoveEntity((CBaseEntity *)this);
      }
      else {
        iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
        if ((iVar12 == 3) &&
           ((pCVar20 = this, iVar12 = (**(code **)(*(int *)this + 0x544))(), iVar12 == 6 &&
            (uVar7 = *(uint *)(this + 0x3e4c), uVar7 != 0xffffffff)))) {
          uVar29 = uVar7 & 0xfff;
          puVar15 = (undefined4 *)(g_pEntityList + uVar29 * 0x10 + 4);
          if ((puVar15 != (undefined4 *)0x0) &&
             ((*(uint *)(g_pEntityList + uVar29 * 0x10 + 8) == uVar7 >> 0xc &&
              (*(int *)(g_pEntityList + uVar29 * 0x10 + 4) != 0)))) {
            if ((&DAT_000039f1)[*(int *)(g_pEntityList + uVar29 * 0x10 + 4)] == '\0') {
              WarpToValidPositionIfStuck(pCVar20);
              uVar7 = *(uint *)(this + 0x3e4c);
              pCVar17 = (CBaseEntity *)0x0;
              if (((uVar7 != 0xffffffff) &&
                  (puVar15 = (undefined4 *)(g_pEntityList + (uVar7 & 0xfff) * 0x10 + 4),
                  puVar15 != (undefined4 *)0x0)) && (puVar15[1] == uVar7 >> 0xc)) goto LAB_009e27ed;
            }
            else {
LAB_009e27ed:
              pCVar17 = (CBaseEntity *)*puVar15;
            }
            CBaseEntity::SetMoveType(pCVar17,2,0);
            uVar7 = *(uint *)(this + 0x3e4c);
            piVar28 = (int *)0x0;
            if (((uVar7 != 0xffffffff) &&
                (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                puVar27 != (undefined *)0xfffffffc)) && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
              piVar28 = *(int **)(puVar27 + 4);
            }
            (**(code **)(*piVar28 + 0x98))(piVar28,0,0xffffffff);
            puVar27 = g_pEntityList;
            uVar7 = *(uint *)(this + 0x3e4c);
            local_29c = 0.0;
            if (((uVar7 != 0xffffffff) &&
                (puVar31 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                puVar31 != (undefined *)0xfffffffc)) && (*(uint *)(puVar31 + 8) == uVar7 >> 0xc)) {
              local_29c = *(float *)(puVar31 + 4);
            }
            bVar32 = g_pEntityList == (undefined *)0xfffffffc;
            *(undefined4 *)((int)local_29c + 0x3e54) = 0xffffffff;
            if ((bVar32) || (*(int *)(puVar27 + 8) != 0)) {
              iVar12 = 0;
            }
            else {
              iVar12 = *(int *)(puVar27 + 4);
            }
            uVar7 = *(uint *)(this + 0x3e4c);
            if (((uVar7 == 0xffffffff) ||
                (puVar27 = puVar27 + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
               (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) {
              iVar16 = 0;
            }
            else {
              iVar16 = *(int *)(puVar27 + 4);
            }
            if (iVar12 != iVar16) {
              if (this[0x6c] == (CTerrorPlayer)0x0) {
                pCVar8 = *(CBaseEdict **)(this + 0x30);
                if (pCVar8 != (CBaseEdict *)0x0) {
                  *(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
                  iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
                  *(undefined2 *)(iVar12 + 2) = 0;
                }
              }
              else {
                this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
              }
              *(undefined4 *)(this + 0x3e4c) = 0;
            }
          }
        }
      }
    }
  }
  local_1ec = *(undefined4 *)param_1;
  local_1b4 = *(undefined4 *)(param_1 + 0x38);
  local_1b0 = *(undefined4 *)(param_1 + 0x3c);
  local_1e8 = *(undefined4 *)(param_1 + 4);
  local_1ac = *(undefined4 *)(param_1 + 0x40);
  local_1e4 = *(uint *)(param_1 + 8);
  local_1e0 = *(undefined4 *)(param_1 + 0xc);
  local_1dc = *(undefined4 *)(param_1 + 0x10);
  local_1d8 = *(undefined4 *)(param_1 + 0x14);
  local_1d4 = *(undefined4 *)(param_1 + 0x18);
  local_1d0 = *(undefined4 *)(param_1 + 0x1c);
  local_1cc = *(undefined4 *)(param_1 + 0x20);
  local_1c8 = *(undefined4 *)(param_1 + 0x24);
  local_1c4 = *(undefined4 *)(param_1 + 0x28);
  local_1c0 = *(undefined4 *)(param_1 + 0x2c);
  local_1bc = *(undefined4 *)(param_1 + 0x30);
  local_1b8 = *(uint *)(param_1 + 0x34);
  local_1a0 = *(undefined4 *)(param_1 + 0x4c);
  local_1a4 = *(uint *)(param_1 + 0x48);
  local_1a8 = *(undefined4 *)(param_1 + 0x44);
  local_19c = *(undefined4 *)(param_1 + 0x50);
  local_194 = *(undefined4 *)(param_1 + 0x58);
  local_198 = *(undefined4 *)(param_1 + 0x54);
  local_190 = *(undefined4 *)(param_1 + 0x5c);
  if ((local_1a4 & 0x20) != 0) {
    piVar28 = (int *)0x0;
    if (((local_1b8 != 0xffffffff) &&
        (puVar27 = g_pEntityList + (local_1b8 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
       && (*(uint *)(puVar27 + 8) == local_1b8 >> 0xc)) {
      piVar28 = *(int **)(puVar27 + 4);
    }
    cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28);
    if ((((cVar10 == '\0') && (uVar7 = *(uint *)(this + 0x31e0), uVar7 != 0xffffffff)) &&
        (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
       ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
        (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) {
      puVar21 = (uint *)(**(code **)(*piVar28 + 0xc))(piVar28);
      local_1b8 = *puVar21;
    }
    if ((*(uint *)(param_1 + 0x48) & 0x20) != 0) {
      uVar7 = *(uint *)(param_1 + 0x34);
      piVar28 = (int *)0x0;
      if (((uVar7 != 0xffffffff) &&
          (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
        piVar28 = *(int **)(puVar27 + 4);
      }
      cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28);
      if ((((cVar10 == '\0') && (uVar7 = *(uint *)(this + 0x3250), uVar7 != 0xffffffff)) &&
          (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
         ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
          (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) {
        puVar21 = (uint *)(**(code **)(*piVar28 + 0xc))(piVar28);
        local_1b8 = *puVar21;
      }
    }
  }
  CL4DGameStats::Event_ActorKilled
            ((CL4DGameStats *)CL4D_GameStats,(CBaseCombatCharacter *)this,
             (CTakeDamageInfo *)local_280);
  if (*(int *)(mp_logdetail._28_4_ + 0x30) == 3) {
    LogDamage(this,local_280,2);
  }
  uVar7 = *(uint *)(this + 0x33c0);
  if (((uVar7 != 0xffffffff) &&
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
      (*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
    AbilityDebug(this,*(CTerrorPlayer **)(puVar27 + 4),"Tongue letting go on death.");
  }
  ReleaseTongueVictim(this,false);
  uVar7 = *(uint *)(this + 0x33c4);
  if ((((uVar7 != 0xffffffff) &&
       (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
     (*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)) {
    ReleaseTongueVictim(*(CTerrorPlayer **)(puVar27 + 4),false);
  }
  uVar7 = *(uint *)(this + 0x3ee0);
  if (((uVar7 != 0xffffffff) &&
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
      (*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
    OnRideEnded(*(CTerrorPlayer **)(puVar27 + 4),(CTerrorPlayer *)0x0);
  }
  uVar7 = *(uint *)(this + 0x3edc);
  if (((uVar7 != 0xffffffff) &&
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc && (*(int *)(puVar27 + 4) != 0)))) {
    uVar7 = *(uint *)(param_1 + 0x34);
    if ((((uVar7 == 0xffffffff) ||
         (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
        (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
       ((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 == (CTerrorPlayer *)0x0 ||
        (cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 == '\0')))) {
      pCVar20 = (CTerrorPlayer *)0x0;
    }
    OnRideEnded(this,pCVar20);
  }
  uVar7 = *(uint *)(this + 0x2a4c);
  if (((uVar7 != 0xffffffff) &&
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
      (*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
    OnCarryEnded(*(CTerrorPlayer **)(puVar27 + 4),true,false,false);
  }
  uVar7 = *(uint *)(this + 0x2a48);
  if ((((uVar7 != 0xffffffff) &&
       (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) && (*(int *)(puVar27 + 4) != 0)) {
    OnCarryEnded(this,true,false,false);
  }
  uVar7 = *(uint *)(param_1 + 0x34);
  if (((uVar7 == 0xffffffff) ||
      (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
     ((((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
        ((*(int *)(puVar27 + 4) == 0 ||
         (iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this), iVar12 != 3)))) ||
       (uVar7 = *(uint *)(param_1 + 0x34), uVar7 == 0xffffffff)) ||
      ((((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
         (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
        (piVar28 = *(int **)(puVar27 + 4), piVar28 == (int *)0x0)) ||
       (cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 == '\0')))))) {
    iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
    cVar10 = IsASurvivorTeam(iVar12);
    if (cVar10 != '\0') {
      if ((*(int *)(param_1 + 0x48) != 0x1000) || (*(float *)(param_1 + 0x3c) != 0.0)) {
        puVar15 = local_11c;
        for (iVar12 = 0x3f; iVar12 != 0; iVar12 = iVar12 + -1) {
          *puVar15 = 0;
          puVar15 = puVar15 + (uint)bVar33 * -2 + 1;
        }
        local_120[0] = '\0';
        local_120[1] = '\0';
        local_120[2] = '\0';
        local_120[3] = '\0';
        V_strncat(local_120,"DeadCharacter:",0x100,-1);
        pcVar13 = (char *)SurvivorCharacterName(*(undefined4 *)(this + 0x2ba0));
        V_strncat(local_120,pcVar13,0x100,-1);
        uVar7 = *(uint *)(param_1 + 0x34);
        if (((uVar7 != 0xffffffff) &&
            (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
           && ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
               ((pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 != (CBaseEntity *)0x0 &&
                (cVar10 = (**(code **)(*(int *)pCVar17 + 0x16c))(pCVar17), cVar10 != '\0')))))) {
          iVar12 = CBaseEntity::GetTeamNumber(pCVar17);
          if (iVar12 == 3) {
            V_strncat(local_120,",SubjectIsA:",0x100,-1);
            uVar14 = (**(code **)(*(int *)pCVar17 + 0x544))(pCVar17);
            pcVar13 = (char *)ZombieClassName(uVar14);
            V_strncat(local_120,pcVar13,0x100,-1);
          }
          else {
            V_strncat(local_120,",SubjectTeam:Survivor",0x100,-1);
          }
        }
        local_17c = "SurvivorDied";
        local_180 = this;
        local_178 = local_120;
        ForEachTerrorPlayer<DispatchResponseToSurvivorsWithVisibility>
                  ((DispatchResponseToSurvivorsWithVisibility *)&local_180);
      }
      *(undefined4 *)(this + 0x3f90) = 0;
      this_00 = (CBaseCombatWeapon *)(**(code **)(*(int *)this + 0x484))(this,0);
      if (this_00 != (CBaseCombatWeapon *)0x0) {
        uVar14 = (**(code **)(*(int *)this_00 + 0x638))(this_00);
        *(undefined4 *)(this + 0x3f90) = uVar14;
        iVar12 = (**(code **)(*(int *)this_00 + 0x55c))(this_00);
        puVar15 = (undefined4 *)GetAmmoDef();
        iVar16 = (**(code **)*puVar15)(puVar15,iVar12,this);
        cVar10 = CBaseCombatWeapon::UsesPrimaryAmmo(this_00);
        if (cVar10 == '\0') {
          *(undefined4 *)(this + 0x3f94) = 0;
        }
        else {
          iVar22 = CBaseCombatCharacter::GetAmmoCount((CBaseCombatCharacter *)this,iVar12);
          if (iVar22 + *(int *)(this_00 + 0x1420) < iVar16) {
            iVar16 = CBaseCombatCharacter::GetAmmoCount((CBaseCombatCharacter *)this,iVar12);
            iVar16 = *(int *)(this_00 + 0x1420) + iVar16;
          }
          *(int *)(this + 0x3f94) = iVar16;
        }
      }
      *(undefined4 *)(this + 0x3f98) = 0;
      pCVar17 = (CBaseEntity *)(**(code **)(*(int *)this + 0x484))(this,1);
      if (pCVar17 != (CBaseEntity *)0x0) {
        uVar14 = (**(code **)(*(int *)pCVar17 + 0x638))(pCVar17);
        *(undefined4 *)(this + 0x3f98) = uVar14;
        cVar10 = (**(code **)(*(int *)pCVar17 + 0x674))(pCVar17);
        if (cVar10 != '\0') {
          this[0x3f9c] = (CTerrorPlayer)0x1;
        }
        if (*(int *)(this + 0x3f98) != 1) {
          (**(code **)(*(int *)pCVar17 + 0x428))(pCVar17,0);
          CBaseCombatCharacter::Weapon_Detach
                    ((CBaseCombatCharacter *)this,(CBaseCombatWeapon *)pCVar17);
          CBaseEntity::AddEffects(pCVar17,0x20);
          puVar15 = (undefined4 *)(**(code **)(*(int *)pCVar17 + 0xc))(pCVar17);
          *(undefined4 *)(this + 0x3fa0) = *puVar15;
        }
      }
    }
  }
  else {
    uVar7 = *(uint *)(param_1 + 0x34);
    if ((((uVar7 == 0xffffffff) ||
         (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
        (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
       ((pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 == (CBaseEntity *)0x0 ||
        (cVar10 = (**(code **)(*(int *)pCVar17 + 0x16c))(pCVar17), cVar10 == '\0')))) {
      pCVar17 = (CBaseEntity *)0x0;
    }
    CVar6 = this[0x14d];
    local_120[0] = '\0';
    local_120[1] = '\0';
    local_120[2] = '\0';
    local_120[3] = '\0';
    puVar15 = local_11c;
    for (iVar12 = 0x3f; iVar12 != 0; iVar12 = iVar12 + -1) {
      *puVar15 = 0;
      puVar15 = puVar15 + (uint)bVar33 * -2 + 1;
    }
    if (((byte)CVar6 & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    if (((byte)pCVar17[0x14d] & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition(pCVar17);
    }
    fVar30 = *(float *)(pCVar17 + 0x2e4);
    fVar4 = *(float *)(pCVar17 + 0x2e8);
    fVar5 = *(float *)(this + 0x2e4);
    fVar1 = *(float *)(this + 0x2e8);
    fVar2 = *(float *)(pCVar17 + 0x2e0);
    fVar3 = *(float *)(this + 0x2e0);
    uVar14 = (**(code **)(*(int *)this + 0x544))(this);
    uVar14 = ZombieClassName(uVar14);
    V_snprintf(local_120,0x100,"SubjectIsA:%s,Distance:%f",uVar14,
               (double)SQRT((fVar30 - fVar5) * (fVar30 - fVar5) + (fVar4 - fVar1) * (fVar4 - fVar1)
                            + (fVar2 - fVar3) * (fVar2 - fVar3)));
    pcVar26 = *(code **)(*(int *)pCVar17 + 0x7b4);
    CAI_Concept::CAI_Concept((CAI_Concept *)&local_180,"KilledZombie");
    (*pcVar26)(pCVar17,(CAI_Concept *)&local_180,1,local_120,0,0,0);
  }
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if ((((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 3)) &&
      ((uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff &&
       (((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc &&
         (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
        (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))))) &&
     (cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0')) {
    uVar7 = *(uint *)(this + 0x3e64);
    if (((uVar7 == 0xffffffff) ||
        (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
       ((*(uint *)(puVar27 + 8) != uVar7 >> 0xc || (*(int *)(puVar27 + 4) == 0)))) {
      if ((this[0x3e78] != (CTerrorPlayer)0x0) &&
         (piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                     (gameeventmanager,"pounce_attempt_stopped",0,0),
         piVar25 != (int *)0x0)) {
        pcVar26 = *(code **)(*piVar25 + 0x30);
        uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
        (*pcVar26)(piVar25,"userid",uVar14);
        uVar7 = *(uint *)(param_1 + 0x38);
        if ((uVar7 != 0xffffffff) &&
           ((((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc
              && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
             (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)) &&
            (piVar28 = (int *)(**(code **)(*piVar28 + 0x188))(piVar28), piVar28 != (int *)0x0)))) {
          pcVar26 = *(code **)(*piVar25 + 0x30);
          uVar14 = (**(code **)(*piVar28 + 0x638))(piVar28);
          (*pcVar26)(piVar25,"weaponid",uVar14);
        }
        goto LAB_009e0d82;
      }
    }
    else {
      piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                 (gameeventmanager,"pounce_stopped",0,0);
      if (piVar25 != (int *)0x0) {
        pcVar26 = *(code **)(*piVar25 + 0x30);
        uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
        (*pcVar26)(piVar25,"userid",uVar14);
        local_29c = 0.0;
        pcVar26 = *(code **)(*piVar25 + 0x30);
        uVar7 = *(uint *)(this + 0x3e64);
        if (((uVar7 != 0xffffffff) &&
            (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
          local_29c = *(float *)(puVar27 + 4);
        }
        uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)((int)local_29c + 0x30));
        (*pcVar26)(piVar25,"victim",uVar14);
LAB_009e0d82:
        (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar25,0);
      }
    }
  }
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar12 == 3) {
    local_238 = (float)(**(code **)(*(int *)this + 0x544))(this);
    local_23c = this;
    ForEachPlayer<ZombieDeath>((ZombieDeath *)&local_23c);
    CDirector::OnZombieRemoved(TheDirector,this);
    SetClassState(this,0);
    cVar10 = CTerrorGameRules::HasPlayerControlledZombies();
    if (cVar10 != '\0') {
      uVar7 = *(uint *)(param_1 + 0x34);
      if (((uVar7 == 0xffffffff) ||
          (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
         ((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
          (piVar28 = *(int **)(puVar27 + 4), piVar28 == (int *)0x0)))) {
        pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
      }
      else {
        pfVar23 = (float *)(**(code **)(*piVar28 + 0x288))(piVar28);
      }
      local_180 = (CTerrorPlayer *)*pfVar23;
      local_17c = (char *)pfVar23[1];
      local_178 = (char *)pfVar23[2];
      local_170 = 0.0;
      local_16c = this;
      local_174 = 60000.0;
      ForEachPlayerZombie<NearestPlayer>((NearestPlayer *)&local_180);
      if (local_170 != 0.0) {
        (**(code **)(*(int *)this + 0x64c))(this,local_170);
      }
    }
    if (((((*(int *)(param_1 + 0x4c) == 3) &&
          (uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
         (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
        ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
         (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) &&
       ((cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0' &&
        (piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                    (gameeventmanager,"infected_explosive_barrel_kill",0,0),
        piVar25 != (int *)0x0)))) {
      pcVar26 = *(code **)(*piVar25 + 0x30);
      uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
      (*pcVar26)(piVar25,"userid",uVar14);
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar25,0);
    }
  }
  else {
    iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
    cVar10 = IsASurvivorTeam(iVar12);
    if (((cVar10 != '\0') && (uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
       ((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc &&
        (((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
          (piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)) &&
         (cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0')))))) {
      uVar7 = *(uint *)(param_1 + 0x34);
      pCVar17 = (CBaseEntity *)0x0;
      if ((uVar7 != 0xffffffff) &&
         (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) {
        if (*(uint *)(puVar27 + 8) == uVar7 >> 0xc) {
          pCVar17 = *(CBaseEntity **)(puVar27 + 4);
        }
        else {
          pCVar17 = (CBaseEntity *)0x0;
        }
      }
      iVar12 = CBaseEntity::GetTeamNumber(pCVar17);
      if (iVar12 == 3) {
        *(int *)(pCVar17 + 0x307c) = *(int *)(pCVar17 + 0x307c) + 1;
      }
    }
  }
  uVar11 = IsCustomAbilityActive(this);
  CCSPlayer::Event_Killed((CCSPlayer *)this,(CTakeDamageInfo *)local_280);
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (((iVar12 != 3) || (this[0x3375] != (CTerrorPlayer)0x0)) || (cVar9 != '\0')) goto LAB_009e019d;
  iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 2)) {
    local_258 = 2;
    ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_258);
    if (*(int *)(this + 0x4018) == 1) {
      (**(code **)(*(int *)this + 0x24c))(this,&local_24c,0,0);
      local_180 = (CTerrorPlayer *)0x0;
      local_17c = (char *)0x0;
      local_178 = (char *)0x0;
      if (((byte)this[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
      }
      pCVar24 = (CInferno *)
                CBaseEntity::Create("inferno",(Vector *)(this + 0x2e0),(QAngle *)&local_180,
                                    (CBaseEntity *)this);
      local_23c = (CTerrorPlayer *)0x0;
      local_238 = 0.0;
      local_234 = 1.0;
      local_180 = (CTerrorPlayer *)(local_24c * 128.0);
      local_17c = (char *)(local_248 * 128.0);
      local_178 = (char *)((float)local_244 * 128.0);
      if (((byte)this[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
      }
      CInferno::StartBurning
                (pCVar24,(Vector *)(this + 0x2e0),(Vector *)&local_23c,(Vector *)&local_180,0);
      *(undefined4 *)(pCVar24 + 0xba4) = 2;
    }
    uVar7 = *(uint *)(param_1 + 0x34);
    if ((((uVar7 == 0xffffffff) ||
         (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
        (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
       ((local_280 = *(CBaseEntity **)(puVar27 + 4), local_280 == (CBaseEntity *)0x0 ||
        (cVar9 = (**(code **)(*(int *)local_280 + 0x16c))(local_280), cVar9 == '\0')))) {
      local_280 = (CBaseEntity *)0x0;
    }
    local_29c = *(float *)(ZombieExplodingInnerRadius._28_4_ + 0x2c);
    local_284 = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c);
    iVar12 = GetDifficulty();
    if (iVar12 < 0) {
LAB_009e16e8:
      fVar30 = 100.0;
    }
    else if (iVar12 < 2) {
      fVar30 = 30.0;
      local_29c = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c) * 0.9;
    }
    else {
      if (iVar12 != 2) goto LAB_009e16e8;
      fVar30 = 49.0;
      local_29c = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c) * 0.9;
    }
    if (*(int *)(param_1 + 0x48) == 0x20) {
      local_29c = *(float *)(ZombieExplodingSplatRadius._28_4_ + 0x2c);
      local_284 = local_29c;
    }
    cVar9 = CTerrorGameRules::HasPlayerControlledZombies();
    if (((cVar9 == '\0') || (uVar7 = *(uint *)(param_1 + 0x34), uVar7 == 0xffffffff)) ||
       ((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
        ((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
         (iVar12 = IPredictionSystem::g_pPredictionSystems, this != *(CTerrorPlayer **)(puVar27 + 4)
         )))))) {
      iVar12 = IPredictionSystem::g_pPredictionSystems;
      if (*(int *)(this + 0x4018) == 1) {
        for (; iVar12 != 0; iVar12 = *(int *)(iVar12 + 4)) {
          *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
        }
        local_180 = (CTerrorPlayer *)0x0;
        local_17c = (char *)0x0;
        local_178 = (char *)0x3f800000;
        if (((byte)this[0x14d] & 8) != 0) {
                    /* try { // try from 009e1c83 to 009e1c87 has its CatchHandler @ 009e305a */
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
        }
                    /* try { // try from 009e1341 to 009e1403 has its CatchHandler @ 009e305a */
        DispatchParticleEffect
                  ("boomer_explode",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
                   *(undefined4 *)(this + 0x2e8),local_180,local_17c,local_178,0,0,0xffffffff);
        CBaseEntity::EmitSound((CBaseEntity *)this,"BoomerZombie.Detonate",0.0,(float *)0x0);
        pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
        local_234 = *(float *)(ZombieExplodingForce._28_4_ + 0x2c);
        local_23c = (CTerrorPlayer *)0x0;
        local_238 = 0.0;
        CTakeDamageInfo::CTakeDamageInfo
                  ((CTakeDamageInfo *)&local_180,(CBaseEntity *)this,(CBaseEntity *)this,
                   (Vector *)&local_23c,pVVar19,fVar30,0x40,0,(Vector *)0x0);
        CreateExplosion((CTakeDamageInfo *)&local_180,local_29c,local_284,1);
        for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
            iVar12 = *(int *)(iVar12 + 4)) {
          *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
        }
      }
      else {
        pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
        local_234 = *(float *)(ZombieExplodingForce._28_4_ + 0x2c);
        pCVar20 = (CTerrorPlayer *)local_280;
        if (local_280 == (CBaseEntity *)0x0) {
          pCVar20 = this;
        }
        local_23c = (CTerrorPlayer *)0x0;
        local_238 = 0.0;
        CTakeDamageInfo::CTakeDamageInfo
                  ((CTakeDamageInfo *)&local_180,(CBaseEntity *)this,(CBaseEntity *)pCVar20,
                   (Vector *)&local_23c,pVVar19,fVar30,0x8000040,0,(Vector *)0x0);
        CreateExplosion((CTakeDamageInfo *)&local_180,local_29c,local_284,2);
      }
    }
    else {
      for (; iVar12 != 0; iVar12 = *(int *)(iVar12 + 4)) {
        *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
      }
      local_180 = (CTerrorPlayer *)0x0;
      local_17c = (char *)0x0;
      local_178 = (char *)0x3f800000;
      if (((byte)this[0x14d] & 8) != 0) {
                    /* try { // try from 009e24bd to 009e2541 has its CatchHandler @ 009e3047 */
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
      }
      DispatchParticleEffect
                ("boomer_explode",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
                 *(undefined4 *)(this + 0x2e8),local_180,local_17c,local_178,0,0,0xffffffff);
      CBaseEntity::EmitSound((CBaseEntity *)this,"BoomerZombie.Detonate",0.0,(float *)0x0);
      for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
          iVar12 = *(int *)(iVar12 + 4)) {
        *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
      }
    }
    local_180 = (CTerrorPlayer *)0x0;
    ForEachSurvivor<ITCounter>((ITCounter *)&local_180);
    piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"boomer_exploded",0,0)
    ;
    if (piVar28 != (int *)0x0) {
      pcVar26 = *(code **)(*piVar28 + 0x30);
      uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
      (*pcVar26)(piVar28,"userid",uVar14);
      pcVar26 = *(code **)(*piVar28 + 0x30);
      uVar14 = 0;
      if (local_280 != (CBaseEntity *)0x0) {
        uVar14 = (**(code **)(*engine + 0x40))(engine,*(int *)(local_280 + 0x30));
      }
      (*pcVar26)(piVar28,"attacker",uVar14);
      (**(code **)(*piVar28 + 0x2c))(piVar28,"splashedbile",0 < (int)local_180);
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
    }
  }
  else {
    iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
    if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 8)) {
      local_180 = (CTerrorPlayer *)0x8;
      ForEachTerrorPlayer<BossKilledMusic>((BossKilledMusic *)&local_180);
    }
    else {
      iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
      if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 1)) {
        CBaseEntity::EmitSound((CBaseEntity *)this,"SmokerZombie.Death",0.0,(float *)0x0);
        CBaseEntity::EmitSound((CBaseEntity *)this,"SmokerZombie.Explode",0.0,(float *)0x0);
        local_23c = (CTerrorPlayer *)0x1;
        ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_23c);
        for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
            iVar12 = *(int *)(iVar12 + 4)) {
          *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
        }
        if ((((byte)this[0x14d] & 8) != 0) &&
           (CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this), ((byte)this[0x14d] & 8) != 0)) {
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
        }
                    /* try { // try from 009e2323 to 009e242f has its CatchHandler @ 009e3075 */
        DispatchParticleEffect
                  ("smoker_smokecloud",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
                   *(undefined4 *)(this + 0x2e8),*(undefined4 *)(this + 0x37c),
                   *(undefined4 *)(this + 0x380),*(undefined4 *)(this + 900),this,0,0xffffffff);
        if (((byte)this[0x14d] & 8) == 0) {
          local_180 = *(CTerrorPlayer **)(this + 0x2e0);
          local_17c = *(char **)(this + 0x2e4);
          local_178 = (char *)(*(float *)(this + 0x2e8) + 24.0);
        }
        else {
                    /* try { // try from 009e262b to 009e26aa has its CatchHandler @ 009e3075 */
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
          local_180 = *(CTerrorPlayer **)(this + 0x2e0);
          local_17c = *(char **)(this + 0x2e4);
          local_178 = (char *)(*(float *)(this + 0x2e8) + 24.0);
          if ((*(uint *)(this + 0x14c) & 0x800) != 0) {
            CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
          }
        }
        DispatchParticleEffect
                  ("smoker_smokecloud_camera",*(undefined4 *)(this + 0x2e0),
                   *(undefined4 *)(this + 0x2e4),*(undefined4 *)(this + 0x2e8),local_180,local_17c,
                   local_178,vec3_angle,DAT_01053d40,DAT_01053d44,0,0,0xffffffff);
        iVar12 = CBaseAnimating::FindBodygroupByName((CBaseAnimating *)this,"tongue");
        CBaseAnimating::SetBodygroup((CBaseAnimating *)this,iVar12,1);
        iVar12 = CBaseAnimating::FindBodygroupByName((CBaseAnimating *)this,"mulletTongue");
        CBaseAnimating::SetBodygroup((CBaseAnimating *)this,iVar12,1);
        for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
            iVar12 = *(int *)(iVar12 + 4)) {
          *(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
        }
      }
      else {
        iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
        if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 3)) {
          local_180 = (CTerrorPlayer *)0x3;
          ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_180);
          CBaseEntity::EmitSound((CBaseEntity *)this,"HunterZombie.Death",0.0,(float *)0x0);
        }
        else {
          iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
          if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 6)) {
            uVar7 = *(uint *)(param_1 + 0x34);
            if ((((uVar7 == 0xffffffff) ||
                 (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                 puVar27 == (undefined *)0xfffffffc)) || (*(uint *)(puVar27 + 8) != uVar7 >> 0xc))
               || ((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 == (CTerrorPlayer *)0x0 ||
                   (cVar9 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar9 == '\0')))) {
              pCVar20 = (CTerrorPlayer *)0x0;
            }
            OnPummelEnded(this,true,pCVar20);
            local_180 = (CTerrorPlayer *)0x6;
            ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_180);
            piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                       (gameeventmanager,"charger_killed",0,0);
            if (piVar28 != (int *)0x0) {
              uVar7 = *(uint *)(param_1 + 0x34);
              if (((uVar7 == 0xffffffff) ||
                  (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                  puVar27 == (undefined *)0xfffffffc)) ||
                 ((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
                  ((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
                   (cVar9 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar9 == '\0')))))) {
                pcVar26 = *(code **)(*piVar28 + 0x30);
                uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
                (*pcVar26)(piVar28,"userid",uVar14);
                pcVar26 = *(code **)(*piVar28 + 0x30);
                uVar14 = 0;
              }
              else {
                pcVar26 = *(code **)(*piVar28 + 0x30);
                uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
                (*pcVar26)(piVar28,"userid",uVar14);
                pcVar26 = *(code **)(*piVar28 + 0x30);
                uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
              }
              (*pcVar26)(piVar28,"attacker",uVar14);
              uVar7 = *(uint *)(param_1 + 0x38);
              if ((((uVar7 == 0xffffffff) ||
                   (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                   puVar27 == (undefined *)0xfffffffc)) || (*(uint *)(puVar27 + 8) != uVar7 >> 0xc))
                 || (((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
                      (piVar25 = (int *)(**(code **)(*piVar25 + 0x188))(piVar25),
                      piVar25 == (int *)0x0)) ||
                     (iVar12 = (**(code **)(*piVar25 + 0x638))(piVar25), iVar12 != 0x13)))) {
                (**(code **)(*piVar28 + 0x2c))(piVar28,"melee",0);
              }
              else {
                (**(code **)(*piVar28 + 0x2c))(piVar28,"melee",1);
              }
              (**(code **)(*piVar28 + 0x2c))(piVar28,"charging",uVar11);
              (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
            }
            CBaseEntity::EmitSound((CBaseEntity *)this,"ChargerZombie.Death",0.0,(float *)0x0);
            if (*(float *)(this + 0x468) != 0.0) {
              if (this[0x6c] == (CTerrorPlayer)0x0) {
                pCVar8 = *(CBaseEdict **)(this + 0x30);
                if (pCVar8 != (CBaseEdict *)0x0) {
                  *(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
                  iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
                  *(undefined2 *)(iVar12 + 2) = 0;
                }
              }
              else {
                this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
              }
              *(undefined4 *)(this + 0x468) = 0;
            }
          }
          else {
            iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
            if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 4))
            {
              pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
              fVar30 = pfVar23[2];
              fVar4 = *pfVar23;
              fVar5 = pfVar23[1];
              pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
              local_22c = fVar4 - *pfVar23;
              local_228 = fVar5 - pfVar23[1];
              local_224 = (fVar30 - 240.0) - pfVar23[2];
              local_1f8 = 1;
              local_1fc = 0;
              local_204 = 0;
              local_208 = 0;
              local_20c = 0;
              local_1f7 = local_22c * local_22c + local_228 * local_228 + local_224 * local_224 !=
                          0.0;
              local_214 = 0;
              local_218 = 0;
              local_21c = 0;
              local_23c = (CTerrorPlayer *)*pfVar23;
              local_238 = pfVar23[1];
              local_234 = pfVar23[2];
              CTraceFilterSimple::CTraceFilterSimple
                        ((CTraceFilterSimple *)&local_24c,(IHandleEntity *)this,0,
                         (_func_bool_IHandleEntity_ptr_int *)0x0);
              (**(code **)(*enginetrace + 0x14))
                        (enginetrace,&local_23c,0x46004003,(CTraceFilterSimple *)&local_24c,
                         (Vector *)&local_180);
              if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                DebugDrawLine((Vector *)&local_180,(Vector *)&local_174,0xff,0,0,true,-1.0);
              }
              local_23c = (CTerrorPlayer *)0x0;
              local_238 = 0.0;
              local_234 = 0.0;
              pCVar24 = (CInferno *)
                        CBaseEntity::Create("insect_swarm",(Vector *)&local_174,(QAngle *)&local_23c
                                            ,(CBaseEntity *)this);
              iVar12 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
              if ((iVar12 != 0) &&
                 (iVar12 = CBaseEntity::GetGroundEntity((CBaseEntity *)this),
                 iVar12 != g_WorldEntity)) {
                pcVar26 = *(code **)(*(int *)pCVar24 + 0x98);
                uVar14 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
                (*pcVar26)(pCVar24,uVar14,0xffffffff);
              }
              *(undefined4 *)(pCVar24 + 0xba4) = 2;
              local_23c = (CTerrorPlayer *)0x0;
              local_238 = 0.0;
              local_234 = 1.0;
              CInferno::StartBurning
                        (pCVar24,(Vector *)&local_174,(Vector *)&local_23c,(Vector *)&vec3_origin,0)
              ;
              CBaseEntity::EmitSound((CBaseEntity *)this,"SpitterZombie.Death",0.0,(float *)0x0);
            }
            else {
              iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
              if ((iVar12 != 3) || (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 != 5)
                 ) {
                CBaseEntity::EmitSound((CBaseEntity *)this,"Zombie.Die",0.0,(float *)0x0);
                goto LAB_009e019d;
              }
              piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                         (gameeventmanager,"jockey_killed",0,0);
              if (piVar28 != (int *)0x0) {
                uVar7 = *(uint *)(param_1 + 0x34);
                if ((((uVar7 == 0xffffffff) ||
                     (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                     puVar27 == (undefined *)0xfffffffc)) ||
                    (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
                   ((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
                    (cVar9 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar9 == '\0')))) {
                  pcVar26 = *(code **)(*piVar28 + 0x30);
                  uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
                  (*pcVar26)(piVar28,"userid",uVar14);
                  pcVar26 = *(code **)(*piVar28 + 0x30);
                  uVar14 = 0;
                }
                else {
                  pcVar26 = *(code **)(*piVar28 + 0x30);
                  uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
                  (*pcVar26)(piVar28,"userid",uVar14);
                  pcVar26 = *(code **)(*piVar28 + 0x30);
                  uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
                }
                (*pcVar26)(piVar28,"attacker",uVar14);
                uVar7 = *(uint *)(param_1 + 0x38);
                if (((uVar7 != 0xffffffff) &&
                    (puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
                    puVar27 != (undefined *)0xfffffffc)) &&
                   ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
                    ((piVar25 = *(int **)(puVar27 + 4), piVar25 != (int *)0x0 &&
                     (piVar25 = (int *)(**(code **)(*piVar25 + 0x188))(piVar25),
                     piVar25 != (int *)0x0)))))) {
                  pcVar26 = *(code **)(*piVar28 + 0x3c);
                  uVar14 = (**(code **)(*piVar25 + 0x6c8))(piVar25);
                  (*pcVar26)(piVar28,"weapon",uVar14);
                }
                (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
              }
              CBaseEntity::EmitSound((CBaseEntity *)this,"JockeyZombie.Death",0.0,(float *)0x0);
            }
          }
        }
      }
    }
  }
  CDirector::OnInfectedKilled(TheDirector,(CBaseCombatCharacter *)this,param_1);
  if ((((char)g_pGameRules[0x37e] != '\0') &&
      (cVar9 = CTerrorGameRules::IsVersusMode(), cVar9 != '\0')) &&
     (cVar9 = (**(code **)(*engine + 0x1f8))(engine), cVar9 == '\0')) {
    iVar12 = *(int *)(gpGlobals + 0x54);
    if ((iVar12 != s_LastServerCount) &&
       (s_LastServerCount = iVar12, (float)s_GiftDropTimer._8_4_ != -1.0)) {
      s_GiftDropTimer._8_4_ = 0xbf800000;
    }
    lVar34 = (longdouble)CountdownTimer::Now();
    if (((float)s_GiftDropTimer._8_4_ <= (float)lVar34) &&
       (lVar34 = (longdouble)RandomFloat(0,0x3f800000),
       (float)lVar34 < *(float *)(z_holiday_gift_drop_chance._28_4_ + 0x2c))) {
      pQVar18 = (QAngle *)(**(code **)(*(int *)this + 0x238))(this);
      AngleVectors(pQVar18,(Vector *)&local_258,(Vector *)&local_24c,(Vector *)&local_23c);
      if (((byte)this[0x14d] & 0x10) != 0) {
        CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
      }
      pQVar18 = (QAngle *)(**(code **)(*(int *)this + 0x238))(this);
      if (((byte)this[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
      }
      pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
      CHolidayGift::Create
                (pVVar19,(QAngle *)(this + 0x37c),pQVar18,(Vector *)(this + 0x274),
                 (CBaseCombatCharacter *)this);
      lVar34 = (longdouble)RandomFloat(0x42340000,0x42960000);
      fVar30 = (float)lVar34;
      lVar34 = (longdouble)CountdownTimer::Now();
      if ((float)lVar34 + fVar30 != (float)s_GiftDropTimer._8_4_) {
        s_GiftDropTimer._8_4_ = (float)lVar34 + fVar30;
      }
      if (fVar30 != (float)s_GiftDropTimer._4_4_) {
        s_GiftDropTimer._4_4_ = fVar30;
      }
    }
  }
LAB_009e019d:
  (**(code **)(*(int *)this + 0x38c))(this);
  if (this[0x2d94] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar8 = *(CBaseEdict **)(this + 0x30);
      if (pCVar8 != (CBaseEdict *)0x0) {
        *(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
        iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2d94] = (CTerrorPlayer)0x0;
  }
  *(undefined4 *)(this + 0x2da8) = 0xffffffff;
  if (*(float *)(this + 0x2db0) != -1.0) {
    (**(code **)(*(int *)(this + 0x2dac) + 4))(this + 0x2dac,this + 0x2db0);
    *(undefined4 *)(this + 0x2db0) = 0xbf800000;
  }
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

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)