L L4D2node

SurvivorReplacement::Restore

0x009ec590 · 8210 bytes · __thiscall

_ZN19SurvivorReplacement7RestoreEP13CTerrorPlayerS1_

Decompiled

undefined (3 params)

/* SurvivorReplacement::Restore(CTerrorPlayer*, CTerrorPlayer*) */

void __thiscall
SurvivorReplacement::Restore
          (SurvivorReplacement *this,CTerrorPlayer *param_1,CTerrorPlayer *param_2)

{
  float fVar1;
  float fVar2;
  SurvivorReplacement SVar3;
  CBaseEdict *pCVar4;
  uint uVar5;
  int *piVar6;
  uint uVar7;
  CBaseEntity *this_00;
  char cVar8;
  CTerrorPlayer CVar9;
  int iVar10;
  int iVar11;
  undefined4 *puVar12;
  uint *puVar13;
  CSurvivorPosition *pCVar14;
  int iVar15;
  undefined *puVar16;
  CTerrorPlayer *pCVar17;
  undefined *puVar18;
  CBaseEntity *pCVar19;
  longdouble lVar20;
  float fVar21;
  int local_44;
  undefined *local_40;
  uint local_30 [3];
  undefined4 local_24;
  undefined4 local_20;
  
  (**(code **)(*(int *)param_2 + 0x8cc))(param_2,2,*(undefined4 *)this,1);
  if (this[0x34] == (SurvivorReplacement)0x0) {
    CCSPlayer::State_Transition((CCSPlayer *)param_2,6);
  }
  else {
    param_2[0x3e41] = param_1[0x3e41];
    CCSPlayer::State_Transition((CCSPlayer *)param_2,0);
    (**(code **)(*(int *)param_2 + 100))(param_2);
  }
  if (this[0x34] != (SurvivorReplacement)0x0) {
    iVar11 = *(int *)(this + 0x28);
    if (iVar11 != *(int *)(param_2 + 0x100)) {
      (**(code **)(*(int *)param_2 + 0x214))(param_2,param_2 + 0x100);
      *(int *)(param_2 + 0x100) = iVar11;
    }
    CTerrorPlayer::SetHealthBuffer(param_2,*(float *)(this + 0x2c));
    iVar11 = *(int *)(this + 0x30);
    iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_2);
    cVar8 = IsASurvivorTeam(iVar10);
    local_40._0_1_ = '\0';
    if (cVar8 == '\0') {
      iVar10 = *(int *)(param_2 + 0x2e54);
    }
    else {
      local_40._0_1_ = CTerrorPlayer::IsOnThirdStrike(param_2);
      iVar10 = *(int *)(param_2 + 0x2e54);
    }
    if (iVar11 != iVar10) {
      if (param_2[0x6c] == (CTerrorPlayer)0x0) {
        pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      }
      *(int *)(param_2 + 0x2e54) = iVar11;
    }
    CVar9 = (CTerrorPlayer)CTerrorPlayer::IsOnThirdStrike(param_2);
    if (CVar9 != param_2[0x2e58]) {
      if (param_2[0x6c] == (CTerrorPlayer)0x0) {
        pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar11 + 2) = 0;
        }
      }
      else {
        param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      }
      param_2[0x2e58] = CVar9;
    }
    cVar8 = CTerrorPlayer::IsOnThirdStrike(param_2);
    if (cVar8 == '\0') {
      if ((char)local_40 != '\0') {
        CTerrorPlayer::StopTrackedSound(param_2,"Player.Heartbeat");
      }
    }
    else {
      CTerrorPlayer::StopTrackedSound(param_2,"Player.Heartbeat");
      CCSPlayer::EmitPrivateSound((CCSPlayer *)param_2,"Player.Heartbeat");
      CTerrorPlayer::TrackSound(param_2,"Player.Heartbeat");
    }
    SVar3 = this[0x35];
    if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x32fc)) {
      if (param_2[0x6c] == (CTerrorPlayer)0x0) {
        pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar11 + 2) = 0;
        }
      }
      else {
        param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      }
      *(SurvivorReplacement *)(param_2 + 0x32fc) = SVar3;
    }
  }
  CBaseEntity::SetMoveType((CBaseEntity *)param_2,*(undefined4 *)(this + 0x38),0);
  fVar21 = *(float *)(this + 0x3c);
  fVar1 = *(float *)(this + 0x40);
  fVar2 = *(float *)(this + 0x44);
  if (((fVar21 != *(float *)(param_2 + 0x2000)) || (fVar1 != *(float *)(param_2 + 0x2004))) ||
     (fVar2 != *(float *)(param_2 + 0x2008))) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(float *)(param_2 + 0x2000) = fVar21;
    *(float *)(param_2 + 0x2004) = fVar1;
    *(float *)(param_2 + 0x2008) = fVar2;
  }
  SVar3 = this[0x4a];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x1a90)) {
    (**(code **)(*(int *)(param_2 + 0x1a40) + 4))(param_2 + 0x1a40,param_2 + 0x1a90);
    *(SurvivorReplacement *)(param_2 + 0x1a90) = SVar3;
  }
  SVar3 = this[0x4b];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x1a91)) {
    (**(code **)(*(int *)(param_2 + 0x1a40) + 4))(param_2 + 0x1a40,param_2 + 0x1a91);
    *(SurvivorReplacement *)(param_2 + 0x1a91) = SVar3;
  }
  if (this[0x4c] != (SurvivorReplacement)0x0) {
    CBaseEntity::AddFlag((CBaseEntity *)param_2,2);
  }
  SVar3 = this[0x48];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x1ac8)) {
    (**(code **)(*(int *)(param_2 + 0x1a40) + 4))(param_2 + 0x1a40,param_2 + 0x1ac8);
    *(SurvivorReplacement *)(param_2 + 0x1ac8) = SVar3;
  }
  puVar16 = g_pEntityList;
  *(SurvivorReplacement *)(param_2 + 0x39e4) = this[0x4d];
  *(SurvivorReplacement *)(param_2 + 0x3e41) = this[0x4e];
  *(undefined4 *)(param_2 + 0x3f90) = *(undefined4 *)(this + 0xf4);
  *(undefined4 *)(param_2 + 0x3f94) = *(undefined4 *)(this + 0xf8);
  *(undefined4 *)(param_2 + 0x3f98) = *(undefined4 *)(this + 0xfc);
  *(SurvivorReplacement *)(param_2 + 0x3f9c) = this[0x100];
  *(undefined4 *)(param_2 + 0x3fa0) = *(undefined4 *)(this + 0x104);
  uVar5 = *(uint *)(this + 0x228);
  if (((uVar5 != 0xffffffff) &&
      (puVar16 = puVar16 + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar16 + 8) == uVar5 >> 0xc && (*(int *)(puVar16 + 4) != 0)))) {
    *(float *)(this + 0xc) =
         *(float *)(this + 0xc) + *(float *)(hack_elevator_z_offset._28_4_ + 0x2c);
  }
  (**(code **)(*(int *)param_2 + 0x1dc))(param_2,this + 4,this + 0x1c,this + 0x10);
  CBaseCombatCharacter::RemoveAllWeapons((CBaseCombatCharacter *)param_2);
  if (0 < *(int *)(this + 0x6c)) {
    iVar11 = 0;
    do {
      iVar10 = iVar11 * 4;
      iVar11 = iVar11 + 1;
      (**(code **)(*(int *)param_2 + 0x468))
                (param_2,*(undefined4 *)(*(int *)(this + 0x60) + iVar10));
    } while (iVar11 < *(int *)(this + 0x6c));
  }
  if (((*(int *)(this + 0x5c) != 0) &&
      ((**(code **)(*(int *)param_2 + 0x474))(param_2,*(int *)(this + 0x5c),0),
      this[0x49] != (SurvivorReplacement)0x0)) &&
     (cVar8 = (**(code **)(*(int *)param_2 + 0x778))(param_2), cVar8 == '\0')) {
    CBaseEntity::AddEffects(*(CBaseEntity **)(this + 0x5c),0x20);
  }
  iVar11 = 0;
  do {
    iVar10 = iVar11 + 1;
    CBaseCombatCharacter::SetAmmoCount
              ((CBaseCombatCharacter *)param_2,*(int *)(this + iVar11 * 4 + 0x74),iVar11);
    iVar11 = iVar10;
  } while (iVar10 != 0x20);
  SVar3 = this[0x108];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x2d94)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x2d94) = SVar3;
  }
  CHandle<CTerrorPlayer>::CHandle
            ((CHandle<CTerrorPlayer> *)local_30,*(CTerrorPlayer **)(this + 0x10c));
  if (((local_30[0] == 0xffffffff) ||
      (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
     || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
    iVar11 = 0;
  }
  else {
    iVar11 = *(int *)(puVar16 + 4);
  }
  uVar5 = *(uint *)(param_2 + 0x2e24);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(uint *)(param_2 + 0x2e24) = local_30[0];
  }
  iVar11 = *(int *)(this + 0x10c);
  if (iVar11 != 0) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    if (((local_30[0] == 0xffffffff) ||
        (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
      local_40 = (undefined *)0x0;
    }
    else {
      local_40 = *(undefined **)(puVar16 + 4);
    }
    uVar5 = *(uint *)(iVar11 + 0x2e28);
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      iVar10 = 0;
    }
    else {
      iVar10 = *(int *)(puVar16 + 4);
    }
    if (local_40 != (undefined *)iVar10) {
      if (*(char *)(iVar11 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
      }
      *(uint *)(iVar11 + 0x2e28) = local_30[0];
    }
  }
  *(undefined4 *)(param_2 + 0x2e38) = *(undefined4 *)(this + 0x110);
  *(undefined4 *)(param_2 + 0x2e3c) = *(undefined4 *)(this + 0x114);
  *(undefined4 *)(param_2 + 0x2e40) = *(undefined4 *)(this + 0x118);
  *(undefined4 *)(param_2 + 0x2e44) = *(undefined4 *)(this + 0x11c);
  *(undefined4 *)(param_2 + 0x2e48) = *(undefined4 *)(this + 0x120);
  *(undefined4 *)(param_2 + 0x2e4c) = *(undefined4 *)(this + 0x124);
  iVar11 = *(int *)(this + 0x128);
  if (iVar11 != *(int *)(param_2 + 0x2e54)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar10 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(int *)(param_2 + 0x2e54) = iVar11;
  }
  SVar3 = this[300];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x2e58)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x2e58) = SVar3;
  }
  *(undefined4 *)(param_2 + 0x39e8) = *(undefined4 *)(this + 0x130);
  *(undefined4 *)(param_2 + 0x39ec) = *(undefined4 *)(this + 0x134);
  *(SurvivorReplacement *)(param_2 + 0x39f0) = this[0x138];
  SVar3 = this[0x139];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x39f1)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x39f1) = SVar3;
  }
  SVar3 = this[0x13a];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x39f2)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x39f2) = SVar3;
  }
  *(undefined4 *)(param_2 + 0x39f8) = *(undefined4 *)(this + 0x140);
  (*(code *)**(undefined4 **)(param_2 + 0x39f4))(param_2 + 0x39f4);
  fVar21 = *(float *)(this + 0x144);
  if (((fVar21 != *(float *)(param_2 + 0x39fc)) ||
      (*(float *)(this + 0x148) != *(float *)(param_2 + 0x3a00))) ||
     (*(float *)(this + 0x14c) != *(float *)(param_2 + 0x3a04))) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
        fVar21 = *(float *)(this + 0x144);
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      fVar21 = *(float *)(this + 0x144);
    }
    *(float *)(param_2 + 0x39fc) = fVar21;
    *(undefined4 *)(param_2 + 0x3a00) = *(undefined4 *)(this + 0x148);
    *(undefined4 *)(param_2 + 0x3a04) = *(undefined4 *)(this + 0x14c);
  }
  fVar21 = *(float *)(this + 0x150);
  if (((fVar21 != *(float *)(param_2 + 0x3a08)) ||
      (*(float *)(this + 0x154) != *(float *)(param_2 + 0x3a0c))) ||
     (*(float *)(this + 0x158) != *(float *)(param_2 + 0x3a10))) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
        fVar21 = *(float *)(this + 0x150);
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      fVar21 = *(float *)(this + 0x150);
    }
    *(float *)(param_2 + 0x3a08) = fVar21;
    *(undefined4 *)(param_2 + 0x3a0c) = *(undefined4 *)(this + 0x154);
    *(undefined4 *)(param_2 + 0x3a10) = *(undefined4 *)(this + 0x158);
  }
  fVar21 = *(float *)(this + 0x15c);
  if (((fVar21 != *(float *)(param_2 + 0x3a14)) ||
      (*(float *)(this + 0x160) != *(float *)(param_2 + 0x3a18))) ||
     (*(float *)(this + 0x164) != *(float *)(param_2 + 0x3a1c))) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
        fVar21 = *(float *)(this + 0x15c);
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      fVar21 = *(float *)(this + 0x15c);
    }
    *(float *)(param_2 + 0x3a14) = fVar21;
    *(undefined4 *)(param_2 + 0x3a18) = *(undefined4 *)(this + 0x160);
    *(undefined4 *)(param_2 + 0x3a1c) = *(undefined4 *)(this + 0x164);
  }
  fVar21 = *(float *)(this + 0x168);
  if (((fVar21 != *(float *)(param_2 + 0x3a20)) ||
      (*(float *)(this + 0x16c) != *(float *)(param_2 + 0x3a24))) ||
     (*(float *)(this + 0x170) != *(float *)(param_2 + 0x3a28))) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
        fVar21 = *(float *)(this + 0x168);
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      fVar21 = *(float *)(this + 0x168);
    }
    *(float *)(param_2 + 0x3a20) = fVar21;
    *(undefined4 *)(param_2 + 0x3a24) = *(undefined4 *)(this + 0x16c);
    *(undefined4 *)(param_2 + 0x3a28) = *(undefined4 *)(this + 0x170);
  }
  *(SurvivorReplacement *)(param_2 + 0x3a2c) = this[0x174];
  *(undefined4 *)(param_2 + 0x3a30) = *(undefined4 *)(this + 0x178);
  *(undefined4 *)(param_2 + 0x3a34) = *(undefined4 *)(this + 0x17c);
  *(undefined4 *)(param_2 + 0x3a38) = *(undefined4 *)(this + 0x180);
  *(undefined4 *)(param_2 + 0x3a3c) = *(undefined4 *)(this + 0x184);
  *(undefined4 *)(param_2 + 0x3a40) = *(undefined4 *)(this + 0x188);
  *(undefined4 *)(param_2 + 0x3a44) = *(undefined4 *)(this + 0x18c);
  *(undefined4 *)(param_2 + 0x3a48) = *(undefined4 *)(this + 400);
  *(undefined4 *)(param_2 + 0x3a4c) = *(undefined4 *)(this + 0x194);
  *(undefined4 *)(param_2 + 0x3a50) = *(undefined4 *)(this + 0x198);
  *(undefined4 *)(param_2 + 0x3a54) = *(undefined4 *)(this + 0x19c);
  *(undefined4 *)(param_2 + 0x3a58) = *(undefined4 *)(this + 0x1a0);
  *(undefined4 *)(param_2 + 0x3a5c) = *(undefined4 *)(this + 0x1a4);
  *(undefined4 *)(param_2 + 0x3a60) = *(undefined4 *)(this + 0x1a8);
  *(undefined4 *)(param_2 + 0x3260) = *(undefined4 *)(this + 0x1b4);
  *(undefined4 *)(param_2 + 0x325c) = *(undefined4 *)(this + 0x1b0);
  (*(code *)**(undefined4 **)(param_2 + 0x3258))(param_2 + 0x3258);
  *(SurvivorReplacement *)(param_2 + 0x3268) = this[0x1b8];
  *(SurvivorReplacement *)(param_2 + 0x3269) = this[0x1b9];
  *(SurvivorReplacement *)(param_2 + 0x326a) = this[0x1ba];
  fVar21 = *(float *)(this + 0x1bc);
  if (fVar21 != *(float *)(param_2 + 0x3f18)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(float *)(param_2 + 0x3f18) = fVar21;
  }
  CHandle<CTerrorPlayer>::CHandle
            ((CHandle<CTerrorPlayer> *)local_30,*(CTerrorPlayer **)(this + 0x1c0));
  if (((local_30[0] == 0xffffffff) ||
      (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
     || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
    iVar11 = 0;
  }
  else {
    iVar11 = *(int *)(puVar16 + 4);
  }
  uVar5 = *(uint *)(param_2 + 0x3e68);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(uint *)(param_2 + 0x3e68) = local_30[0];
  }
  iVar11 = *(int *)(this + 0x1c0);
  if (iVar11 != 0) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    if (((local_30[0] == 0xffffffff) ||
        (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
      local_40 = (undefined *)0x0;
    }
    else {
      local_40 = *(undefined **)(puVar16 + 4);
    }
    uVar5 = *(uint *)(iVar11 + 0x3e64);
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      iVar10 = 0;
    }
    else {
      iVar10 = *(int *)(puVar16 + 4);
    }
    if (local_40 != (undefined *)iVar10) {
      if (*(char *)(iVar11 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
      }
      *(uint *)(iVar11 + 0x3e64) = local_30[0];
    }
    (**(code **)(**(int **)(param_2 + 0x2910) + 4))(*(int **)(param_2 + 0x2910),0x56,0);
    (**(code **)(**(int **)(this + 0x1c0) + 0x7fc))(*(int **)(this + 0x1c0),0x52,0);
  }
  *(undefined4 *)(param_2 + 0x3ea0) = *(undefined4 *)(this + 0x1c8);
  CHandle<CTerrorPlayer>::CHandle
            ((CHandle<CTerrorPlayer> *)local_30,*(CTerrorPlayer **)(this + 0x1cc));
  if (((local_30[0] == 0xffffffff) ||
      (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
     || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
    iVar11 = 0;
  }
  else {
    iVar11 = *(int *)(puVar16 + 4);
  }
  uVar5 = *(uint *)(param_2 + 0x3e48);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(uint *)(param_2 + 0x3e48) = local_30[0];
  }
  local_40 = *(undefined **)(this + 0x1cc);
  if (local_40 == (undefined *)0x0) goto LAB_009ed0f6;
  uVar5 = *(uint *)((int)local_40 + 0x3e4c);
  puVar16 = g_pEntityList;
  if (((uVar5 != 0xffffffff) &&
      (puVar18 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar18 + 8) == uVar5 >> 0xc && (*(int *)(puVar18 + 4) != 0)))) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    puVar16 = g_pEntityList;
    if (((local_30[0] == 0xffffffff) ||
        (puVar18 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar18 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar18 + 8) != local_30[0] >> 0xc)) {
      local_44 = 0;
    }
    else {
      local_44 = *(int *)(puVar18 + 4);
    }
    uVar5 = *(uint *)((int)local_40 + 0x3e4c);
    if (((uVar5 == 0xffffffff) ||
        (puVar18 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar18 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar18 + 8) != uVar5 >> 0xc)) {
      if (local_44 != 0) goto LAB_009ee31a;
    }
    else if (local_44 != *(int *)(puVar18 + 4)) {
LAB_009ee31a:
      if (*(char *)((int)local_40 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)((int)local_40 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar11 + 2) = 0;
          puVar16 = g_pEntityList;
        }
      }
      else {
        *(byte *)((int)local_40 + 0x70) = *(byte *)((int)local_40 + 0x70) | 1;
      }
      *(uint *)((int)local_40 + 0x3e4c) = local_30[0];
    }
    local_40 = *(undefined **)(this + 0x1cc);
  }
  uVar5 = *(uint *)((int)local_40 + 0x3e44);
  if (((uVar5 != 0xffffffff) &&
      (puVar16 = puVar16 + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar16 + 8) == uVar5 >> 0xc && (*(int *)(puVar16 + 4) != 0)))) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    if (((local_30[0] == 0xffffffff) ||
        (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
      iVar11 = 0;
    }
    else {
      iVar11 = *(int *)(puVar16 + 4);
    }
    uVar5 = *(uint *)((int)local_40 + 0x3e44);
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      if (iVar11 != 0) goto LAB_009ee247;
    }
    else if (iVar11 != *(int *)(puVar16 + 4)) {
LAB_009ee247:
      if (*(char *)((int)local_40 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)((int)local_40 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar11 + 2) = 0;
        }
      }
      else {
        *(byte *)((int)local_40 + 0x70) = *(byte *)((int)local_40 + 0x70) | 1;
      }
      *(uint *)((int)local_40 + 0x3e44) = local_30[0];
    }
    local_40 = *(undefined **)(this + 0x1cc);
  }
  (**(code **)(*(int *)param_2 + 0x98))(param_2,local_40,0xffffffff);
  (**(code **)(**(int **)(this + 0x1cc) + 0x7fc))(*(int **)(this + 0x1cc),0x4a,0);
  (**(code **)(*(int *)param_2 + 0x7fc))(param_2,0x4e,0);
LAB_009ed0f6:
  CHandle<CTerrorPlayer>::CHandle
            ((CHandle<CTerrorPlayer> *)local_30,*(CTerrorPlayer **)(this + 0x1d4));
  if (((local_30[0] == 0xffffffff) ||
      (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
     || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
    iVar11 = 0;
  }
  else {
    iVar11 = *(int *)(puVar16 + 4);
  }
  uVar5 = *(uint *)(param_2 + 0x2a4c);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(uint *)(param_2 + 0x2a4c) = local_30[0];
  }
  iVar11 = *(int *)(this + 0x1d4);
  if (iVar11 != 0) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    if (((local_30[0] == 0xffffffff) ||
        (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
      local_40 = (undefined *)0x0;
    }
    else {
      local_40 = *(undefined **)(puVar16 + 4);
    }
    uVar5 = *(uint *)(iVar11 + 0x2a48);
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      iVar10 = 0;
    }
    else {
      iVar10 = *(int *)(puVar16 + 4);
    }
    if (local_40 != (undefined *)iVar10) {
      if (*(char *)(iVar11 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
      }
      *(uint *)(iVar11 + 0x2a48) = local_30[0];
    }
    *(undefined4 *)(*(int *)(this + 0x1d4) + 0x3f00) = 0x3e4ccccd;
    iVar11 = *(int *)(this + 0x1d4);
    lVar20 = (longdouble)CountdownTimer::Now();
    if ((float)lVar20 + 0.2 != *(float *)(iVar11 + 0x3efc)) {
      (**(code **)(*(int *)(iVar11 + 0x3ef4) + 4))(iVar11 + 0x3ef4,iVar11 + 0x3efc);
      *(float *)(iVar11 + 0x3efc) = (float)lVar20 + 0.2;
    }
    if (*(float *)(iVar11 + 0x3ef8) != 0.2) {
      (**(code **)(*(int *)(iVar11 + 0x3ef4) + 4))(iVar11 + 0x3ef4,iVar11 + 0x3ef8);
      *(undefined4 *)(iVar11 + 0x3ef8) = 0x3e4ccccd;
    }
    (**(code **)(*(int *)param_2 + 0x7fc))(param_2,0x4f,0);
  }
  piVar6 = *(int **)(this + 0x1d0);
  if (piVar6 == (int *)0x0) {
    *(undefined4 *)(param_2 + 0x3e54) = 0xffffffff;
  }
  else {
    puVar12 = (undefined4 *)(**(code **)(*piVar6 + 0xc))(piVar6);
    *(undefined4 *)(param_2 + 0x3e54) = *puVar12;
  }
  if (*(CTerrorPlayer **)(this + 0x1d0) != (CTerrorPlayer *)0x0) {
    CTerrorPlayer::QueuePummelVictim(*(CTerrorPlayer **)(this + 0x1d0),param_2,-1.0);
  }
  piVar6 = *(int **)(this + 0x204);
  if (piVar6 == (int *)0x0) {
    local_40 = (undefined *)0xffffffff;
    iVar11 = 0;
  }
  else {
    puVar13 = (uint *)(**(code **)(*piVar6 + 0xc))(piVar6);
    local_40 = (undefined *)*puVar13;
    if (((local_40 == (undefined *)0xffffffff) ||
        (puVar16 = g_pEntityList + ((uint)local_40 & 0xfff) * 0x10,
        puVar16 == (undefined *)0xfffffffc)) || (*(uint *)(puVar16 + 8) != (uint)local_40 >> 0xc)) {
      iVar11 = 0;
    }
    else {
      iVar11 = *(int *)(puVar16 + 4);
    }
  }
  uVar5 = *(uint *)(param_2 + 0x3ee0);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
      *(undefined **)(param_2 + 0x3ee0) = local_40;
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
      *(undefined **)(param_2 + 0x3ee0) = local_40;
    }
  }
  iVar11 = *(int *)(this + 0x204);
  if (iVar11 != 0) {
    puVar13 = (uint *)(**(code **)(*(int *)param_2 + 0xc))(param_2);
    uVar5 = *puVar13;
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      local_44 = 0;
    }
    else {
      local_44 = *(int *)(puVar16 + 4);
    }
    uVar7 = *(uint *)(iVar11 + 0x3edc);
    if (((uVar7 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar7 >> 0xc)) {
      iVar10 = 0;
    }
    else {
      iVar10 = *(int *)(puVar16 + 4);
    }
    if (local_44 == iVar10) {
      CVar9 = param_2[0x14d];
    }
    else {
      if (*(char *)(iVar11 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
      }
      *(uint *)(iVar11 + 0x3edc) = uVar5;
      CVar9 = param_2[0x14d];
    }
    if (((byte)CVar9 & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
    }
    CBaseEntity::SetAbsOrigin(*(CBaseEntity **)(this + 0x204),(Vector *)(param_2 + 0x2e0));
    (**(code **)(**(int **)(this + 0x204) + 0x98))(*(int **)(this + 0x204),param_2,0xffffffff);
    CBaseEntity::SetMoveType(*(CBaseEntity **)(this + 0x204),0,0);
    (**(code **)(**(int **)(param_2 + 0x2910) + 4))(*(int **)(param_2 + 0x2910),0x55,0);
  }
  CHandle<CTerrorPlayer>::CHandle
            ((CHandle<CTerrorPlayer> *)local_30,*(CTerrorPlayer **)(this + 0x1d8));
  if (((local_30[0] == 0xffffffff) ||
      (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
     || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
    iVar11 = 0;
  }
  else {
    iVar11 = *(int *)(puVar16 + 4);
  }
  uVar5 = *(uint *)(param_2 + 0x33c4);
  if (((uVar5 == 0xffffffff) ||
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
    iVar10 = 0;
  }
  else {
    iVar10 = *(int *)(puVar16 + 4);
  }
  if (iVar11 != iVar10) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(uint *)(param_2 + 0x33c4) = local_30[0];
  }
  iVar11 = *(int *)(this + 0x1d8);
  if (iVar11 != 0) {
    CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
    local_40 = g_pEntityList;
    if (((local_30[0] == 0xffffffff) ||
        (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)
        ) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc)) {
      local_44 = 0;
    }
    else {
      local_44 = *(int *)(puVar16 + 4);
    }
    uVar5 = *(uint *)(iVar11 + 0x33c0);
    if (((uVar5 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
      iVar10 = 0;
    }
    else {
      iVar10 = *(int *)(puVar16 + 4);
    }
    if (local_44 != iVar10) {
      if (*(char *)(iVar11 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar10 + 2) = 0;
          local_40 = g_pEntityList;
        }
      }
      else {
        *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
      }
      *(uint *)(iVar11 + 0x33c0) = local_30[0];
    }
    uVar5 = *(uint *)(*(int *)(this + 0x1d8) + 0x30bc);
    if (((uVar5 != 0xffffffff) &&
        (puVar16 = local_40 + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
       ((*(uint *)(puVar16 + 8) == uVar5 >> 0xc &&
        ((*(int *)(puVar16 + 4) != 0 &&
         (iVar11 = __dynamic_cast(*(int *)(puVar16 + 4),&CBaseAbility::typeinfo,&CTongue::typeinfo,0
                                 ), iVar11 != 0)))))) {
      uVar5 = *(uint *)(iVar11 + 0x47c);
      pCVar17 = (CTerrorPlayer *)0x0;
      if ((uVar5 != 0xffffffff) &&
         ((puVar16 = local_40 + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc &&
          (*(uint *)(puVar16 + 8) == uVar5 >> 0xc)))) {
        pCVar17 = *(CTerrorPlayer **)(puVar16 + 4);
      }
      if (param_1 == pCVar17) {
        CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
        local_40 = g_pEntityList;
        if (((local_30[0] == 0xffffffff) ||
            (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10,
            puVar16 == (undefined *)0xfffffffc)) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc))
        {
          iVar10 = 0;
        }
        else {
          iVar10 = *(int *)(puVar16 + 4);
        }
        uVar5 = *(uint *)(iVar11 + 0x47c);
        if (((uVar5 == 0xffffffff) ||
            (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
          iVar15 = 0;
        }
        else {
          iVar15 = *(int *)(puVar16 + 4);
        }
        if (iVar10 != iVar15) {
          if (*(char *)(iVar11 + 0x6c) == '\0') {
            pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
            if (pCVar4 != (CBaseEdict *)0x0) {
              *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
              iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
              *(undefined2 *)(iVar10 + 2) = 0;
              local_40 = g_pEntityList;
            }
          }
          else {
            *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
          }
          *(uint *)(iVar11 + 0x47c) = local_30[0];
        }
      }
      pCVar17 = (CTerrorPlayer *)0x0;
      uVar5 = *(uint *)(iVar11 + 0x480);
      if (((uVar5 != 0xffffffff) &&
          (local_40 = local_40 + (uVar5 & 0xfff) * 0x10, local_40 != (undefined *)0xfffffffc)) &&
         (*(uint *)(local_40 + 8) == uVar5 >> 0xc)) {
        pCVar17 = *(CTerrorPlayer **)(local_40 + 4);
      }
      if (param_1 == pCVar17) {
        CHandle<CTerrorPlayer>::CHandle((CHandle<CTerrorPlayer> *)local_30,param_2);
        if (((local_30[0] == 0xffffffff) ||
            (puVar16 = g_pEntityList + (local_30[0] & 0xfff) * 0x10,
            puVar16 == (undefined *)0xfffffffc)) || (*(uint *)(puVar16 + 8) != local_30[0] >> 0xc))
        {
          iVar10 = 0;
        }
        else {
          iVar10 = *(int *)(puVar16 + 4);
        }
        uVar5 = *(uint *)(iVar11 + 0x480);
        if (((uVar5 == 0xffffffff) ||
            (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar16 + 8) != uVar5 >> 0xc)) {
          iVar15 = 0;
        }
        else {
          iVar15 = *(int *)(puVar16 + 4);
        }
        if (iVar10 != iVar15) {
          if (*(char *)(iVar11 + 0x6c) == '\0') {
            pCVar4 = *(CBaseEdict **)(iVar11 + 0x30);
            if (pCVar4 != (CBaseEdict *)0x0) {
              *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
              iVar10 = CBaseEdict::GetChangeAccessor(pCVar4);
              *(undefined2 *)(iVar10 + 2) = 0;
            }
          }
          else {
            *(byte *)(iVar11 + 0x70) = *(byte *)(iVar11 + 0x70) | 1;
          }
          *(uint *)(iVar11 + 0x480) = local_30[0];
        }
      }
    }
    (**(code **)(*(int *)param_2 + 0x7fc))(param_2,0x5c,0);
  }
  *(undefined4 *)(param_2 + 0x33cc) = *(undefined4 *)(this + 0x1e0);
  (*(code *)**(undefined4 **)(param_2 + 0x33c8))(param_2 + 0x33c8);
  SVar3 = this[0x1e4];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x33dc)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x33dc) = SVar3;
  }
  SVar3 = this[0x1e5];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x33dd)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x33dd) = SVar3;
  }
  SVar3 = this[0x1e6];
  if (SVar3 != *(SurvivorReplacement *)(param_2 + 0x33e4)) {
    if (param_2[0x6c] == (CTerrorPlayer)0x0) {
      pCVar4 = *(CBaseEdict **)(param_2 + 0x30);
      if (pCVar4 != (CBaseEdict *)0x0) {
        *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
        iVar11 = CBaseEdict::GetChangeAccessor(pCVar4);
        *(undefined2 *)(iVar11 + 2) = 0;
      }
    }
    else {
      param_2[0x70] = (CTerrorPlayer)((byte)param_2[0x70] | 1);
    }
    *(SurvivorReplacement *)(param_2 + 0x33e4) = SVar3;
  }
  *(undefined4 *)(param_2 + 0x33e0) = *(undefined4 *)(this + 0x1e8);
  *(undefined4 *)(param_2 + 0x33f0) = *(undefined4 *)(this + 500);
  *(undefined4 *)(param_2 + 0x33ec) = *(undefined4 *)(this + 0x1f0);
  *(undefined4 *)(param_2 + 0x33f8) = *(undefined4 *)(this + 0x1fc);
  if (*(int *)(param_2 + 0x3110) != 0) {
    *(SurvivorReplacement *)(*(int *)(param_2 + 0x3110) + 0x120) = this[0x200];
  }
  uVar5 = *(uint *)(this + 0x20c);
  pCVar19 = (CBaseEntity *)0x0;
  if (((uVar5 != 0xffffffff) &&
      (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar16 + 8) == uVar5 >> 0xc &&
      ((this_00 = *(CBaseEntity **)(puVar16 + 4), pCVar19 = this_00, this_00 != (CBaseEntity *)0x0
       && (pCVar19 = (CBaseEntity *)param_2, param_1 != (CTerrorPlayer *)this_00)))))) {
    if ((*(char **)(this_00 + 0x7c) == "point_deathfall_camera") ||
       ((((cVar8 = CBaseEntity::ClassMatchesComplex(this_00,"point_deathfall_camera"), cVar8 != '\0'
          || (*(char **)(this_00 + 0x7c) == "point_viewcontrol_survivor")) ||
         (cVar8 = CBaseEntity::ClassMatchesComplex(this_00,"point_viewcontrol_survivor"),
         cVar8 != '\0')) ||
        ((*(char **)(this_00 + 0x7c) == "point_viewcontrol" ||
         (cVar8 = CBaseEntity::ClassMatchesComplex(this_00,"point_viewcontrol"), cVar8 != '\0'))))))
    {
      local_30[0] = 0;
      local_24 = 0xffffffff;
      local_20 = 0;
      (**(code **)(*(int *)this_00 + 0xb4))(this_00,"Disable",param_1,0,local_30,0);
      local_30[0] = 0;
      local_24 = 0xffffffff;
      local_20 = 0;
      (**(code **)(*(int *)this_00 + 0xb4))(this_00,"Enable",param_2,0,local_30,0);
      pCVar19 = this_00;
    }
    else if ((*(char **)(this_00 + 0x7c) == "point_viewcontrol_multiplayer") ||
            (cVar8 = CBaseEntity::ClassMatchesComplex(this_00,"point_viewcontrol_multiplayer"),
            pCVar19 = this_00, cVar8 != '\0')) {
      local_30[0] = 0;
      local_24 = 0xffffffff;
      local_20 = 0;
      (**(code **)(*(int *)this_00 + 0xb4))(this_00,"RemovePlayer",param_1,0,local_30,0);
      local_30[0] = 0;
      local_24 = 0xffffffff;
      local_20 = 0;
      (**(code **)(*(int *)this_00 + 0xb4))(this_00,"AddPlayer",param_2,0,local_30,0);
      pCVar19 = this_00;
    }
  }
  CBasePlayer::SetViewEntity((CBasePlayer *)param_2,pCVar19);
  uVar5 = *(uint *)(this + 0x210);
  if ((((uVar5 != 0xffffffff) &&
       (puVar16 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar16 + 8) == uVar5 >> 0xc)) && (*(int *)(puVar16 + 4) != 0)) {
    pCVar14 = (CSurvivorPosition *)
              __dynamic_cast(*(int *)(puVar16 + 4),&CBaseEntity::typeinfo,
                             &CSurvivorPosition::typeinfo,0);
    CTerrorPlayer::SetPlayerPositionEntity(param_2,pCVar14);
  }
  if (0 < *(int *)(this + 0x220)) {
    iVar11 = 0;
    do {
      piVar6 = *(int **)(*(int *)(this + 0x214) + iVar11 * 4);
      iVar11 = iVar11 + 1;
      (**(code **)(*piVar6 + 0x64c))(piVar6,param_2);
    } while (iVar11 < *(int *)(this + 0x220));
  }
  (**(code **)(*(int *)param_2 + 0x538))(param_2);
  pCVar17 = param_2;
  (**(code **)(*(int *)param_2 + 0x5b8))();
  if (param_2[0x39f1] == (CTerrorPlayer)0x0) {
    CTerrorPlayer::WarpToValidPositionIfStuck(pCVar17);
  }
  if (this[0x34] != (SurvivorReplacement)0x0) {
    (**(code **)(*(int *)(param_2 + 0x3ab4) + 0x150))(param_2 + 0x3ab4,param_1);
  }
  if (*(int *)(this + 0x208) == 0) {
    CBasePlayer::UnlockPlayer((CBasePlayer *)param_2);
  }
  else {
    CBasePlayer::LockPlayerInPlace((CBasePlayer *)param_2);
  }
  if (*(float *)(this + 0x54) != -NAN) {
    CTerrorPlayerAnimState::SetCustomSequence(*(int *)(param_2 + 0x2910),*(float *)(this + 0x54));
  }
  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)