#pragma once

// Reconstructed C++ declarations from IDA Local Types and PDB/DIA metadata.
// Original PDB header: w:\tech5\tungsten\game\entities\gamechallenge.h
// Recovered logical types: 14
// Signatures retain Xbox 360 ABI evidence and may still require manual review.


// IDA Local Type ordinal 1915; PDB kind: enum.
enum __bitmask idGameChallenge::challengeFailed_t : __int32
{
  PLAYER_DISCONNECT = 0x1,
};

// IDA Local Type ordinal 15541; PDB kind: class.
class idGameChallenge : public idEntity
{
public:
  // Recovered virtual interface; IDA vtable ordinal 15592.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();

  bool startActive;
  int timeLimit;
  int scoreLimit;
  int numLives;
  bool countupTime;
  bool takeDamage;
  float respawnDelay;
  int baseTime;
  idList<idGameChallenge::spawnPoint_t,5> spawnPoints;
  int minimumPlayers;
  int leaderBoard;
  bool useSpectatorCamera;
  bool requireLoadoutSelection;
  idEntityPtr<idEntity> initialSpectatorCamPos;
  idEntityPtr<idEntity> initialSpectatorCamLookAt;
  const idSoundShader *gameMusic;
  const idSoundShader *gameOverSound;
  const idSoundShader *failedGameOverSound;
  const idDeclFX *fxDecl;
  const idDeclOnlineVOCallout *voCallout;
  int killScore;
  int suicideScore;
  int suicideSpawnDelay;
  int spawnTimer;
  idList<teamInfo_t,5> teamInfo;
  botGameManagerType_t botGameManagerType;
  idStaticList<idGameChallenge::playerData_t,6> players;
  int startTime;
  int endTime;
  int originalEndTime;
  int endTimeoutDuration;
  int preGameTime;
  int roundEndTime;
  challengeGameMode_t gameMode;
  bool bGameFailed;
  idStrId gameFailedText;
  idGameChallenge::challengeFailed_t failedReason;
  bool bFinishGameExit;
  bool incapacitated;
  int lastReviveThresholdTick;
  bool mapLoadFinished;
  int forceQuitGameTime;
  idStaticList<idGameChallenge::teamData_t,5> teams;
  bool gcInitialized;
  bool checkWorldCollisionOnSpawn;
  idDoomSpawnManager *spawnManager;
  idSpawnNodeGroup spawnNodeGroup;
  bool wasMigratedGame;
  int migratedTime;
  idStaticList<int,6> eventConnectList;
  idStaticList<int,6> eventDisconnectList;
  int fadeInFinishTime;
  float reviveThreshold;
};

// IDA Local Type ordinal 15546; PDB kind: struct.
struct idGameChallenge::playerData_t
{
  idEntityPtr<idPlayer> player;
  int respawnDelay;
  unsigned int spawnHandle;
  int lastScore;
  int score;
  int lives;
  gameTeam_t team;
  bool spectator;
  int lastKiller;
  challengePlayerState_t state;
  int stateTime;
  int startTime;
  bool needToSendFullSnap;
  int timeTillNewPlayerCanTake;
  const idDeclVehicleUnlock *loadoutSlot[6];
};

// IDA Local Type ordinal 15549; PDB kind: class.
class idTrigger_GameChallenge : public idTrigger
{
public:
  // Recovered virtual interface; IDA vtable ordinal 15550.
  virtual idTypeInfo *GetType();
  virtual ~idTrigger_GameChallenge();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual bool CanActivate(idEntity *);

};

// IDA Local Type ordinal 15551; PDB kind: struct.
struct idGameChallenge::spawnPoint_t
{
  idEntityPtr<idEntity> entity;
  int teamNumber;
};

// IDA Local Type ordinal 15560; PDB kind: struct.
struct idGameChallenge::teamData_t
{
  idStaticList<int,4> playerIndexList;
  int teamScore;
};

// IDA Local Type ordinal 19886; PDB kind: class.
class __declspec(align(8)) idGameChallenge_Coop : public idGameChallenge
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19892.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge_Coop();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();
  virtual int GetTeamScore_2(int);

  idList<idGameChallenge_Coop::collectibleData_t,5> collectibleList;
  int numCollectiblesToComplete;
  idStrId collectibleStatusMessage;
  idGameChallenge_Coop::collectibleData_t specialCollectible;
  bool useUniqueSpawnpoints;
  bool bObjectiveActive;
  int objectiveStartTimeMS;
  int totalTime;
  int objectiveScore;
  int objectiveParScore;
  int objectiveParTimeMS;
  idStrId objectiveText;
  idList<idGameChallenge_Coop::ratingTitle_t,5> scoreRating;
  const idDeclMD6 *coopModelDefPlayer1;
  const idDeclMD6 *coopModelDefPlayer2;
};

// IDA Local Type ordinal 19888; PDB kind: struct.
struct idGameChallenge_Coop::collectibleData_t
{
  bool found;
  idEntityPtr<idProp_OnlineCollectible> collectible;
};

// IDA Local Type ordinal 19890; PDB kind: struct.
struct idGameChallenge_Coop::ratingTitle_t
{
  int points;
  idStrId rating;
};

// IDA Local Type ordinal 19895; PDB kind: class.
class idGameChallenge_PVP : public idGameChallenge
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19896.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge_PVP();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();
  virtual void ScorePlayerKill(int, int);
  virtual void ScoreTeamKill(int, int);

  bool isTeamGame;
  const idDeclMD6 *teamNoneModelDef;
  const idDeclMD6 *teamRedModelDef;
  const idDeclMD6 *teamBlueModelDef;
  const idDeclMD6 *teamGreenModelDef;
  const idDeclMD6 *teamYellowModelDef;
};

// IDA Local Type ordinal 19897; PDB kind: class.
class idGameChallenge::SyncPlayersWithLobbyUsers::__l2::idSWFScriptFunction_LeaveGame : public idSWFScriptFunction_RefCounted
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19898.
  virtual ~idSWFScriptFunction_LeaveGame();
  virtual idSWFScriptVar *Call(idSWFScriptVar *result, idSWFScriptObject *, const idSWFParmList *);
  virtual void AddRef();
  virtual void Release();
  virtual idSWFScriptObject *GetPrototype();
  virtual void SetPrototype(idSWFScriptObject *);

  idEntityPtr<idGameChallenge_Coop> gc;
  gameDialogMessages_t msg;
};

// IDA Local Type ordinal 19899; PDB kind: class.
class idGameChallenge_DM : public idGameChallenge_PVP
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19900.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge_DM();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();
  virtual void ScorePlayerKill(int, int);
  virtual void ScoreTeamKill(int, int);

};

// IDA Local Type ordinal 19901; PDB kind: class.
class idGameChallenge_DM_FFA : public idGameChallenge_DM
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19902.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge_DM_FFA();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();
  virtual void ScorePlayerKill(int, int);
  virtual void ScoreTeamKill(int, int);

};

// IDA Local Type ordinal 19903; PDB kind: class.
class idGameChallenge_DM_TDM : public idGameChallenge_DM
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19904.
  virtual idTypeInfo *GetType();
  virtual ~idGameChallenge_DM_TDM();
  virtual idEventArg *CallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool RespondsTo(const idEventDef *);
  virtual idEventArg *InternalCallEvent(idEventArg *result, const idEventDef *, const idEventArg *);
  virtual bool InternalRespondsTo(const idEventDef *);
  virtual void PostSpawn();
  virtual void Remove();
  virtual void DeleteSubEntities();
  virtual bool Draw(idPlayer *);
  virtual void JobSync();
  virtual void Think();
  virtual void PauseThink();
  virtual bool ShouldEnterDormancy();
  virtual bool ShouldLeaveDormancy();
  virtual void DormantBegin();
  virtual void DormantEnd(const int);
  virtual idRenderModelInfo *GetRenderModelInfo();
  virtual const idRenderModelInfo *GetRenderModelInfo_2();
  virtual void GetScale(idVec3 *);
  virtual void SetScale(const idVec3 *);
  virtual void SetModelByName(const char *);
  virtual void SetModel(idRenderModel *);
  virtual const idMaterial *GetCustomMaterial();
  virtual void SetColor(const idVec4 *);
  virtual void SetColor_2(const idColor *);
  virtual void SetColor_3(const idVec3 *);
  virtual void SetColor_4(float, float, float);
  virtual void SetColor_5(float, float, float, float);
  virtual void GetColor(idVec4 *);
  virtual void GetColor_2(idColor *);
  virtual void GetColor_3(idVec3 *);
  virtual void Hide(bool);
  virtual void Hide_2();
  virtual void Show();
  virtual void GetModelTransform(idVec3 *, idMat3 *);
  virtual void GetSoundTransform(idVec3 *, idMat3 *);
  virtual void UpdateModelTransform();
  virtual void UpdateFX();
  virtual void ProjectOverlay(const idVec3 *, const idVec3 *, float, const char *);
  virtual idPresentable *AllocPresentable(idRenderModel *);
  virtual const idComponentTimeLine *GetComponentTimeLine();
  virtual idComponentTimeLine *GetComponentTimeLine_2();
  virtual bool UpdateAnimationControllers();
  virtual void UpdateAttachments();
  virtual const idAnimStack *GetAnimStack();
  virtual idAnimStack *GetAnimStack_2();
  virtual idIndex<short,enum invalidJointIndex_t> *GetJointIndexFromTrace(idIndex<short,enum invalidJointIndex_t> *result, trace_t);
  virtual awPathResult_t ChangeAnimWebState(const char *, const char *);
  virtual awPathResult_t ChangeAnimWebState_2(const char *);
  virtual awPathResult_t ForceAnimWebState(const char *);
  virtual awPathResult_t ChangeAnimWebStateVia(const char *, const char *, const char *, const char *);
  virtual awPathResult_t ChangeAnimWebStateVia_2(const char *, const char *);
  virtual idAnimWebCmdCtx *GetAnimWebCmdCtx();
  virtual const idAnimWebCmdCtx *GetAnimWebCmdCtx_2();
  virtual const idAnimator_AF *GetAF();
  virtual idAnimator_AF *GetAF_2();
  virtual void PreBind();
  virtual void PostBind();
  virtual void PreUnbind();
  virtual void PostUnbind();
  virtual const splineLocation_t *GetSplineLocation();
  virtual void SetAxis(const idMat3 *);
  virtual bool CanDisablePhysics(const idEntity *);
  virtual collide_t Collide(const int, trace_t *, const idVec3 *);
  virtual collide_t Contact(const int, contactInfo_t *);
  virtual void ApplyImpulse(const int, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyImpulseFromEntity(const idEntity *, const int, const idVec3 *, const idVec3 *);
  virtual void ApplyForce(const int, const int, const idVec3 *, const idVec3 *);
  virtual bool Crush(const int);
  virtual void ApplyDamage(const int, const int, const idDeclDamage *);
  virtual void ActivatePhysics(const int);
  virtual void DeactivatePhysics(const int);
  virtual void ApplyWaterEffects(const int, const int);
  virtual void ApplyWaterSplashEffects(const int, const int, surfTypes_t, idPhysicsCallbacks::splashState_t);
  virtual bool TakesDamage();
  virtual void DamageFeedback(idEntity *, idEntity *, const idDeclDamage *, float *);
  virtual void KilledNotification(const idEntity *, const idEntity *, const idDeclDamage *, const float);
  virtual float Damage(idEntity *, idEntity *, const idDeclDamage *, const float, const idVec3 *, trace_t *);
  virtual bool CalcDamageImpulse(const idEntity *, const idEntity *, const idDeclDamage *, const float, const idVec3 *, const trace_t *, idVec3 *, idVec3 *);
  virtual bool IsTargetLockable(const idDeclAmmo *);
  virtual void AddProjectileLock();
  virtual void RemoveProjectileLock();
  virtual const idScriptObject *GetScriptObject();
  virtual idScriptObject *GetScriptObject_2();
  virtual bool ShouldConstructScriptObjectAtSpawn();
  virtual idThread *GetStateThread();
  virtual int AddThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual void RemoveThread(const idHandle<int,enum invalidThreadHandle_t,0>);
  virtual idHandle<int,enum invalidThreadHandle_t,0> *GetThread(idHandle<int,enum invalidThreadHandle_t,0> *result, const int);
  virtual int NumThreads();
  virtual int MaxThreads();
  virtual void ExecuteThread(idThread *);
  virtual void ResetFSMWaitThreadIfPossible(idThread *);
  virtual bool HandleGuiEvent(const sysEvent_t *);
  virtual void ActivateTargets(idEntity *);
  virtual bool GetRcCarCanTarget();
  virtual const idBaseHealth *GetHealthComponent();
  virtual idBaseHealth *GetHealthComponent_2();
  virtual const idSmartLootComponent *GetSmartLootComponent();
  virtual idSmartLootComponent *GetSmartLootComponent_2();
  virtual void Teleport(const idVec3 *, const idAngles *);
  virtual bool IsPusher();
  virtual const idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList();
  virtual idList<idEntityPtr<idEntity>,5> *GetTriggerTouchList_2();
  virtual void TestFunctionality();
  virtual float GetUsableDistance();
  virtual float GetCrosshairIconDistance();
  virtual usableState_t GetUsableState(const idEntity *, const idFocusTrace *);
  virtual bool ModifyCrosshairInfo(const idEntity *, const idFocusTrace *, const usableState_t, idCrosshairInfo *);
  virtual bool IsCrosshairDisabled(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsCrosshairSubdued(const idEntity *, const idFocusTrace *, const usableState_t);
  virtual bool IsEverUsable(const idEntity *);
  virtual bool IsCurrentlyUsable(const idEntity *);
  virtual bool Use(idEntity *, const usableState_t);
  virtual void Dropped(idEntity *, const idDeclInventory *);
  virtual const idInventoryCollection *GetInventory();
  virtual idInventoryCollection *GetInventory_2();
  virtual void InventoryAdded(idInventoryItem *, int);
  virtual void InventoryRemoved(idInventoryItem *);
  virtual const idAttachmentCollection *GetAttachments();
  virtual idAttachmentCollection *GetAttachments_2();
  virtual void EnableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual void DisableAIEventResponse(const idAIEvent::aiEventClass_t);
  virtual bool CanReceiveAIEvents(const int);
  virtual bool RespondsToAIEvent(const idAIEvent *);
  virtual void OnAIEvent(const idAIEvent *);
  virtual bool IsDead();
  virtual bool IsDying();
  virtual idFaction *GetFaction();
  virtual const idFaction *GetFaction_2();
  virtual idEntityAuditor *GetAuditor();
  virtual void GetVisibilityPoint(const visPoint_t, idVec3 *);
  virtual void GetAimPoint(const aimPoint_t, idVec3 *);
  virtual void GetEyePos(idVec3 *);
  virtual bool IsVisible();
  virtual idDynamicCoverMgr *GetDynamicCoverMgr();
  virtual const idDynamicCoverMgr *GetDynamicCoverMgr_2();
  virtual const idAAS2 *GetAAS();
  virtual void GetViewStateFOV(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual void GetViewStateFOV_2(idVec3 *, unsigned __int8 *, unsigned __int8 *);
  virtual int GetNumRepairBotTetherPoints();
  virtual bool GetRepairBotTetherPoint(const int, const int, idVec3 *);
  virtual idEntityInterface *CreateEntityInterface(idGame *);
  virtual void ShowEditingDialog();
  virtual void UpdateEditingDialog();
  virtual void UpdateModifiedProperties();
  virtual inputSettings_t *GetInputSettings(inputSettings_t *result, idPlayer *);
  virtual bool EvaluateControls(usercmd_t *, usercmd_t *);
  virtual void CheckForErrors(idList<idStr,5> *);
  virtual void DebugDrawEntity(const idColor *, int);
  virtual void ClientThink();
  virtual void Serialize(idSerializer *);
  virtual void PostSerializeRead(bool);
  virtual void OnActivate(idEntity *);
  virtual void OnMakeActivatable(const bool);
  virtual void OnNotifyProgressionOwner();
  virtual void StartPreGame();
  virtual void BeginGame();
  virtual void EndGame();
  virtual void GameOver();
  virtual void StartRound();
  virtual void EndRound();
  virtual void FinishGame();
  virtual void SetPlayerState(idGameChallenge::playerData_t *, challengePlayerState_t, int);
  virtual void ProcessPlayerStates();
  virtual bool Restart();
  virtual void RestartPlayer(idPlayer *);
  virtual void SetSpectator(idGameChallenge::playerData_t *, bool);
  virtual bool RegisterNewPlayer(idGameChallenge::playerData_t *, idPlayer *, bool);
  virtual bool IsTeamGame();
  virtual bool AllowSpectators();
  virtual bool CanScore();
  virtual void ForceScoreboardAll(bool);
  virtual bool HasPreGame();
  virtual int GetPreGameDuration();
  virtual void GameLoadingFinished(int);
  virtual void SyncMigrationGameDataWithSession(bool);
  virtual void SerializeMigrationGameData(idSerializer *);
  virtual void SerializeMigrationUserData(idSerializer *, idGameChallenge::playerData_t *);
  virtual gameTeam_t GetTeamNumber(const idGameChallenge::playerData_t *);
  virtual void SetTeamRenderModel(idGameChallenge::playerData_t *);
  virtual bool PlayerStateExpired(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void EnterState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_GAME_MODE_INFO(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void StateExpired_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_NONE(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_VDM_FORCE_SELECT_LOADOUT(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_WAITING_TO_RESPAWN_FROM_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_SPECTATE_AFTER_DEATH(idGameChallenge::playerData_t *);
  virtual void HandleState_PLAYER_STATE_RESPAWNING(idGameChallenge::playerData_t *);
  virtual void RespawnPlayer(idGameChallenge::playerData_t *, idDoomSpawnManager::commandType_t);
  virtual void FinalizeRespawnPlayer(idGameChallenge::playerData_t *, const idVec3 *, const idAngles *);
  virtual void DebugAllSpawnPoints();
  virtual const idDeclMD6 *GetPlayerModelMD6(const idPlayer *);
  virtual bool IsLeaderTied();
  virtual int GetLeaderPlayerIndex();
  virtual int GetLeaderEntityNumber();
  virtual int GetRunnerUpScore();
  virtual int GetHighScore();
  virtual bool ScoreLimitReached();
  virtual int GetPlayerScore(const idGameChallenge::playerData_t *);
  virtual void GetScoringData(const idGameChallenge::playerData_t *, int *, int *, int *, int *);
  virtual int GetTeamScore(gameTeam_t);
  virtual int GetScoreLimit();
  virtual bool DidPlayerWin(int);
  virtual void BroadcastKillMessage(int, int, const idDeclDamage *, bool, int, int);
  virtual bool FriendlyFireEnabled();
  virtual bool PlayerReviveEnabled();
  virtual void OnTriggerTouched(idTrigger_GameChallenge *, idEntity *, int);
  virtual int GetPrimaryScoreboardStat(int);
  virtual int GetSecondaryScoreboardStat(int);
  virtual void Notify_FlagCaptured(struct idProp_CTF_Flag *, idEntity *);
  virtual void PostStatsToLeaderboard();
  virtual const leaderboardDefinition_t *GetLeaderboard();
  virtual int GetSecondaryLeaderboardStat(int);
  virtual void LoadMultiplayerDecls();
  virtual void ScorePlayerKill(int, int);
  virtual void ScoreTeamKill(int, int);

};
