L L4D2node

CTerrorPlayer::Spawn

0x009d2c30 · 13521 bytes · __thiscall

_ZN13CTerrorPlayer5SpawnEv

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CTerrorPlayer::Spawn() */

void __thiscall CTerrorPlayer::Spawn(CTerrorPlayer *this)

{
  uint *puVar1;
  uint uVar2;
  CBaseEdict *pCVar3;
  code *pcVar4;
  float fVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  char cVar9;
  CTerrorPlayer CVar10;
  undefined4 uVar11;
  undefined *puVar12;
  int iVar13;
  undefined *puVar14;
  CBasePlayer *pCVar15;
  CTerrorPlayer *pCVar16;
  undefined4 *puVar17;
  int *piVar18;
  float *pfVar19;
  CAmmoDef *this_00;
  undefined4 uVar20;
  int iVar21;
  undefined *puVar22;
  int iVar23;
  int iVar24;
  CTerrorPlayer *pCVar25;
  float fVar26;
  byte bVar27;
  longdouble lVar28;
  float fVar29;
  float local_7c;
  int local_6c;
  int local_64;
  int local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_48;
  undefined4 local_44;
  int local_40;
  CRecipientFilter local_3c [44];
  
  piVar6 = mdlcache;
  bVar27 = 0;
  (**(code **)(*mdlcache + 0x68))(mdlcache);
  local_54 = 0;
  local_50 = 0;
  if (_towlower == 0) {
    local_40 = 0;
  }
  else {
                    /* try { // try from 009d2cc6 to 009d2cc8 has its CatchHandler @ 009d614c */
    (**(code **)(_towlower + 0x50))
              (_towlower,&local_54,0,0,0,0,"/data/src/game/server/terror/terrorplayer.cpp",0xf04,
               &Spawn()::tm_fmt,"(%s)%s","ZOMBIE","CCSPlayer::Spawn");
    local_40 = _towlower;
  }
  iVar23 = _DAT_0105db00;
  local_48 = local_54;
  local_44 = local_50;
                    /* try { // try from 009d40ee to 009d414e has its CatchHandler @ 009d6192 */
  if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
     (iVar13 = ThreadGetCurrentId(), iVar23 == iVar13)) {
    if ((char *)*_DAT_0105d15c != "CCSPlayer::Spawn") {
      _DAT_0105d15c =
           (int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd15c96,(char *)0x0,0xc0db47);
    }
    puVar1 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
    *puVar1 = *puVar1 | 4;
    CVProfNode::EnterScope();
    DAT_0105d158 = '\0';
  }
                    /* try { // try from 009d2d04 to 009d3bb0 has its CatchHandler @ 009d6196 */
  CBaseEntity::SetGlobalFadeScale((CBaseEntity *)this,0.0);
  *(float *)(this + 0x3fb8) =
       *(float *)(sv_spectatoridletime._28_4_ + 0x2c) * 60.0 + *(float *)(gpGlobals + 0xc);
  if (*(int *)(this + 0x2e20) != 0) {
    KeyValues::deleteThis();
    *(undefined4 *)(this + 0x2e20) = 0;
  }
  if (this[0x2ca5] == (CTerrorPlayer)0x0) {
    iVar23 = 0;
    do {
      iVar13 = iVar23 + 0x2f78;
      iVar23 = iVar23 + 0x34;
      pCVar25 = this + iVar13;
      for (iVar21 = 0xd; iVar21 != 0; iVar21 = iVar21 + -1) {
        *(undefined4 *)pCVar25 = 0;
        pCVar25 = pCVar25 + (uint)bVar27 * -8 + 4;
      }
    } while (iVar23 != 0x104);
  }
  (**(code **)(*(int *)this + 0x580))(this,"specgui",0,0);
  uVar11 = RandomInt(*(undefined4 *)(BoomerShoveMin._28_4_ + 0x30),
                     *(undefined4 *)(BoomerShoveMax._28_4_ + 0x30));
  *(undefined4 *)(this + 0x337c) = uVar11;
  if (*(float *)(this + 0x3f18) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3f18) = 0;
  }
  if (*(float *)(this + 0x3f1c) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3f1c) = 0;
  }
  if (*(float *)(this + 0x3f20) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3f20) = 0;
  }
  if (*(float *)(this + 0x3f24) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3f24) = 0;
  }
  *(undefined4 *)(this + 0x3f58) = 0;
  *(undefined4 *)(this + 0x2b90) = 0;
  *(undefined4 *)(this + 0x2b94) = 0;
  *(undefined4 *)(this + 0x2b98) = 0;
  *(undefined4 *)(this + 0x2b9c) = 0;
  *(undefined4 *)(this + 0x30f4) = 0;
  if (*(float *)(this + 0x3108) != -1.0) {
    (**(code **)(*(int *)(this + 0x3104) + 4))(this + 0x3104,this + 0x3108);
    *(undefined4 *)(this + 0x3108) = 0xbf800000;
  }
  pCVar25 = this + 0x3f84;
  if (*(float *)(this + 0x3f8c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3f84) + 4))(pCVar25,this + 0x3f8c);
    *(undefined4 *)(this + 0x3f8c) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x310c) = 0;
  if (*(float *)(this + 0x2b5c) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2b5c) = 0;
  }
  if (*(float *)(this + 0x2b60) != 1.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2b60) = 0x3f800000;
  }
  if (*(int *)(this + 0x330c) != 0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x330c) = 0;
  }
  if (*(float *)(this + 0x3f54) != -1.0) {
    (**(code **)(*(int *)(this + 0x3f4c) + 4))(this + 0x3f4c,this + 0x3f54);
    *(undefined4 *)(this + 0x3f54) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x2d60) = 0xffffffff;
  if ((g_pEntityList == (undefined *)0xfffffffc) || (*(int *)(g_pEntityList + 8) != 0)) {
    iVar23 = 0;
  }
  else {
    iVar23 = *(int *)(g_pEntityList + 4);
  }
  uVar2 = *(uint *)(this + 0x2d64);
  if (((uVar2 == 0xffffffff) ||
      (puVar12 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar12 + 8) != uVar2 >> 0xc)) {
    iVar13 = 0;
  }
  else {
    iVar13 = *(int *)(puVar12 + 4);
  }
  if (iVar23 != iVar13) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2d64) = 0;
  }
  *(undefined4 *)(this + 0x2d68) = 0xffffffff;
  *(undefined4 *)(this + 0x2d88) = 0;
  *(undefined4 *)(this + 0x2d8c) = 0;
  *(undefined4 *)(this + 0x2d90) = 0;
  this[0x3f48] = (CTerrorPlayer)0x0;
  if (this[0x2d94] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 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 (*(float *)(this + 0x2dbc) != -1.0) {
    (**(code **)(*(int *)(this + 0x2db4) + 4))(this + 0x2db4,this + 0x2dbc);
    *(undefined4 *)(this + 0x2dbc) = 0xbf800000;
  }
  if (*(float *)(this + 0x2e68) != -1.0) {
    (**(code **)(*(int *)(this + 0x2e60) + 4))(this + 0x2e60,this + 0x2e68);
    *(undefined4 *)(this + 0x2e68) = 0xbf800000;
  }
  if (*(float *)(this + 0x2e74) != -1.0) {
    (**(code **)(*(int *)(this + 0x2e6c) + 4))(this + 0x2e6c,this + 0x2e74);
    *(undefined4 *)(this + 0x2e74) = 0xbf800000;
  }
  if ((g_pEntityList == (undefined *)0xfffffffc) || (*(int *)(g_pEntityList + 8) != 0)) {
    iVar23 = 0;
  }
  else {
    iVar23 = *(int *)(g_pEntityList + 4);
  }
  uVar2 = *(uint *)(this + 0x33a4);
  if (((uVar2 == 0xffffffff) ||
      (puVar12 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar12 + 8) != uVar2 >> 0xc)) {
    iVar13 = 0;
  }
  else {
    iVar13 = *(int *)(puVar12 + 4);
  }
  if (iVar23 != iVar13) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x33a4) = 0;
  }
  if (this[0x2e78] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2e78] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x2e84) != -1.0) {
    (**(code **)(*(int *)(this + 0x2e7c) + 4))(this + 0x2e7c,this + 0x2e84);
    *(undefined4 *)(this + 0x2e84) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x2d98) = 0;
  puVar14 = g_pEntityList;
  puVar12 = g_pEntityList + 4;
  if ((puVar12 == (undefined *)0x0) || (*(int *)(g_pEntityList + 8) != 0)) {
    iVar23 = 0;
  }
  else {
    iVar23 = *(int *)(g_pEntityList + 4);
  }
  uVar2 = *(uint *)(this + 0x2e24);
  if (((uVar2 == 0xffffffff) ||
      (puVar22 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar22 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar22 + 8) != uVar2 >> 0xc)) {
    iVar13 = 0;
  }
  else {
    iVar13 = *(int *)(puVar22 + 4);
  }
  if (iVar23 != iVar13) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
        puVar12 = g_pEntityList + 4;
        puVar14 = g_pEntityList;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2e24) = 0;
  }
  if ((puVar12 == (undefined *)0x0) || (*(int *)(puVar14 + 8) != 0)) {
    iVar23 = 0;
  }
  else {
    iVar23 = *(int *)(puVar14 + 4);
  }
  uVar2 = *(uint *)(this + 0x2e28);
  if (((uVar2 == 0xffffffff) ||
      (puVar14 = puVar14 + (uVar2 & 0xfff) * 0x10, puVar14 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar14 + 8) != uVar2 >> 0xc)) {
    iVar13 = 0;
  }
  else {
    iVar13 = *(int *)(puVar14 + 4);
  }
  if (iVar23 == iVar13) {
    iVar23 = *(int *)(this + 0x2e54);
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2e28) = 0;
    iVar23 = *(int *)(this + 0x2e54);
  }
  if (iVar23 != 0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2e54) = 0;
  }
  *(undefined4 *)(this + 0x2e5c) = 0;
  if (this[0x2e58] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2e58] = (CTerrorPlayer)0x0;
  }
  if (this[0x2e59] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2e59] = (CTerrorPlayer)0x0;
  }
  *(code **)(this + 0xe0) = OnPlayerUse;
  *(undefined4 *)(this + 0xe4) = 0;
  if (*(float *)(this + 0x3260) != -1.0) {
    (**(code **)(*(int *)(this + 0x3258) + 4))(this + 0x3258,this + 0x3260);
    *(undefined4 *)(this + 0x3260) = 0xbf800000;
  }
  this[0x3268] = (CTerrorPlayer)0x0;
  this[0x3269] = (CTerrorPlayer)0x0;
  this[0x326a] = (CTerrorPlayer)0x0;
  if (*(float *)(this + 0x3274) != -1.0) {
    (**(code **)(*(int *)(this + 0x326c) + 4))(this + 0x326c,this + 0x3274);
    *(undefined4 *)(this + 0x3274) = 0xbf800000;
  }
  if (this[0x3278] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x3278] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x3e60) != -1.0) {
    (**(code **)(*(int *)(this + 0x3e58) + 4))(this + 0x3e58,this + 0x3e60);
    *(undefined4 *)(this + 0x3e60) = 0xbf800000;
  }
  if (*(float *)(this + 0x3188) != -1.0) {
    (**(code **)(*(int *)(this + 0x3184) + 4))(this + 0x3184,this + 0x3188);
    *(undefined4 *)(this + 0x3188) = 0xbf800000;
  }
  if (*(float *)(this + 0x3190) != -1.0) {
                    /* try { // try from 009d4bd2 to 009d4cc0 has its CatchHandler @ 009d6196 */
    (**(code **)(*(int *)(this + 0x318c) + 4))(this + 0x318c,this + 0x3190);
    *(undefined4 *)(this + 0x3190) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x3194) = 0;
  *(undefined4 *)(this + 0x3198) = 0;
  *(undefined4 *)(this + 0x319c) = 0;
  *(undefined4 *)(this + 0x31a0) = 0;
  *(undefined4 *)(this + 0x31a4) = 0;
  *(undefined4 *)(this + 0x31a8) = 0;
  *(undefined4 *)(this + 0x31ac) = 0;
  *(undefined4 *)(this + 0x31b0) = 0;
  *(undefined4 *)(this + 0x31b4) = 0;
  *(undefined4 *)(this + 0x31b8) = 0;
  if (*(int *)(this + 0x3a78) != 0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3a78) = 0;
  }
  fVar29 = *(float *)(ZombieFrustrationSpawnDelay._28_4_ + 0x2c);
  lVar28 = (longdouble)CountdownTimer::Now();
  if ((float)lVar28 + fVar29 != *(float *)(this + 0x3a84)) {
    (**(code **)(*(int *)(this + 0x3a7c) + 4))(this + 0x3a7c,this + 0x3a84);
    *(float *)(this + 0x3a84) = (float)lVar28 + fVar29;
  }
  if (fVar29 != *(float *)(this + 0x3a80)) {
    (**(code **)(*(int *)(this + 0x3a7c) + 4))(this + 0x3a7c,this + 0x3a80);
    *(float *)(this + 0x3a80) = fVar29;
  }
  if (((*(float *)(this + 0x3394) != 0.0) || (*(float *)(this + 0x3398) != 0.0)) ||
     (*(float *)(this + 0x339c) != 0.0)) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d419a to 009d419e has its CatchHandler @ 009d6196 */
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3394) = 0;
    *(undefined4 *)(this + 0x3398) = 0;
    *(undefined4 *)(this + 0x339c) = 0;
  }
  if (*(float *)(this + 0x2ea8) != -1.0) {
    (**(code **)(*(int *)(this + 0x2ea0) + 4))(this + 0x2ea0,this + 0x2ea8);
    *(undefined4 *)(this + 0x2ea8) = 0xbf800000;
  }
  if (*(float *)(this + 0x3eb4) != -1.0) {
    (**(code **)(*(int *)(this + 0x3eb0) + 4))(this + 0x3eb0,this + 0x3eb4);
    *(undefined4 *)(this + 0x3eb4) = 0xbf800000;
  }
  if (*(float *)(this + 0x3e3c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3e34) + 4))(this + 0x3e34,this + 0x3e3c);
    *(undefined4 *)(this + 0x3e3c) = 0xbf800000;
  }
  this[0x3e40] = (CTerrorPlayer)0x0;
  *(undefined4 *)(this + 0x39e8) = 0;
  *(undefined4 *)(this + 0x39ec) = 0;
  this[0x39f0] = (CTerrorPlayer)0x0;
  if (this[0x39f1] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x39f1] = (CTerrorPlayer)0x0;
  }
  ResetLightingOrigin(this);
  if (this[0x39f2] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x39f2] = (CTerrorPlayer)0x0;
  }
  if (this[0x33dc] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x33dc] = (CTerrorPlayer)0x0;
  }
  if (this[0x33dd] == (CTerrorPlayer)0x0) {
    CVar10 = this[0x33e4];
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    CVar10 = this[0x33e4];
    this[0x33dd] = (CTerrorPlayer)0x0;
  }
  if (CVar10 != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x33e4] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x39f8) != -1.0) {
    (**(code **)(*(int *)(this + 0x39f4) + 4))(this + 0x39f4,this + 0x39f8);
    *(undefined4 *)(this + 0x39f8) = 0xbf800000;
  }
  if (((*(float *)(this + 0x39fc) != 0.0) || (*(float *)(this + 0x3a00) != 0.0)) ||
     (*(float *)(this + 0x3a04) != 0.0)) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x39fc) = 0;
    *(undefined4 *)(this + 0x3a00) = 0;
    *(undefined4 *)(this + 0x3a04) = 0;
  }
  if (((*(float *)(this + 0x3a08) != 0.0) || (*(float *)(this + 0x3a0c) != 0.0)) ||
     (*(float *)(this + 0x3a10) != 0.0)) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3a08) = 0;
    *(undefined4 *)(this + 0x3a0c) = 0;
    *(undefined4 *)(this + 0x3a10) = 0;
  }
  *(undefined4 *)(this + 0x3a30) = 0;
  *(undefined4 *)(this + 0x3a34) = 0;
  *(undefined4 *)(this + 0x3a38) = 0;
  if (((*(float *)(this + 0x3a14) == 0.0) && (*(float *)(this + 0x3a18) == 0.0)) &&
     (*(float *)(this + 0x3a1c) == 0.0)) {
    fVar29 = *(float *)(this + 0x3a20);
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3a14) = 0;
    fVar29 = *(float *)(this + 0x3a20);
    *(undefined4 *)(this + 0x3a18) = 0;
    *(undefined4 *)(this + 0x3a1c) = 0;
  }
  if (((fVar29 != 0.0) || (*(float *)(this + 0x3a24) != 0.0)) || (*(float *)(this + 0x3a28) != 0.0))
  {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3a20) = 0;
    *(undefined4 *)(this + 0x3a24) = 0;
    *(undefined4 *)(this + 0x3a28) = 0;
  }
  this[0x3a2c] = (CTerrorPlayer)0x0;
  *(undefined4 *)(this + 0x3a64) = 0;
  this[0x3f04] = (CTerrorPlayer)0x0;
  if (this[0x3f14] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x3f14] = (CTerrorPlayer)0x0;
  }
  *(undefined4 *)(this + 0x2a50) = 0;
  if (this[0x3fe0] != (CTerrorPlayer)0x1) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x3fe0] = (CTerrorPlayer)0x1;
  }
  *(undefined4 *)(this + 0x3ee4) = 0xffffffff;
  this[0x2f5c] = (CTerrorPlayer)0x0;
  this[0x2f5d] = (CTerrorPlayer)0x0;
  this[0x2f5e] = (CTerrorPlayer)0x0;
  this[0x2f5f] = (CTerrorPlayer)0x0;
  CCSPlayer::Spawn((CCSPlayer *)this);
  (**(code **)(*(int *)this + 0x8bc))(this);
  cVar9 = CTerrorGameRules::IsSurvivalMode();
  if ((cVar9 != '\0') ||
     (((cVar9 = IsTransitioned(this), cVar9 == '\0' &&
       (cVar9 = CDirector::IsTransitionScenarioRestart(), cVar9 == '\0')) &&
      (*(int *)(survivor_respawn_with_guns._28_4_ + 0x30) != 0)))) {
    (**(code **)(*(int *)this + 0x8e8))(this);
  }
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  this[iVar23 % 2 + 0x30d4] = (CTerrorPlayer)0x1;
  CVar10 = (CTerrorPlayer)CDirector::IsMissionStartMap(TheDirector);
  if (CVar10 != this[0x2ce0]) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2ce0] = CVar10;
  }
  if (((CVar10 != (CTerrorPlayer)0x0) &&
      (iVar23 = (**(code **)(*(int *)this + 0x52c))(this), iVar23 != 0)) &&
     (((*(byte *)(iVar23 + 0x12d) & 8) == 0 && (this[0x2ce0] != (CTerrorPlayer)0x0)))) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x2ce0] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x2ecc) != -1.0) {
    (**(code **)(*(int *)(this + 0x2ec8) + 4))(this + 0x2ec8,this + 0x2ecc);
    *(undefined4 *)(this + 0x2ecc) = 0xbf800000;
  }
  if (*(float *)(this + 0x2ed8) != -1.0) {
    (**(code **)(*(int *)(this + 0x2ed0) + 4))(this + 0x2ed0,this + 0x2ed8);
    *(undefined4 *)(this + 0x2ed8) = 0xbf800000;
  }
  this[0x2edc] = (CTerrorPlayer)0x0;
  Intensity::Reset((Intensity *)(this + 12000));
  this[0x2f68] = (CTerrorPlayer)0x0;
  if (*(float *)(this + 0x3118) != -1.0) {
                    /* try { // try from 009d4e06 to 009d50e6 has its CatchHandler @ 009d6196 */
    (**(code **)(*(int *)(this + 0x3114) + 4))(this + 0x3114,this + 0x3118);
    *(undefined4 *)(this + 0x3118) = 0xbf800000;
  }
  if (*(float *)(this + 0x3120) != -1.0) {
    (**(code **)(*(int *)(this + 0x311c) + 4))(this + 0x311c,this + 0x3120);
    *(undefined4 *)(this + 0x3120) = 0xbf800000;
  }
  if (*(float *)(this + 0x31dc) != -1.0) {
    (**(code **)(*(int *)(this + 0x31d4) + 4))(this + 0x31d4,this + 0x31dc);
    *(undefined4 *)(this + 0x31dc) = 0xbf800000;
  }
  if (*(float *)(this + 0x31ec) != -1.0) {
    (**(code **)(*(int *)(this + 0x31e4) + 4))(this + 0x31e4,this + 0x31ec);
    *(undefined4 *)(this + 0x31ec) = 0xbf800000;
  }
  if (*(float *)(this + 0x324c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3244) + 4))(this + 0x3244,this + 0x324c);
    *(undefined4 *)(this + 0x324c) = 0xbf800000;
  }
  if (*(float *)(this + 0x3284) != -1.0) {
    (**(code **)(*(int *)(this + 0x327c) + 4))(this + 0x327c,this + 0x3284);
    *(undefined4 *)(this + 0x3284) = 0xbf800000;
  }
  if (*(float *)(this + 0x3294) != -1.0) {
                    /* try { // try from 009d516e to 009d56c5 has its CatchHandler @ 009d6196 */
    (**(code **)(*(int *)(this + 0x328c) + 4))(this + 0x328c,this + 0x3294);
    *(undefined4 *)(this + 0x3294) = 0xbf800000;
  }
  if (*(float *)(this + 0x32a4) != -1.0) {
    (**(code **)(*(int *)(this + 0x329c) + 4))(this + 0x329c,this + 0x32a4);
    *(undefined4 *)(this + 0x32a4) = 0xbf800000;
  }
  lVar28 = (longdouble)CountdownTimer::Now();
  if ((float)lVar28 + 0.25 != *(float *)(this + 0x2e94)) {
    (**(code **)(*(int *)(this + 0x2e8c) + 4))(this + 0x2e8c,this + 0x2e94);
    *(float *)(this + 0x2e94) = (float)lVar28 + 0.25;
  }
  if (*(float *)(this + 0x2e90) != 0.25) {
    (**(code **)(*(int *)(this + 0x2e8c) + 4))(this + 0x2e8c,this + 0x2e90);
    *(undefined4 *)(this + 0x2e90) = 0x3e800000;
  }
  CBasePlayer::DeactivateMovementConstraint((CBasePlayer *)this);
  *(undefined4 *)(this + 0x32ac) = 0xffffffff;
  *(undefined4 *)(this + 0x32b0) = 0xffffffff;
  if (*(float *)(this + 0x3a94) != -1.0) {
    (**(code **)(*(int *)(this + 0x3a90) + 4))(this + 0x3a90,this + 0x3a94);
    *(undefined4 *)(this + 0x3a94) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x3178) = 0xbf800000;
  *(undefined4 *)(this + 0x3154) = 0xbf800000;
  if (*(float *)(this + 0x316c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3168) + 4))(this + 0x3168,this + 0x316c);
    *(undefined4 *)(this + 0x316c) = 0xbf800000;
  }
  if (*(float *)(this + 0x3174) != -1.0) {
    (**(code **)(*(int *)(this + 0x3170) + 4))(this + 0x3170,this + 0x3174);
    *(undefined4 *)(this + 0x3174) = 0xbf800000;
  }
  if (*(float *)(this + 0x3180) != -1.0) {
    (**(code **)(*(int *)(this + 0x317c) + 4))(this + 0x317c,this + 0x3180);
    *(undefined4 *)(this + 0x3180) = 0xbf800000;
  }
  if (*(float *)(this + 0x39e0) != -1.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x39e0) = 0xbf800000;
  }
  CCollisionProperty::SetSolid((CCollisionProperty *)(this + 0x194),2);
  CBaseEntity::RemoveFlag((CBaseEntity *)this,0x20);
  CBasePlayer::ClearZoomOwner((CBasePlayer *)this);
  CBasePlayer::SetFOV((CBasePlayer *)this,(CBaseEntity *)this,0,0.0,0);
  if (((vec3_angle != *(float *)(this + 0x1ab0)) || (DAT_01053d40 != *(float *)(this + 0x1ab4))) ||
     (fVar29 = DAT_01053d40, fVar26 = DAT_01053d44, DAT_01053d44 != *(float *)(this + 0x1ab8))) {
    (**(code **)(*(int *)(this + 0x1a40) + 4))(this + 0x1a40,this + 0x1ab0);
    fVar26 = DAT_01053d44;
    fVar29 = DAT_01053d40;
    fVar5 = vec3_angle;
    *(float *)(this + 0x1ab4) = DAT_01053d40;
    *(float *)(this + 0x1ab0) = fVar5;
    *(float *)(this + 0x1ab8) = fVar26;
  }
  if (((vec3_angle != *(float *)(this + 0x1abc)) || (fVar29 != *(float *)(this + 0x1ac0))) ||
     (fVar26 != *(float *)(this + 0x1ac4))) {
    (**(code **)(*(int *)(this + 0x1a40) + 4))(this + 0x1a40,this + 0x1abc);
    fVar5 = vec3_angle;
    *(float *)(this + 0x1ac0) = fVar29;
    *(float *)(this + 0x1ac4) = fVar26;
    *(float *)(this + 0x1abc) = fVar5;
  }
  *(undefined4 *)(this + 0x3334) = 0;
  if (*(float *)(this + 0x3340) != -1.0) {
    (**(code **)(*(int *)(this + 0x3338) + 4))(this + 0x3338,this + 0x3340);
    *(undefined4 *)(this + 0x3340) = 0xbf800000;
  }
  if (*(float *)(this + 0x334c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3344) + 4))(this + 0x3344,this + 0x334c);
    *(undefined4 *)(this + 0x334c) = 0xbf800000;
  }
  this[0x3354] = (CTerrorPlayer)0x0;
  *(undefined4 *)(this + 0x3350) = 0;
  if (*(float *)(this + 0x31f8) != -1.0) {
    (**(code **)(*(int *)(this + 0x31f0) + 4))(this + 0x31f0,this + 0x31f8);
    *(undefined4 *)(this + 0x31f8) = 0xbf800000;
  }
  if (((*(float *)(this + 0x31fc) == 0.0) && (*(float *)(this + 0x3200) == 0.0)) &&
     (*(float *)(this + 0x3204) == 0.0)) {
    fVar29 = *(float *)(this + 0x3208);
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x31fc) = 0;
    fVar29 = *(float *)(this + 0x3208);
    *(undefined4 *)(this + 0x3200) = 0;
    *(undefined4 *)(this + 0x3204) = 0;
  }
  if (((fVar29 == 0.0) && (*(float *)(this + 0x320c) == 0.0)) && (*(float *)(this + 0x3210) == 0.0))
  {
    fVar29 = *(float *)(this + 0x3214);
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3208) = 0;
    fVar29 = *(float *)(this + 0x3214);
    *(undefined4 *)(this + 0x320c) = 0;
    *(undefined4 *)(this + 0x3210) = 0;
  }
  if (fVar29 != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3214) = 0;
  }
  *(undefined4 *)(this + 0x3218) = 0xffffffff;
  if (*(float *)(this + 0x3224) != -1.0) {
    (**(code **)(*(int *)(this + 0x321c) + 4))(this + 0x321c,this + 0x3224);
    *(undefined4 *)(this + 0x3224) = 0xbf800000;
  }
  if (((*(float *)(this + 0x3228) == 0.0) && (*(float *)(this + 0x322c) == 0.0)) &&
     (*(float *)(this + 0x3230) == 0.0)) {
    fVar29 = *(float *)(this + 0x3234);
  }
  else {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d46fa to 009d4b10 has its CatchHandler @ 009d6196 */
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3228) = 0;
    fVar29 = *(float *)(this + 0x3234);
    *(undefined4 *)(this + 0x322c) = 0;
    *(undefined4 *)(this + 0x3230) = 0;
  }
  if (((fVar29 != 0.0) || (*(float *)(this + 0x3238) != 0.0)) || (*(float *)(this + 0x323c) != 0.0))
  {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3234) = 0;
    *(undefined4 *)(this + 0x3238) = 0;
    *(undefined4 *)(this + 0x323c) = 0;
  }
  if (*(float *)(this + 0x3240) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3240) = 0;
  }
  this[0x3fc0] = (CTerrorPlayer)0x0;
  *(undefined4 *)(this + 0x3fc4) = 0;
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar23 == 3) {
    if (this[0x2429] != (CTerrorPlayer)0x1) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(this + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
          iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar23 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      this[0x2429] = (CTerrorPlayer)0x1;
    }
    if (this[0x242a] != (CTerrorPlayer)0x0) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(this + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
          iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar23 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      this[0x242a] = (CTerrorPlayer)0x0;
    }
  }
  else {
    if (this[0x2429] != (CTerrorPlayer)0x0) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(this + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d578f to 009d5793 has its CatchHandler @ 009d6196 */
          iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar23 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      this[0x2429] = (CTerrorPlayer)0x0;
    }
    if (this[0x242a] != (CTerrorPlayer)0x0) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(this + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
          iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar23 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      this[0x242a] = (CTerrorPlayer)0x0;
    }
    CDirector::OnSurvivorAdded((CTerrorPlayer *)TheDirector);
    *(undefined4 *)(this + 0x2400) = *(undefined4 *)(gpGlobals + 0xc);
  }
  this[0x3fcd] = (CTerrorPlayer)0x0;
  lVar28 = (longdouble)IntervalTimer::Now();
  if ((float)lVar28 != *(float *)(this + 0x30c8)) {
    (**(code **)(*(int *)(this + 0x30c4) + 4))(this + 0x30c4,this + 0x30c8);
    *(float *)(this + 0x30c8) = (float)lVar28;
  }
  CRecipientFilter::CRecipientFilter(local_3c);
                    /* try { // try from 009d3bb7 to 009d3e70 has its CatchHandler @ 009d618e */
  CRecipientFilter::MakeReliable(local_3c);
  CRecipientFilter::AddRecipient(local_3c,(CBasePlayer *)this);
  UserMessageBegin((IRecipientFilter *)local_3c,"Spawn");
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  MessageWriteByte(iVar23);
  MessageEnd();
  if (0 < *(int *)(gpGlobals + 0x14)) {
    iVar23 = 1;
    do {
      while (((pCVar15 = (CBasePlayer *)UTIL_PlayerByIndex(iVar23), pCVar15 != (CBasePlayer *)0x0 &&
              (this != (CTerrorPlayer *)pCVar15)) &&
             ((cVar9 = (**(code **)(*(int *)pCVar15 + 0x778))(pCVar15), cVar9 == '\0' &&
              ((iVar13 = (**(code **)(*(int *)pCVar15 + 0x648))(pCVar15), iVar13 == 4 &&
               (pCVar16 = (CTerrorPlayer *)(**(code **)(*(int *)pCVar15 + 0x654))(pCVar15),
               this == pCVar16))))))) {
        CRecipientFilter::AddRecipient(local_3c,pCVar15);
        iVar23 = iVar23 + 1;
        if (*(int *)(gpGlobals + 0x14) < iVar23) goto LAB_009d3c80;
      }
      iVar23 = iVar23 + 1;
    } while (iVar23 <= *(int *)(gpGlobals + 0x14));
  }
LAB_009d3c80:
  UserMessageBegin((IRecipientFilter *)local_3c,"SplatterClear");
  MessageEnd();
  if (this[0x32c4] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x32c4] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x32dc) != -1.0) {
                    /* try { // try from 009d5112 to 009d5142 has its CatchHandler @ 009d618e */
    (**(code **)(*(int *)(this + 0x32d4) + 4))(this + 0x32d4,this + 0x32dc);
    *(undefined4 *)(this + 0x32dc) = 0xbf800000;
  }
  if (this[0x33a0] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x33a0] = (CTerrorPlayer)0x0;
  }
  uVar11 = *(undefined4 *)(this + 0x2cd4);
  *(undefined4 *)(this + 0x2cd4) = 0;
  *(undefined4 *)(this + 0x2cd0) = uVar11;
  if (*(float *)(this + 0x2c1c) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x2c1c) = 0;
  }
  SetHealthBuffer(this,0.0);
  if (this[0x32fc] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x32fc] = (CTerrorPlayer)0x0;
  }
  ApplyHealthModifications(this);
  if (*(float *)(this + 0x3304) != 0.0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3304) = 0;
  }
  *(undefined4 *)(this + 0x3310) = *(undefined4 *)(gpGlobals + 0xc);
  if (*(int *)(this + 0x3308) != 0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d4b3a to 009d4ba6 has its CatchHandler @ 009d618e */
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3308) = 0;
  }
  this[0x3330] = (CTerrorPlayer)0x0;
  *(undefined4 *)(this + 0x3320) = 0;
  if (*(float *)(this + 0x331c) != -1.0) {
    (**(code **)(*(int *)(this + 0x3314) + 4))(this + 0x3314,this + 0x331c);
    *(undefined4 *)(this + 0x331c) = 0xbf800000;
  }
  (**(code **)(*enginesound + 0x2c))(enginesound,local_3c,0,0);
  puVar17 = (undefined4 *)(**(code **)(*(int *)this + 0x288))(this);
  *(undefined4 *)(this + 0x30dc) = *puVar17;
  *(undefined4 *)(this + 0x30e0) = puVar17[1];
  *(undefined4 *)(this + 0x30e4) = puVar17[2];
  uVar11 = CNavMesh::GetNavArea(TheNavMesh,(Vector *)(this + 0x30dc),120.0);
  *(undefined4 *)(this + 0x30d8) = uVar11;
  this[0x3376] = (CTerrorPlayer)0x0;
  this[0x3375] = (CTerrorPlayer)0x0;
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar23 == 3) {
    if (*(float *)(this + 0x2d48) <= 0.0) {
      local_7c = 0.0;
    }
    else {
      *(int *)(this + 0x2d58) = *(int *)(this + 0x2d58) + 1;
      local_7c = *(float *)(gpGlobals + 0xc) - *(float *)(this + 0x2d48);
      if (local_7c < *(float *)(this + 0x2d4c)) {
        *(float *)(this + 0x2d4c) = local_7c;
      }
      if (*(float *)(this + 0x2d50) <= local_7c && local_7c != *(float *)(this + 0x2d50)) {
        if (this[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(this + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
            iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar23 + 2) = 0;
          }
        }
        else {
          this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
        }
        *(float *)(this + 0x2d50) = local_7c;
      }
      fVar29 = local_7c + *(float *)(this + 0x2d54);
      if (*(float *)(this + 0x2d54) != fVar29) {
        if (this[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(this + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d5cad to 009d5cb1 has its CatchHandler @ 009d6161 */
            iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar23 + 2) = 0;
          }
        }
        else {
          this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
        }
        *(float *)(this + 0x2d54) = fVar29;
      }
      *(undefined4 *)(this + 0x2d48) = 0;
    }
                    /* try { // try from 009d3ef4 to 009d40df has its CatchHandler @ 009d6161 */
    cVar9 = CTerrorGameRules::HasPlayerControlledZombies();
    iVar23 = g_ZombieClass;
                    /* try { // try from 009d5b55 to 009d5c4e has its CatchHandler @ 009d6161 */
    if ((((cVar9 != '\0') &&
         (cVar9 = (**(code **)(*(int *)this + 0x778))(this), iVar23 = g_ZombieClass, cVar9 == '\0'))
        && (this[0x3fe1] == (CTerrorPlayer)0x0)) && (iVar23 = 8, g_ZombieClass != 8)) {
      if (*(int *)(this + 0x2ba4) != 0) {
        if (this[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(this + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
            iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar23 + 2) = 0;
          }
        }
        else {
          this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
        }
        *(undefined4 *)(this + 0x2ba4) = 0;
      }
      local_6c = 3;
      local_64 = 99999;
      iVar13 = *(int *)(TheDirector + 0x4f8);
      iVar23 = iVar13 + -1;
      do {
        iVar24 = iVar23 % 6 + 1;
        iVar21 = *(int *)(this + iVar24 * 4 + 0x2d14);
        iVar7 = local_6c;
        iVar8 = local_64;
        if ((iVar21 < local_64) &&
           (cVar9 = IsClassOverLimit(this,iVar24), iVar7 = iVar24, iVar8 = iVar21, cVar9 != '\0')) {
          iVar7 = local_6c;
          iVar8 = local_64;
        }
        local_64 = iVar8;
        local_6c = iVar7;
        iVar23 = iVar23 + 1;
      } while (iVar23 != iVar13 + 5);
      g_ZombieClass = local_6c;
      g_ZombieClass =
           CDirectorChallengeMode::ConvertZombieClass
                     (*(CDirectorChallengeMode **)(TheDirector + 0x648),local_6c);
      iVar23 = g_ZombieClass;
    }
    (**(code **)(*(int *)this + 0x91c))(this,iVar23);
    iVar13 = g_ZombieClass * 4;
    iVar23 = *(int *)(this + iVar13 + 0x2d14);
    local_58 = iVar23 + 1;
    iVar21 = memcmp(this + iVar13 + 0x2d14,(PZSpawnMusic *)&local_58,4);
    if (iVar21 != 0) {
      if (this[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(this + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d5ad2 to 009d5ad6 has its CatchHandler @ 009d6161 */
          iVar21 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar21 + 2) = 0;
        }
      }
      else {
        this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      }
      *(int *)(this + iVar13 + 0x2d14) = iVar23 + 1;
    }
    cVar9 = (**(code **)(*(int *)this + 0x778))(this);
    if ((cVar9 == '\0') && (*(int *)(ZombiePlayerZombieDebug._28_4_ + 0x30) != 0)) {
                    /* try { // try from 009d57fd to 009d582d has its CatchHandler @ 009d6161 */
      uVar11 = GetClassString(this);
      uVar20 = (**(code **)(*(int *)this + 0xb8))(this);
      DevMsg("Player %s spawned as %s after waiting %3.2f seconds\n",uVar20,uVar11,(double)local_7c)
      ;
    }
    cVar9 = (**(code **)(*(int *)this + 0x558))(this);
    if (cVar9 != '\0') {
      CCSPlayer::EmitPrivateSound((CCSPlayer *)this,"PlayerZombie.BecomeGhost");
    }
    iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                    /* try { // try from 009d5d0f to 009d5e44 has its CatchHandler @ 009d6161 */
    if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 2)) {
      iVar23 = RandomInt(1,100);
      if ((iVar23 < *(int *)(BoomerLeakerChance._28_4_ + 0x30)) && (*(int *)(this + 0x4018) != 1)) {
        if (this[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(this + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
            iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar23 + 2) = 0;
          }
        }
        else {
          this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
        }
        *(undefined4 *)(this + 0x4018) = 1;
      }
      cVar9 = (**(code **)(*(int *)this + 0x558))(this);
      if (cVar9 == '\0') {
        EmitTrackedSound(this,"BoomerZombie.Gurgle",0.0);
        local_58 = 2;
        ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
        Vocalize(this,"BoomerZombie.Alert",0.0,0.0);
        if (*(int *)(this + 0x4018) == 1) {
                    /* try { // try from 009d6052 to 009d6056 has its CatchHandler @ 009d6161 */
          ClientPrint((CBasePlayer *)this,4,"YOU ARE A LEAKER!",(char *)0x0,(char *)0x0,(char *)0x0,
                      (char *)0x0);
        }
        VisibilityMonitor_AddEntity
                  ((CBaseEntity *)this,*(float *)(BoomerNearDist._28_4_ + 0x2c),
                   BoomerVisibilityMonitorCallback,(_func_bool_CBaseEntity_ptr_CBasePlayer_ptr *)0x0
                  );
      }
    }
    else {
      iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                    /* try { // try from 009d5eb8 to 009d5fd0 has its CatchHandler @ 009d6161 */
      if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 1)) {
        cVar9 = (**(code **)(*(int *)this + 0x558))(this);
        if (cVar9 == '\0') {
          local_58 = 1;
          ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
          Vocalize(this,"SmokerZombie.Alert",0.0,0.0);
        }
      }
      else {
        iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
        if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 3)) {
          cVar9 = (**(code **)(*(int *)this + 0x558))(this);
          if (cVar9 == '\0') {
            local_58 = 3;
            ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
            Vocalize(this,"HunterZombie.Alert",0.0,0.0);
          }
        }
        else {
          iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                    /* try { // try from 009d608e to 009d6146 has its CatchHandler @ 009d6161 */
          if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 5)) {
            cVar9 = (**(code **)(*(int *)this + 0x558))(this);
            if (cVar9 == '\0') {
              local_58 = 5;
              ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
              Vocalize(this,"JockeyZombie.Alert",0.0,0.0);
            }
          }
          else {
            iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
            if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 6))
            {
              cVar9 = (**(code **)(*(int *)this + 0x558))(this);
              if (cVar9 == '\0') {
                local_58 = 6;
                ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
                Vocalize(this,"ChargerZombie.Alert",0.0,0.0);
              }
            }
            else {
              iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
              if ((iVar23 == 3) && (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 4)
                 ) {
                cVar9 = (**(code **)(*(int *)this + 0x558))(this);
                if (cVar9 == '\0') {
                  local_58 = 4;
                  ForEachSurvivor<PZSpawnMusic>((PZSpawnMusic *)&local_58);
                  Vocalize(this,"SpitterZombie.Alert",0.0,0.0);
                }
              }
              else {
                iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                if (((iVar23 == 3) &&
                    (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 8)) &&
                   (*(char *)(TheZombieManager + 5) == '\0')) {
                  iVar23 = (**(code **)(*(int *)this + 0x148))(this);
                  if (iVar23 == 0) {
                    ForEachTerrorPlayer<BossAttackMusic>((BossAttackMusic *)&local_58);
                  }
                  piVar18 = (int *)(**(code **)(*gameeventmanager + 0x1c))
                                             (gameeventmanager,"tank_spawn",0,0);
                  if (piVar18 != (int *)0x0) {
                    pcVar4 = *(code **)(*piVar18 + 0x30);
                    uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
                    (*pcVar4)(piVar18,"userid",uVar11);
                    if (*(int *)(this + 0x30) == 0) {
                      iVar23 = 0;
                    }
                    else {
                      iVar23 = *(int *)(this + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
                    }
                    (**(code **)(*piVar18 + 0x30))(piVar18,"tankid",iVar23);
                    (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar18,0);
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  else {
                    /* try { // try from 009d41e3 to 009d45ef has its CatchHandler @ 009d618e */
    ResetClassSpawnSystem(this);
    *(undefined4 *)(this + 0x2d48) = 0;
  }
  CCollisionProperty::SetSurroundingBoundsType((CCollisionProperty *)(this + 0x194),7,0,0);
  (**(code **)(*(int *)this + 0x38c))(this);
  uVar2 = *(uint *)(this + 0x30bc);
  if (((uVar2 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar12 + 8) == uVar2 >> 0xc &&
      (*(CBaseEntity **)(puVar12 + 4) != (CBaseEntity *)0x0)))) {
                    /* try { // try from 009d5b28 to 009d5b2c has its CatchHandler @ 009d618e */
    UTIL_Remove(*(CBaseEntity **)(puVar12 + 4));
  }
  piVar18 = (int *)CBaseAbility::CreateForPlayer(this);
  if (this[0x6c] == (CTerrorPlayer)0x0) {
    pCVar3 = *(CBaseEdict **)(this + 0x30);
    if (pCVar3 != (CBaseEdict *)0x0) {
      *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
      iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
      *(undefined2 *)(iVar23 + 2) = 0;
    }
  }
  else {
    this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
  }
  if (piVar18 == (int *)0x0) {
    *(undefined4 *)(this + 0x30bc) = 0xffffffff;
  }
  else {
    puVar17 = (undefined4 *)(**(code **)(*piVar18 + 0xc))(piVar18);
    *(undefined4 *)(this + 0x30bc) = *puVar17;
  }
  if (((((this[0x3fe1] != (CTerrorPlayer)0x0) &&
        (uVar2 = *(uint *)(this + 0x30bc), uVar2 != 0xffffffff)) &&
       (puVar12 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
      ((*(uint *)(puVar12 + 8) == uVar2 >> 0xc &&
       (*(CBaseAbility **)(puVar12 + 4) != (CBaseAbility *)0x0)))) &&
     (0.0 <= *(float *)(this + 0x3fe8))) {
                    /* try { // try from 009d5d00 to 009d5d04 has its CatchHandler @ 009d618e */
    CBaseAbility::StartActivationTimer
              (*(CBaseAbility **)(puVar12 + 4),*(float *)(this + 0x3fe8),*(float *)(this + 0x3fec));
  }
  this[0x39e4] = (CTerrorPlayer)0x0;
  cVar9 = CTerrorGameRules::HasPlayerControlledZombies();
  if (cVar9 == '\0') {
                    /* try { // try from 009d4cd9 to 009d4ddd has its CatchHandler @ 009d618e */
    (**(code **)(*(int *)this + 0x5f8))(this,0);
  }
  else {
    *(float *)(this + 0x3fbc) = *(float *)(gpGlobals + 0xc) + 0.5;
  }
  if (((*(int *)(this + 0x30d8) != 0) &&
      (iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this), iVar23 == 2)) &&
     ((*(byte *)(*(int *)(this + 0x30d8) + 0x12d) & 8) != 0)) {
                    /* try { // try from 009d59b4 to 009d5a9c has its CatchHandler @ 009d618e */
    iVar23 = TerrorNavMesh::GetCheckpoint
                       ((TerrorNavMesh *)TheNavMesh,(Vector *)(*(int *)(this + 0x30d8) + 0x2c));
                    /* try { // try from 009d5e6e to 009d5ead has its CatchHandler @ 009d618e */
    if (((iVar23 == 0) || (*(char *)(iVar23 + 0x5f) != '\0')) ||
       (cVar9 = CDirector::IsMissionStartMap(TheDirector), cVar9 == '\0')) {
      iVar23 = TerrorNavMesh::GetLastCheckpoint((TerrorNavMesh *)TheNavMesh);
      if (iVar23 == 0) {
                    /* try { // try from 009d6065 to 009d6083 has its CatchHandler @ 009d618e */
        cVar9 = CTerrorGameRules::IsSurvivalMode();
        if (cVar9 == '\0') {
          (**(code **)(*(int *)(this + 0x3ab4) + 0x38))(this + 0x3ab4);
        }
      }
      else {
        cVar9 = CTerrorGameRules::IsSurvivalMode();
        if (cVar9 == '\0') {
          (**(code **)(*(int *)(this + 0x3ab4) + 0x34))(this + 0x3ab4);
        }
      }
    }
    else if (this[0x3e41] == (CTerrorPlayer)0x0) {
      this[0x3e41] = (CTerrorPlayer)0x1;
      cVar9 = CTerrorGameRules::IsSurvivalMode();
      if (cVar9 == '\0') {
        (**(code **)(*(int *)(this + 0x3ab4) + 0x20))(this + 0x3ab4);
      }
    }
  }
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                    /* try { // try from 009d5c6f to 009d5c8d has its CatchHandler @ 009d618e */
  if ((iVar23 == 2) && (cVar9 = CTerrorGameRules::IsSurvivalMode(), cVar9 != '\0')) {
    (**(code **)(*(int *)(this + 0x3ab4) + 0x28))(this + 0x3ab4);
  }
  *(undefined4 *)(this + 0x3ed4) = 0xffffffff;
  uVar2 = *(uint *)(this + 0x3e64);
  *(undefined4 *)(this + 0x3ed8) = 0;
  puVar12 = g_pEntityList;
  if (((uVar2 != 0xffffffff) &&
      (puVar14 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar14 + 8) == uVar2 >> 0xc && (*(int *)(puVar14 + 4) != 0)))) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
        puVar12 = g_pEntityList;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3e64) = 0xffffffff;
  }
  uVar2 = *(uint *)(this + 0x3e68);
  if ((((uVar2 != 0xffffffff) &&
       (puVar12 = puVar12 + (uVar2 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar12 + 8) == uVar2 >> 0xc)) && (*(int *)(puVar12 + 4) != 0)) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3e68) = 0xffffffff;
  }
  if (this[0x3e78] != (CTerrorPlayer)0x0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    this[0x3e78] = (CTerrorPlayer)0x0;
  }
  if (*(float *)(this + 0x3f30) == -1.0) {
    iVar23 = *(int *)(this + 0x3f28);
  }
  else {
    (**(code **)(*(int *)(this + 0x3f2c) + 4))(this + 0x3f2c,this + 0x3f30);
    *(undefined4 *)(this + 0x3f30) = 0xbf800000;
    iVar23 = *(int *)(this + 0x3f28);
  }
  if (iVar23 != 0) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
    }
    *(undefined4 *)(this + 0x3f28) = 0;
  }
  if (*(float *)(this + 0x3e74) != -1.0) {
    (**(code **)(*(int *)(this + 0x3e6c) + 4))(this + 0x3e6c,this + 0x3e74);
    *(undefined4 *)(this + 0x3e74) = 0xbf800000;
  }
  if (*(float *)(this + 0x3ecc) != -1.0) {
    (**(code **)(*(int *)(this + 0x3ec4) + 4))(this + 0x3ec4,this + 0x3ecc);
    *(undefined4 *)(this + 0x3ecc) = 0xbf800000;
  }
  *(undefined4 *)(this + 0x3ec0) = 0;
  *(undefined4 *)(this + 0x3ebc) = 0;
  *(undefined4 *)(this + 0x3eb8) = 0;
  this[0x3fe1] = (CTerrorPlayer)0x0;
  this[0x3ab2] = (CTerrorPlayer)0x0;
  this[0x400d] = (CTerrorPlayer)0x1;
  if (this[0x3f5c] == (CTerrorPlayer)0x0) {
    CheckForFirstSpawn(this);
  }
  StopTrackedSound(this,"Player.Heartbeat");
  Vocalizer::OnSpawn(*(Vocalizer **)(this + 0x3110));
  pfVar19 = (float *)(**(code **)(*(int *)this + 0x238))(this);
  fVar29 = *pfVar19;
  if (((fVar29 != *(float *)(this + 0x2990)) ||
      (fVar26 = pfVar19[1], fVar26 != *(float *)(this + 0x2994))) ||
     (pfVar19[2] != *(float *)(this + 0x2998))) {
    if (this[0x6c] == (CTerrorPlayer)0x0) {
      pCVar3 = *(CBaseEdict **)(this + 0x30);
      if (pCVar3 != (CBaseEdict *)0x0) {
        *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                    /* try { // try from 009d46a2 to 009d46a6 has its CatchHandler @ 009d618e */
        iVar23 = CBaseEdict::GetChangeAccessor(pCVar3);
        *(undefined2 *)(iVar23 + 2) = 0;
        fVar29 = *pfVar19;
      }
    }
    else {
      this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
      fVar29 = *pfVar19;
    }
    *(float *)(this + 0x2990) = fVar29;
    fVar26 = pfVar19[1];
    *(float *)(this + 0x2994) = fVar26;
    *(float *)(this + 0x2998) = pfVar19[2];
  }
  (**(code **)(**(int **)(this + 0x2910) + 0xc))(*(int **)(this + 0x2910),fVar26,fVar29);
  this_00 = (CAmmoDef *)GetAmmoDef();
  minigunBulletType = CAmmoDef::Index(this_00,"AMMO_TYPE_MINIGUN");
  this[0x3f5d] = (CTerrorPlayer)0x0;
  if (*(float *)(this + 0x3f68) != -1.0) {
    (**(code **)(*(int *)(this + 0x3f60) + 4))(this + 0x3f60,this + 0x3f68);
    *(undefined4 *)(this + 0x3f68) = 0xbf800000;
  }
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar23 == 3) {
    uVar11 = GetClassString(this);
  }
  else {
    uVar11 = SurvivorCharacterName(*(undefined4 *)(this + 0x2ba0));
  }
  uVar20 = (**(code **)(*(int *)this + 0xb8))(this);
  UTIL_LogPrintf("%s spawned as a %s\n",uVar20,uVar11);
  TerrorNavMesh::OnPlayerSpawned((TerrorNavMesh *)TheNavMesh,this);
  cVar9 = (**(code **)(*(int *)this + 0x558))(this);
  if ((cVar9 == '\0') &&
     (piVar18 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"player_spawn",0,0),
     piVar18 != (int *)0x0)) {
    pcVar4 = *(code **)(*piVar18 + 0x30);
    uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
    (*pcVar4)(piVar18,"userid",uVar11);
    (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar18,0);
  }
  iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
                    /* try { // try from 009d56db to 009d576f has its CatchHandler @ 009d618e */
  if (((iVar23 == 3) && (iVar23 = CBaseEntity::GetTeamNumber((CBaseEntity *)this), iVar23 == 3)) &&
     (iVar23 = (**(code **)(*(int *)this + 0x544))(this), iVar23 == 8)) {
    lVar28 = (longdouble)CountdownTimer::Now();
    if ((float)lVar28 + 0.5 != *(float *)(this + 0x3f8c)) {
                    /* try { // try from 009d6011 to 009d6013 has its CatchHandler @ 009d618e */
      (**(code **)(*(int *)(this + 0x3f84) + 4))(pCVar25,this + 0x3f8c);
      *(float *)(this + 0x3f8c) = (float)lVar28 + 0.5;
    }
    if (*(float *)(this + 0x3f88) != 0.5) {
      (**(code **)(*(int *)(this + 0x3f84) + 4))(pCVar25,this + 0x3f88);
      *(undefined4 *)(this + 0x3f88) = 0x3f000000;
    }
  }
  cVar9 = CTerrorGameRules::IsVersusMode();
  if (cVar9 != '\0') {
    CTerrorGameRules::RecomputeTeamScores(g_pGameRules,false);
  }
  if (*(int *)(this + 0x3110) != 0) {
    *(undefined1 *)(*(int *)(this + 0x3110) + 0x120) = 0;
  }
  CRecipientFilter::~CRecipientFilter(local_3c);
  iVar23 = _DAT_0105db00;
  if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
     (iVar13 = ThreadGetCurrentId(), iVar23 == iVar13)) {
    cVar9 = CVProfNode::ExitScope();
    if (cVar9 != '\0') {
      _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
    }
    DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
  }
  if (local_40 != 0) {
    (**(code **)(local_40 + 0x54))(local_40,local_48,local_44,0,0,0);
  }
  (**(code **)(*piVar6 + 0x6c))(piVar6);
  return;
}

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)