Server: add reverse engineered BaseNPC (AI) classes

Will be used for debug code and proper navmesh hotswaps.
This commit is contained in:
Kawe Mazidjatari 2024-07-28 16:42:04 +02:00
parent 628a4471ea
commit 47aee3125d
43 changed files with 3560 additions and 915 deletions

View File

@ -18,8 +18,10 @@ add_sources( SOURCE_GROUP "Entity"
"shared/entitylist_base.h" "shared/entitylist_base.h"
) )
add_sources( SOURCE_GROUP "Prediction" add_sources( SOURCE_GROUP "Simulation"
"shared/predictioncopy.h" "shared/predictioncopy.h"
"shared/simtimer.cpp"
"shared/simtimer.h"
) )
add_sources( SOURCE_GROUP "Animation" add_sources( SOURCE_GROUP "Animation"
@ -27,6 +29,10 @@ add_sources( SOURCE_GROUP "Animation"
"shared/animation.h" "shared/animation.h"
) )
add_sources( SOURCE_GROUP "Effects"
"shared/status_effect.h"
)
add_sources( SOURCE_GROUP "Collision" add_sources( SOURCE_GROUP "Collision"
"shared/collisionproperty.cpp" "shared/collisionproperty.cpp"
"shared/collisionproperty.h" "shared/collisionproperty.h"
@ -49,6 +55,7 @@ add_sources( SOURCE_GROUP "Shared"
"shared/shared_classnames.h" "shared/shared_classnames.h"
"shared/shareddefs.h" "shared/shareddefs.h"
"shared/takedamageinfo.h" "shared/takedamageinfo.h"
"shared/shared_activity.h"
) )
add_sources( SOURCE_GROUP "Script" add_sources( SOURCE_GROUP "Script"
@ -66,6 +73,8 @@ endif()
if( ${PROJECT_NAME} STREQUAL "server_static" ) if( ${PROJECT_NAME} STREQUAL "server_static" )
add_sources( SOURCE_GROUP "AI" add_sources( SOURCE_GROUP "AI"
"server/ai_basenpc.cpp"
"server/ai_basenpc.h"
"server/ai_network.cpp" "server/ai_network.cpp"
"server/ai_network.h" "server/ai_network.h"
"server/ai_networkmanager.cpp" "server/ai_networkmanager.cpp"
@ -73,6 +82,31 @@ add_sources( SOURCE_GROUP "AI"
"server/ai_node.h" "server/ai_node.h"
"server/ai_utility.cpp" "server/ai_utility.cpp"
"server/ai_utility.h" "server/ai_utility.h"
"server/ai_task.h"
"server/ai_schedule.cpp"
"server/ai_schedule.h"
"server/ai_component.h"
"server/ai_senses.h"
"server/ai_localnavigator.h"
"server/ai_navigator.h"
"server/ai_navtypes.h"
"server/ai_movetypes.h"
"server/ai_moveprobe.h"
"server/ai_motor.h"
"server/ai_route.h"
"server/ai_interest.cpp"
"server/ai_interest.h"
"server/ai_waypoint.h"
"server/ai_pathfinder.h"
"server/ai_memory.h"
"server/ai_squad.h"
"server/ai_tacticalservices.h"
"server/ai_moveshoot.h"
"server/ai_battlelocation.h"
"server/ai_syncedmelee.h"
"server/ai_shootcover.h"
"server/ai_hint.h"
"server/ai_npcstate.h"
"server/detour_impl.h" "server/detour_impl.h"
) )
@ -87,6 +121,8 @@ add_sources( SOURCE_GROUP "Entity"
"server/entitylist.h" "server/entitylist.h"
"server/entityoutput.cpp" "server/entityoutput.cpp"
"server/entityoutput.h" "server/entityoutput.h"
"server/soundent.cpp"
"server/soundent.h"
) )
add_sources( SOURCE_GROUP "Network" add_sources( SOURCE_GROUP "Network"

View File

@ -6,8 +6,9 @@
#include "input.h" #include "input.h"
#include "common/global.h" #include "common/global.h"
#include "game/shared/weapon_types.h" #include "game/shared/weapon_types.h"
#include "game/shared/shared_activity.h"
void CInput::VSetCustomWeaponActivity(CInput* pInput, int weaponActivity) void CInput::VSetCustomWeaponActivity(CInput* pInput, sharedactivity_e weaponActivity)
{ {
// Server only allows other custom weapon activities if cheats are enabled, // Server only allows other custom weapon activities if cheats are enabled,
// don't bother simulating it on the client without the cheats cvar, as // don't bother simulating it on the client without the cheats cvar, as

View File

@ -1,6 +1,7 @@
#ifndef CLIENT_INPUT_H #ifndef CLIENT_INPUT_H
#define CLIENT_INPUT_H #define CLIENT_INPUT_H
#include "game/shared/weapon_types.h" #include "game/shared/weapon_types.h"
#include "game/shared/shared_activity.h"
#include "game/client/iinput.h" #include "game/client/iinput.h"
class CInput : public IInput class CInput : public IInput
@ -31,7 +32,7 @@ public:
virtual void sub_140701720() = 0; virtual void sub_140701720() = 0;
virtual void SetCustomWeaponActivity( WeaponActivity_t weaponActivity ) = 0; virtual void SetCustomWeaponActivity( sharedactivity_e weaponActivity ) = 0;
virtual void ActivateOffhandWeaponByIndex( char index /*TODO[ AMOS ]: needs enum, enumVal 6 = INVALID; see Script_ActivateOffhandWeaponByIndex*/ ) = 0; virtual void ActivateOffhandWeaponByIndex( char index /*TODO[ AMOS ]: needs enum, enumVal 6 = INVALID; see Script_ActivateOffhandWeaponByIndex*/ ) = 0;
virtual void ChangeControllerMode( bool newMode ) = 0; virtual void ChangeControllerMode( bool newMode ) = 0;
@ -42,11 +43,11 @@ public:
virtual void GetZoomAnchor( Vector2D& outAnchor ) = 0; // Used for SetBigMapZoomAnchor script func virtual void GetZoomAnchor( Vector2D& outAnchor ) = 0; // Used for SetBigMapZoomAnchor script func
public: // Hook statics public: // Hook statics
static void VSetCustomWeaponActivity( CInput* pInput, int weaponActivity ); static void VSetCustomWeaponActivity( CInput* pInput, sharedactivity_e weaponActivity );
private: private:
}; };
inline void(*v_CInput__SetCustomWeaponActivity)(CInput* pInput, int weaponActivity); inline void(*v_CInput__SetCustomWeaponActivity)(CInput* pInput, sharedactivity_e weaponActivity);
inline IInput* g_pInput_VFTable = nullptr; inline IInput* g_pInput_VFTable = nullptr;
inline CInput* g_pInput = nullptr; inline CInput* g_pInput = nullptr;

View File

@ -0,0 +1,7 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Base NPC character with AI
//
//=============================================================================//
#include "ai_basenpc.h"

View File

@ -0,0 +1,434 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Base NPC character with AI
//
//=============================================================================//
#ifndef AI_BASENPC_H
#define AI_BASENPC_H
#ifdef _WIN32
#pragma once
#endif
#include "game/shared/shared_activity.h"
#include "game/shared/simtimer.h"
#include "game/shared/status_effect.h"
#include "basecombatcharacter.h"
#include "ai_movetypes.h"
#include "ai_schedule.h"
#include "ai_task.h"
#include "ai_senses.h"
#include "ai_motor.h"
#include "ai_pathfinder.h"
#include "ai_navigator.h"
#include "ai_localnavigator.h"
#include "ai_memory.h"
#include "ai_utility.h"
#include "ai_squad.h"
#include "ai_tacticalservices.h"
#include "ai_moveshoot.h"
#include "ai_battlelocation.h"
#include "ai_hint.h"
#include "ai_syncedmelee.h"
#include "ai_shootcover.h"
//=============================================================================
// Purpose: Some bridges a little more complicated to allow behavior to see
// what base class would do or control order in which it's done
//=============================================================================
abstract_class IAI_BehaviorBridge
{
public:
#define AI_GENERATE_BRIDGE_INTERFACE
//#include "ai_behavior_template.h"
// Non-standard bridge methods
virtual void BehaviorBridge_GatherConditions() {}
// TODO: confirm if this interface is correct for R5!
//virtual int BehaviorBridge_SelectSchedule() { return 0; }
//virtual int BehaviorBridge_TranslateSchedule(int scheduleType) { return 0; }
//virtual float BehaviorBridge_GetJumpGravity() const { return 0; }
//virtual bool BehaviorBridge_IsJumpLegal(const Vector3D & startPos, const Vector3D& apex, const Vector3D& endPos, float maxUp, float maxDown, float maxDist) const { return 0; }
//virtual bool BehaviorBridge_MovementCost(int moveType, const Vector3D& vecStart, const Vector3D& vecEnd, float* pCost) { return 0; }
};
//=============================================================================
//
// Types used by CAI_BaseNPC
//
//=============================================================================
struct AIScheduleState_t
{
int iCurTask;
TaskStatus_e fTaskStatus;
float timeStarted;
float timeCurTaskStarted;
int failedSchedID;
char gap_14[4];
AI_TaskFailureCode_t taskFailureCode;
int iTaskInterrupt;
bool bTaskRanAutomovement;
bool bTaskRequestRunTillWait;
bool doYawUpdatesForThisDecisionInterval;
bool doYawUpdatesDuringThisTask;
bool updateIdealYawToEnemyDuringThisTask;
bool bScheduleWasInterrupted;
bool bStopRunTasks;
//DECLARE_SIMPLE_DATADESC();
};
//=============================================================================
//
// class CAI_BaseNPC
//
//=============================================================================
class CAI_BaseNPC : public CBaseCombatCharacter,
public CAI_DefMovementSink,
public IAI_BehaviorBridge
{
public:
private:
int m_threadedPostProcessJob;
bool m_bDoPostProcess;
bool m_bCustomEnemySearch;
bool m_bPlayerSpottable;
bool m_bAddedToSpottableList;
CAI_Schedule* m_pPrevSchedule;
CAI_Schedule* m_pSchedule;
int m_defaultScriptScheduleID;
char gap_598c[4];
AIScheduleState_t m_ScheduleState;
int m_failSchedule;
bool m_bDoPostRestoreRefindPath;
bool m_bDoScheduleChangeSignal;
bool m_spawned;
bool m_bUsingStandardThinkTime;
float m_flLastRealThinkTime;
float m_flLastThinkDuration;
int m_iTickBlocked;
float m_dangerousClusterConditionAllowedAtTime;
int m_poseAim_Pitch;
int m_poseAim_Yaw;
int m_poseMove_Yaw;
int m_poseMove_Lean;
float m_offsetOfCurrentAimFromDesiredAim_Cos;
bool m_haveDesiredAimDir;
bool m_sequenceHasAimEvent;
bool m_sequenceHasAimPoseParams;
char gap_59ef[1];
int m_lastAimSequence;
int m_missPlayerLastWindow;
Vector3D m_missPlayerLastOffset;
char gap_5a04[4];
void* m_pPrimaryBehavior;
char m_Behaviors[32];
bool m_bCalledBehaviorSelectSchedule;
char gap_5a31[3];
char m_Conditions[12];
char m_CustomInterruptConditions[12];
bool m_bForceConditionsGather;
bool m_bConditionsGathered;
bool m_bInterruptableByScript;
char gap_5a4f[1];
int m_movingGroundEnt;
Vector3D m_groundRelativePos;
Vector3D m_groundRelativeAngles;
int m_NPCState;
int m_NPCPrevState;
int m_lastSchedSelectorState;
float m_flLastSchedSelectChangeTime;
float m_flLastStateChangeTime;
float m_thinkInterval;
int m_IdealNPCState;
int m_Efficiency;
int m_MoveEfficiency;
float m_flNextDecisionTime;
__int16 m_searchPathID;
bool m_bDefenseActive;
bool m_bAlwaysAlert;
bool m_scriptedAnimForceInterrupt;
bool m_bWakeSquad;
char gap_5a9a[2];
float m_flWakeRadius;
int m_nWakeTick;
int m_SleepState;
int m_SleepFlags;
char m_translatedActivity[4];
sharedactivity_e m_IdealActivity;
int m_nIdealSequence;
sharedactivity_e m_IdealTranslatedActivity;
sharedactivity_e m_IdealWeaponActivity;
bool m_idealSequenceAlreadyResolved;
char gap_5ac1[3];
int m_seqFinishedInSolid;
int m_prevSeqWeight;
char gap_5acc[4];
char m_activeActModifiers[80];
int m_scriptIdleSequence;
int m_scriptAttackSequence;
int m_scriptDeathActivity;
bool m_requestSpecialRangeAttack;
char gap_5b2d[3];
int m_specialRangeAttackCount;
char gap_5b34[4];
__int64 m_aiSettings;
int m_aiSettingsIndex;
int m_subclass;
CAI_Senses* m_pSenses;
CSound m_pLockedBestSound;
Vector3D m_aimDir;
bool m_aimDirValid;
char gap_5b85[3];
float m_weaponBlockedTimer;
float m_weaponBlockedTimeOut;
int m_moveDirection;
int m_hEnemy;
int m_hEnemySecondary;
float m_distToEnemyLKP_AdjustForHeightDiff;
float m_distToEnemyLKP;
float m_distToEnemyLKPCenterToCenter;
char m_updateSquadEnemyQueue[32];
CStopwatch m_notifyEnemyToSquadTimer;
float m_notifyEnemyToTeamTime;
CRandStopwatch m_GiveUpOnDeadEnemyTimer;
CSimpleSimTimer m_chooseEnemySanityTimer;
int m_EnemiesSerialNumber;
CSimpleSimTimer m_UpdateEnemyPosTimer;
bool m_ForceUpdateEnemyPos;
char gap_5bf5[3];
int m_afCapability;
int m_flags;
bool m_chanceToHitIsEnabled;
char gap_5c01[3];
float m_flMoveWaitFinished;
char m_UnreachableEnts[32];
CAI_Navigator* m_pNavigator;
CAI_LocalNavigator* m_pLocalNavigator;
CAI_Pathfinder* m_pPathfinder;
CAI_MoveProbe* m_pMoveProbe;
CAI_Motor* m_pMotor;
int m_hGoalEnt;
float m_flTimeLastMovement;
float m_longJumpCheckTime;
Vector3D m_prevGroundNormal;
CSimpleSimTimer m_CheckOnGroundTimer;
Vector3D m_vDefaultLocalEyeOffset;
float m_flNextEyeLookTime;
float m_flEyeIntegRate;
Vector3D m_vEyeLookTarget;
Vector3D m_vCurEyeTarget;
float m_flHeadYaw;
float m_flHeadPitch;
int m_animRefAdjustThinkCount;
Vector3D m_animRefAdjustPerThink;
bool m_animRefDidAdjust;
bool m_animParentedOnPlay;
char gap_5cb2[2];
int m_scriptAnimSavedCollisionGroup;
int m_scriptAnimSavedFlags;
int m_scriptAnimStartPolyRef;
char m_enemyChangeScriptCallback[16];
CAI_Enemies* m_pEnemies;
int m_afMemory;
int m_hEnemyOccluder;
int m_hScriptEnemy;
int m_hNearestVisibleFriendlyPlayer;
int m_lastDamageFlags;
int m_lastDamageType;
float m_strafeDodgeDamage;
float m_lastLightPainTime;
float m_lastHeavyPainTime;
float m_flSumDamage;
float m_flLastDamageTime;
float m_flLastSawPlayerTime;
float m_flLastAttackTime;
float m_flAlertEventTime;
float m_flNextRangeAttackSecondary;
float m_flNextMeleeAllowTime;
float m_flNextMeleeAltAllowTime;
int m_meleeComboCount;
bool m_bIgnoreUnseenEnemies;
char gap_5d21[7];
CAI_ShotRegulator m_ShotRegulator;
AISyncedMeleeState m_syncedMelee;
CAI_Squad* m_pSquad;
string_t m_SquadName;
int m_iMySquadSlot;
int m_squadAssignment;
float m_squadAssignedRange;
float m_squadAssignedNodeStartUseTime;
int m_squadAssignedNode;
int m_lockedNode;
int m_currentWeaponBarrel;
bool m_bAutoSquad;
bool m_bDidDeathCleanUp;
bool m_bOptionalSprint;
bool m_bClearNodeOnScheduleFail;
bool m_bRunningFromEnemy;
char m_runFromEnemyRetry;
char m_disableArrivalOnce;
char gap_5e03[5];
CAI_TacticalServices* m_pTacticalServices;
float m_scriptAimingPrecisionAdjustment;
float m_flWaitFinished;
float m_flNextFlinchTime;
float m_flNextCheckFaceEnemyTime;
CAI_MoveAndShootOverlay m_moveAndShootOverlay;
bool m_forceShootOverlay;
bool m_weaponTemporarilySwitchedByAnim;
bool m_strafeDir;
char gap_5e43[1];
int m_strafeCount;
float m_flSavePositionTime;
Vector3D m_vSavePosition;
Vector3D m_vInterruptSavePosition;
Vector3D m_vLastAutoMoveDelta;
Vector3D m_autoMoveAdjust_originalSpace;
Vector3D m_vLastPatrolDir;
CAI_Hint* m_pHintNode;
int m_pSafeHintNode;
int m_safeHintType;
float m_flDistTooFar;
float m_flDistTooClose;
float m_minEngagementDistVsWeak;
float m_maxEngagementDistVsWeak;
float m_minEngagementDistVsStrong;
float m_maxEngagementDistVsStrong;
float m_dangerousAreaRadius;
float m_maxEnemyDistOverride;
float m_maxEnemyDistHeavyArmorOverride;
float m_minEnemyDist;
float m_disengageEnemyDist;
char gap_5ec4[4];
string_t m_spawnEquipment[2];
void* m_grenadeWeapon; // todo: reverse and add class
string_t m_grenadeWeaponName;
Vector3D m_lastValidGrenadeThrowOrigin;
float m_throwGrenadeAllowedTime;
float m_rangeAttackTwitchAllowedTime;
float m_smartAmmoLockTime;
int m_smartAmmoLocks;
int m_smartAmmoWeapon;
int m_meleeWeapon;
int m_reactFriendlyChance;
int m_reactBulletChance;
int m_reactChance;
float m_lastReactTime;
float m_dangerousAreaReactionTime;
int m_MovementCollisionGroup;
float m_moveDeflectionSearchRadius;
float m_moveDeflectionDebounceExpireTime;
char gap_5f2c[4];
ShootingCoverState shootingCover;
BattleLocationState m_battleLocation;
char m_OnDamaged[40];
char m_OnFoundEnemy[40];
char m_OnSeeEnemy[40];
char m_OnCantSeeEnemy[40];
char m_OnNoticePotentialEnemy[40];
char m_OnGainEnemyLOS[40];
char m_OnLostEnemyLOS[40];
char m_OnLostEnemy[40];
char m_OnFoundPlayer[40];
char m_OnLostPlayerLOS[40];
char m_OnLostPlayer[40];
char m_OnHearPlayer[40];
char m_OnHearCombat[40];
char m_OnSleep[40];
char m_OnWake[40];
char m_OnStateChange[40];
char m_OnFailedToPath[40];
char m_OnEnterGoalRadius[40];
char m_OnFinishedAssault[40];
char m_OnSawCorpse[40];
char m_OnGiveWeapon[40];
char m_OnTakeWeapon[40];
char m_OnSpecialAttack[40];
char m_OnScheduleChange[40];
char m_OnSyncedMeleeBegin[40];
char m_queuedOutput[32];
char m_pInitializedPhysicsObject[8];
bool m_fIsUsingSmallHull;
bool m_bHadMovingGround;
bool m_bCheckContacts;
bool m_bAllowShoot;
bool m_bActiveForSmartAmmo;
bool m_bEnemyValidSmartAmmoTarget;
bool m_bAllowBlockBullets;
bool m_blockingBullets;
int m_reactingSurprisedReason;
bool m_desireCrouch;
bool m_isCrouching;
bool m_bAutoMovementBlocked;
bool m_bAllowPushDuringAnim;
float m_desireStandOverrideExpireTime;
char gap_6404[4];
char m_schedSelectorHistory[40];
int m_behaviorSelectorID;
char gap_6434[4];
const char* m_failText;
const char* m_interruptText;
CAI_Schedule* m_failedSchedule;
CAI_Schedule* m_interuptSchedule;
string_t m_debugSchedSelectorName;
float m_lastTaskTextMsgTime;
float m_flAccuracyMultiplier;
float m_flAccuracyMultiplierForEnemy;
float m_LastMissFastPlayerTime;
float m_LastSuppressionTime;
float m_LastShootAccuracy;
int m_TotalShots;
int m_TotalHits;
float m_flSoundWaitTime;
int m_nSoundPriority;
float m_lastTauntTime;
float m_freezeTime;
float m_freezeCycle;
float m_freezePlaybackRate;
int m_prevShieldHealth;
int m_healthEvalMultiplier;
float m_aiMovementSpeed;
bool m_aiSprinting;
char gap_64a5[3];
int m_aiNetworkFlags;
bool m_isHologram;
char gap_64ad[3];
int m_fireteamSlotIndex;
char gap_64b4[4];
StatusEffectTimedData m_statusEffectsTimedNPCNV;
char gap_64d0[48];
StatusEffectEndlessData m_statusEffectsEndlessNPCNV;
char gap_6510[80];
char m_title[32];
bool m_tethered;
char gap_6581[3];
Quaternion m_localGravityRotation;
matrix3x4_t m_localGravityToWorldTransform;
int m_nAITraceMask;
float m_flBoostSpeed;
float m_blockPeriodStartTime;
int m_blockBulletCount;
float m_dodgePeriodStartTime;
float m_lastDodgeTime;
int m_dodgeCount;
int m_dodgeProjectile;
Vector3D m_dodgeFromPos;
char m_dangerousArea[8];
float m_dangerousAreaDebounceExpireTime;
bool m_fallingState;
bool m_grappled;
bool m_grappleEndFloating;
char gap_65ff[1];
int m_grappleRestoreMoveType;
char gap_6604[4];
char m_threadRandom[64];
};
static_assert(sizeof(CAI_BaseNPC) == 0x6648);
#endif // AI_BASENPC_H

View File

@ -0,0 +1,16 @@
//=============================================================================//
//
// Purpose: AI Battle Location
//
//=============================================================================//
#ifndef AI_BATTLELOCATION_H
#define AI_BATTLELOCATION_H
struct BattleLocationState
{
int occupiedCell;
float searchFailedExpireTime;
};
static_assert(sizeof(BattleLocationState) == 8);
#endif // AI_BATTLELOCATION_H

View File

@ -0,0 +1,32 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Base AI component
//
//=============================================================================//
#ifndef AI_COMPONENT_H
#define AI_COMPONENT_H
#if defined( _WIN32 )
#pragma once
#endif
class CAI_BaseNPC;
//-----------------------------------------------------------------------------
// CAI_Component
//
// Purpose: Shared functionality of all classes that assume some of the
// responsibilities of an owner AI.
//-----------------------------------------------------------------------------
class CAI_Component
{
virtual void SetOuter(CAI_BaseNPC* pOuter) { m_pOuter = pOuter; }
// todo: implement the rest
private:
CAI_BaseNPC* m_pOuter;
};
static_assert(sizeof(CAI_Component) == 16);
#endif // AI_COMPONENT_H

82
src/game/server/ai_hint.h Normal file
View File

@ -0,0 +1,82 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Hint node utilities and functions.
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_HINT_H
#define AI_HINT_H
#include "baseentity.h"
#include "recast/Detour/Include/DetourNavMesh.h"
#include "ai_npcstate.h"
//###########################################################
// >> HintNodeData
//
// This is a chunk of data that's passed to a hint node entity
// when it's created from a CNodeEnt.
//###########################################################
enum HintIgnoreFacing_e
{
HIF_NO,
HIF_YES,
HIF_DEFAULT,
};
//-----------------------------------------------------------------------------
// Hint Data
//-----------------------------------------------------------------------------
struct HintNodeData
{
string_t strEntityName;
Vector3D vecPosition;
short nHintType;
char gap_16[2];
int nNodeID;
char gap_1c[4];
string_t strGroup;
string_t iszGenericType;
string_t iszActivityName;
int nTargetWCNodeID;
HintIgnoreFacing_e fIgnoreFacing;
NPC_STATE minState;
NPC_STATE maxState;
int nRadius;
int nWCNodeID; // Node ID assigned by worldcraft (not same as engine!)
//DECLARE_SIMPLE_DATADESC();
};
//-----------------------------------------------------------------------------
// CAI_Hint
//-----------------------------------------------------------------------------
class CAI_Hint : public CBaseEntity
{
private:
void* __vftable;
HintNodeData m_NodeData;
int m_hintMovingGroundEnt;
int m_hintGroundEnt;
int m_hHintOwner;
float m_flNextUseTime;
float m_nodeFOV;
float m_nodeFOVcos;
Vector3D m_vecForward;
float m_npcIdealYawAlign;
float m_advanceFromCoverScalar;
bool m_hintDisabled;
char gap_b8d[1];
short ainData;
int shootingCoverType;
dtPolyRef polyAttachedTo;
CAI_Hint* hintOnSamePoly_next;
CAI_Hint* hintOnSamePoly_prev;
char pad[8];
};
static_assert(sizeof(CAI_Hint) == 0xBB0);
#endif // AI_HINT_H

View File

@ -0,0 +1,134 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Hooks and classes for the support of humanoid NPCs with
// groovy facial animation capabilities, aka, "Actors"
//
//=============================================================================//
#include "baseentity.h"
#include "ai_interest.h"
bool CAI_InterestTarget_t::IsThis(CBaseEntity* pThis)
{
return (pThis == m_hTarget);
};
// TODO: requires rebuild of CBaseEntity::EyePosition
//const Vector3D& CAI_InterestTarget_t::GetPosition(void)
//{
// if (m_eType == LOOKAT_ENTITY && m_hTarget != NULL)
// {
// m_vecPosition = m_hTarget->EyePosition();
// }
// return m_vecPosition;
//};
bool CAI_InterestTarget_t::IsActive(void)
{
if (m_flEndTime < (*g_pGlobals)->m_flCurTime) return false;
if (m_eType == LOOKAT_ENTITY && m_hTarget == NULL) return false;
return true;
};
float CAI_InterestTarget_t::Interest(void)
{
float t = ((*g_pGlobals)->m_flCurTime - m_flStartTime) / (m_flEndTime - m_flStartTime);
if (t < 0.0f || t > 1.0f)
return 0.0f;
if (m_rampDuration && t < 1 - m_rampDuration)
{
//t = t / m_flRamp;
t = 1.0f - ExponentialDecay(0.2f, m_rampDuration, t);
//t = 1.0 - ExponentialDecay( 0.01, 1 - m_flRamp, t );
}
else if (t > 1.0f - m_rampDuration)
{
t = (1.0f - t) / m_rampDuration;
t = 3.0f * t * t - 2.0f * t * t * t;
}
else
{
t = 1.0f;
}
// ramp
t *= m_flInterest;
return t;
}
void CAI_InterestTarget::Add(CBaseEntity* pTarget, float flImportance, float flDuration, float flRamp)
{
int i;
for (i = 0; i < Count(); i++)
{
CAI_InterestTarget_t& target = Element(i);
if (target.m_hTarget == pTarget && target.m_rampDuration == 0)
{
if (target.m_flStartTime == (*g_pGlobals)->m_flCurTime)
{
flImportance = MAX(flImportance, target.m_flInterest);
}
Remove(i);
break;
}
}
Add(CAI_InterestTarget_t::LOOKAT_ENTITY, pTarget, Vector3D(0, 0, 0), flImportance, flDuration, flRamp);
}
void CAI_InterestTarget::Add(const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp)
{
int i;
for (i = 0; i < Count(); i++)
{
CAI_InterestTarget_t& target = Element(i);
if (target.m_vecPosition == vecPosition)
{
Remove(i);
break;
}
}
Add(CAI_InterestTarget_t::LOOKAT_POSITION, NULL, vecPosition, flImportance, flDuration, flRamp);
}
void CAI_InterestTarget::Add(CBaseEntity* pTarget, const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp)
{
int i;
for (i = 0; i < Count(); i++)
{
CAI_InterestTarget_t& target = Element(i);
if (target.m_hTarget == pTarget)
{
if (target.m_flStartTime == (*g_pGlobals)->m_flCurTime)
{
flImportance = MAX(flImportance, target.m_flInterest);
}
Remove(i);
break;
}
}
Add(CAI_InterestTarget_t::LOOKAT_BOTH, pTarget, vecPosition, flImportance, flDuration, flRamp);
}
void CAI_InterestTarget::Add(CAI_InterestTarget_t::CAI_InterestTarget_e type, CBaseEntity* pTarget, const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp)
{
int i = AddToTail();
CAI_InterestTarget_t& target = Element(i);
target.m_eType = type;
target.m_hTarget = pTarget;
target.m_vecPosition = vecPosition;
target.m_flInterest = flImportance;
target.m_flStartTime = (*g_pGlobals)->m_flCurTime;
target.m_flEndTime = (*g_pGlobals)->m_flCurTime + flDuration;
target.m_rampDuration = flRamp / flDuration;
}

View File

@ -0,0 +1,82 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Hooks and classes for the support of humanoid NPCs with
// groovy facial animation capabilities, aka, "Actors"
//
//=============================================================================//
#ifndef AI_INTEREST_H
#define AI_INTEREST_H
#if defined( _WIN32 )
#pragma once
#endif
#include "tier1/utlvector.h"
#include "game/shared/predictioncopy.h"
class CAI_InterestTarget_t
{
public:
enum CAI_InterestTarget_e
{
LOOKAT_ENTITY = 0,
LOOKAT_POSITION,
LOOKAT_BOTH
};
public:
bool IsThis(CBaseEntity* pThis);
//const Vector3D& GetPosition(void);
bool IsActive(void);
float Interest(void);
public:
CAI_InterestTarget_e m_eType;
EHANDLE m_hTarget;
Vector3D m_vecPosition;
float m_flStartTime;
float m_flEndTime;
float m_rampDuration;
float m_flInterest;
//DECLARE_SIMPLE_DATADESC();
};
static_assert(sizeof(CAI_InterestTarget_t) == 0x24);
class CAI_InterestTarget : public CUtlVector<CAI_InterestTarget_t>
{
void Add(CBaseEntity* pTarget, float flImportance, float flDuration, float flRamp);
void Add(const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp);
void Add(CBaseEntity* pTarget, const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp);
int Find(CBaseEntity* pTarget)
{
int i;
for (i = 0; i < Count(); i++)
{
if (pTarget == (*this)[i].m_hTarget)
return i;
}
return InvalidIndex();
}
void Cleanup(void)
{
int i;
for (i = Count() - 1; i >= 0; i--)
{
if (!Element(i).IsActive())
{
Remove(i);
}
}
};
private:
void Add(CAI_InterestTarget_t::CAI_InterestTarget_e type, CBaseEntity* pTarget, const Vector3D& vecPosition, float flImportance, float flDuration, float flRamp);
};
static_assert(sizeof(CAI_InterestTarget) == 0x20);
#endif

View File

@ -0,0 +1,38 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI local navigator
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_LOCALNAVIGATOR_H
#define AI_LOCALNAVIGATOR_H
#if defined( _WIN32 )
#pragma once
#endif
#include "game/shared/simtimer.h"
#include "ai_component.h"
#include "ai_movetypes.h"
#include "ai_moveprobe.h"
//-----------------------------------------------------------------------------
// CAI_LocalNavigator
//
// Purpose: Handles all the immediate tasks of navigation, independent of
// path. Implements steering.
//-----------------------------------------------------------------------------
class CAI_LocalNavigator : public CAI_Component,
public CAI_ProxyMovementSink
{
bool m_bLastWasClear;
char gap_21[7];
AILocalMoveGoal_t m_LastMoveGoal;
CSimpleSimTimer m_FullDirectTimer;
char gap_104[4];
void* m_pPlaneSolver;
CAI_MoveProbe* m_pMoveProbe;
};
static_assert(sizeof(CAI_LocalNavigator) == 0x118);
#endif // AI_LOCALNAVIGATOR_H

View File

@ -0,0 +1,53 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI Memory
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_MEMORY_H
#define AI_MEMORY_H
#if defined( _WIN32 )
#pragma once
#endif
#include "tier1/utlmap.h"
#include "baseentity.h"
#include "ai_component.h"
//-----------------------------------------------------------------------------
// AI_EnemyInfo_t
//
// Purpose: Stores relevant tactical information about an enemy
//
//-----------------------------------------------------------------------------
struct AI_EnemyInfo_t
{
// todo: reverse engineer
};
//-----------------------------------------------------------------------------
// CAI_Enemies
//
// Purpose: Stores a set of AI_EnemyInfo_t's
//
//-----------------------------------------------------------------------------
class CAI_Enemies : public CAI_Component
{
public:
typedef CUtlMap<CBaseEntity*, AI_EnemyInfo_t*, unsigned char> CMemMap;
private:
int m_playerEnemyClass;
char gap_14[4];
CMemMap m_Map;
float m_flFreeKnowledgeDuration;
Vector3D m_vecDefaultLKP;
Vector3D m_vecDefaultLSP;
int m_serial;
};
static_assert(sizeof(CAI_Enemies) == 0x68);
//-----------------------------------------------------------------------------
#endif // AI_MEMORY_H

View File

@ -0,0 +1,51 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI locomotion
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_MOTOR_H
#define AI_MOTOR_H
#ifdef _WIN32
#pragma once
#endif
#include "ai_component.h"
#include "ai_movetypes.h"
#include "ai_moveprobe.h"
#include "ai_interest.h"
#include "recast/Detour/Include/DetourNavMeshQuery.h"
//-----------------------------------------------------------------------------
// CAI_Motor
//
// Purpose: Implements the primitive locomotion of AIs.
//-----------------------------------------------------------------------------
class CAI_Motor : public CAI_Component,
public CAI_ProxyMovementSink
{
Vector3D m_steerDirection;
dtStraightPathResult m_straightPathCached;
Vector3D m_pushedVel;
float m_flMoveInterval;
float m_IdealYaw;
float m_fMoveYaw;
Vector3D m_vecVelocity;
Vector3D m_vecAngularVelocity;
bool m_bMoving;
char gap_bd[3];
float m_moveSpeedScale;
float m_moveSpeedScaleScript;
int m_nDismountSequence;
Vector3D m_vecDismount;
CAI_InterestTarget m_facingQueue;
CAI_MoveProbe* m_pMoveProbe;
};
static_assert(sizeof(CAI_Motor) == 0x100);
//=============================================================================//
#endif // AI_MOTOR_H

View File

@ -0,0 +1,30 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI move probe
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_MOVEPROBE_H
#define AI_MOVEPROBE_H
#if defined( _WIN32 )
#pragma once
#endif
#include "ai_component.h"
#include "game/shared/predictioncopy.h"
class CAI_MoveProbe : CAI_Component
{
bool m_bIgnoreTransientEntities;
char gap_11[3];
Vector3D m_vecFloorPoint;
float m_floorPointTime;
bool m_floorPointStandable;
char gap_25[3];
EHANDLE m_hLastProbeBlockingEnt;
};
static_assert(sizeof(CAI_MoveProbe) == 0x30);
#endif // AI_MOVEPROBE_H

View File

@ -0,0 +1,21 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Squad classes
//
//=============================================================================//
#ifndef AI_MOVESHOOT_H
#define AI_MOVESHOOT_H
#include "ai_component.h"
struct CAI_MoveAndShootOverlay : public CAI_Component
{
int m_forcedMovement;
float m_forcedMovementExpireTime;
bool m_isMovingAndShooting;
bool m_disableMoveAndShoot;
};
static_assert(sizeof(CAI_MoveAndShootOverlay) == 0x20);
#endif // AI_MOVESHOOT_H

View File

@ -0,0 +1,134 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI move types
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_MOVETYPES_H
#define AI_MOVETYPES_H
#if defined( _WIN32 )
#pragma once
#endif
#include "ai_navtypes.h"
class CAI_Path;
//-------------------------------------
struct MovementTurn
{
int turnAct;
int sequence;
float forwardDistance;
float perpendicularDistance;
float forwardMoveAdjust;
};
static_assert(sizeof(MovementTurn) == 0x14);
//-------------------------------------
enum AIMoveResult_t
{
AIMR_BLOCKED_ENTITY = -1, // Move was blocked by an entity
AIMR_BLOCKED_WORLD = -2, // Move was blocked by the world
AIMR_BLOCKED_NPC = -3, // Move was blocked by an NPC
AIMR_ILLEGAL = -4, // Move is illegal for some reason
AIMR_OK = 0,
AIMR_CHANGE_TYPE, // Locomotion method has changed
};
//-------------------------------------
struct AIMoveTrace_t
{
AIMoveResult_t fStatus; // See AIMoveResult_t
Vector3D vEndPosition; // The last point that could be moved to
Vector3D vHitNormal; // The normal of a hit, if any. vec3_origin if none. Can be none even if "hit"
CBaseEntity* pObstruction; // The obstruction I bumped into (if any)
float flTotalDist;
float flDistObstructed;
Vector3D vJumpVelocity;
float flStepUpDistance;
};
static_assert(sizeof(AIMoveTrace_t) == 0x40);
//-------------------------------------
struct AILocalMoveGoal_t
{
// Object of the goal
Vector3D target;
// The actual move. Note these need not always agree with "target"
Vector3D dir;
Vector3D facing;
float speed;
// The distance maximum distance intended to travel in path length
float maxDist;
// The distance expected to move this think
float curExpectedDist;
Navigation_e navType;
CBaseEntity* pMoveTarget;
unsigned int flags;
// The path from which this goal was derived
CAI_Path* pPath;
// The result if a forward probing trace has been done
bool bHasTraced;
AIMoveTrace_t directTrace;
AIMoveTrace_t thinkTrace;
};
static_assert(sizeof(AILocalMoveGoal_t) == 0xD8);
//-----------------------------------------------------------------------------
// Purpose: The set of callbacks used by lower-level movement classes to
// notify and receive guidance from higher level-classes
//-----------------------------------------------------------------------------
abstract_class IAI_MovementSink
{
public: // TODO: reverse engineer interface.
//---------------------------------
//
// Queries
//
virtual float CalcYawSpeed( void ) = 0;
};
class CAI_DefMovementSink : public IAI_MovementSink
{
//---------------------------------
//
// Queries
//
virtual float CalcYawSpeed(void) { return -1.0; } // might be incorrect!
};
class CAI_ProxyMovementSink : public CAI_DefMovementSink
{
public:
CAI_ProxyMovementSink()
: m_pProxied(NULL)
{
}
//---------------------------------
void Init(IAI_MovementSink* pMovementServices) { m_pProxied = pMovementServices; }
private:
IAI_MovementSink* m_pProxied;
};
//=============================================================================
#endif // AI_MOVETYPES_H

View File

@ -0,0 +1,108 @@
//=============================================================================//
//
// Purpose: AI navigator
//
//=============================================================================//
#ifndef AI_NAVIGATOR_H
#define AI_NAVIGATOR_H
#ifdef _WIN32
#pragma once
#endif
#include "game/shared/predictioncopy.h"
#include "game/shared/simtimer.h"
#include "ai_localnavigator.h"
#include "ai_moveprobe.h"
#include "ai_movetypes.h"
#include "ai_component.h"
#include "ai_network.h"
#include "ai_route.h"
struct ParticleContext // todo: move elsewhere
{
Vector3D m_curPos;
Vector3D m_curVel;
CSimpleSimTimer m_totalSimTime;
int m_flags;
};
//-----------------------------------------------------------------------------
// CAI_Navigator
//
// Purpose: Implements pathing and path navigation logic
//-----------------------------------------------------------------------------
class CAI_Navigator : public CAI_Component,
public CAI_DefMovementSink
{
typedef CAI_Component BaseClass;
private:
Navigation_e m_navType;
bool m_fNavComplete;
bool m_bLastNavFailed;
char gap_1e[2];
CAI_Motor* m_pMotor;
CAI_MoveProbe* m_pMoveProbe;
CAI_LocalNavigator* m_pLocalNavigator;
CAI_Network* m_pAINetwork;
CAI_Path* m_pPath;
char m_utilityPath[32];
CAI_WaypointList* m_pClippedWaypoints;
float m_flTimeClipped;
int m_PreviousMoveActivity;
int m_PreviousArrivalActivity;
int m_moveTransitionAnim;
ParticleContext m_particleContext;
Vector3D m_wallRunSurfacePos;
Vector3D m_wallRunMoveDir;
unsigned short m_wallRunHintIdx; // The wallrun hint index of the navmesh.
unsigned short m_wallRunTriangle;
bool m_bValidateActivitySpeed;
bool m_bCalledStartMove;
bool m_bAdjustMoveSpeedToSquad;
bool m_bForcedSimplify;
float m_flNextSimplifyTime;
float m_flLastSuccessfulSimplifyTime;
float m_flTimeLastAvoidanceTriangulate;
float m_timePathRebuildMax;
float m_timePathRebuildDelay;
float m_timePathRebuildFail;
float m_timePathRebuildNext;
int m_prevPathCorner;
int m_nextPathCorner;
bool m_savePathCornerOnScheduleChange;
bool m_pathCornerDirectionForward;
bool m_fRememberStaleNodes;
bool m_bNoPathcornerPathfinds;
float m_checkClusterDangerAtTime;
bool m_bHadPath;
bool m_bAnimWasMoving;
bool m_setConditionPathInvolvesDangerousCluster;
bool m_bProbeHitPhysicsObject;
bool m_bPathBlockedByPhysicsObject;
bool m_bPathBlockedByNPC;
bool m_bProbeHitNPC;
bool m_fPeerMoveWait;
EHANDLE m_hPeerWaitingOn;
CSimTimer m_PeerWaitMoveTimer;
CSimTimer m_PeerWaitClearTimer;
CSimTimer m_NextSidestepTimer;
EHANDLE m_hBigStepGroundEnt;
EHANDLE m_hLastBlockingEnt;
EHANDLE m_hAvoidEnt;
float m_avoidDistSqr;
Vector3D m_vPosBeginFailedSteer;
float m_timeBeginFailedSteer;
float m_traverseRefYaw;
Vector3D m_traverseRefPos;
Vector3D m_traversePlantPos;
int m_nNavFailCounter;
float m_flLastNavFailTime;
float m_flLastPathFindTime;
int m_moveFlags;
};
static_assert(sizeof(CAI_Navigator) == 0x160);
#endif // AI_NAVIGATOR_H

View File

@ -0,0 +1,23 @@
//=============================================================================//
//
// Purpose: AI navigation types
//
//=============================================================================//
#ifndef AI_NAVTYPES_H
#define AI_NAVTYPES_H
#if defined( _WIN32 )
#pragma once
#endif
// ---------------------------
// Navigation Type
// ---------------------------
enum Navigation_e
{
NAV_NONE = -1, // error condition
// TODO: reverse engineer
};
#endif // AI_NAVTYPES_H

View File

@ -0,0 +1,31 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_NPCSTATE_H
#define AI_NPCSTATE_H
#if defined( _WIN32 )
#pragma once
#endif
enum NPC_STATE
{
NPC_STATE_INVALID = -1,
NPC_STATE_NONE = 0,
NPC_STATE_IDLE,
// TODO: verify the rest for R5!
//NPC_STATE_ALERT,
//NPC_STATE_COMBAT,
//NPC_STATE_SCRIPT,
//NPC_STATE_PLAYDEAD,
//NPC_STATE_PRONE, // When in clutches of barnacle
//NPC_STATE_DEAD
};
#endif // AI_NPCSTATE_H

View File

@ -0,0 +1,54 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI Pathfinder
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_PATHFINDER_H
#define AI_PATHFINDER_H
#if defined( _WIN32 )
#pragma once
#endif
#include "tier1/utlvector.h"
#include "engine/debugoverlay.h"
#include "ai_component.h"
#include "ai_navtypes.h"
#include "ai_network.h"
#include "recast/Detour/Include/DetourNavMeshQuery.h"
struct CTriDebugOverlay
{
OverlayLine_t** m_debugTriOverlayLine;
};
struct CAI_Pathfinder : public CAI_Component
{
CTriDebugOverlay m_TriDebugOverlay;
float m_flLimitDistFactor;
float m_flLastStaleLinkCheckTime;
char m_bIgnoreStaleLinks;
char gap_21[7];
CAI_Network* m_pNetwork;
dtNavMeshQuery m_navQuery;
dtQueryFilter m_navFilter;
bool m_useClusterExclusions;
char gap_119[3];
float m_clusterPathMaxDetourBase;
float m_clusterPathMaxDetourMultiplier;
char gap_124[4];
CUtlVector<CAI_Cluster*> m_excludedClusterNodes; // TODO: verify template type!
CUtlVector<CAI_ClusterLink*> m_excludedClusterLinks; // TODO: verify template type!
void* m_pClusterPath;
void* m_pClusterNoExclusionPath;
int m_buildFlags;
int m_failReason;
};
static_assert(sizeof(CAI_Pathfinder) == 0x180);
//-----------------------------------------------------------------------------
#endif // AI_PATHFINDER_H

View File

@ -0,0 +1,60 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI route
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_ROUTE_H
#define AI_ROUTE_H
#ifdef _WIN32
#pragma once
#endif
#include "ai_component.h"
#include "ai_movetypes.h"
#include "ai_waypoint.h"
class CAI_Path : public CAI_Component
{
public:
CAI_WaypointList m_Waypoints;
char m_clusterPath[32];
char m_clusterPathNoExclusions[32];
float m_goalTolerance;
int m_activity;
int m_sequence;
int m_scriptMoveSequence;
int m_target;
float m_waypointTolerance;
bool m_movementTurnsAreValid;
char gap_71[3];
MovementTurn m_leftTurn;
MovementTurn m_rightTurn;
int m_arrivalActivity;
int m_arrivalSequence;
int m_animArrivalAct;
int m_animArrivalSequence;
float m_animArrivalDist;
float m_animArrivalYaw;
float m_animArrivalYawOffset;
Vector3D m_animArrivalIdealStartPosition;
int m_animArrivalFlags;
bool m_animArrivalFail;
char gap_c9[3];
int m_iLastNodeReached;
int m_goalNode;
int m_startGroundEnt;
int m_goalGroundEnt;
bool m_bUsedSquadCachedPath;
char gap_dd[3];
Vector3D m_goalPos;
Vector3D m_goalPos_worldSpaceCached;
int m_goalType;
int m_goalFlags;
float m_routeStartTime;
float m_goalStoppingDistance;
};
static_assert(sizeof(CAI_Path) == 0x108);
#endif // AI_ROUTE_H

View File

@ -0,0 +1,6 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI task scheduler
//
//=============================================================================//
#include "ai_schedule.h"

View File

@ -0,0 +1,18 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI task scheduler
//
//=============================================================================//
#ifndef AI_SCHEDULE_H
#define AI_SCHEDULE_H
#ifdef _WIN32
#pragma once
#endif
class CAI_Schedule
{
// todo: reverse engineer.
};
#endif // AI_SCHEDULE_H

View File

@ -0,0 +1,64 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Base AI component
//
//=============================================================================//
#ifndef AI_SENSES_H
#define AI_SENSES_H
#include "tier0/threadtools.h"
#include "tier1/utlvector.h"
#include "tier1/utlmap.h"
//#include "simtimer.h"
#include "ai_component.h"
#include "soundent.h"
#include "game/shared/predictioncopy.h"
#if defined( _WIN32 )
#pragma once
#endif
//-----------------------------------------------------------------------------
// class CAI_Senses
//
// Purpose:
//-----------------------------------------------------------------------------
class CAI_Senses : public CAI_Component
{
int m_seenEnemiesCount;
int m_ClosestHighPriority;
int m_ClosestEnemyNPC;
float m_lookDistOverride;
float m_LastLookDist;
float m_TimeLastLook;
float m_hearingSensitivity;
int m_iAudibleList; // first index of a linked list of sounds that the npc can hear.
char m_NextAudibleSound[1024];
CSound m_reactToSound;
CUtlVector<EHANDLE> m_sightProgress;
CUtlVector<EHANDLE> m_SeenHighPriority;
CUtlVector<EHANDLE> m_SeenNPCs;
CUtlVector<EHANDLE> m_SeenMisc;
CUtlVector<EHANDLE> m_TeamSpotted;
int m_SeenCorpseIndex;
bool m_bGatheringSeenEntities;
char gap_4fd[3];
int m_currentSeenArray;
char gap_504[4];
CUtlVector<EHANDLE>* m_SeenArrays[3];
float m_TimeLastLookHighPriority;
float m_TimeLastLookNPCs;
float m_TimeLastLookMisc;
float m_TimeLastLookCorpse;
int m_iSensingFlags;
char gap_534[4];
CThreadMutex m_mutex;
char gap560[1560];
};
static_assert(sizeof(CAI_Senses) == 0xB78);
#endif // AI_SENSES_H

View File

@ -0,0 +1,46 @@
//=============================================================================//
//
// Purpose: AI Shoot & Cover
//
//=============================================================================//
#ifndef AI_SHOOTCOVER_H
#define AI_SHOOTCOVER_H
#include "ai_hint.h"
struct RecentlyUsedCover
{
CAI_Hint* hint;
float nextUseTime;
};
struct ShootingCoverState
{
CAI_Hint* lockedHint;
int advancesLeftFromLockedHint;
int burstCount;
float burstStartTime;
bool burstCompletedSuccessfully;
bool burstUsingLeanAnims;
char gap_16[2];
float nextMoveToCoverRetryTime;
float hasApproxLOSToEnemy_expireTime;
float hasApproxLOSToEnemy_checkTime;
char gap_24[4];
RecentlyUsedCover recentlyUsedCover;
char gap_38[64];
int recentlyUsedCoverNewestIdx;
int consecutiveIdleSchedCount;
int numberOfIdlesBeforeSchedCheck;
float onPathToShootingCoverFail_retryTime;
float onTooCloseForCover_expireTime;
float disregardAlternateThreat_expireTime;
bool alternateThreatInUse;
char gap_91[3];
Vector3D alternateThreatPos;
int alternateThreatState;
};
static_assert(sizeof(ShootingCoverState) == 0xA8);
#endif // AI_SHOOTCOVER_H

View File

@ -0,0 +1,65 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Squad classes
//
//=============================================================================//
#ifndef AI_SQUAD_H
#define AI_SQUAD_H
#include "mathlib/bitvec.h"
#include "tier1/string_t.h"
#include "game/shared/predictioncopy.h"
struct SquadSlotTimer
{
int slot;
float endTime;
};
struct AISquadEnemyInfo_t
{
// todo: reverse engineer and verify this!
//EHANDLE hEnemy;
//CBitVec<MAX_SQUADSLOTS> slots; // What squad slots are filled?
//DECLARE_SIMPLE_DATADESC();
};
class CAI_Squad
{
private:
CAI_Squad* m_pNextSquad;
string_t m_Name;
char m_SquadMembers[72];
char m_membersSorted[72];
Vector3D m_memberSortPos;
float m_memberSortTime;
float m_useShortestPathThresholdSqr;
float m_useShortestPathPercent;
float m_flSquadSoundWaitTime;
int m_nSquadSoundPriority;
int m_hSquadInflictor;
int m_squadEnemy;
float m_squadEnemyUpdateTime;
float m_squadEnemySeeTime;
Vector3D m_investigatePos;
Vector3D m_centroid;
float m_centroidTime;
Vector3D m_attackPathAssignPos;
int m_attackPathAssignCluster;
float m_nextThinkTime;
SquadSlotTimer m_slotTimers[2];
char gap_108[8];
float m_squadHealthInteruptThreshold;
int m_squadModifierFlags;
char m_mutex[40];
AISquadEnemyInfo_t* m_pLastFoundEnemyInfo;
char m_EnemyInfos[32];
float m_flEnemyInfoCleanupTime;
float m_squadMemberDeathTime;
char m_squadPathData[16];
int m_squadMode;
};
static_assert(sizeof(CAI_Squad) == 0x190);
#endif // AI_SQUAD_H

View File

@ -0,0 +1,24 @@
//=============================================================================//
//
// Purpose: AI Synced Melee
//
//=============================================================================//
#ifndef AI_SYNCEDMELEE_H
#define AI_SYNCEDMELEE_H
struct AISyncedMeleeState
{
const char* desiredMelee;
float additionalYaw;
int meleePartner;
bool ragdollOnInterrupt;
bool continueAnimToFinish;
char gap_12[6];
char debouncedMelees[48];
float pressToInitiate_debounceExpireTime;
Vector3D pressToInitiate_pos;
float pressToInitiate_dist;
};
static_assert(sizeof(AISyncedMeleeState) == 0x60);
#endif // AI_SYNCEDMELEE_H

View File

@ -0,0 +1,32 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI Tactical Services
//
//=============================================================================//
#ifndef AI_TACTICALSERVICES_H
#define AI_TACTICALSERVICES_H
#if defined( _WIN32 )
#pragma once
#endif
#include "ai_component.h"
class CAI_TacticalServices : public CAI_Component
{
private:
int m_LOSSearchDataIndex;
int m_strafeActivity;
bool m_firstIterationOfFindLos;
char gap_19[7];
CAI_Network* m_pNetwork;
CAI_Pathfinder* m_pPathfinder;
bool m_prevLOSCheckSuccess;
char gap_31[3];
float m_prevLOSCheckTime;
Vector3D m_prevThreatPos;
Vector3D m_prevSearchPos;
};
static_assert(sizeof(CAI_TacticalServices) == 0x50);
#endif // AI_TACTICALSERVICES_H

282
src/game/server/ai_task.h Normal file
View File

@ -0,0 +1,282 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Sets up the tasks for default AI.
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_TASK_H
#define AI_TASK_H
#ifdef _WIN32
#pragma once
#endif
// Codes are either one of the enumerated types below, or a string (similar to Windows resource IDs)
typedef intp AI_TaskFailureCode_t;
//=========================================================
// These are th efailure codes
//=========================================================
enum AI_BaseTaskFailureCodes_t
{
NO_TASK_FAILURE,
FAIL_NO_TARGET,
FAIL_WEAPON_OWNED,
FAIL_ITEM_NO_FIND,
FAIL_NO_HINT_NODE,
FAIL_SCHEDULE_NOT_FOUND,
FAIL_NO_ENEMY,
FAIL_NO_NEAR_NODE,
FAIL_NO_BACKAWAY_NODE,
FAIL_NO_COVER,
FAIL_NO_FLANK,
FAIL_NO_SHOOT,
FAIL_NO_ROUTE,
FAIL_NO_ROUTE_GOAL,
FAIL_NO_ROUTE_BLOCKED,
FAIL_NO_ROUTE_ILLEGAL,
FAIL_NO_WALK,
FAIL_NO_LOS,
FAIL_ALREADY_LOCKED,
FAIL_NO_SOUND,
FAIL_BAD_ACTIVITY,
FAIL_NO_GOAL,
FAIL_NO_PLAYER,
FAIL_NO_REACHABLE_NODE,
FAIL_NO_AI_NETWORK,
FAIL_NO_START_POSITION,
FAIL_BAD_POSITION,
FAIL_BAD_PATH_GOAL,
FAIL_STUCK_ONTOP,
FAIL_ITEM_TAKEN,
FAIL_FROZEN,
FAIL_ANIMATION_BLOCKED,
FAIL_TIMEOUT,
FAIL_DETOUR_SPECIFIC,
NUM_FAIL_CODES,
};
inline bool IsPathTaskFailure(AI_TaskFailureCode_t code)
{
return (code >= FAIL_NO_ROUTE && code <= FAIL_NO_ROUTE_ILLEGAL);
}
const char* TaskFailureToString(AI_TaskFailureCode_t code);
inline intp MakeFailCode(const char* const pszGeneralError) { return (intp)pszGeneralError; }
enum TaskStatus_e
{
TASKSTATUS_NEW = 0, // Just started
TASKSTATUS_RUN_MOVE_AND_TASK = 1, // Running task & movement
TASKSTATUS_RUN_MOVE = 2, // Just running movement
TASKSTATUS_RUN_TASK = 3, // Just running task
TASKSTATUS_COMPLETE = 4, // Completed, get next task
};
//=========================================================
// These are the shared tasks
//=========================================================
enum sharedtasks_e
{
TASK_INVALID = 0,
// Forces the activity to reset.
TASK_RESET_ACTIVITY,
// Waits for the specified number of seconds.
TASK_WAIT,
// Make announce attack sound
TASK_ANNOUNCE_ATTACK,
// Waits for the specified number of seconds. Will constantly turn to
// face the enemy while waiting.
TASK_WAIT_WHILE_FACING_ENEMY,
// Wait until the player enters the same PVS as this character.
TASK_WAIT_PVS,
TASK_NOTIFY_ENEMY_ELUDED,
TASK_MOVE_AWAY_PATH,
TASK_SET_PATH_CLUSTER_EXCLUDE,
TASK_GET_PATH_AWAY_FROM_BEST_SOUND,
TASK_GET_PATH_TO_ENEMY,
TASK_GET_PATH_TO_ENEMY_LKP,
TASK_GET_PATH_TO_ENEMY_LKP_LOS,
TASK_GET_PATH_TO_ENEMY_CORPSE,
TASK_GET_PATH_TO_SQUAD_LEADER_GOAL,
TASK_GET_PATH_TO_SQUAD_ASSIGNED_NODE,
TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS,
TASK_GET_PATH_OFF_OF_NPC,
TASK_GET_PATH_TO_HINTNODE,
TASK_GET_PATH_TO_NEXT_SEARCH_POINT,
TASK_GET_PATH_TO_INITIATE_SYNCED_MELEE,
TASK_GET_RUNAWAY_PATH_FROM_ENEMY,
TASK_RESERVE_NEXT_SEARCH_POINT,
TASK_INIT_SEARCH_PATH,
TASK_STORE_POSITION_IN_SAVEPOSITION,
TASK_STORE_BESTSOUND_IN_SAVEPOSITION,
TASK_STORE_BESTSOUND_REACTORIGIN_IN_SAVEPOSITION,
TASK_STORE_ENEMY_POSITION_IN_SAVEPOSITION,
TASK_STORE_CORPSE_POSITION_IN_SAVEPOSITION,
TASK_UNUSED_29,
TASK_UNUSED_30,
TASK_UNUSED_31,
TASK_GET_PATH_TO_SAVEPOSITION,
TASK_GET_PATH_TO_SAVEPOSITION_LOS,
TASK_GET_PATH_TO_RANDOM_NODE,
TASK_GET_PATH_TO_BESTSOUND,
TASK_MOVE_PATH,
TASK_SPRINT_PATH,
TASK_SPRINT_RUNAWAY_PATH,
TASK_RUN_PATH,
TASK_WALK_PATH,
TASK_SPRINT_PATH_TIMED,
TASK_STRAFE_PATH,
TASK_CLEAR_MOVE_WAIT,
TASK_DISABLE_ARRIVAL_ONCE,
TASK_BIG_FLINCH,
TASK_FACE_IDEAL,
TASK_FACE_REASONABLE,
TASK_FACE_PLAYER,
TASK_FACE_ENEMY,
TASK_FACE_ENEMY_STRICT,
TASK_FACE_ENEMY_IF_HAS_LOS,
TASK_SET_WEAPON_BLOCKED_TIMER,
TASK_AIM_AT_ENEMY,
TASK_FACE_HINTNODE,
TASK_PLAY_HINT_ACTIVITY,
TASK_FACE_SAVEPOSITION,
TASK_LOOKAT_ENEMY,
TASK_LOOKAT_SAVEPOSITION,
TASK_SET_IDEAL_YAW_TO_CURRENT,
TASK_RANGE_ATTACK1,
TASK_RANGE_ATTACK2,
TASK_MELEE_ATTACK1,
TASK_MELEE_CHARGE,
TASK_MELEE_DIRECTIONAL_ATTACK,
TASK_SPECIAL_ATTACK,
TASK_MELEE_RAM,
TASK_WAIT_BETWEEN_BURSTS,
TASK_WAIT_UNTIL_ATTACK_READY,
TASK_RANGE_ATTACK1_EVASIVE,
TASK_RELOAD,
TASK_SET_RUNNING_FROM_ENEMY,
TASK_CLEAR_HINTNODE,
TASK_LOCK_HINTNODE,
TASK_SET_ACTIVITY,
TASK_WAIT_FOR_ACTIVITY_TO_FINISH,
TASK_SET_IDLE_ACTIVITY,
TASK_RANDOMIZE_FRAMERATE,
TASK_SET_SCHEDULE,
TASK_SET_FAIL_SCHEDULE,
TASK_SET_TOLERANCE_DISTANCE,
TASK_SET_STOP_AT_GOAL,
TASK_SET_ROUTE_SEARCH_TIME,
TASK_CLEAR_FAIL_SCHEDULE,
TASK_PLAY_SEQUENCE,
TASK_PLAY_SEQUENCE_FACE_ENEMY,
TASK_PLAY_REACTION_SEQUENCE,
TASK_FIND_COVER_FROM_BEST_SOUND,
TASK_FIND_COVER_FROM_ENEMY,
TASK_FIND_COVER_FROM_ENEMY_WITHIN_RADIUS,
TASK_FIND_COVER_FROM_ENEMY_LIMITLESS,
TASK_FIND_LATERAL_COVER_FROM_ENEMY,
TASK_FIND_BACKAWAY_FROM_SAVEPOSITION,
TASK_FIND_SAFE_HINT_FROM_ENEMY,
TASK_FIND_HIGH_GROUND_NODE_FROM_ORIGIN,
TASK_DIE,
TASK_WAIT_FOR_SCRIPT_ANIM_END,
TASK_WAIT_FOR_SYNCED_MELEE_ANIM_END,
TASK_UNUSED_98,
TASK_WAIT_RANDOM,
TASK_WAIT_INDEFINITE,
TASK_STOP_MOVING,
TASK_REMEMBER,
TASK_FORGET,
TASK_ARRIVAL_ANIMATION,
TASK_SET_ADJUST_MOVE_SPEED_TO_SQUAD,
TASK_WAIT_FOR_MOVEMENT,
TASK_WAIT_FOR_MOVEMENT_CHASE,
TASK_WAIT_FOR_MOVEMENT_STEP,
TASK_WAIT_FOR_MOVEMENT_FACE_TARGET_AT_END,
TASK_FALL_TO_GROUND,
TASK_WANDER,
TASK_GATHER_CONDITIONS,
TASK_ADD_HEALTH,
TASK_UNUSED_114,
TASK_UNUSED_115,
// First task of all schedules for playing back scripted sequences
TASK_PRE_SCRIPT,
TASK_DISPLACE_FROM_DANGEROUS_AREA,
TASK_DODGE,
TASK_DODGE_PATH,
TASK_STRAFE_DODGE,
TASK_STRAFE_SLIDE,
TASK_CIRCLE_STRAFE_PATH,
TASK_ATTACK_RUN_PATH,
TASK_REFRESH_REACT_TO_SOUND,
TASK_SCRIPTED_DIALOGUE,
TASK_SET_NPC_FLAG,
TASK_CLEAR_NPC_FLAG,
TASK_GET_PATH_TO_THROWABLE_OBJECT,
TASK_GET_PATH_TO_SHOOTING_COVER,
TASK_ALIGN_WITH_SHOOTING_COVER_IDEAL_YAW,
TASK_SET_SHOOTING_COVER_ACTIVITY,
TASK_SET_ADVANCE_FROM_SHOOTING_COVER_ACTIVITY,
TASK_SET_RETREAT_TO_SHOOTING_COVER_ACTIVITY,
TASK_BEGIN_SHOOTING_COVER_BURST_FIRE,
TASK_GET_PATH_TO_BATTLE_LOCATION,
TASK_FACE_BLOCKING_PHYS_ENT,
TASK_KNOCK_AWAY_PHYS_ENTS,
TASK_BLOCK_DAMAGE,
TASK_WAIT_FOR_BLOCK,
TASK_CANT_FOLLOW,
TASK_FACE_FOLLOW_TARGET,
TASK_MOVE_TO_FOLLOW_POSITION,
TASK_GET_PATH_TO_FOLLOW_POSITION,
TASK_SET_FOLLOW_TARGET_MARK,
TASK_FOLLOWER_FACE_TACTICAL,
TASK_SET_FOLLOW_DELAY,
TASK_GET_PATH_TO_FOLLOW_POINT,
TASK_ARRIVE_AT_FOLLOW_POINT,
TASK_SET_FOLLOW_POINT_STAND_SCHEDULE,
TASK_BEGIN_STAND_AT_WAIT_POINT,
TASK_GET_PATH_TO_ASSAULT_POINT,
TASK_FACE_ASSAULT_POINT,
// ======================================
// IMPORTANT: This must be the last enum
// ======================================
LAST_SHARED_TASK
};
// an array of tasks is a task list
// an array of schedules is a schedule list
struct Task_t
{
int iTask;
float flTaskData;
};
#endif // AI_TASK_H

View File

@ -1,6 +1,6 @@
//=============================================================================// //=============================================================================//
// //
// Purpose: AI system utility // Purpose: AI system utilities
// //
//=============================================================================// //=============================================================================//

View File

@ -1 +1,45 @@
#pragma once //=============================================================================//
//
// Purpose: AI system utilities
//
//=============================================================================//
#ifndef AI_UTILITY_H
#define AI_UTILITY_H
class CAI_BaseNPC;
//-----------------------------------------------------------------------------
//
// CAI_ShotRegulator
//
// Purpose: Assists in creating non-constant bursty shooting style
//
//-----------------------------------------------------------------------------
class CAI_ShotRegulator
{
private:
int m_burstIndex;
int m_nBurstShotsRemaining;
int m_nMinBurstShots;
int m_nMaxBurstShots;
float m_flNextShotTime;
float m_flFireRateDelay;
float m_flMinRestInterval;
float m_flMaxRestInterval;
float m_flLastPreFireDelayTime;
bool m_bInRestInterval;
bool m_bFirstShot;
bool m_haveRolledForMiss;
bool m_rolledAMiss;
float m_missDeltaRight;
float m_missDeltaUp;
float m_missDeltaForward;
int m_missExtraAAEFlags;
bool m_haveSelectedBurstTarget;
char gap_39[7];
CAI_BaseNPC* m_ai;
};
static_assert(sizeof(CAI_ShotRegulator) == 0x48);
#endif // AI_UTILITY_H

View File

@ -0,0 +1,50 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: AI Waypoint
//
// $NoKeywords: $
//=============================================================================//
#ifndef AI_WAYPOINT_H
#define AI_WAYPOINT_H
#if defined( _WIN32 )
#pragma once
#endif
#include "game/shared/predictioncopy.h"
struct AI_Waypoint_t
{
//---------------------------------
//
// Basic info
//
Vector3D vecLocation;
float flYaw;
int iNodeID;
int polyRef;
unsigned char jumpType;
char gap_19[3];
//---------------------------------
//
// If following a designer laid path, the path-corner entity (if any)
//
EHANDLE hPathCorner;
private:
int waypointFlags; // See WaypointFlags_t
Navigation_e navType;
AI_Waypoint_t* pNext;
AI_Waypoint_t* pPrev;
};
static_assert(sizeof(AI_Waypoint_t) == 0x38);
// todo: implement the class
class CAI_WaypointList
{
AI_Waypoint_t* m_pFirstWaypoint;
};
static_assert(sizeof(CAI_WaypointList) == 8);
#endif // AI_WAYPOINT_H

View File

@ -14,6 +14,7 @@
#include "public/playerstate.h" #include "public/playerstate.h"
#include "game/shared/animation.h" #include "game/shared/animation.h"
#include "game/shared/status_effect.h"
#include "game/shared/takedamageinfo.h" #include "game/shared/takedamageinfo.h"
#include "game/shared/usercmd.h" #include "game/shared/usercmd.h"
#include "game/shared/imovehelper.h" #include "game/shared/imovehelper.h"
@ -194,22 +195,6 @@ struct CPlayerShared // !TODO: MOVE INTO SHARED!!!
CTakeDamageInfo m_damageInfo; CTakeDamageInfo m_damageInfo;
}; };
struct StatusEffectTimedData
{
char gap_0[8];
int seComboVars;
float seTimeEnd;
float seEaseOut;
float sePausedTimeRemaining;
};
struct StatusEffectEndlessData
{
char gap_0[8];
int seComboVars;
char gap_c[4];
};
struct PushHistoryEntry struct PushHistoryEntry
{ {
float time; float time;

View File

@ -0,0 +1,26 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose:
//
// $NoKeywords: $
//
//-----------------------------------------------------------------------------
#include "baseentity.h"
#include "soundent.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//---------------------------------------------------------
// Returns the sound origin
// todo: requires implementing CBaseEntity::GetAbsOrigin.
//---------------------------------------------------------
/*const Vector3D& CSound::GetSoundOrigin(void)
{
if ((m_iType & SOUND_CONTEXT_FOLLOW_OWNER) != 0)
{
if (m_hOwner.Get() != NULL)
return m_hOwner->GetAbsOrigin();
}
return m_vecOrigin;
}*/

140
src/game/server/soundent.h Normal file
View File

@ -0,0 +1,140 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose:
//
// $NoKeywords: $
//
//-----------------------------------------------------------------------------
// Soundent.h - the entity that spawns when the world
// spawns, and handles the world's active and free sound
// lists.
//=============================================================================//
#ifndef SOUNDENT_H
#define SOUNDENT_H
#ifdef _WIN32
#pragma once
#endif
#include "game/shared/predictioncopy.h"
enum
{
SOUND_NONE = 0,
SOUND_COMBAT = 0x00000001,
SOUND_PLAYER = 0x00000002,
SOUND_WORLD = 0x00000004, // this might be wrong, wasn't in the registration in [r5apex_ds + E42FD0]
SOUND_BULLET_IMPACT = 0x00000008,
SOUND_PAINDEATH = 0x00000010,
// Anything below here is unconfirmed for r5 !!!
SOUND_CARCASS = 0x00000020,
SOUND_MEAT = 0x00000040,
SOUND_GARBAGE = 0x00000080,
SOUND_THUMPER = 0x00000100, // keeps certain creatures at bay
SOUND_BUGBAIT = 0x00000200, // gets the antlion's attention
SOUND_PHYSICS_DANGER = 0x00000400,
SOUND_DANGER_SNIPERONLY = 0x00000800, // only scares the sniper NPC.
SOUND_MOVE_AWAY = 0x00001000,
SOUND_PLAYER_VEHICLE = 0x00002000,
SOUND_READINESS_LOW = 0x00004000, // Changes listener's readiness (Player Companion only)
SOUND_READINESS_MEDIUM = 0x00008000,
SOUND_READINESS_HIGH = 0x00010000,
SOUND_AI_THREATS = SOUND_COMBAT | SOUND_BULLET_IMPACT,
// Contexts begin here.
SOUND_CONTEXT_FROM_SNIPER = 0x00100000, // additional context for SOUND_DANGER
SOUND_CONTEXT_GUNFIRE = 0x00200000, // Added to SOUND_COMBAT
SOUND_CONTEXT_MORTAR = 0x00400000, // Explosion going to happen here.
SOUND_CONTEXT_COMBINE_ONLY = 0x00800000, // Only combine can hear sounds marked this way
SOUND_CONTEXT_REACT_TO_SOURCE = 0x01000000, // React to sound source's origin, not sound's location
SOUND_CONTEXT_EXPLOSION = 0x02000000, // Context added to SOUND_COMBAT, usually.
SOUND_CONTEXT_EXCLUDE_COMBINE = 0x04000000, // Combine do NOT hear this
SOUND_CONTEXT_DANGER_APPROACH = 0x08000000, // Treat as a normal danger sound if you see the source, otherwise turn to face source.
SOUND_CONTEXT_ALLIES_ONLY = 0x10000000, // Only player allies can hear this sound
SOUND_CONTEXT_PLAYER_VEHICLE = 0x20000000, // HACK: need this because we're not treating the SOUND_xxx values as true bit values! See switch in OnListened.
SOUND_CONTEXT_FROM_FIRE = 0x40000000, // A fire is nearby
SOUND_CONTEXT_FOLLOW_OWNER = 0x80000000, // The sound origin is at the owner
ALL_CONTEXTS = 0xFFF00000,
ALL_SCENTS = SOUND_CARCASS | SOUND_MEAT | SOUND_GARBAGE,
ALL_SOUNDS = 0x000FFFFF & ~ALL_SCENTS,
};
//=========================================================
// CSound - an instance of a sound in the world.
//=========================================================
class CSound
{
//DECLARE_SIMPLE_DATADESC();
public:
bool DoesSoundExpire() const;
float SoundExpirationTime() const;
void SetSoundOrigin(const Vector3D& vecOrigin) { m_vecOrigin = vecOrigin; }
//const Vector3D& GetSoundOrigin(void);
//const Vector3D& GetSoundReactOrigin(void);
//bool FIsSound(void);
//bool FIsScent(void);
bool IsSoundType(int nSoundFlags) const;
int SoundType() const;
int SoundContext() const;
int SoundTypeNoContext() const;
int NextSound() const;
//void Reset(void);
int SoundChannel(void) const;
//bool ValidateOwner() const;
EHANDLE m_hOwner; // sound's owner.
EHANDLE m_hTarget; // Sounds's target - an odd concept. For a gunfire sound, the target is the entity being fired at.
float m_audibleRadius;
float m_expireTime; // When the sound should be purged from the list.
int m_ownerChannelIndex;
int m_iType; // What type of sound this is
Vector3D m_vecOrigin; // Sound's location in space.
edict_t m_iNext; // Temporary link that NPCs use to build a list of audible sounds.
bool m_bReserved;
bool m_ownerMustExist;
};
inline bool CSound::DoesSoundExpire() const
{
return m_expireTime > 0.0f;
}
inline float CSound::SoundExpirationTime() const
{
return m_expireTime;
}
inline bool CSound::IsSoundType(int nSoundFlags) const
{
return (m_iType & nSoundFlags) != 0;
}
inline int CSound::SoundType() const
{
return m_iType;
}
inline int CSound::SoundContext() const
{
return m_iType & ALL_CONTEXTS;
}
inline int CSound::SoundTypeNoContext() const
{
return m_iType & ~ALL_CONTEXTS;
}
inline int CSound::NextSound() const
{
return m_iNext;
}
inline int CSound::SoundChannel(void) const
{
return m_ownerChannelIndex;
}
#endif //SOUNDENT_H

View File

@ -0,0 +1,903 @@
//=============================================================================//
//
// Purpose:
//
//=============================================================================//
#ifndef AI_ACTIVITY_H
#define AI_ACTIVITY_H
#ifdef _WIN32
#pragma once
#endif
//-----------------------------------------------------------------------------
// Activity enumerants; used as constants for code and script.
//-----------------------------------------------------------------------------
enum sharedactivity_e
{
ACT_NONE = -1,
ACT_RESET = 0,
ACT_IDLE_CASUAL = 1,
ACT_IDLE = 2,
ACT_IDLE_COMBAT = 3,
ACT_IDLE_COMBAT_AIM = 4,
ACT_IDLE_SCAN = 5,
ACT_TRANSITION = 6,
ACT_COVER = 7,
ACT_COVER_MED = 8,
ACT_COVER_LOW = 9,
ACT_WALK_CASUAL = 10,
ACT_WALK = 11,
ACT_WALK_AIM = 12,
ACT_WALK_AIM_FORWARD = 13,
ACT_WALK_AIM_BACKWARD = 14,
ACT_WALK_AIM_LEFT = 15,
ACT_WALK_AIM_RIGHT = 16,
ACT_WALK_CROUCH = 17,
ACT_WALK_CROUCH_AIM = 18,
ACT_WALK_STUMBLE = 19,
ACT_RUN = 20,
ACT_RUN_FORWARD = 21,
ACT_RUN_BACKWARD = 22,
ACT_RUN_LEFT = 23,
ACT_RUN_RIGHT = 24,
ACT_RUN_UP = 25,
ACT_RUN_DOWN = 26,
ACT_RUN_AIM = 27,
ACT_RUN_AIM_FORWARD = 28,
ACT_RUN_AIM_BACKWARD = 29,
ACT_RUN_AIM_LEFT = 30,
ACT_RUN_AIM_RIGHT = 31,
ACT_RUN_AIM_UP = 32,
ACT_RUN_AIM_DOWN = 33,
ACT_RUN_CROUCH = 34,
ACT_RUN_CROUCH_AIM = 35,
ACT_SPRINT_UNARMED = 36,
ACT_SPRINT = 37,
ACT_SPRINT_FORWARD = 38,
ACT_SPRINT_BACKWARD = 39,
ACT_SPRINT_LEFT = 40,
ACT_SPRINT_RIGHT = 41,
ACT_SPRINT_RUNAWAY = 42,
ACT_SCRIPT_CUSTOM_MOVE = 43,
ACT_SCRIPT_CUSTOM_ATTACK = 44,
ACT_SCRIPT_CUSTOM_ATTACK2 = 45,
ACT_RANGE_ATTACK1 = 46,
ACT_RANGE_ATTACK1_EVASIVE = 47,
ACT_RANGE_ATTACK1_SINGLE = 48,
ACT_RANGE_ATTACK1_LOW = 49,
ACT_RANGE_ATTACK1_LOW_SINGLE = 50,
ACT_RANGE_ATTACK2 = 51,
ACT_RANGE_ATTACK_TWITCH = 52,
ACT_SPECIAL_ATTACK_START = 53,
ACT_SPECIAL_ATTACK = 54,
ACT_SPECIAL_ATTACK_END = 55,
ACT_THROW_GRENADE = 56,
ACT_FLY = 57,
ACT_FALL = 58,
ACT_FALL_RECOVERY = 59,
ACT_JUMP = 60,
ACT_JUMP_START = 61,
ACT_JUMP_FLOAT = 62,
ACT_JUMP_LAND = 63,
ACT_DOUBLEJUMP = 64,
ACT_LAND = 65,
ACT_CLIMB_UP = 66,
ACT_CLIMB_DOWN = 67,
ACT_CLIMB_DISMOUNT = 68,
ACT_WALLRUN_LEFT = 69,
ACT_WALLRUN_RIGHT = 70,
ACT_WALLJUMP_LEFT = 71,
ACT_WALLJUMP_RIGHT = 72,
ACT_CROUCH = 73,
ACT_CROUCHIDLE = 74,
ACT_CROUCHIDLE_SCAN = 75,
ACT_CROUCHIDLE_AIM = 76,
ACT_STAND = 77,
ACT_SIGNAL_ADVANCE = 78,
ACT_SIGNAL_FORWARD = 79,
ACT_SIGNAL_GROUP = 80,
ACT_SIGNAL_HALT = 81,
ACT_SIGNAL_LEFT = 82,
ACT_SIGNAL_RIGHT = 83,
ACT_SIGNAL_TAKECOVER = 84,
ACT_SIGNAL_ACKNOWLEDGE = 85,
ACT_SIGNAL_SALUTE = 86,
ACT_SIGNAL_SALUTE_HIGH = 87,
ACT_SIGNAL_SALUTE_CROUCH = 88,
ACT_SIGNAL_FORWARD_CROUCH = 89,
ACT_SIGNAL_TAUNT = 90,
ACT_SIGNAL_ENRAGE = 91,
ACT_SHOOTING_COVER_IDLE = 92,
ACT_SHOOTING_COVER_IDLE_L = 93,
ACT_SHOOTING_COVER_IDLE_R = 94,
ACT_SHOOTING_COVER_CHECK = 95,
ACT_SHOOTING_COVER_CHECK_L = 96,
ACT_SHOOTING_COVER_CHECK_R = 97,
ACT_SHOOTING_COVER_ADVANCE_FORWARD = 98,
ACT_SHOOTING_COVER_ADVANCE_FORWARD_L = 99,
ACT_SHOOTING_COVER_ADVANCE_FORWARD_R = 100,
ACT_SHOOTING_COVER_RETREAT_BACKWARD = 101,
ACT_SHOOTING_COVER_RETREAT_BACKWARD_L = 102,
ACT_SHOOTING_COVER_RETREAT_BACKWARD_R = 103,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN = 104,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN_L = 105,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN_R = 106,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN = 107,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN_L = 108,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN_R = 109,
ACT_SHOOTING_COVER_ARRIVAL_SIDE_L = 110,
ACT_SHOOTING_COVER_ARRIVAL_SIDE_R = 111,
ACT_SHOOTING_COVER_ARRIVAL_45_L = 112,
ACT_SHOOTING_COVER_ARRIVAL_45_R = 113,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_L = 114,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_R = 115,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_INV_L = 116,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_INV_R = 117,
ACT_SHOOTING_COVER_GRENADE = 118,
ACT_SHOOTING_COVER_GRENADE_L = 119,
ACT_SHOOTING_COVER_GRENADE_R = 120,
ACT_SHOOTING_COVER_GRENADE_ADVANCE = 121,
ACT_SHOOTING_COVER_GRENADE_ADVANCE_L = 122,
ACT_SHOOTING_COVER_GRENADE_ADVANCE_R = 123,
ACT_DISENGAGE = 124,
ACT_COWER = 125,
ACT_BRACE = 126,
ACT_MELEE_ATTACK1 = 127,
ACT_MELEE_ATTACK_WAIT = 128,
ACT_MELEE_HIGH = 129,
ACT_MELEE_CHARGE = 130,
ACT_MELEE_CHARGE_HIT = 131,
ACT_MELEE_CHARGE_MISS = 132,
ACT_MELEE_CHARGE_HIGH = 133,
ACT_MELEE_CHARGE_HIGH_HIT = 134,
ACT_MELEE_CHARGE_HIGH_MISS = 135,
ACT_MELEE_RAM = 136,
ACT_MELEE_LEFT = 137,
ACT_MELEE_RIGHT = 138,
ACT_MELEE_BACK = 139,
ACT_MELEE_JUMP_UP = 140,
ACT_RELOAD = 141,
ACT_RELOAD_LOW = 142,
ACT_SWITCH_WEAPON = 143,
ACT_ARM = 144,
ACT_DISARM = 145,
ACT_VICTORY_DANCE = 146,
ACT_DIESIMPLE = 147,
ACT_DIEBACKWARD = 148,
ACT_DIEFORWARD = 149,
ACT_DIE_LEFT = 150,
ACT_DIE_RIGHT = 151,
ACT_DIERAGDOLL = 152,
ACT_DIE_HEADSHOT = 153,
ACT_DIE_CHESTSHOT = 154,
ACT_DIE_GUTSHOT = 155,
ACT_DIE_BACKSHOT = 156,
ACT_DIE_FRONT_CROUCH = 157,
ACT_DIE_BACK_CROUCH = 158,
ACT_DIE_RUNNING = 159,
ACT_DIE_INSTANT_STANDING = 160,
ACT_DIE_INSTANT_RUNNING = 161,
ACT_DIE_INSTANT_CROUCH = 162,
ACT_DIE_KNOCKBACK_FORWARD = 163,
ACT_DIE_KNOCKBACK_LEFT = 164,
ACT_DIE_KNOCKBACK_RIGHT = 165,
ACT_DIE_KNOCKBACK_BACK = 166,
ACT_DIE_GRAPPLE = 167,
ACT_DIE_BLEEDOUT = 168,
ACT_DIE_DOWNED_KILL = 169,
ACT_SMALL_FLINCH = 170,
ACT_BIG_FLINCH = 171,
ACT_STUNNED = 172,
ACT_FLINCH_HEAD = 173,
ACT_FLINCH_CHEST = 174,
ACT_FLINCH_STOMACH = 175,
ACT_FLINCH_LEFTARM = 176,
ACT_FLINCH_RIGHTARM = 177,
ACT_FLINCH_LEFTLEG = 178,
ACT_FLINCH_RIGHTLEG = 179,
ACT_FLINCH_CROUCH_FRONT = 180,
ACT_FLINCH_CROUCH_BACK = 181,
ACT_FLINCH_CROUCH_LEFT = 182,
ACT_FLINCH_CROUCH_RIGHT = 183,
ACT_FLINCH_RUNNING = 184,
ACT_FLINCH_RUNNING_BUMP = 185,
ACT_FLINCH_RAM_CRASH = 186,
ACT_FLINCH_GRAPPLE = 187,
ACT_FLINCH_KNOCKBACK_FORWARD = 188,
ACT_FLINCH_KNOCKBACK_LEFT = 189,
ACT_FLINCH_KNOCKBACK_RIGHT = 190,
ACT_FLINCH_KNOCKBACK_BACK = 191,
ACT_45_LEFT = 192,
ACT_45_RIGHT = 193,
ACT_90_LEFT = 194,
ACT_90_RIGHT = 195,
ACT_180_LEFT = 196,
ACT_180_RIGHT = 197,
ACT_45_LEFT_CROUCH = 198,
ACT_45_RIGHT_CROUCH = 199,
ACT_90_LEFT_CROUCH = 200,
ACT_90_RIGHT_CROUCH = 201,
ACT_180_LEFT_CROUCH = 202,
ACT_180_RIGHT_CROUCH = 203,
ACT_45_LEFT_NONCOMBAT = 204,
ACT_45_RIGHT_NONCOMBAT = 205,
ACT_90_LEFT_NONCOMBAT = 206,
ACT_90_RIGHT_NONCOMBAT = 207,
ACT_180_LEFT_NONCOMBAT = 208,
ACT_180_RIGHT_NONCOMBAT = 209,
ACT_GESTURE_RANGE_ATTACK1 = 210,
ACT_GESTURE_GUN_UP = 211,
ACT_GESTURE_THREAT_DISPLAY = 212,
ACT_GESTURE_BLOCK = 213,
ACT_GESTURE_MELEE_ATTACK1 = 214,
ACT_GESTURE_MELEE_ATTACK2 = 215,
ACT_GESTURE_MELEE_ATTACK3 = 216,
ACT_GESTURE_SMALL_FLINCH = 217,
ACT_GESTURE_BIG_FLINCH = 218,
ACT_GESTURE_FLINCH_BLAST = 219,
ACT_GESTURE_FLINCH_BLAST_SHOTGUN = 220,
ACT_GESTURE_FLINCH_BLAST_DAMAGED = 221,
ACT_GESTURE_FLINCH_BLAST_DAMAGED_SHOTGUN = 222,
ACT_GESTURE_FLINCH_HEAD = 223,
ACT_GESTURE_FLINCH_CHEST = 224,
ACT_GESTURE_FLINCH_STOMACH = 225,
ACT_GESTURE_FLINCH_LEFTARM = 226,
ACT_GESTURE_FLINCH_RIGHTARM = 227,
ACT_GESTURE_FLINCH_LEFTLEG = 228,
ACT_GESTURE_FLINCH_RIGHTLEG = 229,
ACT_GESTURE_TURN_LEFT = 230,
ACT_GESTURE_TURN_RIGHT = 231,
ACT_GESTURE_TURN_LEFT45 = 232,
ACT_GESTURE_TURN_RIGHT45 = 233,
ACT_GESTURE_TURN_LEFT90 = 234,
ACT_GESTURE_TURN_RIGHT90 = 235,
ACT_GESTURE_TURN_LEFT45_FLAT = 236,
ACT_GESTURE_TURN_RIGHT45_FLAT = 237,
ACT_GESTURE_TURN_LEFT90_FLAT = 238,
ACT_GESTURE_TURN_RIGHT90_FLAT = 239,
ACT_RANGE_ATTACK_SMG1 = 240,
ACT_GESTURE_RELOAD = 241,
ACT_DODGE_FORWARD = 242,
ACT_DODGE_BACKWARD = 243,
ACT_DODGE_LEFT = 244,
ACT_DODGE_RIGHT = 245,
ACT_DODGE_LEFT_FAR = 246,
ACT_DODGE_RIGHT_FAR = 247,
ACT_DODGE_LEFT_RUN = 248,
ACT_DODGE_RIGHT_RUN = 249,
ACT_DODGE_LEFT_WALLHOP = 250,
ACT_DODGE_RIGHT_WALLHOP = 251,
ACT_OPEN_DOOR = 252,
ACT_IDLE_CARRY = 253,
ACT_WALK_CARRY = 254,
ACT_DEPLOY = 255,
ACT_DEPLOY_IDLE = 256,
ACT_UNDEPLOY = 257,
ACT_REACT_JUMPED_OVER = 258,
ACT_REACT_SURPRISED = 259,
ACT_REACT_SURPRISED_LEFT = 260,
ACT_REACT_SURPRISED_RIGHT = 261,
ACT_REACT_SURPRISED_BACK = 262,
ACT_REACT_BULLET = 263,
ACT_REACT_BULLET_FAR = 264,
ACT_REACT_CLOAK_APPEAR_NEAR = 265,
ACT_REACT_CLOAK_APPEAR_FAR = 266,
ACT_REACT_CLOAK_DISAPPEAR_NEAR = 267,
ACT_REACT_CLOAK_DISAPPEAR_FAR = 268,
ACT_SEARCH_AREA_CLEAR = 269,
ACT_SEARCH_LOOK_AROUND = 270,
ACT_SEARCH_CORPSE = 271,
ACT_SEARCH_WALK = 272,
ACT_SEARCH_LEAD_WALK = 273,
ACT_RUN_CHECK_LEFT = 274,
ACT_RUN_CHECK_RIGHT = 275,
ACT_RUN_PEEK_CORNER_LEFT = 276,
ACT_RUN_PEEK_CORNER_RIGHT = 277,
ACT_PIE_OFF_LEFT = 278,
ACT_PIE_OFF_RIGHT = 279,
ACT_PIE_OFF_AND_BACK_LEFT = 280,
ACT_PIE_OFF_AND_BACK_RIGHT = 281,
ACT_RELOAD_DODGE_LEFT = 282,
ACT_RELOAD_DODGE_RIGHT = 283,
ACT_STAND_TO_CRAWL = 284,
ACT_STAND_TO_STAGGER = 285,
ACT_STAND_TO_RUN_180_RIGHT = 286,
ACT_STAND_TO_RUN_135_RIGHT = 287,
ACT_STAND_TO_RUN_90_RIGHT = 288,
ACT_STAND_TO_RUN_45_RIGHT = 289,
ACT_STAND_TO_RUN_FORWARD = 290,
ACT_STAND_TO_RUN_45_LEFT = 291,
ACT_STAND_TO_RUN_90_LEFT = 292,
ACT_STAND_TO_RUN_135_LEFT = 293,
ACT_STAND_TO_RUN_180_LEFT = 294,
ACT_STAND_TO_WALK_180_RIGHT = 295,
ACT_STAND_TO_WALK_135_RIGHT = 296,
ACT_STAND_TO_WALK_90_RIGHT = 297,
ACT_STAND_TO_WALK_45_RIGHT = 298,
ACT_STAND_TO_WALK_FORWARD = 299,
ACT_STAND_TO_WALK_45_LEFT = 300,
ACT_STAND_TO_WALK_90_LEFT = 301,
ACT_STAND_TO_WALK_135_LEFT = 302,
ACT_STAND_TO_WALK_180_LEFT = 303,
ACT_STAND_TO_WALK_CASUAL_180_RIGHT = 304,
ACT_STAND_TO_WALK_CASUAL_135_RIGHT = 305,
ACT_STAND_TO_WALK_CASUAL_90_RIGHT = 306,
ACT_STAND_TO_WALK_CASUAL_45_RIGHT = 307,
ACT_STAND_TO_WALK_CASUAL_FORWARD = 308,
ACT_STAND_TO_WALK_CASUAL_45_LEFT = 309,
ACT_STAND_TO_WALK_CASUAL_90_LEFT = 310,
ACT_STAND_TO_WALK_CASUAL_135_LEFT = 311,
ACT_STAND_TO_WALK_CASUAL_180_LEFT = 312,
ACT_STAND_TO_STRAFE_RIGHT = 313,
ACT_STAND_TO_STRAFE_LEFT = 314,
ACT_STAND_TO_BACKPEDAL = 315,
ACT_CROUCH_TO_STRAFE_RIGHT = 316,
ACT_CROUCH_TO_STRAFE_LEFT = 317,
ACT_CROUCH_TO_BACKPEDAL = 318,
ACT_CROUCH_TO_RUN_180_RIGHT = 319,
ACT_CROUCH_TO_RUN_135_RIGHT = 320,
ACT_CROUCH_TO_RUN_90_RIGHT = 321,
ACT_CROUCH_TO_RUN_45_RIGHT = 322,
ACT_CROUCH_TO_RUN_FORWARD = 323,
ACT_CROUCH_TO_RUN_45_LEFT = 324,
ACT_CROUCH_TO_RUN_90_LEFT = 325,
ACT_CROUCH_TO_RUN_135_LEFT = 326,
ACT_CROUCH_TO_RUN_180_LEFT = 327,
ACT_RUN_TO_STAND_180_RIGHT = 328,
ACT_RUN_TO_STAND_135_RIGHT = 329,
ACT_RUN_TO_STAND_90_RIGHT = 330,
ACT_RUN_TO_STAND_45_RIGHT = 331,
ACT_RUN_TO_STAND_FORWARD = 332,
ACT_RUN_TO_STAND_45_LEFT = 333,
ACT_RUN_TO_STAND_90_LEFT = 334,
ACT_RUN_TO_STAND_135_LEFT = 335,
ACT_RUN_TO_STAND_180_LEFT = 336,
ACT_WALK_TO_STAND_180_RIGHT = 337,
ACT_WALK_TO_STAND_135_RIGHT = 338,
ACT_WALK_TO_STAND_90_RIGHT = 339,
ACT_WALK_TO_STAND_45_RIGHT = 340,
ACT_WALK_TO_STAND_FORWARD = 341,
ACT_WALK_TO_STAND_45_LEFT = 342,
ACT_WALK_TO_STAND_90_LEFT = 343,
ACT_WALK_TO_STAND_135_LEFT = 344,
ACT_WALK_TO_STAND_180_LEFT = 345,
ACT_WALK_CASUAL_TO_STAND_180_RIGHT = 346,
ACT_WALK_CASUAL_TO_STAND_135_RIGHT = 347,
ACT_WALK_CASUAL_TO_STAND_90_RIGHT = 348,
ACT_WALK_CASUAL_TO_STAND_45_RIGHT = 349,
ACT_WALK_CASUAL_TO_STAND_FORWARD = 350,
ACT_WALK_CASUAL_TO_STAND_45_LEFT = 351,
ACT_WALK_CASUAL_TO_STAND_90_LEFT = 352,
ACT_WALK_CASUAL_TO_STAND_135_LEFT = 353,
ACT_WALK_CASUAL_TO_STAND_180_LEFT = 354,
ACT_STRAFE_TO_STAND_RIGHT = 355,
ACT_STRAFE_TO_STAND_LEFT = 356,
ACT_STRAFE_TO_STAND_BACKPEDAL = 357,
ACT_STRAFE_TO_CROUCH_RIGHT = 358,
ACT_STRAFE_TO_CROUCH_LEFT = 359,
ACT_STRAFE_TO_CROUCH_BACKPEDAL = 360,
ACT_STAND_TO_RUN_BLINDFIRE_180 = 361,
ACT_EXIT_BACKPEDAL_TO_FORWARD_180 = 362,
ACT_RUN_TO_CROUCH_180_RIGHT = 363,
ACT_RUN_TO_CROUCH_135_RIGHT = 364,
ACT_RUN_TO_CROUCH_90_RIGHT = 365,
ACT_RUN_TO_CROUCH_45_RIGHT = 366,
ACT_RUN_TO_CROUCH_FORWARD = 367,
ACT_RUN_TO_CROUCH_45_LEFT = 368,
ACT_RUN_TO_CROUCH_90_LEFT = 369,
ACT_RUN_TO_CROUCH_135_LEFT = 370,
ACT_RUN_TO_CROUCH_180_LEFT = 371,
ACT_STAND_TO_FLEE_180_RIGHT = 372,
ACT_STAND_TO_FLEE_135_RIGHT = 373,
ACT_STAND_TO_FLEE_90_RIGHT = 374,
ACT_STAND_TO_FLEE_45_RIGHT = 375,
ACT_STAND_TO_FLEE_FORWARD = 376,
ACT_STAND_TO_FLEE_45_LEFT = 377,
ACT_STAND_TO_FLEE_90_LEFT = 378,
ACT_STAND_TO_FLEE_135_LEFT = 379,
ACT_STAND_TO_FLEE_180_LEFT = 380,
ACT_RUN_TURN_180_RIGHT = 381,
ACT_RUN_TURN_135_RIGHT = 382,
ACT_RUN_TURN_90_RIGHT = 383,
ACT_RUN_TURN_45_RIGHT = 384,
ACT_RUN_TURN_FORWARD = 385,
ACT_RUN_TURN_45_LEFT = 386,
ACT_RUN_TURN_90_LEFT = 387,
ACT_RUN_TURN_135_LEFT = 388,
ACT_RUN_TURN_180_LEFT = 389,
ACT_WALK_TURN_180_RIGHT = 390,
ACT_WALK_TURN_135_RIGHT = 391,
ACT_WALK_TURN_90_RIGHT = 392,
ACT_WALK_TURN_45_RIGHT = 393,
ACT_WALK_TURN_FORWARD = 394,
ACT_WALK_TURN_45_LEFT = 395,
ACT_WALK_TURN_90_LEFT = 396,
ACT_WALK_TURN_135_LEFT = 397,
ACT_WALK_TURN_180_LEFT = 398,
ACT_WALK_CASUAL_TURN_180_RIGHT = 399,
ACT_WALK_CASUAL_TURN_135_RIGHT = 400,
ACT_WALK_CASUAL_TURN_90_RIGHT = 401,
ACT_WALK_CASUAL_TURN_45_RIGHT = 402,
ACT_WALK_CASUAL_TURN_FORWARD = 403,
ACT_WALK_CASUAL_TURN_45_LEFT = 404,
ACT_WALK_CASUAL_TURN_90_LEFT = 405,
ACT_WALK_CASUAL_TURN_135_LEFT = 406,
ACT_WALK_CASUAL_TURN_180_LEFT = 407,
ACT_KNOCK_AWAY_PHYS_ENTS = 408,
ACT_TRAVERSE_DOWN_40 = 409,
ACT_TRAVERSE_DOWN_64 = 410,
ACT_TRAVERSE_DOWN_128 = 411,
ACT_TRAVERSE_DOWN_256 = 412,
ACT_TRAVERSE_DOWN_640 = 413,
ACT_TRAVERSE_UP_40 = 414,
ACT_TRAVERSE_UP_64 = 415,
ACT_TRAVERSE_UP_128 = 416,
ACT_TRAVERSE_UP_256 = 417,
ACT_TRAVERSE_UP_256_CLIMB = 418,
ACT_TRAVERSE_UP_640 = 419,
ACT_TRAVERSE_UP_640_CLIMB = 420,
ACT_TRAVERSE_OVER = 421,
ACT_TRAVERSE_DOOR = 422,
ACT_TRAVERSE_ACROSS_128 = 423,
ACT_TRAVERSE_ACROSS_128_REVERSE = 424,
ACT_TRAVERSE_ACROSS_256 = 425,
ACT_TRAVERSE_ACROSS_256_REVERSE = 426,
ACT_TRAVERSE_ACROSS_256_DOWN_128 = 427,
ACT_TRAVERSE_ACROSS_256_UP_128 = 428,
ACT_TRAVERSE_ACROSS_512 = 429,
ACT_TRAVERSE_ACROSS_512_REVERSE = 430,
ACT_TRAVERSE_ACROSS_512_DOWN_128 = 431,
ACT_TRAVERSE_ACROSS_512_UP_128 = 432,
ACT_TRAVERSE_ACROSS_1024 = 433,
ACT_TRAVERSE_ACROSS_1024_REVERSE = 434,
ACT_TRAVERSE_ACROSS_1024_DOWN_256 = 435,
ACT_TRAVERSE_ACROSS_1024_UP_256 = 436,
ACT_TRAVERSE_DOWN_WINDOW_192 = 437,
ACT_TRAVERSE_UP_WINDOW_192 = 438,
ACT_TRAVERSE_DOWN_WINDOW_256 = 439,
ACT_TRAVERSE_UP_WINDOW_256 = 440,
ACT_DO_NOT_DISTURB = 441,
ACT_SPECIFIC_SEQUENCE = 442,
ACT_RODEOED_STAND_IDLE = 443,
ACT_RODEOED_CROUCH_IDLE = 444,
ACT_RODEOED_WALK = 445,
ACT_RODEOED_CROUCHWALK = 446,
ACT_ZIPLINE_MOUNT = 447,
ACT_ZIPLINING = 448,
ACT_VM_DRAW = 449,
ACT_VM_DRAW_TO_SPRINT = 450,
ACT_VM_DRAWFIRST = 451,
ACT_VM_DRAWCATCH = 452,
ACT_VM_HOLSTER = 453,
ACT_VM_HOLSTER_FROM_SPRINT = 454,
ACT_VM_RAISE = 455,
ACT_VM_RAISE_FROM_SPRINT = 456,
ACT_VM_RAISE_FROM_MELEE = 457,
ACT_VM_LOWER = 458,
ACT_VM_DISCARD = 459,
ACT_VM_ADS_IN = 460,
ACT_VM_ADS_IN_ALT1 = 461,
ACT_VM_ADS_IN_ALT2 = 462,
ACT_VM_ADS_IN_ALT3 = 463,
ACT_VM_ADS_OUT = 464,
ACT_VM_ADS_OUT_ALT1 = 465,
ACT_VM_ADS_OUT_ALT2 = 466,
ACT_VM_ADS_OUT_ALT3 = 467,
ACT_VM_IDLE = 468,
ACT_VM_IDLE_ALT1 = 469,
ACT_VM_IDLE_ALT2 = 470,
ACT_VM_IDLE_ALT3 = 471,
ACT_VM_CHARGE = 472,
ACT_VM_CHARGE_VER1 = 473,
ACT_VM_CHARGE_VER2 = 474,
ACT_VM_CHARGE_VER3 = 475,
ACT_VM_CHARGE_VER4 = 476,
ACT_VM_CHARGE_LEVEL_INCREASE = 477,
ACT_VM_SPRINT = 478,
ACT_VM_FIDGET = 479,
ACT_VM_PULLBACK = 480,
ACT_VM_PULLBACK_HIGH = 481,
ACT_VM_PULLBACK_LOW = 482,
ACT_VM_THROW = 483,
ACT_VM_PRIMARYATTACK = 484,
ACT_VM_PRIMARYATTACK_ALT1 = 485,
ACT_VM_PRIMARYATTACK_ALT2 = 486,
ACT_VM_PRIMARYATTACK_ALT3 = 487,
ACT_VM_PRIMARYATTACK_SEQUENTIAL = 488,
ACT_VM_PRIMARYATTACK_ALT1_SEQUENTIAL = 489,
ACT_VM_PRIMARYATTACK_ALT2_SEQUENTIAL = 490,
ACT_VM_PRIMARYATTACK_ALT3_SEQUENTIAL = 491,
ACT_VM_SECONDARYATTACK = 492,
ACT_VM_MELEE_ATTACK1 = 493,
ACT_VM_MELEE_ATTACK2 = 494,
ACT_VM_MELEE_ATTACK3 = 495,
ACT_VM_MELEE_KNIFE_FIRST = 496,
ACT_VM_MELEE_KNIFE = 497,
ACT_VM_MELEE_CHARGE = 498,
ACT_VM_RELOAD = 499,
ACT_VM_RELOAD_LATE1 = 500,
ACT_VM_RELOAD_LATE2 = 501,
ACT_VM_RELOAD_LATE3 = 502,
ACT_VM_RELOAD_LATE4 = 503,
ACT_VM_RELOAD_LATE5 = 504,
ACT_VM_RELOADEMPTY = 505,
ACT_VM_RELOADEMPTY_LATE1 = 506,
ACT_VM_RELOADEMPTY_LATE2 = 507,
ACT_VM_RELOADEMPTY_LATE3 = 508,
ACT_VM_RELOADEMPTY_LATE4 = 509,
ACT_VM_RELOADEMPTY_LATE5 = 510,
ACT_VM_RELOAD_ALT1 = 511,
ACT_VM_RELOAD_LATE1_ALT1 = 512,
ACT_VM_RELOAD_LATE2_ALT1 = 513,
ACT_VM_RELOAD_LATE3_ALT1 = 514,
ACT_VM_RELOAD_LATE4_ALT1 = 515,
ACT_VM_RELOAD_LATE5_ALT1 = 516,
ACT_VM_RELOADEMPTY_ALT1 = 517,
ACT_VM_RELOADEMPTY_LATE1_ALT1 = 518,
ACT_VM_RELOADEMPTY_LATE2_ALT1 = 519,
ACT_VM_RELOADEMPTY_LATE3_ALT1 = 520,
ACT_VM_RELOADEMPTY_LATE4_ALT1 = 521,
ACT_VM_RELOADEMPTY_LATE5_ALT1 = 522,
ACT_VM_SEGMENTEDRELOAD_LOOP = 523,
ACT_VM_SEGMENTEDRELOAD_END = 524,
ACT_VM_SEGMENTEDEMPTYRELOAD_END = 525,
ACT_VM_DRYFIRE = 526,
ACT_VM_HITCENTER = 527,
ACT_VM_HITCENTER2 = 528,
ACT_VM_MISSCENTER = 529,
ACT_VM_MISSCENTER2 = 530,
ACT_VM_HAULBACK = 531,
ACT_VM_RECOIL1 = 532,
ACT_VM_RECOIL2 = 533,
ACT_VM_RECOIL3 = 534,
ACT_VM_PICKUP = 535,
ACT_VM_RELEASE = 536,
ACT_VM_RECHAMBER = 537,
ACT_VM_RECHAMBER_LATE1 = 538,
ACT_VM_RECHAMBER_LATE2 = 539,
ACT_VM_RECHAMBER_LATE3 = 540,
ACT_VM_ZIPLINE_MOUNT = 541,
ACT_VM_TOSS = 542,
ACT_VM_TOSS_OVERHEAD = 543,
ACT_VM_TOSS_PREP = 544,
ACT_VM_TOSS_PREP_PULLOUT = 545,
ACT_VM_TOSS_HOLD = 546,
ACT_VM_TOSS_HOLD_SPRINTING = 547,
ACT_VM_COOLDOWN = 548,
ACT_VM_COOLDOWN_OVERHEAT = 549,
ACT_VM_COOLDOWN_OVERHEAT_LATE1 = 550,
ACT_VM_COOLDOWN_OVERHEAT_LATE2 = 551,
ACT_VM_COOLDOWN_OVERHEAT_LATE3 = 552,
ACT_VM_DASH = 553,
ACT_VM_GRAPPLE_START = 554,
ACT_VM_GRAPPLE_IDLE = 555,
ACT_VM_GRAPPLE_STOP = 556,
ACT_VM_WEAPON_INSPECT = 557,
ACT_VM_JUMP = 558,
ACT_VM_DOUBLEJUMP = 559,
ACT_VM_LAND = 560,
ACT_VM_LAND_LOW = 561,
ACT_VM_LAND_MEDIUM = 562,
ACT_VM_LAND_HIGH = 563,
ACT_VM_WEAPON_MOD_ADD = 564,
ACT_VM_WEAPON_MOD_REMOVE = 565,
ACT_VM_SUSTAINED_DISCHARGE = 566,
ACT_VM_TRAVERSAL_WINDOW_LEFT = 567,
ACT_VM_TRAVERSAL_WINDOW_RIGHT = 568,
ACT_VM_MANTLE_BELOW = 569,
ACT_VM_MANTLE_LEVEL = 570,
ACT_VM_MANTLE_ABOVE = 571,
ACT_VM_MANTLE_HIGH = 572,
ACT_VM_MANTLE_CROUCH_BELOW = 573,
ACT_VM_MANTLE_CROUCH_LEVEL = 574,
ACT_VM_MANTLE_CROUCH_ABOVE = 575,
ACT_VM_MANTLE_CROUCH_HIGH = 576,
ACT_VM_MANTLE_IDLE = 577,
ACT_VM_MANTLE_JUMPOFF = 578,
ACT_VM_ONEHANDED_ADS_IN = 579,
ACT_VM_ONEHANDED_ADS_IN_ALT1 = 580,
ACT_VM_ONEHANDED_ADS_IN_ALT2 = 581,
ACT_VM_ONEHANDED_ADS_IN_ALT3 = 582,
ACT_VM_ONEHANDED_ADS_OUT = 583,
ACT_VM_ONEHANDED_ADS_OUT_ALT1 = 584,
ACT_VM_ONEHANDED_ADS_OUT_ALT2 = 585,
ACT_VM_ONEHANDED_ADS_OUT_ALT3 = 586,
ACT_VM_ONEHANDED_IDLE = 587,
ACT_VM_ONEHANDED_IDLE_ALT1 = 588,
ACT_VM_ONEHANDED_IDLE_ALT2 = 589,
ACT_VM_ONEHANDED_IDLE_ALT3 = 590,
ACT_VM_ONEHANDED_CHARGE = 591,
ACT_VM_ONEHANDED_SPRINT = 592,
ACT_VM_ONEHANDED_PRIMARYATTACK = 593,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT1 = 594,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT2 = 595,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT3 = 596,
ACT_VM_ONEHANDED_PRIMARYATTACK_SEQUENTIAL = 597,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT1_SEQUENTIAL = 598,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT2_SEQUENTIAL = 599,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT3_SEQUENTIAL = 600,
ACT_VM_ONEHANDED_RELOAD = 601,
ACT_VM_ONEHANDED_RELOAD_LATE1 = 602,
ACT_VM_ONEHANDED_RELOAD_LATE2 = 603,
ACT_VM_ONEHANDED_RELOAD_LATE3 = 604,
ACT_VM_ONEHANDED_RELOAD_LATE4 = 605,
ACT_VM_ONEHANDED_RELOAD_LATE5 = 606,
ACT_VM_ONEHANDED_RELOADEMPTY = 607,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE1 = 608,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE2 = 609,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE3 = 610,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE4 = 611,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE5 = 612,
ACT_VM_ONEHANDED_RELOAD_ALT1 = 613,
ACT_VM_ONEHANDED_RELOAD_LATE1_ALT1 = 614,
ACT_VM_ONEHANDED_RELOAD_LATE2_ALT1 = 615,
ACT_VM_ONEHANDED_RELOAD_LATE3_ALT1 = 616,
ACT_VM_ONEHANDED_RELOAD_LATE4_ALT1 = 617,
ACT_VM_ONEHANDED_RELOAD_LATE5_ALT1 = 618,
ACT_VM_ONEHANDED_RELOADEMPTY_ALT1 = 619,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE1_ALT1 = 620,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE2_ALT1 = 621,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE3_ALT1 = 622,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE4_ALT1 = 623,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE5_ALT1 = 624,
ACT_VM_ONEHANDED_SEGMENTEDRELOAD_LOOP = 625,
ACT_VM_ONEHANDED_SEGMENTEDRELOAD_END = 626,
ACT_VM_ONEHANDED_SEGMENTEDEMPTYRELOAD_END = 627,
ACT_VM_ONEHANDED_RECHAMBER = 628,
ACT_VM_ONEHANDED_RECHAMBER_LATE1 = 629,
ACT_VM_ONEHANDED_RECHAMBER_LATE2 = 630,
ACT_VM_ONEHANDED_RECHAMBER_LATE3 = 631,
ACT_VM_ONEHANDED_DRAW = 632,
ACT_VM_ONEHANDED_DRAWFIRST = 633,
ACT_VM_ONEHANDED_HOLSTER = 634,
ACT_VM_ONEHANDED_LOWER = 635,
ACT_VM_ONEHANDED_RAISE = 636,
ACT_VM_ONEHANDED_RAISE_FROM_SPRINT = 637,
ACT_VM_ONEHANDED_RAISE_FROM_MELEE = 638,
ACT_VM_ONEHANDED_TOSS = 639,
ACT_VM_ONEHANDED_TOSS_OVERHEAD = 640,
ACT_VM_ONEHANDED_TOSS_PREP = 641,
ACT_VM_ONEHANDED_TOSS_PREP_PULLOUT = 642,
ACT_VM_ONEHANDED_TOSS_HOLD = 643,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT = 644,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE1 = 645,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE2 = 646,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE3 = 647,
ACT_VM_ONEHANDED_SUSTAINED_DISCHARGE = 648,
ACT_MP_STAND_IDLE = 649,
ACT_MP_CROUCH_IDLE = 650,
ACT_MP_CROUCH_DEPLOYED_IDLE = 651,
ACT_MP_CROUCH_DEPLOYED = 652,
ACT_MP_DEPLOYED_IDLE = 653,
ACT_MP_RUN = 654,
ACT_MP_RUN_FORWARD = 655,
ACT_MP_RUN_BACKWARD = 656,
ACT_MP_RUN_LEFT = 657,
ACT_MP_RUN_RIGHT = 658,
ACT_MP_STAGGERED_RUN = 659,
ACT_MP_STAGGERED_RUN_FORWARD = 660,
ACT_MP_STAGGERED_RUN_BACKWARD = 661,
ACT_MP_STAGGERED_RUN_LEFT = 662,
ACT_MP_STAGGERED_RUN_RIGHT = 663,
ACT_MP_WALK = 664,
ACT_MP_WALK_FORWARD = 665,
ACT_MP_WALK_BACKWARD = 666,
ACT_MP_WALK_LEFT = 667,
ACT_MP_WALK_RIGHT = 668,
ACT_MP_STAGGERED_WALK = 669,
ACT_MP_STAGGERED_WALK_FORWARD = 670,
ACT_MP_STAGGERED_WALK_BACKWARD = 671,
ACT_MP_STAGGERED_WALK_LEFT = 672,
ACT_MP_STAGGERED_WALK_RIGHT = 673,
ACT_MP_AIRWALK = 674,
ACT_MP_CROUCHWALK = 675,
ACT_MP_CROUCHWALK_FORWARD = 676,
ACT_MP_CROUCHWALK_BACKWARD = 677,
ACT_MP_CROUCHWALK_LEFT = 678,
ACT_MP_CROUCHWALK_RIGHT = 679,
ACT_MP_STAGGERED_CROUCHWALK = 680,
ACT_MP_STAGGERED_CROUCHWALK_FORWARD = 681,
ACT_MP_STAGGERED_CROUCHWALK_BACKWARD = 682,
ACT_MP_STAGGERED_CROUCHWALK_LEFT = 683,
ACT_MP_STAGGERED_CROUCHWALK_RIGHT = 684,
ACT_MP_SPRINT = 685,
ACT_MP_STAGGERED_SPRINT = 686,
ACT_MP_SLIDE = 687,
ACT_MP_SLIDE_FORWARD = 688,
ACT_MP_SLIDE_BACKWARD = 689,
ACT_MP_SLIDE_LEFT = 690,
ACT_MP_SLIDE_RIGHT = 691,
ACT_MP_JUMP = 692,
ACT_MP_JUMP_START = 693,
ACT_MP_JUMP_FLOAT = 694,
ACT_MP_JUMP_LAND = 695,
ACT_MP_JUMP_LAND_FORWARD = 696,
ACT_MP_JUMP_LAND_BACKWARD = 697,
ACT_MP_JUMP_LAND_LEFT = 698,
ACT_MP_JUMP_LAND_RIGHT = 699,
ACT_MP_JUMP_LAND_LOW = 700,
ACT_MP_JUMP_LAND_LOW_FORWARD = 701,
ACT_MP_JUMP_LAND_LOW_BACKWARD = 702,
ACT_MP_JUMP_LAND_LOW_LEFT = 703,
ACT_MP_JUMP_LAND_LOW_RIGHT = 704,
ACT_MP_JUMP_LAND_MEDIUM = 705,
ACT_MP_JUMP_LAND_MEDIUM_FORWARD = 706,
ACT_MP_JUMP_LAND_MEDIUM_BACKWARD = 707,
ACT_MP_JUMP_LAND_MEDIUM_LEFT = 708,
ACT_MP_JUMP_LAND_MEDIUM_RIGHT = 709,
ACT_MP_JUMP_LAND_HIGH = 710,
ACT_MP_JUMP_LAND_HIGH_FORWARD = 711,
ACT_MP_JUMP_LAND_HIGH_BACKWARD = 712,
ACT_MP_JUMP_LAND_HIGH_LEFT = 713,
ACT_MP_JUMP_LAND_HIGH_RIGHT = 714,
ACT_MP_JUMP_IMPACT_N = 715,
ACT_MP_JUMP_IMPACT_E = 716,
ACT_MP_JUMP_IMPACT_W = 717,
ACT_MP_JUMP_IMPACT_S = 718,
ACT_MP_JUMP_IMPACT_TOP = 719,
ACT_MP_DOUBLEJUMP = 720,
ACT_MP_DEPLOYED = 721,
ACT_MP_VCD = 722,
ACT_MP_DODGE = 723,
ACT_MP_DODGE_FORWARD = 724,
ACT_MP_DODGE_BACKWARD = 725,
ACT_MP_DODGE_LEFT = 726,
ACT_MP_DODGE_RIGHT = 727,
ACT_MP_DODGE_FLOAT = 728,
ACT_MP_DODGE_FLOAT_FORWARD = 729,
ACT_MP_DODGE_FLOAT_BACKWARD = 730,
ACT_MP_DODGE_FLOAT_LEFT = 731,
ACT_MP_DODGE_FLOAT_RIGHT = 732,
ACT_MP_DODGE_LAND = 733,
ACT_MP_DODGE_LAND_FORWARD = 734,
ACT_MP_DODGE_LAND_BACKWARD = 735,
ACT_MP_DODGE_LAND_LEFT = 736,
ACT_MP_DODGE_LAND_RIGHT = 737,
ACT_MP_WALLRUN_UP = 738,
ACT_MP_WALLRUN_LEFT = 739,
ACT_MP_WALLRUN_RIGHT = 740,
ACT_MP_WALLRUN_FALL_BACK = 741,
ACT_MP_WALLRUN_FALL_FRONT = 742,
ACT_MP_WALLRUN_FALL_LEFT = 743,
ACT_MP_WALLRUN_FALL_RIGHT = 744,
ACT_MP_WALLHANG_IDLE = 745,
ACT_MP_WALLHANG_LEFT = 746,
ACT_MP_WALLHANG_RIGHT = 747,
ACT_MP_WALLHANG_UP = 748,
ACT_MP_WALLHANG_FRONT = 749,
ACT_MP_WALLJUMP_LEFT = 750,
ACT_MP_WALLJUMP_RIGHT = 751,
ACT_MP_WALLJUMP_UP = 752,
ACT_MP_CROUCHSLIDE = 753,
ACT_MP_CROUCHSLIDE_END_FORWARD = 754,
ACT_MP_CROUCHSLIDE_END_BACKWARD_LEFT = 755,
ACT_MP_CROUCHSLIDE_END_BACKWARD_RIGHT = 756,
ACT_MP_CROUCHSLIDE_END_LEFT = 757,
ACT_MP_CROUCHSLIDE_END_RIGHT = 758,
ACT_MP_CROUCHSLIDE_AIR = 759,
ACT_MP_GRAPPLE = 760,
ACT_MP_GESTURE_GRAPPLE_FIRE = 761,
ACT_MP_FREEFALL = 762,
ACT_MP_FREEFALL_ANTICIPATE = 763,
ACT_MP_FREEFALL_TRANSITION_TO_ANTICIPATE = 764,
ACT_MP_FREEFALL_TRANSITION_FROM_ANTICIPATE = 765,
ACT_MP_VEHICLE_DRIVER_IDLE = 766,
ACT_MP_TRAVERSAL_WINDOW_LEFT = 767,
ACT_MP_TRAVERSAL_WINDOW_RIGHT = 768,
ACT_MP_MANTLE_BELOW = 769,
ACT_MP_MANTLE_LEVEL = 770,
ACT_MP_MANTLE_ABOVE = 771,
ACT_MP_MANTLE_HIGH = 772,
ACT_MP_MANTLE_CROUCH_BELOW = 773,
ACT_MP_MANTLE_CROUCH_LEVEL = 774,
ACT_MP_MANTLE_CROUCH_ABOVE = 775,
ACT_MP_MANTLE_CROUCH_HIGH = 776,
ACT_MP_MANTLE_IDLE = 777,
ACT_MP_MANTLE_JUMPOFF = 778,
ACT_MP_ATTACK_STAND_PRIMARYFIRE = 779,
ACT_MP_ATTACK_STAND_SECONDARYFIRE = 780,
ACT_MP_ATTACK_STAND_GRENADE = 781,
ACT_MP_ATTACK_STAND_GRENADE_PULLOUT = 782,
ACT_MP_ATTACK_CROUCH_PRIMARYFIRE = 783,
ACT_MP_ATTACK_CROUCH_SECONDARYFIRE = 784,
ACT_MP_ATTACK_CROUCH_GRENADE = 785,
ACT_MP_ATTACK_AIRWALK_PRIMARYFIRE = 786,
ACT_MP_ATTACK_AIRWALK_SECONDARYFIRE = 787,
ACT_MP_ATTACK_AIRWALK_GRENADE = 788,
ACT_MP_RELOAD_STAND = 789,
ACT_MP_RELOAD_CROUCH = 790,
ACT_MP_OFFHAND_START = 791,
ACT_MP_OFFHAND_END = 792,
ACT_MP_OFFHAND_FIRE = 793,
ACT_MP_OFFHAND_CHARGING = 794,
ACT_MP_OFFHAND_CHARGING_ALT_1 = 795,
ACT_MP_OFFHAND_CHARGING_ALT_2 = 796,
ACT_MP_OFFHAND_CHARGING_ALT_3 = 797,
ACT_MP_OFFHAND_CHARGING_ALT_4 = 798,
ACT_MP_MELEE = 799,
ACT_MP_MELEE_KNIFE_FIRST = 800,
ACT_MP_MELEE_KNIFE = 801,
ACT_MP_EQUIP_FROM_RIFLE_TO_RIFLE = 802,
ACT_MP_EQUIP_FROM_RIFLE_TO_PISTOL = 803,
ACT_MP_EQUIP_FROM_RIFLE_TO_ROCKET = 804,
ACT_MP_EQUIP_FROM_PISTOL_TO_PISTOL = 805,
ACT_MP_EQUIP_FROM_PISTOL_TO_RIFLE = 806,
ACT_MP_EQUIP_FROM_PISTOL_TO_ROCKET = 807,
ACT_MP_EQUIP_FROM_ROCKET_TO_ROCKET = 808,
ACT_MP_EQUIP_FROM_ROCKET_TO_RIFLE = 809,
ACT_MP_EQUIP_FROM_ROCKET_TO_PISTOL = 810,
ACT_MP_LOOT_IDLE_STAND = 811,
ACT_MP_LOOT_IDLE_CROUCH = 812,
ACT_TRANSITION_TO_DOWNED_FROM_STANDING = 813,
ACT_TRANSITION_TO_STANDING_FROM_DOWNED = 814,
ACT_MP_DOWNED_IDLE = 815,
ACT_MP_DOWNED_CRAWL = 816,
ACT_MP_DOWNED_CRAWL_FORWARD = 817,
ACT_MP_DOWNED_CRAWL_BACKWARD = 818,
ACT_MP_DOWNED_CRAWL_LEFT = 819,
ACT_MP_DOWNED_CRAWL_RIGHT = 820,
ACT_MP_MENU_LOBBY_LEFT_IDLE = 821,
ACT_MP_MENU_LOBBY_CENTER_IDLE = 822,
ACT_MP_MENU_LOBBY_RIGHT_IDLE = 823,
ACT_MP_MENU_LOBBY_SELECT_IDLE = 824,
ACT_MP_MENU_MAIN_INTRO = 825,
ACT_MP_MENU_MAIN_IDLE = 826,
ACT_MP_MENU_READYUP_INTRO = 827,
ACT_MP_MENU_READYUP_IDLE = 828,
ACT_MP_MENU_DETAILS_INTRO = 829,
ACT_MP_MENU_DETAILS_IDLE = 830,
ACT_MP_MENU_SQUAD_IDLE = 831,
ACT_MP_MENU_GROUPSHOT_SLOT_A = 832,
ACT_MP_MENU_GROUPSHOT_SLOT_B = 833,
ACT_MP_MENU_GROUPSHOT_SLOT_C = 834,
ACT_MP_MENU_LOOT_CEREMONY_IDLE = 835,
ACT_MP_STAND_PRIMARY = 836,
ACT_MP_CROUCH_PRIMARY = 837,
ACT_MP_RUN_PRIMARY = 838,
ACT_MP_WALK_PRIMARY = 839,
ACT_MP_AIRWALK_PRIMARY = 840,
ACT_MP_CROUCHWALK_PRIMARY = 841,
ACT_MP_JUMP_PRIMARY = 842,
ACT_MP_JUMP_START_PRIMARY = 843,
ACT_MP_JUMP_FLOAT_PRIMARY = 844,
ACT_MP_JUMP_LAND_PRIMARY = 845,
ACT_MP_DEPLOYED_PRIMARY = 846,
ACT_MP_STAND_SECONDARY = 847,
ACT_MP_RUN_SECONDARY = 848,
ACT_MP_STAND_MELEE = 849,
ACT_MP_CROUCH_MELEE = 850,
ACT_MP_RUN_MELEE = 851,
ACT_MP_WALK_MELEE = 852,
ACT_MP_AIRWALK_MELEE = 853,
ACT_MP_CROUCHWALK_MELEE = 854,
ACT_MP_JUMP_MELEE = 855,
ACT_MP_JUMP_START_MELEE = 856,
ACT_MP_JUMP_FLOAT_MELEE = 857,
ACT_MP_JUMP_LAND_MELEE = 858,
ACT_MP_GESTURE_FLINCH_BACKWARDS = 859,
ACT_MP_GESTURE_FLINCH_LEFT = 860,
ACT_MP_GESTURE_FLINCH_FORWARDS = 861,
ACT_MP_GESTURE_FLINCH_RIGHT = 862,
ACT_MP_DEATH_CRUSH = 863,
ACT_MP_DEATH_GENERIC = 864,
ACT_MP_DEATH_CROUCH = 865,
ACT_MP_DEATH_WALK = 866,
ACT_MP_DEATH_WALK_FORWARD = 867,
ACT_MP_DEATH_WALK_BACKWARD = 868,
ACT_MP_DEATH_WALK_LEFT = 869,
ACT_MP_DEATH_WALK_RIGHT = 870,
ACT_MP_DEATH_RUN = 871,
ACT_MP_DEATH_RUN_FORWARD = 872,
ACT_MP_DEATH_RUN_BACKWARD = 873,
ACT_MP_DEATH_RUN_LEFT = 874,
ACT_MP_DEATH_RUN_RIGHT = 875,
ACT_MP_DEATH_SPRINT = 876,
ACT_MP_DEATH_SPRINT_FORWARD = 877,
ACT_MP_RUN_SPEEDPAINT_PRIMARY = 878,
ACT_MP_DROWNING_PRIMARY = 879,
ACT_MP_LONG_FALL_PRIMARY = 880,
ACT_MP_TRACTORBEAM_FLOAT_PRIMARY = 881,
ACT_MP_DEATH_CRUSH_PRIMARY = 882,
};
#endif // AI_ACTIVITY_H

View File

@ -0,0 +1,41 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose:
//
//=============================================================================//
/*
#include "cbase.h"
#include "simtimer.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
BEGIN_SIMPLE_DATADESC(CSimpleSimTimer)
DEFINE_FIELD(m_next, FIELD_TIME),
END_DATADESC()
BEGIN_SIMPLE_DATADESC_(CSimTimer, CSimpleSimTimer)
DEFINE_FIELD(m_interval, FIELD_FLOAT),
END_DATADESC()
BEGIN_SIMPLE_DATADESC_(CRandSimTimer, CSimpleSimTimer)
DEFINE_FIELD(m_minInterval, FIELD_FLOAT),
DEFINE_FIELD(m_maxInterval, FIELD_FLOAT),
END_DATADESC()
BEGIN_SIMPLE_DATADESC_(CStopwatchBase, CSimpleSimTimer)
DEFINE_FIELD(m_fIsRunning, FIELD_BOOLEAN),
END_DATADESC()
BEGIN_SIMPLE_DATADESC_(CStopwatch, CStopwatchBase)
DEFINE_FIELD(m_interval, FIELD_FLOAT),
END_DATADESC()
BEGIN_SIMPLE_DATADESC_(CRandStopwatch, CStopwatchBase)
DEFINE_FIELD(m_minInterval, FIELD_FLOAT),
DEFINE_FIELD(m_maxInterval, FIELD_FLOAT),
END_DATADESC()
*/
//-----------------------------------------------------------------------------

351
src/game/shared/simtimer.h Normal file
View File

@ -0,0 +1,351 @@
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include <game/server/gameinterface.h>
#ifndef SIMTIMER_H
#define SIMTIMER_H
#if defined( _WIN32 )
#pragma once
#endif
#define ST_EPS 0.001
#define DEFINE_SIMTIMER( type, name ) DEFINE_EMBEDDED( type, name )
//-----------------------------------------------------------------------------
class CSimpleSimTimer
{
public:
CSimpleSimTimer()
: m_next( -1 )
{
}
void Force()
{
m_next = -1;
}
bool Expired() const
{
return ( (*g_pGlobals)->m_flCurTime - m_next > -ST_EPS );
}
float Delay( float delayTime )
{
return (m_next += delayTime);
}
float GetNext() const
{
return m_next;
}
void Set( float interval )
{
m_next = (*g_pGlobals)->m_flCurTime + interval;
}
// TODO: get CUniformRandomStream global, see 141809528 for global!!!
//void Set( float minInterval, float maxInterval )
//{
// if ( maxInterval > 0.0 )
// m_next = (*g_pGlobals)->m_flCurTime + random->RandomFloat( minInterval, maxInterval );
// else
// m_next = (*g_pGlobals)->m_flCurTime + minInterval;
//}
float GetRemaining() const
{
float result = m_next - (*g_pGlobals)->m_flCurTime;
if (result < 0 )
return 0;
return result;
}
//DECLARE_SIMPLE_DATADESC();
protected:
float m_next;
};
//-----------------------------------------------------------------------------
class CSimTimer : public CSimpleSimTimer
{
public:
CSimTimer( float interval = 0.0f, bool startExpired = true )
{
Set( interval, startExpired );
}
void Set( float interval, bool startExpired = true )
{
m_interval = interval;
m_next = (startExpired) ? -1.0f : (*g_pGlobals)->m_flCurTime + m_interval;
}
void Reset( float interval = -1.0f )
{
if ( interval == -1.0f )
{
m_next = (*g_pGlobals)->m_flCurTime + m_interval;
}
else
{
m_next = (*g_pGlobals)->m_flCurTime + interval;
}
}
float GetInterval() const
{
return m_interval;
}
//DECLARE_SIMPLE_DATADESC();
private:
float m_interval;
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
class CRandSimTimer : public CSimpleSimTimer
{
public:
// TODO: get CUniformRandomStream global, see 141809528 for global!!!
//CRandSimTimer( float minInterval = 0.0, float maxInterval = 0.0, bool startExpired = true )
//{
// Set( minInterval, maxInterval, startExpired );
//}
//void Set( float minInterval, float maxInterval = 0.0, bool startExpired = true )
//{
// m_minInterval = minInterval;
// m_maxInterval = maxInterval;
//
// if (startExpired)
// {
// m_next = -1;
// }
// else
// {
// if ( m_maxInterval == 0 )
// m_next = (*g_pGlobals)->m_flCurTime + m_minInterval;
// else
// m_next = (*g_pGlobals)->m_flCurTime + random->RandomFloat( m_minInterval, m_maxInterval );
// }
//}
//void Reset()
//{
// if ( m_maxInterval == 0 )
// m_next = (*g_pGlobals)->m_flCurTime + m_minInterval;
// else
// m_next = (*g_pGlobals)->m_flCurTime + random->RandomFloat( m_minInterval, m_maxInterval );
//}
float GetMinInterval() const
{
return m_minInterval;
}
float GetMaxInterval() const
{
return m_maxInterval;
}
//DECLARE_SIMPLE_DATADESC();
private:
float m_minInterval;
float m_maxInterval;
};
//-----------------------------------------------------------------------------
class CStopwatchBase : public CSimpleSimTimer
{
public:
CStopwatchBase()
{
m_fIsRunning = false;
}
bool IsRunning() const
{
return m_fIsRunning;
}
void Stop()
{
m_fIsRunning = false;
}
bool Expired() const
{
return ( m_fIsRunning && CSimpleSimTimer::Expired() );
}
//DECLARE_SIMPLE_DATADESC();
protected:
bool m_fIsRunning;
};
//-------------------------------------
class CSimpleStopwatch : public CStopwatchBase
{
public:
// TODO: get CUniformRandomStream global, see 141809528 for global!!!
//void Start( float minCountdown, float maxCountdown = 0.0 )
//{
// m_fIsRunning = true;
// CSimpleSimTimer::Set( minCountdown, maxCountdown );
//}
void Stop()
{
m_fIsRunning = false;
}
bool Expired() const
{
return ( m_fIsRunning && CSimpleSimTimer::Expired() );
}
};
//-------------------------------------
class CStopwatch : public CStopwatchBase
{
public:
CStopwatch ( float interval = 0.0 )
{
Set( interval );
}
void Set( float interval )
{
m_interval = interval;
}
void Start( float intervalOverride )
{
m_fIsRunning = true;
m_next = (*g_pGlobals)->m_flCurTime + intervalOverride;
}
void Start()
{
Start( m_interval );
}
float GetInterval() const
{
return m_interval;
}
//DECLARE_SIMPLE_DATADESC();
private:
float m_interval;
};
//-------------------------------------
class CRandStopwatch : public CStopwatchBase
{
public:
CRandStopwatch( float minInterval = 0.0, float maxInterval = 0.0 )
{
Set( minInterval, maxInterval );
}
void Set( float minInterval, float maxInterval = 0.0 )
{
m_minInterval = minInterval;
m_maxInterval = maxInterval;
}
// TODO: get CUniformRandomStream global, see 141809528 for global!!!
//void Start( float minOverride, float maxOverride = 0.0 )
//{
// m_fIsRunning = true;
// if ( maxOverride == 0 )
// m_next = (*g_pGlobals)->m_flCurTime + minOverride;
// else
// m_next = (*g_pGlobals)->m_flCurTime + random->RandomFloat( minOverride, maxOverride );
//}
//void Start()
//{
// Start( m_minInterval, m_maxInterval );
//}
float GetInterval() const
{
return m_minInterval;
}
float GetMinInterval() const
{
return m_minInterval;
}
float GetMaxInterval() const
{
return m_maxInterval;
}
//DECLARE_SIMPLE_DATADESC();
private:
float m_minInterval;
float m_maxInterval;
};
//-----------------------------------------------------------------------------
class CThinkOnceSemaphore
{
public:
CThinkOnceSemaphore()
: m_lastTime( -1 )
{
}
bool EnterThink()
{
if ( m_lastTime == (*g_pGlobals)->m_flCurTime)
return false;
m_lastTime = (*g_pGlobals)->m_flCurTime;
return true;
}
bool DidThink() const
{
return ( (*g_pGlobals)->m_flCurTime == m_lastTime );
}
void SetDidThink()
{
m_lastTime = (*g_pGlobals)->m_flCurTime;
}
private:
float m_lastTime;
};
//-----------------------------------------------------------------------------
#endif // SIMTIMER_H

View File

@ -0,0 +1,25 @@
//=============================================================================//
//
// Purpose: Status Effect code and script definitions
//
//=============================================================================//
#ifndef STATUS_EFFECT_H
#define STATUS_EFFECT_H
struct StatusEffectTimedData
{
char gap_0[8];
int seComboVars;
float seTimeEnd;
float seEaseOut;
float sePausedTimeRemaining;
};
struct StatusEffectEndlessData
{
char gap_0[8];
int seComboVars;
char gap_c[4];
};
#endif // STATUS_EFFECT_H

View File

@ -9,6 +9,7 @@
#include "tier1/utlbuffer.h" #include "tier1/utlbuffer.h"
#include "game/shared/in_buttons.h" #include "game/shared/in_buttons.h"
#include "game/shared/weapon_types.h" #include "game/shared/weapon_types.h"
#include "game/shared/shared_activity.h"
ConVar usercmd_frametime_max("usercmd_frametime_max", "0.100" , FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "The largest amount of simulation seconds a UserCmd can have." ); ConVar usercmd_frametime_max("usercmd_frametime_max", "0.100" , FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "The largest amount of simulation seconds a UserCmd can have." );
ConVar usercmd_frametime_min("usercmd_frametime_min", "0.002857", FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "The smallest amount of simulation seconds a UserCmd can have."); ConVar usercmd_frametime_min("usercmd_frametime_min", "0.002857", FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "The smallest amount of simulation seconds a UserCmd can have.");

View File

@ -1,897 +1,6 @@
#ifndef WEAPON_TYPES_H #ifndef WEAPON_TYPES_H
#define WEAPON_TYPES_H #define WEAPON_TYPES_H
//-----------------------------------------------------------------------------
// Weapon activity enumerants; used as constants for scripts.
//-----------------------------------------------------------------------------
enum WeaponActivity_t
{
ACT_NONE = -1,
ACT_RESET = 0,
ACT_IDLE_CASUAL = 1,
ACT_IDLE = 2,
ACT_IDLE_COMBAT = 3,
ACT_IDLE_COMBAT_AIM = 4,
ACT_IDLE_SCAN = 5,
ACT_TRANSITION = 6,
ACT_COVER = 7,
ACT_COVER_MED = 8,
ACT_COVER_LOW = 9,
ACT_WALK_CASUAL = 10,
ACT_WALK = 11,
ACT_WALK_AIM = 12,
ACT_WALK_AIM_FORWARD = 13,
ACT_WALK_AIM_BACKWARD = 14,
ACT_WALK_AIM_LEFT = 15,
ACT_WALK_AIM_RIGHT = 16,
ACT_WALK_CROUCH = 17,
ACT_WALK_CROUCH_AIM = 18,
ACT_WALK_STUMBLE = 19,
ACT_RUN = 20,
ACT_RUN_FORWARD = 21,
ACT_RUN_BACKWARD = 22,
ACT_RUN_LEFT = 23,
ACT_RUN_RIGHT = 24,
ACT_RUN_UP = 25,
ACT_RUN_DOWN = 26,
ACT_RUN_AIM = 27,
ACT_RUN_AIM_FORWARD = 28,
ACT_RUN_AIM_BACKWARD = 29,
ACT_RUN_AIM_LEFT = 30,
ACT_RUN_AIM_RIGHT = 31,
ACT_RUN_AIM_UP = 32,
ACT_RUN_AIM_DOWN = 33,
ACT_RUN_CROUCH = 34,
ACT_RUN_CROUCH_AIM = 35,
ACT_SPRINT_UNARMED = 36,
ACT_SPRINT = 37,
ACT_SPRINT_FORWARD = 38,
ACT_SPRINT_BACKWARD = 39,
ACT_SPRINT_LEFT = 40,
ACT_SPRINT_RIGHT = 41,
ACT_SPRINT_RUNAWAY = 42,
ACT_SCRIPT_CUSTOM_MOVE = 43,
ACT_SCRIPT_CUSTOM_ATTACK = 44,
ACT_SCRIPT_CUSTOM_ATTACK2 = 45,
ACT_RANGE_ATTACK1 = 46,
ACT_RANGE_ATTACK1_EVASIVE = 47,
ACT_RANGE_ATTACK1_SINGLE = 48,
ACT_RANGE_ATTACK1_LOW = 49,
ACT_RANGE_ATTACK1_LOW_SINGLE = 50,
ACT_RANGE_ATTACK2 = 51,
ACT_RANGE_ATTACK_TWITCH = 52,
ACT_SPECIAL_ATTACK_START = 53,
ACT_SPECIAL_ATTACK = 54,
ACT_SPECIAL_ATTACK_END = 55,
ACT_THROW_GRENADE = 56,
ACT_FLY = 57,
ACT_FALL = 58,
ACT_FALL_RECOVERY = 59,
ACT_JUMP = 60,
ACT_JUMP_START = 61,
ACT_JUMP_FLOAT = 62,
ACT_JUMP_LAND = 63,
ACT_DOUBLEJUMP = 64,
ACT_LAND = 65,
ACT_CLIMB_UP = 66,
ACT_CLIMB_DOWN = 67,
ACT_CLIMB_DISMOUNT = 68,
ACT_WALLRUN_LEFT = 69,
ACT_WALLRUN_RIGHT = 70,
ACT_WALLJUMP_LEFT = 71,
ACT_WALLJUMP_RIGHT = 72,
ACT_CROUCH = 73,
ACT_CROUCHIDLE = 74,
ACT_CROUCHIDLE_SCAN = 75,
ACT_CROUCHIDLE_AIM = 76,
ACT_STAND = 77,
ACT_SIGNAL_ADVANCE = 78,
ACT_SIGNAL_FORWARD = 79,
ACT_SIGNAL_GROUP = 80,
ACT_SIGNAL_HALT = 81,
ACT_SIGNAL_LEFT = 82,
ACT_SIGNAL_RIGHT = 83,
ACT_SIGNAL_TAKECOVER = 84,
ACT_SIGNAL_ACKNOWLEDGE = 85,
ACT_SIGNAL_SALUTE = 86,
ACT_SIGNAL_SALUTE_HIGH = 87,
ACT_SIGNAL_SALUTE_CROUCH = 88,
ACT_SIGNAL_FORWARD_CROUCH = 89,
ACT_SIGNAL_TAUNT = 90,
ACT_SIGNAL_ENRAGE = 91,
ACT_SHOOTING_COVER_IDLE = 92,
ACT_SHOOTING_COVER_IDLE_L = 93,
ACT_SHOOTING_COVER_IDLE_R = 94,
ACT_SHOOTING_COVER_CHECK = 95,
ACT_SHOOTING_COVER_CHECK_L = 96,
ACT_SHOOTING_COVER_CHECK_R = 97,
ACT_SHOOTING_COVER_ADVANCE_FORWARD = 98,
ACT_SHOOTING_COVER_ADVANCE_FORWARD_L = 99,
ACT_SHOOTING_COVER_ADVANCE_FORWARD_R = 100,
ACT_SHOOTING_COVER_RETREAT_BACKWARD = 101,
ACT_SHOOTING_COVER_RETREAT_BACKWARD_L = 102,
ACT_SHOOTING_COVER_RETREAT_BACKWARD_R = 103,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN = 104,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN_L = 105,
ACT_SHOOTING_COVER_ADVANCE_SIDELEAN_R = 106,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN = 107,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN_L = 108,
ACT_SHOOTING_COVER_RETREAT_SIDELEAN_R = 109,
ACT_SHOOTING_COVER_ARRIVAL_SIDE_L = 110,
ACT_SHOOTING_COVER_ARRIVAL_SIDE_R = 111,
ACT_SHOOTING_COVER_ARRIVAL_45_L = 112,
ACT_SHOOTING_COVER_ARRIVAL_45_R = 113,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_L = 114,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_R = 115,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_INV_L = 116,
ACT_SHOOTING_COVER_ARRIVAL_FRONT_INV_R = 117,
ACT_SHOOTING_COVER_GRENADE = 118,
ACT_SHOOTING_COVER_GRENADE_L = 119,
ACT_SHOOTING_COVER_GRENADE_R = 120,
ACT_SHOOTING_COVER_GRENADE_ADVANCE = 121,
ACT_SHOOTING_COVER_GRENADE_ADVANCE_L = 122,
ACT_SHOOTING_COVER_GRENADE_ADVANCE_R = 123,
ACT_DISENGAGE = 124,
ACT_COWER = 125,
ACT_BRACE = 126,
ACT_MELEE_ATTACK1 = 127,
ACT_MELEE_ATTACK_WAIT = 128,
ACT_MELEE_HIGH = 129,
ACT_MELEE_CHARGE = 130,
ACT_MELEE_CHARGE_HIT = 131,
ACT_MELEE_CHARGE_MISS = 132,
ACT_MELEE_CHARGE_HIGH = 133,
ACT_MELEE_CHARGE_HIGH_HIT = 134,
ACT_MELEE_CHARGE_HIGH_MISS = 135,
ACT_MELEE_RAM = 136,
ACT_MELEE_LEFT = 137,
ACT_MELEE_RIGHT = 138,
ACT_MELEE_BACK = 139,
ACT_MELEE_JUMP_UP = 140,
ACT_RELOAD = 141,
ACT_RELOAD_LOW = 142,
ACT_SWITCH_WEAPON = 143,
ACT_ARM = 144,
ACT_DISARM = 145,
ACT_VICTORY_DANCE = 146,
ACT_DIESIMPLE = 147,
ACT_DIEBACKWARD = 148,
ACT_DIEFORWARD = 149,
ACT_DIE_LEFT = 150,
ACT_DIE_RIGHT = 151,
ACT_DIERAGDOLL = 152,
ACT_DIE_HEADSHOT = 153,
ACT_DIE_CHESTSHOT = 154,
ACT_DIE_GUTSHOT = 155,
ACT_DIE_BACKSHOT = 156,
ACT_DIE_FRONT_CROUCH = 157,
ACT_DIE_BACK_CROUCH = 158,
ACT_DIE_RUNNING = 159,
ACT_DIE_INSTANT_STANDING = 160,
ACT_DIE_INSTANT_RUNNING = 161,
ACT_DIE_INSTANT_CROUCH = 162,
ACT_DIE_KNOCKBACK_FORWARD = 163,
ACT_DIE_KNOCKBACK_LEFT = 164,
ACT_DIE_KNOCKBACK_RIGHT = 165,
ACT_DIE_KNOCKBACK_BACK = 166,
ACT_DIE_GRAPPLE = 167,
ACT_DIE_BLEEDOUT = 168,
ACT_DIE_DOWNED_KILL = 169,
ACT_SMALL_FLINCH = 170,
ACT_BIG_FLINCH = 171,
ACT_STUNNED = 172,
ACT_FLINCH_HEAD = 173,
ACT_FLINCH_CHEST = 174,
ACT_FLINCH_STOMACH = 175,
ACT_FLINCH_LEFTARM = 176,
ACT_FLINCH_RIGHTARM = 177,
ACT_FLINCH_LEFTLEG = 178,
ACT_FLINCH_RIGHTLEG = 179,
ACT_FLINCH_CROUCH_FRONT = 180,
ACT_FLINCH_CROUCH_BACK = 181,
ACT_FLINCH_CROUCH_LEFT = 182,
ACT_FLINCH_CROUCH_RIGHT = 183,
ACT_FLINCH_RUNNING = 184,
ACT_FLINCH_RUNNING_BUMP = 185,
ACT_FLINCH_RAM_CRASH = 186,
ACT_FLINCH_GRAPPLE = 187,
ACT_FLINCH_KNOCKBACK_FORWARD = 188,
ACT_FLINCH_KNOCKBACK_LEFT = 189,
ACT_FLINCH_KNOCKBACK_RIGHT = 190,
ACT_FLINCH_KNOCKBACK_BACK = 191,
ACT_45_LEFT = 192,
ACT_45_RIGHT = 193,
ACT_90_LEFT = 194,
ACT_90_RIGHT = 195,
ACT_180_LEFT = 196,
ACT_180_RIGHT = 197,
ACT_45_LEFT_CROUCH = 198,
ACT_45_RIGHT_CROUCH = 199,
ACT_90_LEFT_CROUCH = 200,
ACT_90_RIGHT_CROUCH = 201,
ACT_180_LEFT_CROUCH = 202,
ACT_180_RIGHT_CROUCH = 203,
ACT_45_LEFT_NONCOMBAT = 204,
ACT_45_RIGHT_NONCOMBAT = 205,
ACT_90_LEFT_NONCOMBAT = 206,
ACT_90_RIGHT_NONCOMBAT = 207,
ACT_180_LEFT_NONCOMBAT = 208,
ACT_180_RIGHT_NONCOMBAT = 209,
ACT_GESTURE_RANGE_ATTACK1 = 210,
ACT_GESTURE_GUN_UP = 211,
ACT_GESTURE_THREAT_DISPLAY = 212,
ACT_GESTURE_BLOCK = 213,
ACT_GESTURE_MELEE_ATTACK1 = 214,
ACT_GESTURE_MELEE_ATTACK2 = 215,
ACT_GESTURE_MELEE_ATTACK3 = 216,
ACT_GESTURE_SMALL_FLINCH = 217,
ACT_GESTURE_BIG_FLINCH = 218,
ACT_GESTURE_FLINCH_BLAST = 219,
ACT_GESTURE_FLINCH_BLAST_SHOTGUN = 220,
ACT_GESTURE_FLINCH_BLAST_DAMAGED = 221,
ACT_GESTURE_FLINCH_BLAST_DAMAGED_SHOTGUN = 222,
ACT_GESTURE_FLINCH_HEAD = 223,
ACT_GESTURE_FLINCH_CHEST = 224,
ACT_GESTURE_FLINCH_STOMACH = 225,
ACT_GESTURE_FLINCH_LEFTARM = 226,
ACT_GESTURE_FLINCH_RIGHTARM = 227,
ACT_GESTURE_FLINCH_LEFTLEG = 228,
ACT_GESTURE_FLINCH_RIGHTLEG = 229,
ACT_GESTURE_TURN_LEFT = 230,
ACT_GESTURE_TURN_RIGHT = 231,
ACT_GESTURE_TURN_LEFT45 = 232,
ACT_GESTURE_TURN_RIGHT45 = 233,
ACT_GESTURE_TURN_LEFT90 = 234,
ACT_GESTURE_TURN_RIGHT90 = 235,
ACT_GESTURE_TURN_LEFT45_FLAT = 236,
ACT_GESTURE_TURN_RIGHT45_FLAT = 237,
ACT_GESTURE_TURN_LEFT90_FLAT = 238,
ACT_GESTURE_TURN_RIGHT90_FLAT = 239,
ACT_RANGE_ATTACK_SMG1 = 240,
ACT_GESTURE_RELOAD = 241,
ACT_DODGE_FORWARD = 242,
ACT_DODGE_BACKWARD = 243,
ACT_DODGE_LEFT = 244,
ACT_DODGE_RIGHT = 245,
ACT_DODGE_LEFT_FAR = 246,
ACT_DODGE_RIGHT_FAR = 247,
ACT_DODGE_LEFT_RUN = 248,
ACT_DODGE_RIGHT_RUN = 249,
ACT_DODGE_LEFT_WALLHOP = 250,
ACT_DODGE_RIGHT_WALLHOP = 251,
ACT_OPEN_DOOR = 252,
ACT_IDLE_CARRY = 253,
ACT_WALK_CARRY = 254,
ACT_DEPLOY = 255,
ACT_DEPLOY_IDLE = 256,
ACT_UNDEPLOY = 257,
ACT_REACT_JUMPED_OVER = 258,
ACT_REACT_SURPRISED = 259,
ACT_REACT_SURPRISED_LEFT = 260,
ACT_REACT_SURPRISED_RIGHT = 261,
ACT_REACT_SURPRISED_BACK = 262,
ACT_REACT_BULLET = 263,
ACT_REACT_BULLET_FAR = 264,
ACT_REACT_CLOAK_APPEAR_NEAR = 265,
ACT_REACT_CLOAK_APPEAR_FAR = 266,
ACT_REACT_CLOAK_DISAPPEAR_NEAR = 267,
ACT_REACT_CLOAK_DISAPPEAR_FAR = 268,
ACT_SEARCH_AREA_CLEAR = 269,
ACT_SEARCH_LOOK_AROUND = 270,
ACT_SEARCH_CORPSE = 271,
ACT_SEARCH_WALK = 272,
ACT_SEARCH_LEAD_WALK = 273,
ACT_RUN_CHECK_LEFT = 274,
ACT_RUN_CHECK_RIGHT = 275,
ACT_RUN_PEEK_CORNER_LEFT = 276,
ACT_RUN_PEEK_CORNER_RIGHT = 277,
ACT_PIE_OFF_LEFT = 278,
ACT_PIE_OFF_RIGHT = 279,
ACT_PIE_OFF_AND_BACK_LEFT = 280,
ACT_PIE_OFF_AND_BACK_RIGHT = 281,
ACT_RELOAD_DODGE_LEFT = 282,
ACT_RELOAD_DODGE_RIGHT = 283,
ACT_STAND_TO_CRAWL = 284,
ACT_STAND_TO_STAGGER = 285,
ACT_STAND_TO_RUN_180_RIGHT = 286,
ACT_STAND_TO_RUN_135_RIGHT = 287,
ACT_STAND_TO_RUN_90_RIGHT = 288,
ACT_STAND_TO_RUN_45_RIGHT = 289,
ACT_STAND_TO_RUN_FORWARD = 290,
ACT_STAND_TO_RUN_45_LEFT = 291,
ACT_STAND_TO_RUN_90_LEFT = 292,
ACT_STAND_TO_RUN_135_LEFT = 293,
ACT_STAND_TO_RUN_180_LEFT = 294,
ACT_STAND_TO_WALK_180_RIGHT = 295,
ACT_STAND_TO_WALK_135_RIGHT = 296,
ACT_STAND_TO_WALK_90_RIGHT = 297,
ACT_STAND_TO_WALK_45_RIGHT = 298,
ACT_STAND_TO_WALK_FORWARD = 299,
ACT_STAND_TO_WALK_45_LEFT = 300,
ACT_STAND_TO_WALK_90_LEFT = 301,
ACT_STAND_TO_WALK_135_LEFT = 302,
ACT_STAND_TO_WALK_180_LEFT = 303,
ACT_STAND_TO_WALK_CASUAL_180_RIGHT = 304,
ACT_STAND_TO_WALK_CASUAL_135_RIGHT = 305,
ACT_STAND_TO_WALK_CASUAL_90_RIGHT = 306,
ACT_STAND_TO_WALK_CASUAL_45_RIGHT = 307,
ACT_STAND_TO_WALK_CASUAL_FORWARD = 308,
ACT_STAND_TO_WALK_CASUAL_45_LEFT = 309,
ACT_STAND_TO_WALK_CASUAL_90_LEFT = 310,
ACT_STAND_TO_WALK_CASUAL_135_LEFT = 311,
ACT_STAND_TO_WALK_CASUAL_180_LEFT = 312,
ACT_STAND_TO_STRAFE_RIGHT = 313,
ACT_STAND_TO_STRAFE_LEFT = 314,
ACT_STAND_TO_BACKPEDAL = 315,
ACT_CROUCH_TO_STRAFE_RIGHT = 316,
ACT_CROUCH_TO_STRAFE_LEFT = 317,
ACT_CROUCH_TO_BACKPEDAL = 318,
ACT_CROUCH_TO_RUN_180_RIGHT = 319,
ACT_CROUCH_TO_RUN_135_RIGHT = 320,
ACT_CROUCH_TO_RUN_90_RIGHT = 321,
ACT_CROUCH_TO_RUN_45_RIGHT = 322,
ACT_CROUCH_TO_RUN_FORWARD = 323,
ACT_CROUCH_TO_RUN_45_LEFT = 324,
ACT_CROUCH_TO_RUN_90_LEFT = 325,
ACT_CROUCH_TO_RUN_135_LEFT = 326,
ACT_CROUCH_TO_RUN_180_LEFT = 327,
ACT_RUN_TO_STAND_180_RIGHT = 328,
ACT_RUN_TO_STAND_135_RIGHT = 329,
ACT_RUN_TO_STAND_90_RIGHT = 330,
ACT_RUN_TO_STAND_45_RIGHT = 331,
ACT_RUN_TO_STAND_FORWARD = 332,
ACT_RUN_TO_STAND_45_LEFT = 333,
ACT_RUN_TO_STAND_90_LEFT = 334,
ACT_RUN_TO_STAND_135_LEFT = 335,
ACT_RUN_TO_STAND_180_LEFT = 336,
ACT_WALK_TO_STAND_180_RIGHT = 337,
ACT_WALK_TO_STAND_135_RIGHT = 338,
ACT_WALK_TO_STAND_90_RIGHT = 339,
ACT_WALK_TO_STAND_45_RIGHT = 340,
ACT_WALK_TO_STAND_FORWARD = 341,
ACT_WALK_TO_STAND_45_LEFT = 342,
ACT_WALK_TO_STAND_90_LEFT = 343,
ACT_WALK_TO_STAND_135_LEFT = 344,
ACT_WALK_TO_STAND_180_LEFT = 345,
ACT_WALK_CASUAL_TO_STAND_180_RIGHT = 346,
ACT_WALK_CASUAL_TO_STAND_135_RIGHT = 347,
ACT_WALK_CASUAL_TO_STAND_90_RIGHT = 348,
ACT_WALK_CASUAL_TO_STAND_45_RIGHT = 349,
ACT_WALK_CASUAL_TO_STAND_FORWARD = 350,
ACT_WALK_CASUAL_TO_STAND_45_LEFT = 351,
ACT_WALK_CASUAL_TO_STAND_90_LEFT = 352,
ACT_WALK_CASUAL_TO_STAND_135_LEFT = 353,
ACT_WALK_CASUAL_TO_STAND_180_LEFT = 354,
ACT_STRAFE_TO_STAND_RIGHT = 355,
ACT_STRAFE_TO_STAND_LEFT = 356,
ACT_STRAFE_TO_STAND_BACKPEDAL = 357,
ACT_STRAFE_TO_CROUCH_RIGHT = 358,
ACT_STRAFE_TO_CROUCH_LEFT = 359,
ACT_STRAFE_TO_CROUCH_BACKPEDAL = 360,
ACT_STAND_TO_RUN_BLINDFIRE_180 = 361,
ACT_EXIT_BACKPEDAL_TO_FORWARD_180 = 362,
ACT_RUN_TO_CROUCH_180_RIGHT = 363,
ACT_RUN_TO_CROUCH_135_RIGHT = 364,
ACT_RUN_TO_CROUCH_90_RIGHT = 365,
ACT_RUN_TO_CROUCH_45_RIGHT = 366,
ACT_RUN_TO_CROUCH_FORWARD = 367,
ACT_RUN_TO_CROUCH_45_LEFT = 368,
ACT_RUN_TO_CROUCH_90_LEFT = 369,
ACT_RUN_TO_CROUCH_135_LEFT = 370,
ACT_RUN_TO_CROUCH_180_LEFT = 371,
ACT_STAND_TO_FLEE_180_RIGHT = 372,
ACT_STAND_TO_FLEE_135_RIGHT = 373,
ACT_STAND_TO_FLEE_90_RIGHT = 374,
ACT_STAND_TO_FLEE_45_RIGHT = 375,
ACT_STAND_TO_FLEE_FORWARD = 376,
ACT_STAND_TO_FLEE_45_LEFT = 377,
ACT_STAND_TO_FLEE_90_LEFT = 378,
ACT_STAND_TO_FLEE_135_LEFT = 379,
ACT_STAND_TO_FLEE_180_LEFT = 380,
ACT_RUN_TURN_180_RIGHT = 381,
ACT_RUN_TURN_135_RIGHT = 382,
ACT_RUN_TURN_90_RIGHT = 383,
ACT_RUN_TURN_45_RIGHT = 384,
ACT_RUN_TURN_FORWARD = 385,
ACT_RUN_TURN_45_LEFT = 386,
ACT_RUN_TURN_90_LEFT = 387,
ACT_RUN_TURN_135_LEFT = 388,
ACT_RUN_TURN_180_LEFT = 389,
ACT_WALK_TURN_180_RIGHT = 390,
ACT_WALK_TURN_135_RIGHT = 391,
ACT_WALK_TURN_90_RIGHT = 392,
ACT_WALK_TURN_45_RIGHT = 393,
ACT_WALK_TURN_FORWARD = 394,
ACT_WALK_TURN_45_LEFT = 395,
ACT_WALK_TURN_90_LEFT = 396,
ACT_WALK_TURN_135_LEFT = 397,
ACT_WALK_TURN_180_LEFT = 398,
ACT_WALK_CASUAL_TURN_180_RIGHT = 399,
ACT_WALK_CASUAL_TURN_135_RIGHT = 400,
ACT_WALK_CASUAL_TURN_90_RIGHT = 401,
ACT_WALK_CASUAL_TURN_45_RIGHT = 402,
ACT_WALK_CASUAL_TURN_FORWARD = 403,
ACT_WALK_CASUAL_TURN_45_LEFT = 404,
ACT_WALK_CASUAL_TURN_90_LEFT = 405,
ACT_WALK_CASUAL_TURN_135_LEFT = 406,
ACT_WALK_CASUAL_TURN_180_LEFT = 407,
ACT_KNOCK_AWAY_PHYS_ENTS = 408,
ACT_TRAVERSE_DOWN_40 = 409,
ACT_TRAVERSE_DOWN_64 = 410,
ACT_TRAVERSE_DOWN_128 = 411,
ACT_TRAVERSE_DOWN_256 = 412,
ACT_TRAVERSE_DOWN_640 = 413,
ACT_TRAVERSE_UP_40 = 414,
ACT_TRAVERSE_UP_64 = 415,
ACT_TRAVERSE_UP_128 = 416,
ACT_TRAVERSE_UP_256 = 417,
ACT_TRAVERSE_UP_256_CLIMB = 418,
ACT_TRAVERSE_UP_640 = 419,
ACT_TRAVERSE_UP_640_CLIMB = 420,
ACT_TRAVERSE_OVER = 421,
ACT_TRAVERSE_DOOR = 422,
ACT_TRAVERSE_ACROSS_128 = 423,
ACT_TRAVERSE_ACROSS_128_REVERSE = 424,
ACT_TRAVERSE_ACROSS_256 = 425,
ACT_TRAVERSE_ACROSS_256_REVERSE = 426,
ACT_TRAVERSE_ACROSS_256_DOWN_128 = 427,
ACT_TRAVERSE_ACROSS_256_UP_128 = 428,
ACT_TRAVERSE_ACROSS_512 = 429,
ACT_TRAVERSE_ACROSS_512_REVERSE = 430,
ACT_TRAVERSE_ACROSS_512_DOWN_128 = 431,
ACT_TRAVERSE_ACROSS_512_UP_128 = 432,
ACT_TRAVERSE_ACROSS_1024 = 433,
ACT_TRAVERSE_ACROSS_1024_REVERSE = 434,
ACT_TRAVERSE_ACROSS_1024_DOWN_256 = 435,
ACT_TRAVERSE_ACROSS_1024_UP_256 = 436,
ACT_TRAVERSE_DOWN_WINDOW_192 = 437,
ACT_TRAVERSE_UP_WINDOW_192 = 438,
ACT_TRAVERSE_DOWN_WINDOW_256 = 439,
ACT_TRAVERSE_UP_WINDOW_256 = 440,
ACT_DO_NOT_DISTURB = 441,
ACT_SPECIFIC_SEQUENCE = 442,
ACT_RODEOED_STAND_IDLE = 443,
ACT_RODEOED_CROUCH_IDLE = 444,
ACT_RODEOED_WALK = 445,
ACT_RODEOED_CROUCHWALK = 446,
ACT_ZIPLINE_MOUNT = 447,
ACT_ZIPLINING = 448,
ACT_VM_DRAW = 449,
ACT_VM_DRAW_TO_SPRINT = 450,
ACT_VM_DRAWFIRST = 451,
ACT_VM_DRAWCATCH = 452,
ACT_VM_HOLSTER = 453,
ACT_VM_HOLSTER_FROM_SPRINT = 454,
ACT_VM_RAISE = 455,
ACT_VM_RAISE_FROM_SPRINT = 456,
ACT_VM_RAISE_FROM_MELEE = 457,
ACT_VM_LOWER = 458,
ACT_VM_DISCARD = 459,
ACT_VM_ADS_IN = 460,
ACT_VM_ADS_IN_ALT1 = 461,
ACT_VM_ADS_IN_ALT2 = 462,
ACT_VM_ADS_IN_ALT3 = 463,
ACT_VM_ADS_OUT = 464,
ACT_VM_ADS_OUT_ALT1 = 465,
ACT_VM_ADS_OUT_ALT2 = 466,
ACT_VM_ADS_OUT_ALT3 = 467,
ACT_VM_IDLE = 468,
ACT_VM_IDLE_ALT1 = 469,
ACT_VM_IDLE_ALT2 = 470,
ACT_VM_IDLE_ALT3 = 471,
ACT_VM_CHARGE = 472,
ACT_VM_CHARGE_VER1 = 473,
ACT_VM_CHARGE_VER2 = 474,
ACT_VM_CHARGE_VER3 = 475,
ACT_VM_CHARGE_VER4 = 476,
ACT_VM_CHARGE_LEVEL_INCREASE = 477,
ACT_VM_SPRINT = 478,
ACT_VM_FIDGET = 479,
ACT_VM_PULLBACK = 480,
ACT_VM_PULLBACK_HIGH = 481,
ACT_VM_PULLBACK_LOW = 482,
ACT_VM_THROW = 483,
ACT_VM_PRIMARYATTACK = 484,
ACT_VM_PRIMARYATTACK_ALT1 = 485,
ACT_VM_PRIMARYATTACK_ALT2 = 486,
ACT_VM_PRIMARYATTACK_ALT3 = 487,
ACT_VM_PRIMARYATTACK_SEQUENTIAL = 488,
ACT_VM_PRIMARYATTACK_ALT1_SEQUENTIAL = 489,
ACT_VM_PRIMARYATTACK_ALT2_SEQUENTIAL = 490,
ACT_VM_PRIMARYATTACK_ALT3_SEQUENTIAL = 491,
ACT_VM_SECONDARYATTACK = 492,
ACT_VM_MELEE_ATTACK1 = 493,
ACT_VM_MELEE_ATTACK2 = 494,
ACT_VM_MELEE_ATTACK3 = 495,
ACT_VM_MELEE_KNIFE_FIRST = 496,
ACT_VM_MELEE_KNIFE = 497,
ACT_VM_MELEE_CHARGE = 498,
ACT_VM_RELOAD = 499,
ACT_VM_RELOAD_LATE1 = 500,
ACT_VM_RELOAD_LATE2 = 501,
ACT_VM_RELOAD_LATE3 = 502,
ACT_VM_RELOAD_LATE4 = 503,
ACT_VM_RELOAD_LATE5 = 504,
ACT_VM_RELOADEMPTY = 505,
ACT_VM_RELOADEMPTY_LATE1 = 506,
ACT_VM_RELOADEMPTY_LATE2 = 507,
ACT_VM_RELOADEMPTY_LATE3 = 508,
ACT_VM_RELOADEMPTY_LATE4 = 509,
ACT_VM_RELOADEMPTY_LATE5 = 510,
ACT_VM_RELOAD_ALT1 = 511,
ACT_VM_RELOAD_LATE1_ALT1 = 512,
ACT_VM_RELOAD_LATE2_ALT1 = 513,
ACT_VM_RELOAD_LATE3_ALT1 = 514,
ACT_VM_RELOAD_LATE4_ALT1 = 515,
ACT_VM_RELOAD_LATE5_ALT1 = 516,
ACT_VM_RELOADEMPTY_ALT1 = 517,
ACT_VM_RELOADEMPTY_LATE1_ALT1 = 518,
ACT_VM_RELOADEMPTY_LATE2_ALT1 = 519,
ACT_VM_RELOADEMPTY_LATE3_ALT1 = 520,
ACT_VM_RELOADEMPTY_LATE4_ALT1 = 521,
ACT_VM_RELOADEMPTY_LATE5_ALT1 = 522,
ACT_VM_SEGMENTEDRELOAD_LOOP = 523,
ACT_VM_SEGMENTEDRELOAD_END = 524,
ACT_VM_SEGMENTEDEMPTYRELOAD_END = 525,
ACT_VM_DRYFIRE = 526,
ACT_VM_HITCENTER = 527,
ACT_VM_HITCENTER2 = 528,
ACT_VM_MISSCENTER = 529,
ACT_VM_MISSCENTER2 = 530,
ACT_VM_HAULBACK = 531,
ACT_VM_RECOIL1 = 532,
ACT_VM_RECOIL2 = 533,
ACT_VM_RECOIL3 = 534,
ACT_VM_PICKUP = 535,
ACT_VM_RELEASE = 536,
ACT_VM_RECHAMBER = 537,
ACT_VM_RECHAMBER_LATE1 = 538,
ACT_VM_RECHAMBER_LATE2 = 539,
ACT_VM_RECHAMBER_LATE3 = 540,
ACT_VM_ZIPLINE_MOUNT = 541,
ACT_VM_TOSS = 542,
ACT_VM_TOSS_OVERHEAD = 543,
ACT_VM_TOSS_PREP = 544,
ACT_VM_TOSS_PREP_PULLOUT = 545,
ACT_VM_TOSS_HOLD = 546,
ACT_VM_TOSS_HOLD_SPRINTING = 547,
ACT_VM_COOLDOWN = 548,
ACT_VM_COOLDOWN_OVERHEAT = 549,
ACT_VM_COOLDOWN_OVERHEAT_LATE1 = 550,
ACT_VM_COOLDOWN_OVERHEAT_LATE2 = 551,
ACT_VM_COOLDOWN_OVERHEAT_LATE3 = 552,
ACT_VM_DASH = 553,
ACT_VM_GRAPPLE_START = 554,
ACT_VM_GRAPPLE_IDLE = 555,
ACT_VM_GRAPPLE_STOP = 556,
ACT_VM_WEAPON_INSPECT = 557,
ACT_VM_JUMP = 558,
ACT_VM_DOUBLEJUMP = 559,
ACT_VM_LAND = 560,
ACT_VM_LAND_LOW = 561,
ACT_VM_LAND_MEDIUM = 562,
ACT_VM_LAND_HIGH = 563,
ACT_VM_WEAPON_MOD_ADD = 564,
ACT_VM_WEAPON_MOD_REMOVE = 565,
ACT_VM_SUSTAINED_DISCHARGE = 566,
ACT_VM_TRAVERSAL_WINDOW_LEFT = 567,
ACT_VM_TRAVERSAL_WINDOW_RIGHT = 568,
ACT_VM_MANTLE_BELOW = 569,
ACT_VM_MANTLE_LEVEL = 570,
ACT_VM_MANTLE_ABOVE = 571,
ACT_VM_MANTLE_HIGH = 572,
ACT_VM_MANTLE_CROUCH_BELOW = 573,
ACT_VM_MANTLE_CROUCH_LEVEL = 574,
ACT_VM_MANTLE_CROUCH_ABOVE = 575,
ACT_VM_MANTLE_CROUCH_HIGH = 576,
ACT_VM_MANTLE_IDLE = 577,
ACT_VM_MANTLE_JUMPOFF = 578,
ACT_VM_ONEHANDED_ADS_IN = 579,
ACT_VM_ONEHANDED_ADS_IN_ALT1 = 580,
ACT_VM_ONEHANDED_ADS_IN_ALT2 = 581,
ACT_VM_ONEHANDED_ADS_IN_ALT3 = 582,
ACT_VM_ONEHANDED_ADS_OUT = 583,
ACT_VM_ONEHANDED_ADS_OUT_ALT1 = 584,
ACT_VM_ONEHANDED_ADS_OUT_ALT2 = 585,
ACT_VM_ONEHANDED_ADS_OUT_ALT3 = 586,
ACT_VM_ONEHANDED_IDLE = 587,
ACT_VM_ONEHANDED_IDLE_ALT1 = 588,
ACT_VM_ONEHANDED_IDLE_ALT2 = 589,
ACT_VM_ONEHANDED_IDLE_ALT3 = 590,
ACT_VM_ONEHANDED_CHARGE = 591,
ACT_VM_ONEHANDED_SPRINT = 592,
ACT_VM_ONEHANDED_PRIMARYATTACK = 593,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT1 = 594,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT2 = 595,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT3 = 596,
ACT_VM_ONEHANDED_PRIMARYATTACK_SEQUENTIAL = 597,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT1_SEQUENTIAL = 598,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT2_SEQUENTIAL = 599,
ACT_VM_ONEHANDED_PRIMARYATTACK_ALT3_SEQUENTIAL = 600,
ACT_VM_ONEHANDED_RELOAD = 601,
ACT_VM_ONEHANDED_RELOAD_LATE1 = 602,
ACT_VM_ONEHANDED_RELOAD_LATE2 = 603,
ACT_VM_ONEHANDED_RELOAD_LATE3 = 604,
ACT_VM_ONEHANDED_RELOAD_LATE4 = 605,
ACT_VM_ONEHANDED_RELOAD_LATE5 = 606,
ACT_VM_ONEHANDED_RELOADEMPTY = 607,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE1 = 608,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE2 = 609,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE3 = 610,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE4 = 611,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE5 = 612,
ACT_VM_ONEHANDED_RELOAD_ALT1 = 613,
ACT_VM_ONEHANDED_RELOAD_LATE1_ALT1 = 614,
ACT_VM_ONEHANDED_RELOAD_LATE2_ALT1 = 615,
ACT_VM_ONEHANDED_RELOAD_LATE3_ALT1 = 616,
ACT_VM_ONEHANDED_RELOAD_LATE4_ALT1 = 617,
ACT_VM_ONEHANDED_RELOAD_LATE5_ALT1 = 618,
ACT_VM_ONEHANDED_RELOADEMPTY_ALT1 = 619,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE1_ALT1 = 620,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE2_ALT1 = 621,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE3_ALT1 = 622,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE4_ALT1 = 623,
ACT_VM_ONEHANDED_RELOADEMPTY_LATE5_ALT1 = 624,
ACT_VM_ONEHANDED_SEGMENTEDRELOAD_LOOP = 625,
ACT_VM_ONEHANDED_SEGMENTEDRELOAD_END = 626,
ACT_VM_ONEHANDED_SEGMENTEDEMPTYRELOAD_END = 627,
ACT_VM_ONEHANDED_RECHAMBER = 628,
ACT_VM_ONEHANDED_RECHAMBER_LATE1 = 629,
ACT_VM_ONEHANDED_RECHAMBER_LATE2 = 630,
ACT_VM_ONEHANDED_RECHAMBER_LATE3 = 631,
ACT_VM_ONEHANDED_DRAW = 632,
ACT_VM_ONEHANDED_DRAWFIRST = 633,
ACT_VM_ONEHANDED_HOLSTER = 634,
ACT_VM_ONEHANDED_LOWER = 635,
ACT_VM_ONEHANDED_RAISE = 636,
ACT_VM_ONEHANDED_RAISE_FROM_SPRINT = 637,
ACT_VM_ONEHANDED_RAISE_FROM_MELEE = 638,
ACT_VM_ONEHANDED_TOSS = 639,
ACT_VM_ONEHANDED_TOSS_OVERHEAD = 640,
ACT_VM_ONEHANDED_TOSS_PREP = 641,
ACT_VM_ONEHANDED_TOSS_PREP_PULLOUT = 642,
ACT_VM_ONEHANDED_TOSS_HOLD = 643,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT = 644,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE1 = 645,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE2 = 646,
ACT_VM_ONEHANDED_COOLDOWN_OVERHEAT_LATE3 = 647,
ACT_VM_ONEHANDED_SUSTAINED_DISCHARGE = 648,
ACT_MP_STAND_IDLE = 649,
ACT_MP_CROUCH_IDLE = 650,
ACT_MP_CROUCH_DEPLOYED_IDLE = 651,
ACT_MP_CROUCH_DEPLOYED = 652,
ACT_MP_DEPLOYED_IDLE = 653,
ACT_MP_RUN = 654,
ACT_MP_RUN_FORWARD = 655,
ACT_MP_RUN_BACKWARD = 656,
ACT_MP_RUN_LEFT = 657,
ACT_MP_RUN_RIGHT = 658,
ACT_MP_STAGGERED_RUN = 659,
ACT_MP_STAGGERED_RUN_FORWARD = 660,
ACT_MP_STAGGERED_RUN_BACKWARD = 661,
ACT_MP_STAGGERED_RUN_LEFT = 662,
ACT_MP_STAGGERED_RUN_RIGHT = 663,
ACT_MP_WALK = 664,
ACT_MP_WALK_FORWARD = 665,
ACT_MP_WALK_BACKWARD = 666,
ACT_MP_WALK_LEFT = 667,
ACT_MP_WALK_RIGHT = 668,
ACT_MP_STAGGERED_WALK = 669,
ACT_MP_STAGGERED_WALK_FORWARD = 670,
ACT_MP_STAGGERED_WALK_BACKWARD = 671,
ACT_MP_STAGGERED_WALK_LEFT = 672,
ACT_MP_STAGGERED_WALK_RIGHT = 673,
ACT_MP_AIRWALK = 674,
ACT_MP_CROUCHWALK = 675,
ACT_MP_CROUCHWALK_FORWARD = 676,
ACT_MP_CROUCHWALK_BACKWARD = 677,
ACT_MP_CROUCHWALK_LEFT = 678,
ACT_MP_CROUCHWALK_RIGHT = 679,
ACT_MP_STAGGERED_CROUCHWALK = 680,
ACT_MP_STAGGERED_CROUCHWALK_FORWARD = 681,
ACT_MP_STAGGERED_CROUCHWALK_BACKWARD = 682,
ACT_MP_STAGGERED_CROUCHWALK_LEFT = 683,
ACT_MP_STAGGERED_CROUCHWALK_RIGHT = 684,
ACT_MP_SPRINT = 685,
ACT_MP_STAGGERED_SPRINT = 686,
ACT_MP_SLIDE = 687,
ACT_MP_SLIDE_FORWARD = 688,
ACT_MP_SLIDE_BACKWARD = 689,
ACT_MP_SLIDE_LEFT = 690,
ACT_MP_SLIDE_RIGHT = 691,
ACT_MP_JUMP = 692,
ACT_MP_JUMP_START = 693,
ACT_MP_JUMP_FLOAT = 694,
ACT_MP_JUMP_LAND = 695,
ACT_MP_JUMP_LAND_FORWARD = 696,
ACT_MP_JUMP_LAND_BACKWARD = 697,
ACT_MP_JUMP_LAND_LEFT = 698,
ACT_MP_JUMP_LAND_RIGHT = 699,
ACT_MP_JUMP_LAND_LOW = 700,
ACT_MP_JUMP_LAND_LOW_FORWARD = 701,
ACT_MP_JUMP_LAND_LOW_BACKWARD = 702,
ACT_MP_JUMP_LAND_LOW_LEFT = 703,
ACT_MP_JUMP_LAND_LOW_RIGHT = 704,
ACT_MP_JUMP_LAND_MEDIUM = 705,
ACT_MP_JUMP_LAND_MEDIUM_FORWARD = 706,
ACT_MP_JUMP_LAND_MEDIUM_BACKWARD = 707,
ACT_MP_JUMP_LAND_MEDIUM_LEFT = 708,
ACT_MP_JUMP_LAND_MEDIUM_RIGHT = 709,
ACT_MP_JUMP_LAND_HIGH = 710,
ACT_MP_JUMP_LAND_HIGH_FORWARD = 711,
ACT_MP_JUMP_LAND_HIGH_BACKWARD = 712,
ACT_MP_JUMP_LAND_HIGH_LEFT = 713,
ACT_MP_JUMP_LAND_HIGH_RIGHT = 714,
ACT_MP_JUMP_IMPACT_N = 715,
ACT_MP_JUMP_IMPACT_E = 716,
ACT_MP_JUMP_IMPACT_W = 717,
ACT_MP_JUMP_IMPACT_S = 718,
ACT_MP_JUMP_IMPACT_TOP = 719,
ACT_MP_DOUBLEJUMP = 720,
ACT_MP_DEPLOYED = 721,
ACT_MP_VCD = 722,
ACT_MP_DODGE = 723,
ACT_MP_DODGE_FORWARD = 724,
ACT_MP_DODGE_BACKWARD = 725,
ACT_MP_DODGE_LEFT = 726,
ACT_MP_DODGE_RIGHT = 727,
ACT_MP_DODGE_FLOAT = 728,
ACT_MP_DODGE_FLOAT_FORWARD = 729,
ACT_MP_DODGE_FLOAT_BACKWARD = 730,
ACT_MP_DODGE_FLOAT_LEFT = 731,
ACT_MP_DODGE_FLOAT_RIGHT = 732,
ACT_MP_DODGE_LAND = 733,
ACT_MP_DODGE_LAND_FORWARD = 734,
ACT_MP_DODGE_LAND_BACKWARD = 735,
ACT_MP_DODGE_LAND_LEFT = 736,
ACT_MP_DODGE_LAND_RIGHT = 737,
ACT_MP_WALLRUN_UP = 738,
ACT_MP_WALLRUN_LEFT = 739,
ACT_MP_WALLRUN_RIGHT = 740,
ACT_MP_WALLRUN_FALL_BACK = 741,
ACT_MP_WALLRUN_FALL_FRONT = 742,
ACT_MP_WALLRUN_FALL_LEFT = 743,
ACT_MP_WALLRUN_FALL_RIGHT = 744,
ACT_MP_WALLHANG_IDLE = 745,
ACT_MP_WALLHANG_LEFT = 746,
ACT_MP_WALLHANG_RIGHT = 747,
ACT_MP_WALLHANG_UP = 748,
ACT_MP_WALLHANG_FRONT = 749,
ACT_MP_WALLJUMP_LEFT = 750,
ACT_MP_WALLJUMP_RIGHT = 751,
ACT_MP_WALLJUMP_UP = 752,
ACT_MP_CROUCHSLIDE = 753,
ACT_MP_CROUCHSLIDE_END_FORWARD = 754,
ACT_MP_CROUCHSLIDE_END_BACKWARD_LEFT = 755,
ACT_MP_CROUCHSLIDE_END_BACKWARD_RIGHT = 756,
ACT_MP_CROUCHSLIDE_END_LEFT = 757,
ACT_MP_CROUCHSLIDE_END_RIGHT = 758,
ACT_MP_CROUCHSLIDE_AIR = 759,
ACT_MP_GRAPPLE = 760,
ACT_MP_GESTURE_GRAPPLE_FIRE = 761,
ACT_MP_FREEFALL = 762,
ACT_MP_FREEFALL_ANTICIPATE = 763,
ACT_MP_FREEFALL_TRANSITION_TO_ANTICIPATE = 764,
ACT_MP_FREEFALL_TRANSITION_FROM_ANTICIPATE = 765,
ACT_MP_VEHICLE_DRIVER_IDLE = 766,
ACT_MP_TRAVERSAL_WINDOW_LEFT = 767,
ACT_MP_TRAVERSAL_WINDOW_RIGHT = 768,
ACT_MP_MANTLE_BELOW = 769,
ACT_MP_MANTLE_LEVEL = 770,
ACT_MP_MANTLE_ABOVE = 771,
ACT_MP_MANTLE_HIGH = 772,
ACT_MP_MANTLE_CROUCH_BELOW = 773,
ACT_MP_MANTLE_CROUCH_LEVEL = 774,
ACT_MP_MANTLE_CROUCH_ABOVE = 775,
ACT_MP_MANTLE_CROUCH_HIGH = 776,
ACT_MP_MANTLE_IDLE = 777,
ACT_MP_MANTLE_JUMPOFF = 778,
ACT_MP_ATTACK_STAND_PRIMARYFIRE = 779,
ACT_MP_ATTACK_STAND_SECONDARYFIRE = 780,
ACT_MP_ATTACK_STAND_GRENADE = 781,
ACT_MP_ATTACK_STAND_GRENADE_PULLOUT = 782,
ACT_MP_ATTACK_CROUCH_PRIMARYFIRE = 783,
ACT_MP_ATTACK_CROUCH_SECONDARYFIRE = 784,
ACT_MP_ATTACK_CROUCH_GRENADE = 785,
ACT_MP_ATTACK_AIRWALK_PRIMARYFIRE = 786,
ACT_MP_ATTACK_AIRWALK_SECONDARYFIRE = 787,
ACT_MP_ATTACK_AIRWALK_GRENADE = 788,
ACT_MP_RELOAD_STAND = 789,
ACT_MP_RELOAD_CROUCH = 790,
ACT_MP_OFFHAND_START = 791,
ACT_MP_OFFHAND_END = 792,
ACT_MP_OFFHAND_FIRE = 793,
ACT_MP_OFFHAND_CHARGING = 794,
ACT_MP_OFFHAND_CHARGING_ALT_1 = 795,
ACT_MP_OFFHAND_CHARGING_ALT_2 = 796,
ACT_MP_OFFHAND_CHARGING_ALT_3 = 797,
ACT_MP_OFFHAND_CHARGING_ALT_4 = 798,
ACT_MP_MELEE = 799,
ACT_MP_MELEE_KNIFE_FIRST = 800,
ACT_MP_MELEE_KNIFE = 801,
ACT_MP_EQUIP_FROM_RIFLE_TO_RIFLE = 802,
ACT_MP_EQUIP_FROM_RIFLE_TO_PISTOL = 803,
ACT_MP_EQUIP_FROM_RIFLE_TO_ROCKET = 804,
ACT_MP_EQUIP_FROM_PISTOL_TO_PISTOL = 805,
ACT_MP_EQUIP_FROM_PISTOL_TO_RIFLE = 806,
ACT_MP_EQUIP_FROM_PISTOL_TO_ROCKET = 807,
ACT_MP_EQUIP_FROM_ROCKET_TO_ROCKET = 808,
ACT_MP_EQUIP_FROM_ROCKET_TO_RIFLE = 809,
ACT_MP_EQUIP_FROM_ROCKET_TO_PISTOL = 810,
ACT_MP_LOOT_IDLE_STAND = 811,
ACT_MP_LOOT_IDLE_CROUCH = 812,
ACT_TRANSITION_TO_DOWNED_FROM_STANDING = 813,
ACT_TRANSITION_TO_STANDING_FROM_DOWNED = 814,
ACT_MP_DOWNED_IDLE = 815,
ACT_MP_DOWNED_CRAWL = 816,
ACT_MP_DOWNED_CRAWL_FORWARD = 817,
ACT_MP_DOWNED_CRAWL_BACKWARD = 818,
ACT_MP_DOWNED_CRAWL_LEFT = 819,
ACT_MP_DOWNED_CRAWL_RIGHT = 820,
ACT_MP_MENU_LOBBY_LEFT_IDLE = 821,
ACT_MP_MENU_LOBBY_CENTER_IDLE = 822,
ACT_MP_MENU_LOBBY_RIGHT_IDLE = 823,
ACT_MP_MENU_LOBBY_SELECT_IDLE = 824,
ACT_MP_MENU_MAIN_INTRO = 825,
ACT_MP_MENU_MAIN_IDLE = 826,
ACT_MP_MENU_READYUP_INTRO = 827,
ACT_MP_MENU_READYUP_IDLE = 828,
ACT_MP_MENU_DETAILS_INTRO = 829,
ACT_MP_MENU_DETAILS_IDLE = 830,
ACT_MP_MENU_SQUAD_IDLE = 831,
ACT_MP_MENU_GROUPSHOT_SLOT_A = 832,
ACT_MP_MENU_GROUPSHOT_SLOT_B = 833,
ACT_MP_MENU_GROUPSHOT_SLOT_C = 834,
ACT_MP_MENU_LOOT_CEREMONY_IDLE = 835,
ACT_MP_STAND_PRIMARY = 836,
ACT_MP_CROUCH_PRIMARY = 837,
ACT_MP_RUN_PRIMARY = 838,
ACT_MP_WALK_PRIMARY = 839,
ACT_MP_AIRWALK_PRIMARY = 840,
ACT_MP_CROUCHWALK_PRIMARY = 841,
ACT_MP_JUMP_PRIMARY = 842,
ACT_MP_JUMP_START_PRIMARY = 843,
ACT_MP_JUMP_FLOAT_PRIMARY = 844,
ACT_MP_JUMP_LAND_PRIMARY = 845,
ACT_MP_DEPLOYED_PRIMARY = 846,
ACT_MP_STAND_SECONDARY = 847,
ACT_MP_RUN_SECONDARY = 848,
ACT_MP_STAND_MELEE = 849,
ACT_MP_CROUCH_MELEE = 850,
ACT_MP_RUN_MELEE = 851,
ACT_MP_WALK_MELEE = 852,
ACT_MP_AIRWALK_MELEE = 853,
ACT_MP_CROUCHWALK_MELEE = 854,
ACT_MP_JUMP_MELEE = 855,
ACT_MP_JUMP_START_MELEE = 856,
ACT_MP_JUMP_FLOAT_MELEE = 857,
ACT_MP_JUMP_LAND_MELEE = 858,
ACT_MP_GESTURE_FLINCH_BACKWARDS = 859,
ACT_MP_GESTURE_FLINCH_LEFT = 860,
ACT_MP_GESTURE_FLINCH_FORWARDS = 861,
ACT_MP_GESTURE_FLINCH_RIGHT = 862,
ACT_MP_DEATH_CRUSH = 863,
ACT_MP_DEATH_GENERIC = 864,
ACT_MP_DEATH_CROUCH = 865,
ACT_MP_DEATH_WALK = 866,
ACT_MP_DEATH_WALK_FORWARD = 867,
ACT_MP_DEATH_WALK_BACKWARD = 868,
ACT_MP_DEATH_WALK_LEFT = 869,
ACT_MP_DEATH_WALK_RIGHT = 870,
ACT_MP_DEATH_RUN = 871,
ACT_MP_DEATH_RUN_FORWARD = 872,
ACT_MP_DEATH_RUN_BACKWARD = 873,
ACT_MP_DEATH_RUN_LEFT = 874,
ACT_MP_DEATH_RUN_RIGHT = 875,
ACT_MP_DEATH_SPRINT = 876,
ACT_MP_DEATH_SPRINT_FORWARD = 877,
ACT_MP_RUN_SPEEDPAINT_PRIMARY = 878,
ACT_MP_DROWNING_PRIMARY = 879,
ACT_MP_LONG_FALL_PRIMARY = 880,
ACT_MP_TRACTORBEAM_FLOAT_PRIMARY = 881,
ACT_MP_DEATH_CRUSH_PRIMARY = 882,
};
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Weapon inventory slot enumerants; used as constants for scripts. // Weapon inventory slot enumerants; used as constants for scripts.
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -20,7 +20,7 @@ struct Ray_t;
class ServerClass; class ServerClass;
class ICollideable; class ICollideable;
class IServerNetworkable; class IServerNetworkable;
class Vector; class Vector3D;
class QAngle; class QAngle;
// This class is how the engine talks to entities in the game DLL. // This class is how the engine talks to entities in the game DLL.

View File

@ -588,4 +588,9 @@ class VThreadTools : public IDetour
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#endif // !_TOOLS #endif // !_TOOLS
struct CThreadMutex // todo: implement
{
CRITICAL_SECTION m_CriticalSection;
};
#endif // THREADTOOLS_H #endif // THREADTOOLS_H