CUserCmd hardening

Fix several exploitable bugs in the CUserCmd class. Some of these have been used to exploit/cheat in-game. Fixes contain:
- Camera position clamping (the only patch that hasn't been tested yet!)
- Weapon activity exploit, allowing player to infinitely throw ordnances, and perform other 'cheats'.
- Akimbo exploit + server crasher, allowing client to set multiple inventory weapons as active. The active weapon index bounds were also not checked, a properly crafter CUserCmd message would therefore be able to crash the server.

Note that this does not fix all issues related to the UserCmd class; further reversing and testing revealed there is more to be fixed, these fixes will get implemented with a future commit.
This commit is contained in:
Kawe Mazidjatari 2023-06-13 17:43:32 +02:00
parent 96ab1f1af0
commit 51ea9c7c4f
11 changed files with 1142 additions and 20 deletions

View File

@ -109,6 +109,8 @@ ConVar* sv_voiceEcho = nullptr;
ConVar* sv_voiceenable = nullptr;
ConVar* sv_alltalk = nullptr;
ConVar* sv_usercmd_dualwield_enable = nullptr;
//#ifdef DEDICATED
ConVar* sv_rcon_debug = nullptr;
ConVar* sv_rcon_sendlogs = nullptr;
@ -311,6 +313,8 @@ void ConVar_StaticInit(void)
sv_validatePersonaName = ConVar::StaticCreate("sv_validatePersonaName" , "1" , FCVAR_RELEASE, "Validate the client's textual persona name on connect.", true, 0.f, false, 0.f, nullptr, nullptr);
sv_minPersonaNameLength = ConVar::StaticCreate("sv_minPersonaNameLength", "4" , FCVAR_RELEASE, "The minimum length of the client's textual persona name.", true, 0.f, false, 0.f, nullptr, nullptr);
sv_maxPersonaNameLength = ConVar::StaticCreate("sv_maxPersonaNameLength", "16", FCVAR_RELEASE, "The maximum length of the client's textual persona name.", true, 0.f, false, 0.f, nullptr, nullptr);
sv_usercmd_dualwield_enable = ConVar::StaticCreate("sv_usercmd_dualwield_enable", "0", FCVAR_RELEASE, "Allows setting dual wield cycle slots, and activating multiple inventory weapons from UserCmd.", false, 0.f, false, 0.f, nullptr, nullptr);
#endif // !CLIENT_DLL
#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
bhit_depth_test = ConVar::StaticCreate("bhit_depth_test", "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Use depth test for bullet ray trace overlay.", false, 0.f, false, 0.f, nullptr, nullptr);

View File

@ -99,6 +99,8 @@ extern ConVar* sv_voiceEcho;
extern ConVar* sv_voiceenable;
extern ConVar* sv_alltalk;
extern ConVar* sv_usercmd_dualwield_enable;
//#ifdef DEDICATED
extern ConVar* sv_rcon_debug;
extern ConVar* sv_rcon_sendlogs;

View File

@ -123,6 +123,7 @@
#endif // !CLIENT_DLL
#ifndef DEDICATED
#include "game/client/viewrender.h"
#include "game/client/input.h"
#include "game/client/movehelper_client.h"
#endif // !DEDICATED
#include "public/edict.h"
@ -558,6 +559,7 @@ void DetourRegister() // Register detour classes to be searched and hooked.
#ifndef DEDICATED
REGISTER(V_ViewRender);
REGISTER(VInput);
REGISTER(VMoveHelperClient);
#endif // !DEDICATED

View File

@ -70,6 +70,8 @@ add_sources( SOURCE_GROUP "Client"
"client/cliententitylist.h"
"client/enginesprite.h"
"client/hud.h"
"client/input.cpp"
"client/input.h"
"client/movehelper_client.cpp"
"client/movehelper_client.h"
"client/spritemodel.cpp"
@ -94,6 +96,10 @@ add_sources( SOURCE_GROUP "Public"
"${ENGINE_SOURCE_DIR}/public/iclientrenderable.h"
"${ENGINE_SOURCE_DIR}/public/iclientthinkable.h"
"${ENGINE_SOURCE_DIR}/public/iclientunknown.h"
"${ENGINE_SOURCE_DIR}/public/game/shared/weapon_types.h"
"${ENGINE_SOURCE_DIR}/public/game/shared/in_buttons.h"
"${ENGINE_SOURCE_DIR}/public/game/client/iinput.h"
)
end_sources()

View File

@ -0,0 +1,29 @@
//=============================================================================//
//
// Purpose:
//
//=============================================================================//
#include "input.h"
#include "common/global.h"
#include "game/shared/weapon_types.h"
void CInput::SetCustomWeaponActivity(CInput* pInput, int weaponActivity)
{
// Server only allows other custom weapon activities if cheats are enabled,
// don't bother simulating it on the client without the cheats cvar, as
// otherwise visual glitches occur.
if (!sv_cheats->GetBool() && weaponActivity != ACT_VM_WEAPON_INSPECT)
weaponActivity = ACT_NONE;
v_CInput__SetCustomWeaponActivity(pInput, weaponActivity);
}
void VInput::Attach(void) const
{
DetourAttach(&v_CInput__SetCustomWeaponActivity, CInput::SetCustomWeaponActivity);
}
void VInput::Detach(void) const
{
DetourDetach(&v_CInput__SetCustomWeaponActivity, CInput::SetCustomWeaponActivity);
}

47
r5dev/game/client/input.h Normal file
View File

@ -0,0 +1,47 @@
#ifndef CLIENT_INPUT_H
#define CLIENT_INPUT_H
#include "game/client/iinput.h"
class CInput : public IInput
{
public:
static void SetCustomWeaponActivity(CInput* pInput, int weaponActivity);
private:
};
inline CMemory p_CInput__SetCustomWeaponActivity;
inline auto v_CInput__SetCustomWeaponActivity = p_CInput__SetCustomWeaponActivity.RCast<void (*)(CInput* pInput, int weaponActivity)>();
inline IInput* g_pInput_VFTable = nullptr;
inline CInput* g_pInput = nullptr;
///////////////////////////////////////////////////////////////////////////////
class VInput : public IDetour
{
virtual void GetAdr(void) const
{
LogConAdr("CInput::`vftable'", reinterpret_cast<uintptr_t>(g_pInput_VFTable));
LogFunAdr("CInput::SetCustomWeaponActivity", p_CInput__SetCustomWeaponActivity.GetPtr());
LogVarAdr("g_Input", reinterpret_cast<uintptr_t>(g_pInput));
}
virtual void GetFun(void) const
{
p_CInput__SetCustomWeaponActivity = g_GameDll.
FindPatternSIMD("89 91 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC CC F3 0F 11 89 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC F3 0F 10 81 ?? ?? ?? ??");
v_CInput__SetCustomWeaponActivity = p_CInput__SetCustomWeaponActivity.RCast<void (*)(CInput*, int)>();
}
virtual void GetVar(void) const
{
g_pInput = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 48 8B 5D 57").FollowNearCallSelf().
FindPatternSelf("48 8B 05").ResolveRelativeAddressSelf(0x3, 0x7).RCast<CInput*>();
}
virtual void GetCon(void) const
{
g_pInput_VFTable = g_GameDll.GetVirtualMethodTable(".?AVCInput@@").RCast<IInput*>();
}
virtual void Attach(void) const;
virtual void Detach(void) const;
};
///////////////////////////////////////////////////////////////////////////////
#endif // CLIENT_INPUT_H

View File

@ -6,6 +6,9 @@
//
//=============================================================================//
#include "usercmd.h"
#include "tier1/utlbuffer.h"
#include "game/shared/in_buttons.h"
#include "game/shared/weapon_types.h"
//-----------------------------------------------------------------------------
// Purpose: Read in a delta compressed usercommand.
@ -16,24 +19,59 @@
//-----------------------------------------------------------------------------
int ReadUserCmd(bf_read* buf, CUserCmd* move, CUserCmd* from)
{
// Normalize angles, bogus values will crash the game..
from->viewangles.Normalize();
// More clamps coming soon...
const int seed = v_ReadUserCmd(buf, move, from);
// Initialize the camera position as <0,0,0>, this should at least avoid
// crash and meme behaviors. Has not been tested yet unlike all the
// patches performed below.
if (!move->camerapos.IsValid())
move->camerapos.Init();
// Viewangles must be normalized; applying invalid angles on the client
// will result in undefined behavior, or a crash.
move->viewangles.Normalize();
// Some players abused a feature of the engine which allows you to perform
// custom weapon activities. After some research, it appears that only the
// 'ACT_VM_WEAPON_INSPECT' was supposed to work for standard games, all the
// other activities appears to be for development or testing, therefore, we
// should only allow 'ACT_VM_WEAPON_INSPECT' if cheats are disabled.
if (!sv_cheats->GetBool() && move->weaponactivity != ACT_VM_WEAPON_INSPECT)
move->weaponactivity = ACT_NONE;
// On the client, the frame time must be within 'usercmd_frametime_min'
// and 'usercmd_frametime_max'. Testing revealed that speed hacking could
// be achieved by sending bogus frametimes. Clamp the networked frame time
// to the exact values that the client should be using to make sure it
// couldn't be circumvented by busting out the client side clamps.
// be achieved by sending bogus frame times. Clamp the networked frame
// time to the exact values that the client should be using to make sure
// it couldn't be circumvented by busting out the client side clamps.
if (host_timescale->GetFloat() == 1.0f)
move->frametime = clamp(move->frametime,
usercmd_frametime_min->GetFloat(),
usercmd_frametime_max->GetFloat());
// Checks are only required if cycleslot is valid; see 'CPlayer::UpdateWeaponSlots'.
if (move->cycleslot != WEAPON_INVENTORY_SLOT_INVALID)
{
const bool dualWieldEnabled = sv_usercmd_dualwield_enable->GetBool();
// Client could instruct the server to switch cycle slots for inventory
// weapons, however, the client could also cycle to the dual wield slots.
// dual wield weapons should be explicitly enabled to prevent exploitation.
if (!dualWieldEnabled && move->cycleslot > WEAPON_INVENTORY_SLOT_ANTI_TITAN)
move->cycleslot = WEAPON_INVENTORY_SLOT_ANTI_TITAN;
// Array member 'CPlayer::m_selectedWeapons' is of size 2, values
// (up to 254) result in arbitrary memory reads on the server.
// Clamp the value to make sure it never reads out of bounds. Also,
// if dual wield is disabled on the server, reset the weapon index
// value as it would otherwise allow the client to enable several
// equiped weapons at the same time.
if (move->weaponindex >= WEAPON_INVENTORY_SLOT_PRIMARY_1)
dualWieldEnabled
? move->weaponindex = WEAPON_INVENTORY_SLOT_PRIMARY_1
: move->weaponindex = WEAPON_INVENTORY_SLOT_PRIMARY_0;
}
return seed;
}

View File

@ -28,7 +28,7 @@ inline CMemory p_ReadUserCmd;
inline auto v_ReadUserCmd = p_ReadUserCmd.RCast<int (*)(bf_read* buf, CUserCmd* move, CUserCmd* from)>();
//-------------------------------------------------------------------------------------
//
#pragma pack(push, 1)
//-------------------------------------------------------------------------------------
class CUserCmd
{
@ -43,22 +43,49 @@ public:
int32_t command_number;
int32_t tick_count;
float curtime;
float_t command_time;
QAngle viewangles;
float maybe;
char pad_0x0018[8];
float forwardmove;
float sidemove;
float upmove;
char pad_0x0018[12];
float_t forwardmove;
float_t sidemove;
float_t upmove;
int32_t buttons;
char pad_0x0034[336];
byte impulse;
byte cycleslot;
byte weaponindex;
__int16 weaponselect;
bool bUnk39;
__int16 weaponactivity;
int nUnk3C;
bool controllermode;
bool fixangles;
bool setlastcycleslot;
char pad_0x0034[157];
QAngle renderangles; // IDK what this is used for.
QAngle renderangles_copy; // IDK what this is used for.
float fUnkF8;
QAngle another_renderangles_copy; // IDK what this is used for.
QAngle yet_another_renderangles_copy; // IDK what this is used for.
char pad_0x00114[112];
int32_t randomseed;
char pad_0x0188[8];
byte bUnk188;
bool bUnk189;
bool normalizepitch;
__int16 nUnk18B;
char pad_0x0188[3];
Vector3D headposition;
float maxpitch;
char pad_0x01A0[56];
float_t maxpitch;
char pad_0x01A0[24];
bool trace_camera;
char pad_1B9[3];
Vector3D camerapos;
int world_angle_tick;
int nUnk1D4;
int predicted_server_event_ack;
int nUnk1D8;
float frametime;
};
#pragma pack(pop)
static_assert(sizeof(CUserCmd) == 0x1DC);

View File

@ -0,0 +1,10 @@
#ifndef IINPUT_H
#define IINPUT_H
abstract_class IInput
{
public:
virtual ~IInput() {};
};
#endif // IINPUT_H

View File

@ -0,0 +1,44 @@
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
// $NoKeywords: $
//
//===========================================================================//
#ifndef IN_BUTTONS_H
#define IN_BUTTONS_H
#ifdef _WIN32
#pragma once
#endif
/* !TODO: not confirmed, some are correct, some are not.
Only use the ones you confirmed ar ecorrect! */
#define IN_ATTACK (1 << 0)
#define IN_JUMP (1 << 1)
#define IN_DUCK (1 << 2)
#define IN_FORWARD (1 << 3)
#define IN_BACK (1 << 4)
#define IN_USE (1 << 5)
#define IN_CANCEL (1 << 6)
#define IN_LEFT (1 << 7)
#define IN_RIGHT (1 << 8)
#define IN_MOVELEFT (1 << 9)
#define IN_MOVERIGHT (1 << 10)
#define IN_ATTACK2 (1 << 11)
#define IN_RUN (1 << 12)
#define IN_RELOAD (1 << 13)
#define IN_ALT1 (1 << 14)
#define IN_ALT2 (1 << 15)
#define IN_SCORE (1 << 16) // Used by client.dll for when scoreboard is held down
#define IN_SPEED (1 << 17) // Player is holding the speed key
#define IN_WALK (1 << 18) // Player holding walk key
#define IN_ZOOM (1 << 19) // Zoom key for HUD zoom
#define IN_WEAPON1 (1 << 20) // weapon defines these bits
#define IN_WEAPON2 (1 << 21) // weapon defines these bits
#define IN_BULLRUSH (1 << 22)
#define IN_GRENADE1 (1 << 23) // grenade 1
#define IN_GRENADE2 (1 << 24) // grenade 2
#define IN_ATTACK3 (1 << 25)
#endif // IN_BUTTONS_H

View File

@ -0,0 +1,913 @@
#ifndef 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.
//-----------------------------------------------------------------------------
enum WeaponInventorySlot_t
{
WEAPON_INVENTORY_SLOT_INVALID = 0xFF, // Promote to 32bit INT_MAX for script constants.
WEAPON_INVENTORY_SLOT_ANY = 0xFE, // promote to 32bit INT_MAX for script constants.
WEAPON_INVENTORY_SLOT_PRIMARY_0 = 0,
WEAPON_INVENTORY_SLOT_PRIMARY_1 = 1,
WEAPON_INVENTORY_SLOT_PRIMARY_2 = 2,
WEAPON_INVENTORY_SLOT_PRIMARY_3 = 3,
WEAPON_INVENTORY_SLOT_ANTI_TITAN = 4,
WEAPON_INVENTORY_SLOT_DUALPRIMARY_0 = 5,
WEAPON_INVENTORY_SLOT_DUALPRIMARY_1 = 6,
WEAPON_INVENTORY_SLOT_DUALPRIMARY_2 = 7,
WEAPON_INVENTORY_SLOT_DUALPRIMARY_3 = 8,
};
#endif // WEAPON_TYPES_H