Files
HL2Overcharged/game/shared/weapon_parse.cpp
2025-05-21 21:20:08 +03:00

4343 lines
140 KiB
C++
Raw Permalink Blame History

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Weapon data file parsing, shared by game & client dlls.
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include <KeyValues.h>
#include <tier0/mem.h>
#include "filesystem.h"
#include "utldict.h"
#include "ammodef.h"
#include "gamestringpool.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
#define WEAPONTYPE_SIZE TYPE_LAST+1
const char* WeaponTypeMappedList[WEAPONTYPE_SIZE] =
{
"None",
"melee",
"pistol",
"dual_pistols",
"dual_machineguns",
"smg",
"AirboatGun",
"shotgun",
"annabelle",
"beam",
"rpg",
"grenade"
};
#define ACTIVITY_SIZE LAST_SHARED_ACTIVITY+1
const char* ActivityMappedList[ACTIVITY_SIZE] =
{
"None",
"ACT_IDLE",
"ACT_TRANSITION",
"ACT_COVER",
"ACT_COVER_MED",
"ACT_COVER_LOW",
"ACT_WALK",
"ACT_WALK_AIM",
"ACT_WALK_CROUCH",
"ACT_WALK_CROUCH_AIM",
"ACT_RUN",
"ACT_RUN_AIM",
"ACT_RUN_CROUCH",
"ACT_RUN_CROUCH_AIM",
"ACT_RUN_PROTECTED",
"ACT_SCRIPT_CUSTOM_MOVE",
"ACT_RANGE_ATTACK1",
"ACT_RANGE_ATTACK2",
"ACT_RANGE_ATTACK1_LOW",
"ACT_RANGE_ATTACK2_LOW",
"ACT_DIESIMPLE",
"ACT_DIEBACKWARD",
"ACT_DIEFORWARD",
"ACT_DIEVIOLENT",
"ACT_DIERAGDOLL",
"ACT_FLY",
"ACT_HOVER",
"ACT_GLIDE",
"ACT_SWIM",
"ACT_JUMP",
"ACT_HOP",
"ACT_LEAP",
"ACT_LAND",
"ACT_CLIMB_UP",
"ACT_CLIMB_DOWN",
"ACT_CLIMB_DISMOUNT",
"ACT_SHIPLADDER_UP",
"ACT_SHIPLADDER_DOWN",
"ACT_STRAFE_LEFT",
"ACT_STRAFE_RIGHT",
"ACT_ROLL_LEFT",
"ACT_ROLL_RIGHT",
"ACT_TURN_LEFT",
"ACT_TURN_RIGHT",
"ACT_CROUCH",
"ACT_CROUCHIDLE",
"ACT_STAND",
"ACT_USE",
"ACT_SIGNAL1",
"ACT_SIGNAL2",
"ACT_SIGNAL3",
"ACT_SIGNAL_ADVANCE",
"ACT_SIGNAL_FORWARD",
"ACT_SIGNAL_GROUP",
"ACT_SIGNAL_HALT",
"ACT_SIGNAL_LEFT",
"ACT_SIGNAL_RIGHT",
"ACT_SIGNAL_TAKECOVER",
"ACT_LOOKBACK_RIGHT",
"ACT_LOOKBACK_LEFT",
"ACT_COWER",
"ACT_SMALL_FLINCH",
"ACT_BIG_FLINCH",
"ACT_MELEE_ATTACK1",
"ACT_MELEE_ATTACK2",
"ACT_RELOAD",
"ACT_RELOAD_START",
"ACT_RELOAD_FINISH",
"ACT_RELOAD_LOW",
"ACT_ARM",
"ACT_DISARM",
"ACT_DROP_WEAPON",
"ACT_DROP_WEAPON_SHOTGUN",
"ACT_PICKUP_GROUND",
"ACT_PICKUP_RACK",
"ACT_IDLE_ANGRY",
"ACT_IDLE_RELAXED",
"ACT_IDLE_STIMULATED",
"ACT_IDLE_AGITATED",
"ACT_IDLE_STEALTH",
"ACT_IDLE_HURT",
"ACT_WALK_RELAXED",
"ACT_WALK_STIMULATED",
"ACT_WALK_AGITATED",
"ACT_WALK_STEALTH",
"ACT_RUN_RELAXED",
"ACT_RUN_STIMULATED",
"ACT_RUN_AGITATED",
"ACT_RUN_STEALTH",
"ACT_IDLE_AIM_RELAXED",
"ACT_IDLE_AIM_STIMULATED",
"ACT_IDLE_AIM_AGITATED",
"ACT_IDLE_AIM_STEALTH",
"ACT_WALK_AIM_RELAXED",
"ACT_WALK_AIM_STIMULATED",
"ACT_WALK_AIM_AGITATED",
"ACT_WALK_AIM_STEALTH",
"ACT_RUN_AIM_RELAXED",
"ACT_RUN_AIM_STIMULATED",
"ACT_RUN_AIM_AGITATED",
"ACT_RUN_AIM_STEALTH",
"ACT_CROUCHIDLE_STIMULATED",
"ACT_CROUCHIDLE_AIM_STIMULATED",
"ACT_CROUCHIDLE_AGITATED",
"ACT_WALK_HURT",
"ACT_RUN_HURT",
"ACT_SPECIAL_ATTACK1",
"ACT_SPECIAL_ATTACK2",
"ACT_COMBAT_IDLE",
"ACT_WALK_SCARED",
"ACT_RUN_SCARED",
"ACT_VICTORY_DANCE",
"ACT_DIE_HEADSHOT",
"ACT_DIE_CHESTSHOT",
"ACT_DIE_GUTSHOT",
"ACT_DIE_BACKSHOT",
"ACT_FLINCH_HEAD",
"ACT_FLINCH_CHEST",
"ACT_FLINCH_STOMACH",
"ACT_FLINCH_LEFTARM",
"ACT_FLINCH_RIGHTARM",
"ACT_FLINCH_LEFTLEG",
"ACT_FLINCH_RIGHTLEG",
"ACT_FLINCH_PHYSICS",
"ACT_IDLE_ON_FIRE",
"ACT_WALK_ON_FIRE",
"ACT_RUN_ON_FIRE",
"ACT_RAPPEL_LOOP",
"ACT_180_LEFT",
"ACT_180_RIGHT",
"ACT_90_LEFT",
"ACT_90_RIGHT",
"ACT_STEP_LEFT",
"ACT_STEP_RIGHT",
"ACT_STEP_BACK",
"ACT_STEP_FORE",
"ACT_GESTURE_RANGE_ATTACK1",
"ACT_GESTURE_RANGE_ATTACK2",
"ACT_GESTURE_MELEE_ATTACK1",
"ACT_GESTURE_MELEE_ATTACK2",
"ACT_GESTURE_RANGE_ATTACK1_LOW",
"ACT_GESTURE_RANGE_ATTACK2_LOW",
"ACT_MELEE_ATTACK_SWING_GESTURE",
"ACT_GESTURE_SMALL_FLINCH",
"ACT_GESTURE_BIG_FLINCH",
"ACT_GESTURE_FLINCH_BLAST",
"ACT_GESTURE_FLINCH_BLAST_SHOTGUN",
"ACT_GESTURE_FLINCH_BLAST_DAMAGED",
"ACT_GESTURE_FLINCH_BLAST_DAMAGED_SHOTGUN",
"ACT_GESTURE_FLINCH_HEAD",
"ACT_GESTURE_FLINCH_CHEST",
"ACT_GESTURE_FLINCH_STOMACH",
"ACT_GESTURE_FLINCH_LEFTARM",
"ACT_GESTURE_FLINCH_RIGHTARM",
"ACT_GESTURE_FLINCH_LEFTLEG",
"ACT_GESTURE_FLINCH_RIGHTLEG",
"ACT_GESTURE_TURN_LEFT",
"ACT_GESTURE_TURN_RIGHT",
"ACT_GESTURE_TURN_LEFT45",
"ACT_GESTURE_TURN_RIGHT45",
"ACT_GESTURE_TURN_LEFT90",
"ACT_GESTURE_TURN_RIGHT90",
"ACT_GESTURE_TURN_LEFT45_FLAT",
"ACT_GESTURE_TURN_RIGHT45_FLAT",
"ACT_GESTURE_TURN_LEFT90_FLAT",
"ACT_GESTURE_TURN_RIGHT90_FLAT",
"ACT_BARNACLE_HIT",
"ACT_BARNACLE_PULL",
"ACT_BARNACLE_CHOMP",
"ACT_BARNACLE_CHEW",
"ACT_DO_NOT_DISTURB",
"ACT_VM_DRAW",
"ACT_VM_INSPECT",
"ACT_VM_INSPECT_SILENCED",
"ACT_VM_DRAW_INSPECT",
"ACT_VM_DRAW_INSPECT_SILENCED",
"ACT_VM_INSPECT1",
"ACT_VM_INSPECT2",
"ACT_VM_INSPECT3",
"ACT_VM_ADMIRE",
"ACT_VM_ADMIRE1",
"ACT_VM_ADMIRE2",
"ACT_VM_ADMIRE3",
"ACT_VM_HOLSTER",
"ACT_VM_IDLE",
"ACT_VM_FIDGET",
"ACT_VM_PULLBACK",
"ACT_VM_PULLBACK_HIGH",
"ACT_VM_PULLBACK_LOW",
"ACT_VM_THROW",
"ACT_VM_PULLPIN",
"ACT_VM_PRIMARYATTACK",
"ACT_VM_SECONDARYATTACK",
"ACT_VM_RELOAD",
"ACT_VM_EMPTY_RELOAD",
"ACT_VM_EMPTY_FIRE",
"ACT_VM_RELOAD_START",
"ACT_VM_RELOAD_FINISH",
"ACT_VM_DRYFIRE",
"ACT_VM_HITLEFT",
"ACT_VM_HITLEFT2",
"ACT_VM_HITRIGHT",
"ACT_VM_HITRIGHT2",
"ACT_VM_HITCENTER",
"ACT_VM_HITCENTER2",
"ACT_VM_MISSLEFT",
"ACT_VM_MISSLEFT2",
"ACT_VM_MISSRIGHT",
"ACT_VM_MISSRIGHT2",
"ACT_VM_MISSCENTER",
"ACT_VM_MISSCENTER2",
"ACT_VM_HAULBACK",
"ACT_VM_SWINGHARD",
"ACT_VM_SWINGMISS",
"ACT_VM_SWINGHIT",
"ACT_VM_IDLE_TO_LOWERED",
"ACT_VM_IDLE_LOWERED",
"ACT_VM_SPRINT",
"ACT_VM_WALL",
"ACT_VM_WALK",
"ACT_VM_LOWERED_TO_IDLE",
"ACT_VM_RECOIL1",
"ACT_VM_RECOIL2",
"ACT_VM_RECOIL3",
"ACT_VM_PICKUP",
"ACT_VM_RELEASE",
"ACT_VM_MELEE",
"ACT_VM_HOLSTER_SILENCED",
"ACT_VM_ATTACH_SILENCER",
"ACT_VM_DETACH_SILENCER",
"ACT_VM_DRAW_SPECIAL",
"ACT_VM_HOLSTER_SPECIAL",
"ACT_VM_IDLE_SPECIAL",
"ACT_VM_PULLBACK_SPECIAL",
"ACT_VM_PRIMARYATTACK_SPECIAL",
"ACT_VM_SECONDARYATTACK_SPECIAL",
"ACT_VM_HITCENTER_SPECIAL",
"ACT_VM_SWINGHARD_SPECIAL",
"ACT_VM_IDLE_TO_LOWERED_SPECIAL",
"ACT_VM_IDLE_LOWERED_SPECIAL",
"ACT_VM_LOWERED_TO_IDLE_SPECIAL",
"ACT_VM_FIREMODE",
"ACT_VM_SWITCHMODE",
"ACT_FISTS_VM_HITLEFT",
"ACT_FISTS_VM_HITRIGHT",
"ACT_FISTS_VM_SWINGHARD",
"ACT_FISTS_VM_IDLE",
"ACT_FISTS_VM_DRAW",
"ACT_SLAM_STICKWALL_IDLE",
"ACT_SLAM_STICKWALL_ND_IDLE",
"ACT_SLAM_STICKWALL_ATTACH",
"ACT_SLAM_STICKWALL_ATTACH2",
"ACT_SLAM_STICKWALL_ND_ATTACH",
"ACT_SLAM_STICKWALL_ND_ATTACH2",
"ACT_SLAM_STICKWALL_DETONATE",
"ACT_SLAM_STICKWALL_DETONATOR_HOLSTER",
"ACT_SLAM_STICKWALL_DRAW",
"ACT_SLAM_STICKWALL_ND_DRAW",
"ACT_SLAM_STICKWALL_TO_THROW",
"ACT_SLAM_STICKWALL_TO_THROW_ND",
"ACT_SLAM_STICKWALL_TO_TRIPMINE_ND",
"ACT_SLAM_THROW_IDLE",
"ACT_SLAM_THROW_ND_IDLE",
"ACT_SLAM_THROW_THROW",
"ACT_SLAM_THROW_THROW2",
"ACT_SLAM_THROW_THROW_ND",
"ACT_SLAM_THROW_THROW_ND2",
"ACT_SLAM_THROW_DRAW",
"ACT_SLAM_THROW_ND_DRAW",
"ACT_SLAM_THROW_TO_STICKWALL",
"ACT_SLAM_THROW_TO_STICKWALL_ND",
"ACT_SLAM_THROW_DETONATE",
"ACT_SLAM_THROW_DETONATOR_HOLSTER",
"ACT_SLAM_THROW_TO_TRIPMINE_ND",
"ACT_SLAM_TRIPMINE_IDLE",
"ACT_SLAM_TRIPMINE_DRAW",
"ACT_SLAM_TRIPMINE_ATTACH",
"ACT_SLAM_TRIPMINE_ATTACH2",
"ACT_SLAM_TRIPMINE_TO_STICKWALL_ND",
"ACT_SLAM_TRIPMINE_TO_THROW_ND",
"ACT_SLAM_DETONATOR_IDLE",
"ACT_SLAM_DETONATOR_DRAW",
"ACT_SLAM_DETONATOR_DETONATE",
"ACT_SLAM_DETONATOR_HOLSTER",
"ACT_SLAM_DETONATOR_STICKWALL_DRAW",
"ACT_SLAM_DETONATOR_THROW_DRAW",
"ACT_SHOTGUN_RELOAD_START",
"ACT_SHOTGUN_RELOAD_FINISH",
"ACT_SHOTGUN_PUMP",
"ACT_SHOTGUN_PUMP2",
"ACT_SHOTGUN_PUMP_DOUBLE",
"ACT_SHOTGUN_PUMP2_DOUBLE",
"ACT_SMG2_IDLE2",
"ACT_SMG2_FIRE2",
"ACT_SMG2_DRAW2",
"ACT_SMG2_RELOAD2",
"ACT_SMG2_DRYFIRE2",
"ACT_SMG2_TOAUTO",
"ACT_SMG2_TOBURST",
"ACT_PHYSCANNON_UPGRADE",
"ACT_RANGE_ATTACK_AR1",
"ACT_RANGE_ATTACK_AR2",
"ACT_RANGE_ATTACK_AR2_LOW",
"ACT_RANGE_ATTACK_AR2_GRENADE",
"ACT_RANGE_ATTACK_HMG1",
"ACT_RANGE_ATTACK_ML",
"ACT_RANGE_ATTACK_SMG1",
"ACT_RANGE_ATTACK_SMG1_LOW",
"ACT_RANGE_ATTACK_SMG2",
"ACT_RANGE_ATTACK_SHOTGUN",
"ACT_RANGE_ATTACK_SHOTGUN_LOW",
"ACT_RANGE_ATTACK_PISTOL",
"ACT_RANGE_ATTACK_PISTOL_LOW",
"ACT_RANGE_ATTACK_SLAM",
"ACT_RANGE_ATTACK_TRIPWIRE",
"ACT_RANGE_ATTACK_THROW",
"ACT_RANGE_ATTACK_SNIPER_RIFLE",
"ACT_RANGE_ATTACK_RPG",
"ACT_MELEE_ATTACK_SWING",
"ACT_RANGE_AIM_LOW",
"ACT_RANGE_AIM_SMG1_LOW",
"ACT_RANGE_AIM_PISTOL_LOW",
"ACT_RANGE_AIM_AR2_LOW",
"ACT_COVER_PISTOL_LOW",
"ACT_COVER_SMG1_LOW",
"ACT_GESTURE_RANGE_ATTACK_AR1",
"ACT_GESTURE_RANGE_ATTACK_AR2",
"ACT_GESTURE_RANGE_ATTACK_AR2_GRENADE",
"ACT_GESTURE_RANGE_ATTACK_HMG1",
"ACT_GESTURE_RANGE_ATTACK_ML",
"ACT_GESTURE_RANGE_ATTACK_SMG1",
"ACT_GESTURE_RANGE_ATTACK_SMG1_LOW",
"ACT_GESTURE_RANGE_ATTACK_SMG2",
"ACT_GESTURE_RANGE_ATTACK_SHOTGUN",
"ACT_GESTURE_RANGE_ATTACK_PISTOL",
"ACT_GESTURE_RANGE_ATTACK_PISTOL_LOW",
"ACT_GESTURE_RANGE_ATTACK_SLAM",
"ACT_GESTURE_RANGE_ATTACK_TRIPWIRE",
"ACT_GESTURE_RANGE_ATTACK_THROW",
"ACT_GESTURE_RANGE_ATTACK_SNIPER_RIFLE",
"ACT_GESTURE_MELEE_ATTACK_SWING",
"ACT_IDLE_RIFLE",
"ACT_IDLE_SMG1",
"ACT_IDLE_ANGRY_SMG1",
"ACT_IDLE_PISTOL",
"ACT_IDLE_ANGRY_PISTOL",
"ACT_IDLE_ANGRY_SHOTGUN",
"ACT_IDLE_STEALTH_PISTOL",
"ACT_IDLE_PACKAGE",
"ACT_WALK_PACKAGE",
"ACT_IDLE_SUITCASE",
"ACT_WALK_SUITCASE",
"ACT_IDLE_SMG1_RELAXED",
"ACT_IDLE_SMG1_STIMULATED",
"ACT_WALK_RIFLE_RELAXED",
"ACT_RUN_RIFLE_RELAXED",
"ACT_WALK_RIFLE_STIMULATED",
"ACT_RUN_RIFLE_STIMULATED",
"ACT_IDLE_AIM_RIFLE_STIMULATED",
"ACT_WALK_AIM_RIFLE_STIMULATED",
"ACT_RUN_AIM_RIFLE_STIMULATED",
"ACT_IDLE_SHOTGUN_RELAXED",
"ACT_IDLE_SHOTGUN_STIMULATED",
"ACT_IDLE_SHOTGUN_AGITATED",
"ACT_WALK_ANGRY",
"ACT_POLICE_HARASS1",
"ACT_POLICE_HARASS2",
"ACT_IDLE_MANNEDGUN",
"ACT_IDLE_MELEE",
"ACT_IDLE_ANGRY_MELEE",
"ACT_IDLE_RPG_RELAXED",
"ACT_IDLE_RPG",
"ACT_IDLE_ANGRY_RPG",
"ACT_COVER_LOW_RPG",
"ACT_WALK_RPG",
"ACT_RUN_RPG",
"ACT_WALK_CROUCH_RPG",
"ACT_RUN_CROUCH_RPG",
"ACT_WALK_RPG_RELAXED",
"ACT_RUN_RPG_RELAXED",
"ACT_WALK_RIFLE",
"ACT_WALK_AIM_RIFLE",
"ACT_WALK_CROUCH_RIFLE",
"ACT_WALK_CROUCH_AIM_RIFLE",
"ACT_RUN_RIFLE",
"ACT_RUN_AIM_RIFLE",
"ACT_RUN_CROUCH_RIFLE",
"ACT_RUN_CROUCH_AIM_RIFLE",
"ACT_RUN_STEALTH_PISTOL",
"ACT_WALK_AIM_SHOTGUN",
"ACT_RUN_AIM_SHOTGUN",
"ACT_WALK_PISTOL",
"ACT_RUN_PISTOL",
"ACT_WALK_AIM_PISTOL",
"ACT_RUN_AIM_PISTOL",
"ACT_WALK_STEALTH_PISTOL",
"ACT_WALK_AIM_STEALTH_PISTOL",
"ACT_RUN_AIM_STEALTH_PISTOL",
"ACT_RELOAD_PISTOL",
"ACT_RELOAD_PISTOL_LOW",
"ACT_RELOAD_SMG1",
"ACT_RELOAD_SMG1_LOW",
"ACT_RELOAD_SHOTGUN",
"ACT_RELOAD_SHOTGUN_LOW",
"ACT_GESTURE_RELOAD",
"ACT_GESTURE_RELOAD_PISTOL",
"ACT_GESTURE_RELOAD_SMG1",
"ACT_GESTURE_RELOAD_SHOTGUN",
"ACT_BUSY_LEAN_LEFT",
"ACT_BUSY_LEAN_LEFT_ENTRY",
"ACT_BUSY_LEAN_LEFT_EXIT",
"ACT_BUSY_LEAN_BACK",
"ACT_BUSY_LEAN_BACK_ENTRY",
"ACT_BUSY_LEAN_BACK_EXIT",
"ACT_BUSY_SIT_GROUND",
"ACT_BUSY_SIT_GROUND_ENTRY",
"ACT_BUSY_SIT_GROUND_EXIT",
"ACT_BUSY_SIT_CHAIR",
"ACT_BUSY_SIT_CHAIR_ENTRY",
"ACT_BUSY_SIT_CHAIR_EXIT",
"ACT_BUSY_STAND",
"ACT_BUSY_QUEUE",
"ACT_DUCK_DODGE",
"ACT_DIE_BARNACLE_SWALLOW",
"ACT_GESTURE_BARNACLE_STRANGLE",
"ACT_PHYSCANNON_DETACH",
"ACT_PHYSCANNON_ANIMATE",
"ACT_PHYSCANNON_ANIMATE_PRE",
"ACT_PHYSCANNON_ANIMATE_POST",
"ACT_DIE_FRONTSIDE",
"ACT_DIE_RIGHTSIDE",
"ACT_DIE_BACKSIDE",
"ACT_DIE_LEFTSIDE",
"ACT_OPEN_DOOR",
"ACT_DI_ALYX_ZOMBIE_MELEE",
"ACT_DI_ALYX_ZOMBIE_TORSO_MELEE",
"ACT_DI_ALYX_HEADCRAB_MELEE",
"ACT_DI_ALYX_ANTLION",
"ACT_DI_ALYX_ZOMBIE_SHOTGUN64",
"ACT_DI_ALYX_ZOMBIE_SHOTGUN26",
"ACT_READINESS_RELAXED_TO_STIMULATED",
"ACT_READINESS_RELAXED_TO_STIMULATED_WALK",
"ACT_READINESS_AGITATED_TO_STIMULATED",
"ACT_READINESS_STIMULATED_TO_RELAXED",
"ACT_READINESS_PISTOL_RELAXED_TO_STIMULATED",
"ACT_READINESS_PISTOL_RELAXED_TO_STIMULATED_WALK",
"ACT_READINESS_PISTOL_AGITATED_TO_STIMULATED",
"ACT_READINESS_PISTOL_STIMULATED_TO_RELAXED",
"ACT_IDLE_CARRY",
"ACT_WALK_CARRY",
"ACT_STARTDYING",
"ACT_DYINGLOOP",
"ACT_DYINGTODEAD",
"ACT_RIDE_MANNED_GUN",
"ACT_VM_SPRINT_ENTER",
"ACT_VM_SPRINT_IDLE",
"ACT_VM_SPRINT_LEAVE",
"ACT_FIRE_START",
"ACT_FIRE_LOOP",
"ACT_FIRE_END",
"ACT_CROUCHING_GRENADEIDLE",
"ACT_CROUCHING_GRENADEREADY",
"ACT_CROUCHING_PRIMARYATTACK",
"ACT_OVERLAY_GRENADEIDLE",
"ACT_OVERLAY_GRENADEREADY",
"ACT_OVERLAY_PRIMARYATTACK",
"ACT_OVERLAY_SHIELD_UP",
"ACT_OVERLAY_SHIELD_DOWN",
"ACT_OVERLAY_SHIELD_UP_IDLE",
"ACT_OVERLAY_SHIELD_ATTACK",
"ACT_OVERLAY_SHIELD_KNOCKBACK",
"ACT_SHIELD_UP",
"ACT_SHIELD_DOWN",
"ACT_SHIELD_UP_IDLE",
"ACT_SHIELD_ATTACK",
"ACT_SHIELD_KNOCKBACK",
"ACT_CROUCHING_SHIELD_UP",
"ACT_CROUCHING_SHIELD_DOWN",
"ACT_CROUCHING_SHIELD_UP_IDLE",
"ACT_CROUCHING_SHIELD_ATTACK",
"ACT_CROUCHING_SHIELD_KNOCKBACK",
"ACT_TURNRIGHT45",
"ACT_TURNLEFT45",
"ACT_TURN",
"ACT_OBJ_ASSEMBLING",
"ACT_OBJ_DISMANTLING",
"ACT_OBJ_STARTUP",
"ACT_OBJ_RUNNING",
"ACT_OBJ_IDLE",
"ACT_OBJ_PLACING",
"ACT_OBJ_DETERIORATING",
"ACT_OBJ_UPGRADING",
"ACT_DEPLOY",
"ACT_DEPLOY_IDLE",
"ACT_UNDEPLOY",
"ACT_GRENADE_ROLL",
"ACT_GRENADE_TOSS",
"ACT_HANDGRENADE_THROW1",
"ACT_HANDGRENADE_THROW2",
"ACT_HANDGRENADE_THROW3",
"ACT_SHOTGUN_IDLE_DEEP",
"ACT_SHOTGUN_IDLE4",
"ACT_GLOCK_SHOOTEMPTY",
"ACT_GLOCK_SHOOT_RELOAD",
"ACT_RPG_DRAW_UNLOADED",
"ACT_RPG_HOLSTER_UNLOADED",
"ACT_RPG_IDLE_UNLOADED",
"ACT_RPG_FIDGET_UNLOADED",
"ACT_CROSSBOW_DRAW_UNLOADED",
"ACT_CROSSBOW_IDLE_UNLOADED",
"ACT_CROSSBOW_FIDGET_UNLOADED",
"ACT_GAUSS_SPINUP",
"ACT_GAUSS_SPINCYCLE",
"ACT_TRIPMINE_GROUND",
"ACT_TRIPMINE_WORLD",
"ACT_VM_PRIMARYATTACK_SILENCED",
"ACT_VM_RELOAD_SILENCED",
"ACT_VM_DRYFIRE_SILENCED",
"ACT_VM_IDLE_SILENCED",
"ACT_VM_DRAW_SILENCED",
"ACT_VM_IDLE_EMPTY_LEFT",
"ACT_VM_DRYFIRE_LEFT",
"ACT_VM_PRIMARYATTACK_IRONSIGHTED1",
"ACT_VM_PRIMARYATTACK_IRONSIGHTED2",
"ACT_VM_PRIMARYATTACK_IRONSIGHTED3",
"ACT_PLAYER_IDLE_FIRE",
"ACT_PLAYER_CROUCH_FIRE",
"ACT_PLAYER_CROUCH_WALK_FIRE",
"ACT_PLAYER_WALK_FIRE",
"ACT_PLAYER_RUN_FIRE",
"ACT_IDLETORUN",
"ACT_RUNTOIDLE",
"ACT_SPRINT",
"ACT_GET_DOWN_STAND",
"ACT_GET_UP_STAND",
"ACT_GET_DOWN_CROUCH",
"ACT_GET_UP_CROUCH",
"ACT_PRONE_FORWARD",
"ACT_PRONE_IDLE",
"ACT_DEEPIDLE1",
"ACT_DEEPIDLE2",
"ACT_DEEPIDLE3",
"ACT_DEEPIDLE4",
"ACT_VM_RELOAD_DEPLOYED",
"ACT_VM_RELOAD_IDLE",
"ACT_VM_DRAW_DEPLOYED",
"ACT_VM_DRAW_EMPTY",
"ACT_VM_PRIMARYATTACK_EMPTY",
"ACT_VM_RELOAD_EMPTY",
"ACT_VM_IDLE_EMPTY",
"ACT_VM_IDLE_DEPLOYED_EMPTY",
"ACT_VM_IDLE_8",
"ACT_VM_IDLE_7",
"ACT_VM_IDLE_6",
"ACT_VM_IDLE_5",
"ACT_VM_IDLE_4",
"ACT_VM_IDLE_3",
"ACT_VM_IDLE_2",
"ACT_VM_IDLE_1",
"ACT_VM_IDLE_DEPLOYED",
"ACT_VM_IDLE_DEPLOYED_8",
"ACT_VM_IDLE_DEPLOYED_7",
"ACT_VM_IDLE_DEPLOYED_6",
"ACT_VM_IDLE_DEPLOYED_5",
"ACT_VM_IDLE_DEPLOYED_4",
"ACT_VM_IDLE_DEPLOYED_3",
"ACT_VM_IDLE_DEPLOYED_2",
"ACT_VM_IDLE_DEPLOYED_1",
"ACT_VM_UNDEPLOY",
"ACT_VM_UNDEPLOY_8",
"ACT_VM_UNDEPLOY_7",
"ACT_VM_UNDEPLOY_6",
"ACT_VM_UNDEPLOY_5",
"ACT_VM_UNDEPLOY_4",
"ACT_VM_UNDEPLOY_3",
"ACT_VM_UNDEPLOY_2",
"ACT_VM_UNDEPLOY_1",
"ACT_VM_UNDEPLOY_EMPTY",
"ACT_VM_DEPLOY",
"ACT_VM_DEPLOY_8",
"ACT_VM_DEPLOY_7",
"ACT_VM_DEPLOY_6",
"ACT_VM_DEPLOY_5",
"ACT_VM_DEPLOY_4",
"ACT_VM_DEPLOY_3",
"ACT_VM_DEPLOY_2",
"ACT_VM_DEPLOY_1",
"ACT_VM_DEPLOY_EMPTY",
"ACT_VM_PRIMARYATTACK_8",
"ACT_VM_PRIMARYATTACK_7",
"ACT_VM_PRIMARYATTACK_6",
"ACT_VM_PRIMARYATTACK_5",
"ACT_VM_PRIMARYATTACK_4",
"ACT_VM_PRIMARYATTACK_3",
"ACT_VM_PRIMARYATTACK_2",
"ACT_VM_PRIMARYATTACK_1",
"ACT_VM_PRIMARYATTACK_DEPLOYED",
"ACT_VM_PRIMARYATTACK_DEPLOYED_8",
"ACT_VM_PRIMARYATTACK_DEPLOYED_7",
"ACT_VM_PRIMARYATTACK_DEPLOYED_6",
"ACT_VM_PRIMARYATTACK_DEPLOYED_5",
"ACT_VM_PRIMARYATTACK_DEPLOYED_4",
"ACT_VM_PRIMARYATTACK_DEPLOYED_3",
"ACT_VM_PRIMARYATTACK_DEPLOYED_2",
"ACT_VM_PRIMARYATTACK_DEPLOYED_1",
"ACT_VM_PRIMARYATTACK_DEPLOYED_EMPTY",
"ACT_DOD_DEPLOYED",
"ACT_DOD_PRONE_DEPLOYED",
"ACT_DOD_IDLE_ZOOMED",
"ACT_DOD_WALK_ZOOMED",
"ACT_DOD_CROUCH_ZOOMED",
"ACT_DOD_CROUCHWALK_ZOOMED",
"ACT_DOD_PRONE_ZOOMED",
"ACT_DOD_PRONE_FORWARD_ZOOMED",
"ACT_DOD_PRIMARYATTACK_DEPLOYED",
"ACT_DOD_PRIMARYATTACK_PRONE_DEPLOYED",
"ACT_DOD_RELOAD_DEPLOYED",
"ACT_DOD_RELOAD_PRONE_DEPLOYED",
"ACT_DOD_PRIMARYATTACK_PRONE",
"ACT_DOD_SECONDARYATTACK_PRONE",
"ACT_DOD_RELOAD_CROUCH",
"ACT_DOD_RELOAD_PRONE",
"ACT_DOD_STAND_IDLE",
"ACT_DOD_STAND_AIM",
"ACT_DOD_CROUCH_IDLE",
"ACT_DOD_CROUCH_AIM",
"ACT_DOD_CROUCHWALK_IDLE",
"ACT_DOD_CROUCHWALK_AIM",
"ACT_DOD_WALK_IDLE",
"ACT_DOD_WALK_AIM",
"ACT_DOD_RUN_IDLE",
"ACT_DOD_RUN_AIM",
"ACT_DOD_STAND_AIM_PISTOL",
"ACT_DOD_CROUCH_AIM_PISTOL",
"ACT_DOD_CROUCHWALK_AIM_PISTOL",
"ACT_DOD_WALK_AIM_PISTOL",
"ACT_DOD_RUN_AIM_PISTOL",
"ACT_DOD_PRONE_AIM_PISTOL",
"ACT_DOD_STAND_IDLE_PISTOL",
"ACT_DOD_CROUCH_IDLE_PISTOL",
"ACT_DOD_CROUCHWALK_IDLE_PISTOL",
"ACT_DOD_WALK_IDLE_PISTOL",
"ACT_DOD_RUN_IDLE_PISTOL",
"ACT_DOD_SPRINT_IDLE_PISTOL",
"ACT_DOD_PRONEWALK_IDLE_PISTOL",
"ACT_DOD_STAND_AIM_C96",
"ACT_DOD_CROUCH_AIM_C96",
"ACT_DOD_CROUCHWALK_AIM_C96",
"ACT_DOD_WALK_AIM_C96",
"ACT_DOD_RUN_AIM_C96",
"ACT_DOD_PRONE_AIM_C96",
"ACT_DOD_STAND_IDLE_C96",
"ACT_DOD_CROUCH_IDLE_C96",
"ACT_DOD_CROUCHWALK_IDLE_C96",
"ACT_DOD_WALK_IDLE_C96",
"ACT_DOD_RUN_IDLE_C96",
"ACT_DOD_SPRINT_IDLE_C96",
"ACT_DOD_PRONEWALK_IDLE_C96",
"ACT_DOD_STAND_AIM_RIFLE",
"ACT_DOD_CROUCH_AIM_RIFLE",
"ACT_DOD_CROUCHWALK_AIM_RIFLE",
"ACT_DOD_WALK_AIM_RIFLE",
"ACT_DOD_RUN_AIM_RIFLE",
"ACT_DOD_PRONE_AIM_RIFLE",
"ACT_DOD_STAND_IDLE_RIFLE",
"ACT_DOD_CROUCH_IDLE_RIFLE",
"ACT_DOD_CROUCHWALK_IDLE_RIFLE",
"ACT_DOD_WALK_IDLE_RIFLE",
"ACT_DOD_RUN_IDLE_RIFLE",
"ACT_DOD_SPRINT_IDLE_RIFLE",
"ACT_DOD_PRONEWALK_IDLE_RIFLE",
"ACT_DOD_STAND_AIM_BOLT",
"ACT_DOD_CROUCH_AIM_BOLT",
"ACT_DOD_CROUCHWALK_AIM_BOLT",
"ACT_DOD_WALK_AIM_BOLT",
"ACT_DOD_RUN_AIM_BOLT",
"ACT_DOD_PRONE_AIM_BOLT",
"ACT_DOD_STAND_IDLE_BOLT",
"ACT_DOD_CROUCH_IDLE_BOLT",
"ACT_DOD_CROUCHWALK_IDLE_BOLT",
"ACT_DOD_WALK_IDLE_BOLT",
"ACT_DOD_RUN_IDLE_BOLT",
"ACT_DOD_SPRINT_IDLE_BOLT",
"ACT_DOD_PRONEWALK_IDLE_BOLT",
"ACT_DOD_STAND_AIM_TOMMY",
"ACT_DOD_CROUCH_AIM_TOMMY",
"ACT_DOD_CROUCHWALK_AIM_TOMMY",
"ACT_DOD_WALK_AIM_TOMMY",
"ACT_DOD_RUN_AIM_TOMMY",
"ACT_DOD_PRONE_AIM_TOMMY",
"ACT_DOD_STAND_IDLE_TOMMY",
"ACT_DOD_CROUCH_IDLE_TOMMY",
"ACT_DOD_CROUCHWALK_IDLE_TOMMY",
"ACT_DOD_WALK_IDLE_TOMMY",
"ACT_DOD_RUN_IDLE_TOMMY",
"ACT_DOD_SPRINT_IDLE_TOMMY",
"ACT_DOD_PRONEWALK_IDLE_TOMMY",
"ACT_DOD_STAND_AIM_MP40",
"ACT_DOD_CROUCH_AIM_MP40",
"ACT_DOD_CROUCHWALK_AIM_MP40",
"ACT_DOD_WALK_AIM_MP40",
"ACT_DOD_RUN_AIM_MP40",
"ACT_DOD_PRONE_AIM_MP40",
"ACT_DOD_STAND_IDLE_MP40",
"ACT_DOD_CROUCH_IDLE_MP40",
"ACT_DOD_CROUCHWALK_IDLE_MP40",
"ACT_DOD_WALK_IDLE_MP40",
"ACT_DOD_RUN_IDLE_MP40",
"ACT_DOD_SPRINT_IDLE_MP40",
"ACT_DOD_PRONEWALK_IDLE_MP40",
"ACT_DOD_STAND_AIM_MP44",
"ACT_DOD_CROUCH_AIM_MP44",
"ACT_DOD_CROUCHWALK_AIM_MP44",
"ACT_DOD_WALK_AIM_MP44",
"ACT_DOD_RUN_AIM_MP44",
"ACT_DOD_PRONE_AIM_MP44",
"ACT_DOD_STAND_IDLE_MP44",
"ACT_DOD_CROUCH_IDLE_MP44",
"ACT_DOD_CROUCHWALK_IDLE_MP44",
"ACT_DOD_WALK_IDLE_MP44",
"ACT_DOD_RUN_IDLE_MP44",
"ACT_DOD_SPRINT_IDLE_MP44",
"ACT_DOD_PRONEWALK_IDLE_MP44",
"ACT_DOD_STAND_AIM_GREASE",
"ACT_DOD_CROUCH_AIM_GREASE",
"ACT_DOD_CROUCHWALK_AIM_GREASE",
"ACT_DOD_WALK_AIM_GREASE",
"ACT_DOD_RUN_AIM_GREASE",
"ACT_DOD_PRONE_AIM_GREASE",
"ACT_DOD_STAND_IDLE_GREASE",
"ACT_DOD_CROUCH_IDLE_GREASE",
"ACT_DOD_CROUCHWALK_IDLE_GREASE",
"ACT_DOD_WALK_IDLE_GREASE",
"ACT_DOD_RUN_IDLE_GREASE",
"ACT_DOD_SPRINT_IDLE_GREASE",
"ACT_DOD_PRONEWALK_IDLE_GREASE",
"ACT_DOD_STAND_AIM_MG",
"ACT_DOD_CROUCH_AIM_MG",
"ACT_DOD_CROUCHWALK_AIM_MG",
"ACT_DOD_WALK_AIM_MG",
"ACT_DOD_RUN_AIM_MG",
"ACT_DOD_PRONE_AIM_MG",
"ACT_DOD_STAND_IDLE_MG",
"ACT_DOD_CROUCH_IDLE_MG",
"ACT_DOD_CROUCHWALK_IDLE_MG",
"ACT_DOD_WALK_IDLE_MG",
"ACT_DOD_RUN_IDLE_MG",
"ACT_DOD_SPRINT_IDLE_MG",
"ACT_DOD_PRONEWALK_IDLE_MG",
"ACT_DOD_STAND_AIM_30CAL",
"ACT_DOD_CROUCH_AIM_30CAL",
"ACT_DOD_CROUCHWALK_AIM_30CAL",
"ACT_DOD_WALK_AIM_30CAL",
"ACT_DOD_RUN_AIM_30CAL",
"ACT_DOD_PRONE_AIM_30CAL",
"ACT_DOD_STAND_IDLE_30CAL",
"ACT_DOD_CROUCH_IDLE_30CAL",
"ACT_DOD_CROUCHWALK_IDLE_30CAL",
"ACT_DOD_WALK_IDLE_30CAL",
"ACT_DOD_RUN_IDLE_30CAL",
"ACT_DOD_SPRINT_IDLE_30CAL",
"ACT_DOD_PRONEWALK_IDLE_30CAL",
"ACT_DOD_STAND_AIM_GREN_FRAG",
"ACT_DOD_CROUCH_AIM_GREN_FRAG",
"ACT_DOD_CROUCHWALK_AIM_GREN_FRAG",
"ACT_DOD_WALK_AIM_GREN_FRAG",
"ACT_DOD_RUN_AIM_GREN_FRAG",
"ACT_DOD_PRONE_AIM_GREN_FRAG",
"ACT_DOD_SPRINT_AIM_GREN_FRAG",
"ACT_DOD_PRONEWALK_AIM_GREN_FRAG",
"ACT_DOD_STAND_AIM_GREN_STICK",
"ACT_DOD_CROUCH_AIM_GREN_STICK",
"ACT_DOD_CROUCHWALK_AIM_GREN_STICK",
"ACT_DOD_WALK_AIM_GREN_STICK",
"ACT_DOD_RUN_AIM_GREN_STICK",
"ACT_DOD_PRONE_AIM_GREN_STICK",
"ACT_DOD_SPRINT_AIM_GREN_STICK",
"ACT_DOD_PRONEWALK_AIM_GREN_STICK",
"ACT_DOD_STAND_AIM_KNIFE",
"ACT_DOD_CROUCH_AIM_KNIFE",
"ACT_DOD_CROUCHWALK_AIM_KNIFE",
"ACT_DOD_WALK_AIM_KNIFE",
"ACT_DOD_RUN_AIM_KNIFE",
"ACT_DOD_PRONE_AIM_KNIFE",
"ACT_DOD_SPRINT_AIM_KNIFE",
"ACT_DOD_PRONEWALK_AIM_KNIFE",
"ACT_DOD_STAND_AIM_SPADE",
"ACT_DOD_CROUCH_AIM_SPADE",
"ACT_DOD_CROUCHWALK_AIM_SPADE",
"ACT_DOD_WALK_AIM_SPADE",
"ACT_DOD_RUN_AIM_SPADE",
"ACT_DOD_PRONE_AIM_SPADE",
"ACT_DOD_SPRINT_AIM_SPADE",
"ACT_DOD_PRONEWALK_AIM_SPADE",
"ACT_DOD_STAND_AIM_BAZOOKA",
"ACT_DOD_CROUCH_AIM_BAZOOKA",
"ACT_DOD_CROUCHWALK_AIM_BAZOOKA",
"ACT_DOD_WALK_AIM_BAZOOKA",
"ACT_DOD_RUN_AIM_BAZOOKA",
"ACT_DOD_PRONE_AIM_BAZOOKA",
"ACT_DOD_STAND_IDLE_BAZOOKA",
"ACT_DOD_CROUCH_IDLE_BAZOOKA",
"ACT_DOD_CROUCHWALK_IDLE_BAZOOKA",
"ACT_DOD_WALK_IDLE_BAZOOKA",
"ACT_DOD_RUN_IDLE_BAZOOKA",
"ACT_DOD_SPRINT_IDLE_BAZOOKA",
"ACT_DOD_PRONEWALK_IDLE_BAZOOKA",
"ACT_DOD_STAND_AIM_PSCHRECK",
"ACT_DOD_CROUCH_AIM_PSCHRECK",
"ACT_DOD_CROUCHWALK_AIM_PSCHRECK",
"ACT_DOD_WALK_AIM_PSCHRECK",
"ACT_DOD_RUN_AIM_PSCHRECK",
"ACT_DOD_PRONE_AIM_PSCHRECK",
"ACT_DOD_STAND_IDLE_PSCHRECK",
"ACT_DOD_CROUCH_IDLE_PSCHRECK",
"ACT_DOD_CROUCHWALK_IDLE_PSCHRECK",
"ACT_DOD_WALK_IDLE_PSCHRECK",
"ACT_DOD_RUN_IDLE_PSCHRECK",
"ACT_DOD_SPRINT_IDLE_PSCHRECK",
"ACT_DOD_PRONEWALK_IDLE_PSCHRECK",
"ACT_DOD_STAND_AIM_BAR",
"ACT_DOD_CROUCH_AIM_BAR",
"ACT_DOD_CROUCHWALK_AIM_BAR",
"ACT_DOD_WALK_AIM_BAR",
"ACT_DOD_RUN_AIM_BAR",
"ACT_DOD_PRONE_AIM_BAR",
"ACT_DOD_STAND_IDLE_BAR",
"ACT_DOD_CROUCH_IDLE_BAR",
"ACT_DOD_CROUCHWALK_IDLE_BAR",
"ACT_DOD_WALK_IDLE_BAR",
"ACT_DOD_RUN_IDLE_BAR",
"ACT_DOD_SPRINT_IDLE_BAR",
"ACT_DOD_PRONEWALK_IDLE_BAR",
"ACT_DOD_STAND_ZOOM_RIFLE",
"ACT_DOD_CROUCH_ZOOM_RIFLE",
"ACT_DOD_CROUCHWALK_ZOOM_RIFLE",
"ACT_DOD_WALK_ZOOM_RIFLE",
"ACT_DOD_RUN_ZOOM_RIFLE",
"ACT_DOD_PRONE_ZOOM_RIFLE",
"ACT_DOD_STAND_ZOOM_BOLT",
"ACT_DOD_CROUCH_ZOOM_BOLT",
"ACT_DOD_CROUCHWALK_ZOOM_BOLT",
"ACT_DOD_WALK_ZOOM_BOLT",
"ACT_DOD_RUN_ZOOM_BOLT",
"ACT_DOD_PRONE_ZOOM_BOLT",
"ACT_DOD_STAND_ZOOM_BAZOOKA",
"ACT_DOD_CROUCH_ZOOM_BAZOOKA",
"ACT_DOD_CROUCHWALK_ZOOM_BAZOOKA",
"ACT_DOD_WALK_ZOOM_BAZOOKA",
"ACT_DOD_RUN_ZOOM_BAZOOKA",
"ACT_DOD_PRONE_ZOOM_BAZOOKA",
"ACT_DOD_STAND_ZOOM_PSCHRECK",
"ACT_DOD_CROUCH_ZOOM_PSCHRECK",
"ACT_DOD_CROUCHWALK_ZOOM_PSCHRECK",
"ACT_DOD_WALK_ZOOM_PSCHRECK",
"ACT_DOD_RUN_ZOOM_PSCHRECK",
"ACT_DOD_PRONE_ZOOM_PSCHRECK",
"ACT_DOD_DEPLOY_RIFLE",
"ACT_DOD_DEPLOY_TOMMY",
"ACT_DOD_DEPLOY_MG",
"ACT_DOD_DEPLOY_30CAL",
"ACT_DOD_PRONE_DEPLOY_RIFLE",
"ACT_DOD_PRONE_DEPLOY_TOMMY",
"ACT_DOD_PRONE_DEPLOY_MG",
"ACT_DOD_PRONE_DEPLOY_30CAL",
"ACT_DOD_PRIMARYATTACK_RIFLE",
"ACT_DOD_SECONDARYATTACK_RIFLE",
"ACT_DOD_PRIMARYATTACK_PRONE_RIFLE",
"ACT_DOD_SECONDARYATTACK_PRONE_RIFLE",
"ACT_DOD_PRIMARYATTACK_PRONE_DEPLOYED_RIFLE",
"ACT_DOD_PRIMARYATTACK_DEPLOYED_RIFLE",
"ACT_DOD_PRIMARYATTACK_BOLT",
"ACT_DOD_SECONDARYATTACK_BOLT",
"ACT_DOD_PRIMARYATTACK_PRONE_BOLT",
"ACT_DOD_SECONDARYATTACK_PRONE_BOLT",
"ACT_DOD_PRIMARYATTACK_TOMMY",
"ACT_DOD_PRIMARYATTACK_PRONE_TOMMY",
"ACT_DOD_SECONDARYATTACK_TOMMY",
"ACT_DOD_SECONDARYATTACK_PRONE_TOMMY",
"ACT_DOD_PRIMARYATTACK_MP40",
"ACT_DOD_PRIMARYATTACK_PRONE_MP40",
"ACT_DOD_SECONDARYATTACK_MP40",
"ACT_DOD_SECONDARYATTACK_PRONE_MP40",
"ACT_DOD_PRIMARYATTACK_MP44",
"ACT_DOD_PRIMARYATTACK_PRONE_MP44",
"ACT_DOD_PRIMARYATTACK_GREASE",
"ACT_DOD_PRIMARYATTACK_PRONE_GREASE",
"ACT_DOD_PRIMARYATTACK_PISTOL",
"ACT_DOD_PRIMARYATTACK_PRONE_PISTOL",
"ACT_DOD_PRIMARYATTACK_C96",
"ACT_DOD_PRIMARYATTACK_PRONE_C96",
"ACT_DOD_PRIMARYATTACK_MG",
"ACT_DOD_PRIMARYATTACK_PRONE_MG",
"ACT_DOD_PRIMARYATTACK_PRONE_DEPLOYED_MG",
"ACT_DOD_PRIMARYATTACK_DEPLOYED_MG",
"ACT_DOD_PRIMARYATTACK_30CAL",
"ACT_DOD_PRIMARYATTACK_PRONE_30CAL",
"ACT_DOD_PRIMARYATTACK_DEPLOYED_30CAL",
"ACT_DOD_PRIMARYATTACK_PRONE_DEPLOYED_30CAL",
"ACT_DOD_PRIMARYATTACK_GREN_FRAG",
"ACT_DOD_PRIMARYATTACK_PRONE_GREN_FRAG",
"ACT_DOD_PRIMARYATTACK_GREN_STICK",
"ACT_DOD_PRIMARYATTACK_PRONE_GREN_STICK",
"ACT_DOD_PRIMARYATTACK_KNIFE",
"ACT_DOD_PRIMARYATTACK_PRONE_KNIFE",
"ACT_DOD_PRIMARYATTACK_SPADE",
"ACT_DOD_PRIMARYATTACK_PRONE_SPADE",
"ACT_DOD_PRIMARYATTACK_BAZOOKA",
"ACT_DOD_PRIMARYATTACK_PRONE_BAZOOKA",
"ACT_DOD_PRIMARYATTACK_PSCHRECK",
"ACT_DOD_PRIMARYATTACK_PRONE_PSCHRECK",
"ACT_DOD_PRIMARYATTACK_BAR",
"ACT_DOD_PRIMARYATTACK_PRONE_BAR",
"ACT_DOD_RELOAD_GARAND",
"ACT_DOD_RELOAD_K43",
"ACT_DOD_RELOAD_BAR",
"ACT_DOD_RELOAD_MP40",
"ACT_DOD_RELOAD_MP44",
"ACT_DOD_RELOAD_BOLT",
"ACT_DOD_RELOAD_M1CARBINE",
"ACT_DOD_RELOAD_TOMMY",
"ACT_DOD_RELOAD_GREASEGUN",
"ACT_DOD_RELOAD_PISTOL",
"ACT_DOD_RELOAD_FG42",
"ACT_DOD_RELOAD_RIFLE",
"ACT_DOD_RELOAD_RIFLEGRENADE",
"ACT_DOD_RELOAD_C96",
"ACT_DOD_RELOAD_CROUCH_BAR",
"ACT_DOD_RELOAD_CROUCH_RIFLE",
"ACT_DOD_RELOAD_CROUCH_RIFLEGRENADE",
"ACT_DOD_RELOAD_CROUCH_BOLT",
"ACT_DOD_RELOAD_CROUCH_MP44",
"ACT_DOD_RELOAD_CROUCH_MP40",
"ACT_DOD_RELOAD_CROUCH_TOMMY",
"ACT_DOD_RELOAD_CROUCH_BAZOOKA",
"ACT_DOD_RELOAD_CROUCH_PSCHRECK",
"ACT_DOD_RELOAD_CROUCH_PISTOL",
"ACT_DOD_RELOAD_CROUCH_M1CARBINE",
"ACT_DOD_RELOAD_CROUCH_C96",
"ACT_DOD_RELOAD_BAZOOKA",
"ACT_DOD_ZOOMLOAD_BAZOOKA",
"ACT_DOD_RELOAD_PSCHRECK",
"ACT_DOD_ZOOMLOAD_PSCHRECK",
"ACT_DOD_RELOAD_DEPLOYED_FG42",
"ACT_DOD_RELOAD_DEPLOYED_30CAL",
"ACT_DOD_RELOAD_DEPLOYED_MG",
"ACT_DOD_RELOAD_DEPLOYED_MG34",
"ACT_DOD_RELOAD_DEPLOYED_BAR",
"ACT_DOD_RELOAD_PRONE_PISTOL",
"ACT_DOD_RELOAD_PRONE_GARAND",
"ACT_DOD_RELOAD_PRONE_M1CARBINE",
"ACT_DOD_RELOAD_PRONE_BOLT",
"ACT_DOD_RELOAD_PRONE_K43",
"ACT_DOD_RELOAD_PRONE_MP40",
"ACT_DOD_RELOAD_PRONE_MP44",
"ACT_DOD_RELOAD_PRONE_BAR",
"ACT_DOD_RELOAD_PRONE_GREASEGUN",
"ACT_DOD_RELOAD_PRONE_TOMMY",
"ACT_DOD_RELOAD_PRONE_FG42",
"ACT_DOD_RELOAD_PRONE_RIFLE",
"ACT_DOD_RELOAD_PRONE_RIFLEGRENADE",
"ACT_DOD_RELOAD_PRONE_C96",
"ACT_DOD_RELOAD_PRONE_BAZOOKA",
"ACT_DOD_ZOOMLOAD_PRONE_BAZOOKA",
"ACT_DOD_RELOAD_PRONE_PSCHRECK",
"ACT_DOD_ZOOMLOAD_PRONE_PSCHRECK",
"ACT_DOD_RELOAD_PRONE_DEPLOYED_BAR",
"ACT_DOD_RELOAD_PRONE_DEPLOYED_FG42",
"ACT_DOD_RELOAD_PRONE_DEPLOYED_30CAL",
"ACT_DOD_RELOAD_PRONE_DEPLOYED_MG",
"ACT_DOD_RELOAD_PRONE_DEPLOYED_MG34",
"ACT_DOD_PRONE_ZOOM_FORWARD_RIFLE",
"ACT_DOD_PRONE_ZOOM_FORWARD_BOLT",
"ACT_DOD_PRONE_ZOOM_FORWARD_BAZOOKA",
"ACT_DOD_PRONE_ZOOM_FORWARD_PSCHRECK",
"ACT_DOD_PRIMARYATTACK_CROUCH",
"ACT_DOD_PRIMARYATTACK_CROUCH_SPADE",
"ACT_DOD_PRIMARYATTACK_CROUCH_KNIFE",
"ACT_DOD_PRIMARYATTACK_CROUCH_GREN_FRAG",
"ACT_DOD_PRIMARYATTACK_CROUCH_GREN_STICK",
"ACT_DOD_SECONDARYATTACK_CROUCH",
"ACT_DOD_SECONDARYATTACK_CROUCH_TOMMY",
"ACT_DOD_SECONDARYATTACK_CROUCH_MP40",
"ACT_DOD_HS_IDLE",
"ACT_DOD_HS_CROUCH",
"ACT_DOD_HS_IDLE_30CAL",
"ACT_DOD_HS_IDLE_BAZOOKA",
"ACT_DOD_HS_IDLE_PSCHRECK",
"ACT_DOD_HS_IDLE_KNIFE",
"ACT_DOD_HS_IDLE_MG42",
"ACT_DOD_HS_IDLE_PISTOL",
"ACT_DOD_HS_IDLE_STICKGRENADE",
"ACT_DOD_HS_IDLE_TOMMY",
"ACT_DOD_HS_IDLE_MP44",
"ACT_DOD_HS_IDLE_K98",
"ACT_DOD_HS_CROUCH_30CAL",
"ACT_DOD_HS_CROUCH_BAZOOKA",
"ACT_DOD_HS_CROUCH_PSCHRECK",
"ACT_DOD_HS_CROUCH_KNIFE",
"ACT_DOD_HS_CROUCH_MG42",
"ACT_DOD_HS_CROUCH_PISTOL",
"ACT_DOD_HS_CROUCH_STICKGRENADE",
"ACT_DOD_HS_CROUCH_TOMMY",
"ACT_DOD_HS_CROUCH_MP44",
"ACT_DOD_HS_CROUCH_K98",
"ACT_DOD_STAND_IDLE_TNT",
"ACT_DOD_CROUCH_IDLE_TNT",
"ACT_DOD_CROUCHWALK_IDLE_TNT",
"ACT_DOD_WALK_IDLE_TNT",
"ACT_DOD_RUN_IDLE_TNT",
"ACT_DOD_SPRINT_IDLE_TNT",
"ACT_DOD_PRONEWALK_IDLE_TNT",
"ACT_DOD_PLANT_TNT",
"ACT_DOD_DEFUSE_TNT",
"ACT_HL2MP_ALYXGUN_SMG_HOLSTER,//",
"ACT_HL2MP_IDLE",
"ACT_HL2MP_RUN",
"ACT_HL2MP_IDLE_CROUCH",
"ACT_HL2MP_WALK_CROUCH",
"ACT_HL2MP_GESTURE_RANGE_ATTACK",
"ACT_HL2MP_GESTURE_RELOAD",
"ACT_HL2MP_JUMP",
"ACT_HL2MP_IDLE_PISTOL",
"ACT_HL2MP_RUN_PISTOL",
"ACT_HL2MP_IDLE_CROUCH_PISTOL",
"ACT_HL2MP_WALK_CROUCH_PISTOL",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL",
"ACT_HL2MP_GESTURE_RELOAD_PISTOL",
"ACT_HL2MP_JUMP_PISTOL",
"ACT_HL2MP_IDLE_SMG1",
"ACT_HL2MP_RUN_SMG1",
"ACT_HL2MP_IDLE_CROUCH_SMG1",
"ACT_HL2MP_WALK_CROUCH_SMG1",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG1",
"ACT_HL2MP_GESTURE_RELOAD_SMG1",
"ACT_HL2MP_JUMP_SMG1",
"ACT_HL2MP_IDLE_AR2",
"ACT_HL2MP_RUN_AR2",
"ACT_HL2MP_IDLE_CROUCH_AR2",
"ACT_HL2MP_WALK_CROUCH_AR2",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2",
"ACT_HL2MP_GESTURE_RELOAD_AR2",
"ACT_HL2MP_JUMP_AR2",
"ACT_HL2MP_IDLE_SHOTGUN",
"ACT_HL2MP_RUN_SHOTGUN",
"ACT_HL2MP_IDLE_CROUCH_SHOTGUN",
"ACT_HL2MP_WALK_CROUCH_SHOTGUN",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN",
"ACT_HL2MP_GESTURE_RELOAD_SHOTGUN",
"ACT_HL2MP_JUMP_SHOTGUN",
"ACT_HL2MP_IDLE_RPG",
"ACT_HL2MP_RUN_RPG",
"ACT_HL2MP_IDLE_CROUCH_RPG",
"ACT_HL2MP_WALK_CROUCH_RPG",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_RPG",
"ACT_HL2MP_GESTURE_RELOAD_RPG",
"ACT_HL2MP_JUMP_RPG",
"ACT_HL2MP_IDLE_GRENADE",
"ACT_HL2MP_RUN_GRENADE",
"ACT_HL2MP_IDLE_CROUCH_GRENADE",
"ACT_HL2MP_WALK_CROUCH_GRENADE",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE",
"ACT_HL2MP_GESTURE_RELOAD_GRENADE",
"ACT_HL2MP_JUMP_GRENADE",
"ACT_HL2MP_IDLE_PHYSGUN",
"ACT_HL2MP_RUN_PHYSGUN",
"ACT_HL2MP_IDLE_CROUCH_PHYSGUN",
"ACT_HL2MP_WALK_CROUCH_PHYSGUN",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_PHYSGUN",
"ACT_HL2MP_GESTURE_RELOAD_PHYSGUN",
"ACT_HL2MP_JUMP_PHYSGUN",
"ACT_HL2MP_IDLE_CROSSBOW",
"ACT_HL2MP_RUN_CROSSBOW",
"ACT_HL2MP_IDLE_CROUCH_CROSSBOW",
"ACT_HL2MP_WALK_CROUCH_CROSSBOW",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_CROSSBOW",
"ACT_HL2MP_GESTURE_RELOAD_CROSSBOW",
"ACT_HL2MP_JUMP_CROSSBOW",
"ACT_HL2MP_IDLE_MELEE",
"ACT_HL2MP_RUN_MELEE",
"ACT_HL2MP_IDLE_CROUCH_MELEE",
"ACT_HL2MP_WALK_CROUCH_MELEE",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_MELEE",
"ACT_HL2MP_GESTURE_RELOAD_MELEE",
"ACT_HL2MP_JUMP_MELEE",
"ACT_HL2MP_IDLE_SLAM",
"ACT_HL2MP_RUN_SLAM",
"ACT_HL2MP_IDLE_CROUCH_SLAM",
"ACT_HL2MP_WALK_CROUCH_SLAM",
"ACT_HL2MP_GESTURE_RANGE_ATTACK_SLAM",
"ACT_HL2MP_GESTURE_RELOAD_SLAM",
"ACT_HL2MP_JUMP_SLAM",
"ACT_VM_FIZZLE",
"ACT_MP_STAND_IDLE",
"ACT_MP_CROUCH_IDLE",
"ACT_MP_CROUCH_DEPLOYED_IDLE",
"ACT_MP_CROUCH_DEPLOYED",
"ACT_MP_CROUCHWALK_DEPLOYED",
"ACT_MP_DEPLOYED_IDLE",
"ACT_MP_RUN",
"ACT_MP_WALK",
"ACT_MP_AIRWALK",
"ACT_MP_CROUCHWALK",
"ACT_MP_SPRINT",
"ACT_MP_JUMP",
"ACT_MP_JUMP_START",
"ACT_MP_JUMP_FLOAT",
"ACT_MP_JUMP_LAND",
"ACT_MP_DOUBLEJUMP",
"ACT_MP_SWIM",
"ACT_MP_DEPLOYED",
"ACT_MP_SWIM_DEPLOYED",
"ACT_MP_VCD",
"ACT_MP_ATTACK_STAND_PRIMARYFIRE",
"ACT_MP_ATTACK_STAND_PRIMARYFIRE_DEPLOYED",
"ACT_MP_ATTACK_STAND_SECONDARYFIRE",
"ACT_MP_ATTACK_STAND_GRENADE",
"ACT_MP_ATTACK_CROUCH_PRIMARYFIRE",
"ACT_MP_ATTACK_CROUCH_PRIMARYFIRE_DEPLOYED",
"ACT_MP_ATTACK_CROUCH_SECONDARYFIRE",
"ACT_MP_ATTACK_CROUCH_GRENADE",
"ACT_MP_ATTACK_SWIM_PRIMARYFIRE",
"ACT_MP_ATTACK_SWIM_SECONDARYFIRE",
"ACT_MP_ATTACK_SWIM_GRENADE",
"ACT_MP_ATTACK_AIRWALK_PRIMARYFIRE",
"ACT_MP_ATTACK_AIRWALK_SECONDARYFIRE",
"ACT_MP_ATTACK_AIRWALK_GRENADE",
"ACT_MP_RELOAD_STAND",
"ACT_MP_RELOAD_STAND_LOOP",
"ACT_MP_RELOAD_STAND_END",
"ACT_MP_RELOAD_CROUCH",
"ACT_MP_RELOAD_CROUCH_LOOP",
"ACT_MP_RELOAD_CROUCH_END",
"ACT_MP_RELOAD_SWIM",
"ACT_MP_RELOAD_SWIM_LOOP",
"ACT_MP_RELOAD_SWIM_END",
"ACT_MP_RELOAD_AIRWALK",
"ACT_MP_RELOAD_AIRWALK_LOOP",
"ACT_MP_RELOAD_AIRWALK_END",
"ACT_MP_ATTACK_STAND_PREFIRE",
"ACT_MP_ATTACK_STAND_POSTFIRE",
"ACT_MP_ATTACK_STAND_STARTFIRE",
"ACT_MP_ATTACK_CROUCH_PREFIRE",
"ACT_MP_ATTACK_CROUCH_POSTFIRE",
"ACT_MP_ATTACK_SWIM_PREFIRE",
"ACT_MP_ATTACK_SWIM_POSTFIRE",
"ACT_MP_STAND_PRIMARY",
"ACT_MP_CROUCH_PRIMARY",
"ACT_MP_RUN_PRIMARY",
"ACT_MP_WALK_PRIMARY",
"ACT_MP_AIRWALK_PRIMARY",
"ACT_MP_CROUCHWALK_PRIMARY",
"ACT_MP_JUMP_PRIMARY",
"ACT_MP_JUMP_START_PRIMARY",
"ACT_MP_JUMP_FLOAT_PRIMARY",
"ACT_MP_JUMP_LAND_PRIMARY",
"ACT_MP_SWIM_PRIMARY",
"ACT_MP_DEPLOYED_PRIMARY",
"ACT_MP_SWIM_DEPLOYED_PRIMARY",
"ACT_MP_CROUCHWALK_DEPLOYED_PRIMARY",
"ACT_MP_CROUCH_DEPLOYED_IDLE_PRIMARY",
"ACT_MP_ATTACK_STAND_PRIMARY",
"ACT_MP_ATTACK_STAND_PRIMARY_DEPLOYED",
"ACT_MP_ATTACK_CROUCH_PRIMARY",
"ACT_MP_ATTACK_CROUCH_PRIMARY_DEPLOYED",
"ACT_MP_ATTACK_SWIM_PRIMARY",
"ACT_MP_ATTACK_AIRWALK_PRIMARY",
"ACT_MP_RELOAD_STAND_PRIMARY",
"ACT_MP_RELOAD_STAND_PRIMARY_LOOP",
"ACT_MP_RELOAD_STAND_PRIMARY_END",
"ACT_MP_RELOAD_CROUCH_PRIMARY",
"ACT_MP_RELOAD_CROUCH_PRIMARY_LOOP",
"ACT_MP_RELOAD_CROUCH_PRIMARY_END",
"ACT_MP_RELOAD_SWIM_PRIMARY",
"ACT_MP_RELOAD_SWIM_PRIMARY_LOOP",
"ACT_MP_RELOAD_SWIM_PRIMARY_END",
"ACT_MP_RELOAD_AIRWALK_PRIMARY",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_LOOP",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_END",
"ACT_MP_RELOAD_STAND_PRIMARY_2",
"ACT_MP_RELOAD_STAND_PRIMARY_LOOP_2",
"ACT_MP_RELOAD_STAND_PRIMARY_END_2",
"ACT_MP_RELOAD_CROUCH_PRIMARY_2",
"ACT_MP_RELOAD_CROUCH_PRIMARY_LOOP_2",
"ACT_MP_RELOAD_CROUCH_PRIMARY_END_2",
"ACT_MP_RELOAD_SWIM_PRIMARY_2",
"ACT_MP_RELOAD_SWIM_PRIMARY_LOOP_2",
"ACT_MP_RELOAD_SWIM_PRIMARY_END_2",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_2",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_LOOP_2",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_END_2",
"ACT_MP_ATTACK_STAND_PRIMARY_ALT",
"ACT_MP_ATTACK_CROUCH_PRIMARY_ALT",
"ACT_MP_ATTACK_SWIM_PRIMARY_ALT",
"ACT_MP_RELOAD_STAND_PRIMARY_ALT",
"ACT_MP_RELOAD_CROUCH_PRIMARY_ALT",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_ALT",
"ACT_MP_RELOAD_STAND_PRIMARY_LOOP_ALT",
"ACT_MP_RELOAD_CROUCH_PRIMARY_LOOP_ALT",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_LOOP_ALT",
"ACT_MP_RELOAD_STAND_PRIMARY_END_ALT",
"ACT_MP_RELOAD_CROUCH_PRIMARY_END_ALT",
"ACT_MP_RELOAD_AIRWALK_PRIMARY_END_ALT",
"ACT_MP_RELOAD_SWIM_PRIMARY_ALT",
"ACT_MP_ATTACK_STAND_PRIMARY_SUPER",
"ACT_MP_ATTACK_CROUCH_PRIMARY_SUPER",
"ACT_MP_ATTACK_SWIM_PRIMARY_SUPER",
"ACT_MP_ATTACK_STAND_GRENADE_PRIMARY",
"ACT_MP_ATTACK_CROUCH_GRENADE_PRIMARY",
"ACT_MP_ATTACK_SWIM_GRENADE_PRIMARY",
"ACT_MP_ATTACK_AIRWALK_GRENADE_PRIMARY",
"ACT_MP_STAND_SECONDARY",
"ACT_MP_CROUCH_SECONDARY",
"ACT_MP_RUN_SECONDARY",
"ACT_MP_WALK_SECONDARY",
"ACT_MP_AIRWALK_SECONDARY",
"ACT_MP_CROUCHWALK_SECONDARY",
"ACT_MP_JUMP_SECONDARY",
"ACT_MP_JUMP_START_SECONDARY",
"ACT_MP_JUMP_FLOAT_SECONDARY",
"ACT_MP_JUMP_LAND_SECONDARY",
"ACT_MP_SWIM_SECONDARY",
"ACT_MP_ATTACK_STAND_SECONDARY",
"ACT_MP_ATTACK_CROUCH_SECONDARY",
"ACT_MP_ATTACK_SWIM_SECONDARY",
"ACT_MP_ATTACK_AIRWALK_SECONDARY",
"ACT_MP_RELOAD_STAND_SECONDARY",
"ACT_MP_RELOAD_STAND_SECONDARY_LOOP",
"ACT_MP_RELOAD_STAND_SECONDARY_END",
"ACT_MP_RELOAD_CROUCH_SECONDARY",
"ACT_MP_RELOAD_CROUCH_SECONDARY_LOOP",
"ACT_MP_RELOAD_CROUCH_SECONDARY_END",
"ACT_MP_RELOAD_SWIM_SECONDARY",
"ACT_MP_RELOAD_SWIM_SECONDARY_LOOP",
"ACT_MP_RELOAD_SWIM_SECONDARY_END",
"ACT_MP_RELOAD_AIRWALK_SECONDARY",
"ACT_MP_RELOAD_AIRWALK_SECONDARY_LOOP",
"ACT_MP_RELOAD_AIRWALK_SECONDARY_END",
"ACT_MP_RELOAD_STAND_SECONDARY_2",
"ACT_MP_RELOAD_CROUCH_SECONDARY_2",
"ACT_MP_RELOAD_SWIM_SECONDARY_2",
"ACT_MP_RELOAD_AIRWALK_SECONDARY_2",
"ACT_MP_ATTACK_STAND_GRENADE_SECONDARY",
"ACT_MP_ATTACK_CROUCH_GRENADE_SECONDARY",
"ACT_MP_ATTACK_SWIM_GRENADE_SECONDARY",
"ACT_MP_ATTACK_AIRWALK_GRENADE_SECONDARY",
"ACT_MP_STAND_SECONDARY2",
"ACT_MP_CROUCH_SECONDARY2",
"ACT_MP_RUN_SECONDARY2",
"ACT_MP_WALK_SECONDARY2",
"ACT_MP_AIRWALK_SECONDARY2",
"ACT_MP_CROUCHWALK_SECONDARY2",
"ACT_MP_JUMP_SECONDARY2",
"ACT_MP_JUMP_START_SECONDARY2",
"ACT_MP_JUMP_FLOAT_SECONDARY2",
"ACT_MP_JUMP_LAND_SECONDARY2",
"ACT_MP_SWIM_SECONDARY2",
"ACT_MP_ATTACK_STAND_SECONDARY2",
"ACT_MP_ATTACK_CROUCH_SECONDARY2",
"ACT_MP_ATTACK_SWIM_SECONDARY2",
"ACT_MP_ATTACK_AIRWALK_SECONDARY2",
"ACT_MP_RELOAD_STAND_SECONDARY2",
"ACT_MP_RELOAD_STAND_SECONDARY2_LOOP",
"ACT_MP_RELOAD_STAND_SECONDARY2_END",
"ACT_MP_RELOAD_CROUCH_SECONDARY2",
"ACT_MP_RELOAD_CROUCH_SECONDARY2_LOOP",
"ACT_MP_RELOAD_CROUCH_SECONDARY2_END",
"ACT_MP_RELOAD_SWIM_SECONDARY2",
"ACT_MP_RELOAD_SWIM_SECONDARY2_LOOP",
"ACT_MP_RELOAD_SWIM_SECONDARY2_END",
"ACT_MP_RELOAD_AIRWALK_SECONDARY2",
"ACT_MP_RELOAD_AIRWALK_SECONDARY2_LOOP",
"ACT_MP_RELOAD_AIRWALK_SECONDARY2_END",
"ACT_MP_STAND_MELEE",
"ACT_MP_CROUCH_MELEE",
"ACT_MP_RUN_MELEE",
"ACT_MP_WALK_MELEE",
"ACT_MP_AIRWALK_MELEE",
"ACT_MP_CROUCHWALK_MELEE",
"ACT_MP_JUMP_MELEE",
"ACT_MP_JUMP_START_MELEE",
"ACT_MP_JUMP_FLOAT_MELEE",
"ACT_MP_JUMP_LAND_MELEE",
"ACT_MP_SWIM_MELEE",
"ACT_MP_ATTACK_STAND_MELEE",
"ACT_MP_ATTACK_STAND_MELEE_SECONDARY",
"ACT_MP_ATTACK_CROUCH_MELEE",
"ACT_MP_ATTACK_CROUCH_MELEE_SECONDARY",
"ACT_MP_ATTACK_SWIM_MELEE",
"ACT_MP_ATTACK_AIRWALK_MELEE",
"ACT_MP_ATTACK_STAND_GRENADE_MELEE",
"ACT_MP_ATTACK_CROUCH_GRENADE_MELEE",
"ACT_MP_ATTACK_SWIM_GRENADE_MELEE",
"ACT_MP_ATTACK_AIRWALK_GRENADE_MELEE",
"ACT_MP_STAND_ITEM1",
"ACT_MP_CROUCH_ITEM1",
"ACT_MP_RUN_ITEM1",
"ACT_MP_WALK_ITEM1",
"ACT_MP_AIRWALK_ITEM1",
"ACT_MP_CROUCHWALK_ITEM1",
"ACT_MP_JUMP_ITEM1",
"ACT_MP_JUMP_START_ITEM1",
"ACT_MP_JUMP_FLOAT_ITEM1",
"ACT_MP_JUMP_LAND_ITEM1",
"ACT_MP_SWIM_ITEM1",
"ACT_MP_ATTACK_STAND_ITEM1",
"ACT_MP_ATTACK_STAND_ITEM1_SECONDARY",
"ACT_MP_ATTACK_CROUCH_ITEM1",
"ACT_MP_ATTACK_CROUCH_ITEM1_SECONDARY",
"ACT_MP_ATTACK_SWIM_ITEM1",
"ACT_MP_ATTACK_AIRWALK_ITEM1",
"ACT_MP_DEPLOYED_ITEM1",
"ACT_MP_DEPLOYED_IDLE_ITEM1",
"ACT_MP_CROUCHWALK_DEPLOYED_ITEM1",
"ACT_MP_CROUCH_DEPLOYED_IDLE_ITEM1",
"ACT_MP_ATTACK_STAND_PRIMARY_DEPLOYED_ITEM1",
"ACT_MP_ATTACK_CROUCH_PRIMARY_DEPLOYED_ITEM1",
"ACT_MP_STAND_ITEM2",
"ACT_MP_CROUCH_ITEM2",
"ACT_MP_RUN_ITEM2",
"ACT_MP_WALK_ITEM2",
"ACT_MP_AIRWALK_ITEM2",
"ACT_MP_CROUCHWALK_ITEM2",
"ACT_MP_JUMP_ITEM2",
"ACT_MP_JUMP_START_ITEM2",
"ACT_MP_JUMP_FLOAT_ITEM2",
"ACT_MP_JUMP_LAND_ITEM2",
"ACT_MP_SWIM_ITEM2",
"ACT_MP_ATTACK_STAND_ITEM2",
"ACT_MP_ATTACK_STAND_ITEM2_SECONDARY",
"ACT_MP_ATTACK_CROUCH_ITEM2",
"ACT_MP_ATTACK_CROUCH_ITEM2_SECONDARY",
"ACT_MP_ATTACK_SWIM_ITEM2",
"ACT_MP_ATTACK_AIRWALK_ITEM2",
"ACT_MP_ATTACK_STAND_HARD_ITEM2",
"ACT_MP_ATTACK_CROUCH_HARD_ITEM2",
"ACT_MP_ATTACK_SWIM_HARD_ITEM2",
"ACT_MP_DEPLOYED_ITEM2",
"ACT_MP_DEPLOYED_IDLE_ITEM2",
"ACT_MP_CROUCHWALK_DEPLOYED_ITEM2",
"ACT_MP_CROUCH_DEPLOYED_IDLE_ITEM2",
"ACT_MP_ATTACK_STAND_PRIMARY_DEPLOYED_ITEM2",
"ACT_MP_ATTACK_CROUCH_PRIMARY_DEPLOYED_ITEM2",
"ACT_MP_RELOAD_STAND_ITEM2",
"ACT_MP_RELOAD_STAND_ITEM2_LOOP",
"ACT_MP_RELOAD_STAND_ITEM2_END",
"ACT_MP_RELOAD_CROUCH_ITEM2",
"ACT_MP_RELOAD_CROUCH_ITEM2_LOOP",
"ACT_MP_RELOAD_CROUCH_ITEM2_END",
"ACT_MP_RELOAD_SWIM_ITEM2",
"ACT_MP_RELOAD_SWIM_ITEM2_LOOP",
"ACT_MP_RELOAD_SWIM_ITEM2_END",
"ACT_MP_RELOAD_AIRWALK_ITEM2",
"ACT_MP_RELOAD_AIRWALK_ITEM2_LOOP",
"ACT_MP_RELOAD_AIRWALK_ITEM2_END",
"ACT_MP_RELOAD_NO_AMMO_ITEM2",
"ACT_MP_ATTACK_STAND_GRENADE_ITEM2",
"ACT_MP_ATTACK_CROUCH_GRENADE_ITEM2",
"ACT_MP_ATTACK_SWIM_GRENADE_ITEM2",
"ACT_MP_ATTACK_AIRWALK_GRENADE_ITEM2",
"ACT_MP_GESTURE_FLINCH",
"ACT_MP_GESTURE_FLINCH_PRIMARY",
"ACT_MP_GESTURE_FLINCH_SECONDARY",
"ACT_MP_GESTURE_FLINCH_MELEE",
"ACT_MP_GESTURE_FLINCH_ITEM1",
"ACT_MP_GESTURE_FLINCH_ITEM2",
"ACT_MP_GESTURE_FLINCH_HEAD",
"ACT_MP_GESTURE_FLINCH_CHEST",
"ACT_MP_GESTURE_FLINCH_STOMACH",
"ACT_MP_GESTURE_FLINCH_LEFTARM",
"ACT_MP_GESTURE_FLINCH_RIGHTARM",
"ACT_MP_GESTURE_FLINCH_LEFTLEG",
"ACT_MP_GESTURE_FLINCH_RIGHTLEG",
"ACT_MP_GRENADE1_DRAW",
"ACT_MP_GRENADE1_IDLE",
"ACT_MP_GRENADE1_ATTACK",
"ACT_MP_GRENADE2_DRAW",
"ACT_MP_GRENADE2_IDLE",
"ACT_MP_GRENADE2_ATTACK",
"ACT_MP_PRIMARY_GRENADE1_DRAW",
"ACT_MP_PRIMARY_GRENADE1_IDLE",
"ACT_MP_PRIMARY_GRENADE1_ATTACK",
"ACT_MP_PRIMARY_GRENADE2_DRAW",
"ACT_MP_PRIMARY_GRENADE2_IDLE",
"ACT_MP_PRIMARY_GRENADE2_ATTACK",
"ACT_MP_SECONDARY_GRENADE1_DRAW",
"ACT_MP_SECONDARY_GRENADE1_IDLE",
"ACT_MP_SECONDARY_GRENADE1_ATTACK",
"ACT_MP_SECONDARY_GRENADE2_DRAW",
"ACT_MP_SECONDARY_GRENADE2_IDLE",
"ACT_MP_SECONDARY_GRENADE2_ATTACK",
"ACT_MP_MELEE_GRENADE1_DRAW",
"ACT_MP_MELEE_GRENADE1_IDLE",
"ACT_MP_MELEE_GRENADE1_ATTACK",
"ACT_MP_MELEE_GRENADE2_DRAW",
"ACT_MP_MELEE_GRENADE2_IDLE",
"ACT_MP_MELEE_GRENADE2_ATTACK",
"ACT_MP_ITEM1_GRENADE1_DRAW",
"ACT_MP_ITEM1_GRENADE1_IDLE",
"ACT_MP_ITEM1_GRENADE1_ATTACK",
"ACT_MP_ITEM1_GRENADE2_DRAW",
"ACT_MP_ITEM1_GRENADE2_IDLE",
"ACT_MP_ITEM1_GRENADE2_ATTACK",
"ACT_MP_ITEM2_GRENADE1_DRAW",
"ACT_MP_ITEM2_GRENADE1_IDLE",
"ACT_MP_ITEM2_GRENADE1_ATTACK",
"ACT_MP_ITEM2_GRENADE2_DRAW",
"ACT_MP_ITEM2_GRENADE2_IDLE",
"ACT_MP_ITEM2_GRENADE2_ATTACK",
"ACT_MP_STAND_BUILDING",
"ACT_MP_CROUCH_BUILDING",
"ACT_MP_RUN_BUILDING",
"ACT_MP_WALK_BUILDING",
"ACT_MP_AIRWALK_BUILDING",
"ACT_MP_CROUCHWALK_BUILDING",
"ACT_MP_JUMP_BUILDING",
"ACT_MP_JUMP_START_BUILDING",
"ACT_MP_JUMP_FLOAT_BUILDING",
"ACT_MP_JUMP_LAND_BUILDING",
"ACT_MP_SWIM_BUILDING",
"ACT_MP_ATTACK_STAND_BUILDING",
"ACT_MP_ATTACK_CROUCH_BUILDING",
"ACT_MP_ATTACK_SWIM_BUILDING",
"ACT_MP_ATTACK_AIRWALK_BUILDING",
"ACT_MP_ATTACK_STAND_GRENADE_BUILDING",
"ACT_MP_ATTACK_CROUCH_GRENADE_BUILDING",
"ACT_MP_ATTACK_SWIM_GRENADE_BUILDING",
"ACT_MP_ATTACK_AIRWALK_GRENADE_BUILDING",
"ACT_MP_STAND_BUILDING_DEPLOYED",
"ACT_MP_CROUCH_BUILDING_DEPLOYED",
"ACT_MP_RUN_BUILDING_DEPLOYED",
"ACT_MP_WALK_BUILDING_DEPLOYED",
"ACT_MP_AIRWALK_BUILDING_DEPLOYED",
"ACT_MP_CROUCHWALK_BUILDING_DEPLOYED",
"ACT_MP_JUMP_BUILDING_DEPLOYED",
"ACT_MP_JUMP_START_BUILDING_DEPLOYED",
"ACT_MP_JUMP_FLOAT_BUILDING_DEPLOYED",
"ACT_MP_JUMP_LAND_BUILDING_DEPLOYED",
"ACT_MP_SWIM_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_STAND_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_CROUCH_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_SWIM_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_AIRWALK_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_STAND_GRENADE_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_CROUCH_GRENADE_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_SWIM_GRENADE_BUILDING_DEPLOYED",
"ACT_MP_ATTACK_AIRWALK_GRENADE_BUILDING_DEPLOYED",
"ACT_MP_STAND_PDA",
"ACT_MP_CROUCH_PDA",
"ACT_MP_RUN_PDA",
"ACT_MP_WALK_PDA",
"ACT_MP_AIRWALK_PDA",
"ACT_MP_CROUCHWALK_PDA",
"ACT_MP_JUMP_PDA",
"ACT_MP_JUMP_START_PDA",
"ACT_MP_JUMP_FLOAT_PDA",
"ACT_MP_JUMP_LAND_PDA",
"ACT_MP_SWIM_PDA",
"ACT_MP_ATTACK_STAND_PDA",
"ACT_MP_ATTACK_SWIM_PDA",
"ACT_MP_STAND_LOSERSTATE",
"ACT_MP_CROUCH_LOSERSTATE",
"ACT_MP_RUN_LOSERSTATE",
"ACT_MP_WALK_LOSERSTATE",
"ACT_MP_AIRWALK_LOSERSTATE",
"ACT_MP_CROUCHWALK_LOSERSTATE",
"ACT_MP_JUMP_LOSERSTATE",
"ACT_MP_JUMP_START_LOSERSTATE",
"ACT_MP_JUMP_FLOAT_LOSERSTATE",
"ACT_MP_JUMP_LAND_LOSERSTATE",
"ACT_MP_SWIM_LOSERSTATE",
"ACT_MP_DOUBLEJUMP_LOSERSTATE",
"ACT_MP_DOUBLEJUMP_CROUCH",
"ACT_MP_DOUBLEJUMP_CROUCH_PRIMARY",
"ACT_MP_DOUBLEJUMP_CROUCH_SECONDARY",
"ACT_MP_DOUBLEJUMP_CROUCH_MELEE",
"ACT_MP_DOUBLEJUMP_CROUCH_ITEM1",
"ACT_MP_DOUBLEJUMP_CROUCH_ITEM2",
"ACT_MP_DOUBLEJUMP_CROUCH_LOSERSTATE",
"ACT_MP_GESTURE_VC_HANDMOUTH",
"ACT_MP_GESTURE_VC_FINGERPOINT",
"ACT_MP_GESTURE_VC_FISTPUMP",
"ACT_MP_GESTURE_VC_THUMBSUP",
"ACT_MP_GESTURE_VC_NODYES",
"ACT_MP_GESTURE_VC_NODNO",
"ACT_MP_GESTURE_VC_HANDMOUTH_PRIMARY",
"ACT_MP_GESTURE_VC_FINGERPOINT_PRIMARY",
"ACT_MP_GESTURE_VC_FISTPUMP_PRIMARY",
"ACT_MP_GESTURE_VC_THUMBSUP_PRIMARY",
"ACT_MP_GESTURE_VC_NODYES_PRIMARY",
"ACT_MP_GESTURE_VC_NODNO_PRIMARY",
"ACT_MP_GESTURE_VC_HANDMOUTH_SECONDARY",
"ACT_MP_GESTURE_VC_FINGERPOINT_SECONDARY",
"ACT_MP_GESTURE_VC_FISTPUMP_SECONDARY",
"ACT_MP_GESTURE_VC_THUMBSUP_SECONDARY",
"ACT_MP_GESTURE_VC_NODYES_SECONDARY",
"ACT_MP_GESTURE_VC_NODNO_SECONDARY",
"ACT_MP_GESTURE_VC_HANDMOUTH_MELEE",
"ACT_MP_GESTURE_VC_FINGERPOINT_MELEE",
"ACT_MP_GESTURE_VC_FISTPUMP_MELEE",
"ACT_MP_GESTURE_VC_THUMBSUP_MELEE",
"ACT_MP_GESTURE_VC_NODYES_MELEE",
"ACT_MP_GESTURE_VC_NODNO_MELEE",
"ACT_MP_GESTURE_VC_HANDMOUTH_ITEM1",
"ACT_MP_GESTURE_VC_FINGERPOINT_ITEM1",
"ACT_MP_GESTURE_VC_FISTPUMP_ITEM1",
"ACT_MP_GESTURE_VC_THUMBSUP_ITEM1",
"ACT_MP_GESTURE_VC_NODYES_ITEM1",
"ACT_MP_GESTURE_VC_NODNO_ITEM1",
"ACT_MP_GESTURE_VC_HANDMOUTH_ITEM2",
"ACT_MP_GESTURE_VC_FINGERPOINT_ITEM2",
"ACT_MP_GESTURE_VC_FISTPUMP_ITEM2",
"ACT_MP_GESTURE_VC_THUMBSUP_ITEM2",
"ACT_MP_GESTURE_VC_NODYES_ITEM2",
"ACT_MP_GESTURE_VC_NODNO_ITEM2",
"ACT_MP_GESTURE_VC_HANDMOUTH_BUILDING",
"ACT_MP_GESTURE_VC_FINGERPOINT_BUILDING",
"ACT_MP_GESTURE_VC_FISTPUMP_BUILDING",
"ACT_MP_GESTURE_VC_THUMBSUP_BUILDING",
"ACT_MP_GESTURE_VC_NODYES_BUILDING",
"ACT_MP_GESTURE_VC_NODNO_BUILDING",
"ACT_MP_GESTURE_VC_HANDMOUTH_PDA",
"ACT_MP_GESTURE_VC_FINGERPOINT_PDA",
"ACT_MP_GESTURE_VC_FISTPUMP_PDA",
"ACT_MP_GESTURE_VC_THUMBSUP_PDA",
"ACT_MP_GESTURE_VC_NODYES_PDA",
"ACT_MP_GESTURE_VC_NODNO_PDA",
"ACT_MP_STUN_BEGIN",
"ACT_MP_STUN_MIDDLE",
"ACT_MP_STUN_END",
"ACT_VM_UNUSABLE",
"ACT_VM_UNUSABLE_TO_USABLE",
"ACT_VM_USABLE_TO_UNUSABLE",
"ACT_PRIMARY_VM_DRAW",
"ACT_PRIMARY_VM_HOLSTER",
"ACT_PRIMARY_VM_IDLE",
"ACT_PRIMARY_VM_PULLBACK",
"ACT_PRIMARY_VM_PRIMARYATTACK",
"ACT_PRIMARY_VM_SECONDARYATTACK",
"ACT_PRIMARY_VM_RELOAD",
"ACT_PRIMARY_RELOAD_START",
"ACT_PRIMARY_RELOAD_FINISH",
"ACT_PRIMARY_VM_DRYFIRE",
"ACT_PRIMARY_VM_IDLE_TO_LOWERED",
"ACT_PRIMARY_VM_IDLE_LOWERED",
"ACT_PRIMARY_VM_LOWERED_TO_IDLE",
"ACT_PRIMARY_VM_RELOAD_2",
"ACT_PRIMARY_RELOAD_START_2",
"ACT_PRIMARY_RELOAD_FINISH_2",
"ACT_PRIMARY_VM_RELOAD_3",
"ACT_PRIMARY_RELOAD_START_3",
"ACT_PRIMARY_RELOAD_FINISH_3",
"ACT_PRIMARY_VM_PRIMARYATTACK_3",
"ACT_SECONDARY_VM_DRAW",
"ACT_SECONDARY_VM_HOLSTER",
"ACT_SECONDARY_VM_IDLE",
"ACT_SECONDARY_VM_PULLBACK",
"ACT_SECONDARY_VM_PRIMARYATTACK",
"ACT_SECONDARY_VM_SECONDARYATTACK",
"ACT_SECONDARY_VM_RELOAD",
"ACT_SECONDARY_RELOAD_START",
"ACT_SECONDARY_RELOAD_FINISH",
"ACT_SECONDARY_VM_RELOAD2",
"ACT_SECONDARY_VM_DRYFIRE",
"ACT_SECONDARY_VM_IDLE_TO_LOWERED",
"ACT_SECONDARY_VM_IDLE_LOWERED",
"ACT_SECONDARY_VM_LOWERED_TO_IDLE",
"ACT_SECONDARY_VM_DRAW_2",
"ACT_SECONDARY_VM_IDLE_2",
"ACT_SECONDARY_VM_PRIMARYATTACK_2",
"ACT_SECONDARY_VM_RELOAD_2",
"ACT_MELEE_VM_DRAW",
"ACT_MELEE_VM_HOLSTER",
"ACT_MELEE_VM_IDLE",
"ACT_MELEE_VM_PULLBACK",
"ACT_MELEE_VM_PRIMARYATTACK",
"ACT_MELEE_VM_SECONDARYATTACK",
"ACT_MELEE_VM_RELOAD",
"ACT_MELEE_VM_DRYFIRE",
"ACT_MELEE_VM_IDLE_TO_LOWERED",
"ACT_MELEE_VM_IDLE_LOWERED",
"ACT_MELEE_VM_LOWERED_TO_IDLE",
"ACT_MELEE_VM_STUN",
"ACT_MELEE_VM_HITCENTER",
"ACT_MELEE_VM_SWINGHARD",
"ACT_PDA_VM_DRAW",
"ACT_PDA_VM_HOLSTER",
"ACT_PDA_VM_IDLE",
"ACT_PDA_VM_PULLBACK",
"ACT_PDA_VM_PRIMARYATTACK",
"ACT_PDA_VM_SECONDARYATTACK",
"ACT_PDA_VM_RELOAD",
"ACT_PDA_VM_DRYFIRE",
"ACT_PDA_VM_IDLE_TO_LOWERED",
"ACT_PDA_VM_IDLE_LOWERED",
"ACT_PDA_VM_LOWERED_TO_IDLE",
"ACT_ENGINEER_PDA1_VM_DRAW",
"ACT_ENGINEER_PDA2_VM_DRAW",
"ACT_ENGINEER_BLD_VM_DRAW",
"ACT_ENGINEER_PDA1_VM_IDLE",
"ACT_ENGINEER_PDA2_VM_IDLE",
"ACT_ENGINEER_BLD_VM_IDLE",
"ACT_ITEM1_VM_DRAW",
"ACT_ITEM1_VM_HOLSTER",
"ACT_ITEM1_VM_IDLE",
"ACT_ITEM1_VM_IDLE_2",
"ACT_ITEM1_VM_PULLBACK",
"ACT_ITEM1_VM_PRIMARYATTACK",
"ACT_ITEM1_VM_SECONDARYATTACK",
"ACT_ITEM1_VM_RELOAD",
"ACT_ITEM1_VM_DRYFIRE",
"ACT_ITEM1_VM_IDLE_TO_LOWERED",
"ACT_ITEM1_VM_IDLE_LOWERED",
"ACT_ITEM1_VM_LOWERED_TO_IDLE",
"ACT_ITEM1_RELOAD_START",
"ACT_ITEM1_RELOAD_FINISH",
"ACT_ITEM1_VM_HITCENTER",
"ACT_ITEM1_VM_SWINGHARD",
"ACT_ITEM1_BACKSTAB_VM_UP",
"ACT_ITEM1_BACKSTAB_VM_DOWN",
"ACT_ITEM1_BACKSTAB_VM_IDLE",
"ACT_MELEE_VM_ITEM1_STUN",
"ACT_ITEM2_VM_DRAW",
"ACT_ITEM2_VM_HOLSTER",
"ACT_ITEM2_VM_IDLE",
"ACT_ITEM2_VM_PULLBACK",
"ACT_ITEM2_VM_PRIMARYATTACK",
"ACT_ITEM2_VM_SECONDARYATTACK",
"ACT_ITEM2_VM_RELOAD",
"ACT_ITEM2_VM_DRYFIRE",
"ACT_ITEM2_VM_IDLE_TO_LOWERED",
"ACT_ITEM2_VM_IDLE_LOWERED",
"ACT_ITEM2_VM_LOWERED_TO_IDLE",
"ACT_ITEM2_VM_CHARGE",
"ACT_ITEM2_VM_IDLE_2",
"ACT_ITEM2_VM_IDLE_3",
"ACT_ITEM2_VM_CHARGE_IDLE_3",
"ACT_ITEM2_VM_HITCENTER",
"ACT_ITEM2_VM_SWINGHARD",
"ACT_ITEM2_BACKSTAB_VM_UP",
"ACT_ITEM2_BACKSTAB_VM_DOWN",
"ACT_ITEM2_BACKSTAB_VM_IDLE",
"ACT_MELEE_VM_ITEM2_STUN",
"ACT_ITEM3_VM_DRAW",
"ACT_ITEM3_VM_HOLSTER",
"ACT_ITEM3_VM_IDLE",
"ACT_ITEM3_VM_PULLBACK",
"ACT_ITEM3_VM_PRIMARYATTACK",
"ACT_ITEM3_VM_SECONDARYATTACK",
"ACT_ITEM3_VM_RELOAD",
"ACT_ITEM3_VM_DRYFIRE",
"ACT_ITEM3_VM_IDLE_TO_LOWERED",
"ACT_ITEM3_VM_IDLE_LOWERED",
"ACT_ITEM3_VM_LOWERED_TO_IDLE",
"ACT_ITEM3_VM_CHARGE",
"ACT_ITEM3_VM_IDLE_2",
"ACT_ITEM3_VM_IDLE_3",
"ACT_ITEM3_VM_CHARGE_IDLE_3",
"ACT_ITEM3_VM_HITCENTER",
"ACT_ITEM3_VM_SWINGHARD",
"ACT_SECONDARY2_VM_DRAW",
"ACT_SECONDARY2_VM_HOLSTER",
"ACT_SECONDARY2_VM_IDLE",
"ACT_SECONDARY2_VM_PULLBACK",
"ACT_SECONDARY2_VM_PRIMARYATTACK",
"ACT_SECONDARY2_VM_SECONDARY2ATTACK",
"ACT_SECONDARY2_VM_RELOAD",
"ACT_SECONDARY2_RELOAD_START",
"ACT_SECONDARY2_RELOAD_FINISH",
"ACT_SECONDARY2_VM_RELOAD2",
"ACT_SECONDARY2_VM_DRYFIRE",
"ACT_SECONDARY2_VM_IDLE_TO_LOWERED",
"ACT_SECONDARY2_VM_IDLE_LOWERED",
"ACT_SECONDARY2_VM_LOWERED_TO_IDLE",
"ACT_BACKSTAB_VM_UP",
"ACT_BACKSTAB_VM_DOWN",
"ACT_BACKSTAB_VM_IDLE",
"ACT_PRIMARY_ATTACK_STAND_PREFIRE",
"ACT_PRIMARY_ATTACK_STAND_POSTFIRE",
"ACT_PRIMARY_ATTACK_STAND_STARTFIRE",
"ACT_PRIMARY_ATTACK_CROUCH_PREFIRE",
"ACT_PRIMARY_ATTACK_CROUCH_POSTFIRE",
"ACT_PRIMARY_ATTACK_SWIM_PREFIRE",
"ACT_PRIMARY_ATTACK_SWIM_POSTFIRE",
"ACT_SECONDARY_ATTACK_STAND_PREFIRE",
"ACT_SECONDARY_ATTACK_STAND_POSTFIRE",
"ACT_SECONDARY_ATTACK_STAND_STARTFIRE",
"ACT_SECONDARY_ATTACK_CROUCH_PREFIRE",
"ACT_SECONDARY_ATTACK_CROUCH_POSTFIRE",
"ACT_SECONDARY_ATTACK_SWIM_PREFIRE",
"ACT_SECONDARY_ATTACK_SWIM_POSTFIRE",
"ACT_MELEE_ATTACK_STAND_PREFIRE",
"ACT_MELEE_ATTACK_STAND_POSTFIRE",
"ACT_MELEE_ATTACK_STAND_STARTFIRE",
"ACT_MELEE_ATTACK_CROUCH_PREFIRE",
"ACT_MELEE_ATTACK_CROUCH_POSTFIRE",
"ACT_MELEE_ATTACK_SWIM_PREFIRE",
"ACT_MELEE_ATTACK_SWIM_POSTFIRE",
"ACT_ITEM1_ATTACK_STAND_PREFIRE",
"ACT_ITEM1_ATTACK_STAND_POSTFIRE",
"ACT_ITEM1_ATTACK_STAND_STARTFIRE",
"ACT_ITEM1_ATTACK_CROUCH_PREFIRE",
"ACT_ITEM1_ATTACK_CROUCH_POSTFIRE",
"ACT_ITEM1_ATTACK_SWIM_PREFIRE",
"ACT_ITEM1_ATTACK_SWIM_POSTFIRE",
"ACT_ITEM2_ATTACK_STAND_PREFIRE",
"ACT_ITEM2_ATTACK_STAND_POSTFIRE",
"ACT_ITEM2_ATTACK_STAND_STARTFIRE",
"ACT_ITEM2_ATTACK_CROUCH_PREFIRE",
"ACT_ITEM2_ATTACK_CROUCH_POSTFIRE",
"ACT_ITEM2_ATTACK_SWIM_PREFIRE",
"ACT_ITEM2_ATTACK_SWIM_POSTFIRE",
"ACT_MP_STAND_MELEE_ALLCLASS",
"ACT_MP_CROUCH_MELEE_ALLCLASS",
"ACT_MP_RUN_MELEE_ALLCLASS",
"ACT_MP_WALK_MELEE_ALLCLASS",
"ACT_MP_AIRWALK_MELEE_ALLCLASS",
"ACT_MP_CROUCHWALK_MELEE_ALLCLASS",
"ACT_MP_JUMP_MELEE_ALLCLASS",
"ACT_MP_JUMP_START_MELEE_ALLCLASS",
"ACT_MP_JUMP_FLOAT_MELEE_ALLCLASS",
"ACT_MP_JUMP_LAND_MELEE_ALLCLASS",
"ACT_MP_SWIM_MELEE_ALLCLASS",
"ACT_MP_ATTACK_STAND_MELEE_ALLCLASS",
"ACT_MP_ATTACK_STAND_MELEE_SECONDARY_ALLCLASS",
"ACT_MP_ATTACK_CROUCH_MELEE_ALLCLASS",
"ACT_MP_ATTACK_CROUCH_MELEE_SECONDARY_ALLCLASS",
"ACT_MP_ATTACK_SWIM_MELEE_ALLCLASS",
"ACT_MP_ATTACK_AIRWALK_MELEE_ALLCLASS",
"ACT_MELEE_ALLCLASS_VM_DRAW",
"ACT_MELEE_ALLCLASS_VM_HOLSTER",
"ACT_MELEE_ALLCLASS_VM_IDLE",
"ACT_MELEE_ALLCLASS_VM_PULLBACK",
"ACT_MELEE_ALLCLASS_VM_PRIMARYATTACK",
"ACT_MELEE_ALLCLASS_VM_SECONDARYATTACK",
"ACT_MELEE_ALLCLASS_VM_RELOAD",
"ACT_MELEE_ALLCLASS_VM_DRYFIRE",
"ACT_MELEE_ALLCLASS_VM_IDLE_TO_LOWERED",
"ACT_MELEE_ALLCLASS_VM_IDLE_LOWERED",
"ACT_MELEE_ALLCLASS_VM_LOWERED_TO_IDLE",
"ACT_MELEE_ALLCLASS_VM_STUN",
"ACT_MELEE_ALLCLASS_VM_HITCENTER",
"ACT_MELEE_ALLCLASS_VM_SWINGHARD",
"ACT_MP_STAND_BOMB",
"ACT_MP_JUMP_START_BOMB",
"ACT_MP_JUMP_FLOAT_BOMB",
"ACT_MP_JUMP_LAND_BOMB",
"ACT_MP_RUN_BOMB",
"ACT_MP_SWIM_BOMB",
"ACT_VM_DRAW_QRL",
"ACT_VM_IDLE_QRL",
"ACT_VM_PULLBACK_QRL",
"ACT_VM_PRIMARYATTACK_QRL",
"ACT_VM_RELOAD_QRL",
"ACT_VM_RELOAD_START_QRL",
"ACT_VM_RELOAD_FINISH_QRL",
"ACT_VM_SHOOTLAST",
"ACT_VM_PRIMARYATTACK_MIDEMPTY",
"ACT_VM_SHOOTLAST_IRONSIGHTED",
"ACT_VM_PRIMARYATTACK_MIDEMPTY_IRONSIGHTED",
"ACT_VM_RELOADEMPTY",
"ACT_VM_RELOADMIDEMPTY",
"ACT_VM_IDLE_MIDEMPTY",
"ACT_VM_SPRINT_MIDEMPTY",
"ACT_VM_WALK_MIDEMPTY",
"ACT_VM_IDLE_LOWERED_EMPTY",
"ACT_VM_IDLE_WALK_EMPTY",
"ACT_VM_IDLE_SPRINT_EMPTY",
"ACT_VM_IDLE_WALL_EMPTY",
"ACT_VM_IDLE_IS_EMPTY",
"ACT_MP_RELOAD_STAND_PRIMARY3",
"ACT_MP_RELOAD_CROUCH_PRIMARY3",
"ACT_MP_RELOAD_AIRWALK_PRIMARY3",
"ACT_MP_RELOAD_STAND_PRIMARY3_LOOP",
"ACT_MP_RELOAD_CROUCH_PRIMARY3_LOOP",
"ACT_MP_RELOAD_AIRWALK_PRIMARY3_LOOP",
"ACT_MP_RELOAD_STAND_PRIMARY3_END",
"ACT_MP_RELOAD_CROUCH_PRIMARY3_END",
"ACT_MP_RELOAD_AIRWALK_PRIMARY3_END",
"ACT_MP_RELOAD_SWIM_PRIMARY3",
"ACT_MP_THROW",
"ACT_THROWABLE_VM_DRAW",
"ACT_THROWABLE_VM_IDLE",
"ACT_THROWABLE_VM_FIRE",
"ACT_SPELL_VM_DRAW",
"ACT_SPELL_VM_IDLE",
"ACT_SPELL_VM_ARM",
"ACT_SPELL_VM_FIRE",
"LAST_SHARED_ACTIVITY"
};
Activity FindAct(const char *ptr)
{
for (int i = 0; i < ACTIVITY_SIZE; i++)
{
if (Q_strcmp(ptr, ActivityMappedList[i]) != 0)
continue;
else
return (Activity)i;
}
return (Activity)0;
}
WeaponType FindType(const char *ptr)
{
for (int i = 0; i < WEAPONTYPE_SIZE; i++)
{
if (Q_strcmp(ptr, WeaponTypeMappedList[i]) != 0)
continue;
else
return (WeaponType)i;
}
return (WeaponType)0;
}
// The sound categories found in the weapon classname.txt files
// This needs to match the WeaponSound_t enum in weapon_parse.h
#if !defined(_STATIC_LINKED) || defined(CLIENT_DLL)
const char *pWeaponSoundCategories[ NUM_SHOOT_SOUND_TYPES ] =
{
"empty",
"single_shot",
"single_shot_npc",
"double_shot",
"double_shot_npc",
"burst",
"reload",
"reload_npc",
"melee_miss",
"melee_hit",
"melee_hit_world",
"special1",
"special2",
"special3",
"taunt",
"deploy",
"low_ammo"
};
#else
extern const char *pWeaponSoundCategories[ NUM_SHOOT_SOUND_TYPES ];
#endif
void StringToFloatArray(float *pVector, int count, const char *pString)
{
char *pstr, *pfront, tempString[128];
int j;
Q_strncpy(tempString, pString, sizeof(tempString));
pstr = pfront = tempString;
for (j = 0; j < count; j++) // lifted from pr_edict.c
{
pVector[j] = atof(pfront);
// skip any leading whitespace
while (*pstr && *pstr <= ' ')
pstr++;
// skip to next whitespace
while (*pstr && *pstr > ' ')
pstr++;
if (!*pstr)
break;
pstr++;
pfront = pstr;
}
}
void StringToIntArray(CUtlVector<int> *pVector, const char *pString, const char *separator)
{
CUtlVector<char*, CUtlMemory<char*> > arr;
Q_SplitString(pString, separator, arr);
pVector->RemoveAll();
for (int i = 0; i < arr.Count(); i++)
{
int k = atoi(arr.Element(i));
pVector->AddToTail(k);
}
}
int GetWeaponSoundFromString( const char *pszString )
{
for ( int i = EMPTY; i < NUM_SHOOT_SOUND_TYPES; i++ )
{
if ( !Q_stricmp(pszString,pWeaponSoundCategories[i]) )
return (WeaponSound_t)i;
}
return -1;
}
// Item flags that we parse out of the file.
typedef struct
{
const char *m_pFlagName;
int m_iFlagValue;
} itemFlags_t;
#if !defined(_STATIC_LINKED) || defined(CLIENT_DLL)
itemFlags_t g_ItemFlags[8] =
{
{ "ITEM_FLAG_SELECTONEMPTY", ITEM_FLAG_SELECTONEMPTY },
{ "ITEM_FLAG_NOAUTORELOAD", ITEM_FLAG_NOAUTORELOAD },
{ "ITEM_FLAG_NOAUTOSWITCHEMPTY", ITEM_FLAG_NOAUTOSWITCHEMPTY },
{ "ITEM_FLAG_LIMITINWORLD", ITEM_FLAG_LIMITINWORLD },
{ "ITEM_FLAG_EXHAUSTIBLE", ITEM_FLAG_EXHAUSTIBLE },
{ "ITEM_FLAG_DOHITLOCATIONDMG", ITEM_FLAG_DOHITLOCATIONDMG },
{ "ITEM_FLAG_NOAMMOPICKUPS", ITEM_FLAG_NOAMMOPICKUPS },
{ "ITEM_FLAG_NOITEMPICKUP", ITEM_FLAG_NOITEMPICKUP }
};
#else
extern itemFlags_t g_ItemFlags[7];
#endif
static CUtlDict< FileWeaponInfo_t*, unsigned short > m_WeaponInfoDatabase;
#ifdef _DEBUG
// used to track whether or not two weapons have been mistakenly assigned the wrong slot
bool g_bUsedWeaponSlots[MAX_WEAPON_SLOTS][MAX_WEAPON_POSITIONS] = { 0 };
#endif
//-----------------------------------------------------------------------------
// Purpose:
// Input : *name -
// Output : FileWeaponInfo_t
//-----------------------------------------------------------------------------
static WEAPON_FILE_INFO_HANDLE FindWeaponInfoSlot( const char *name )
{
// Complain about duplicately defined metaclass names...
unsigned short lookup = m_WeaponInfoDatabase.Find( name );
if ( lookup != m_WeaponInfoDatabase.InvalidIndex() )
{
return lookup;
}
FileWeaponInfo_t *insert = CreateWeaponInfo();
lookup = m_WeaponInfoDatabase.Insert( name, insert );
Assert( lookup != m_WeaponInfoDatabase.InvalidIndex() );
return lookup;
}
// Find a weapon slot, assuming the weapon's data has already been loaded.
WEAPON_FILE_INFO_HANDLE LookupWeaponInfoSlot( const char *name )
{
return m_WeaponInfoDatabase.Find( name );
}
// FIXME, handle differently?
static FileWeaponInfo_t gNullWeaponInfo;
//-----------------------------------------------------------------------------
// Purpose:
// Input : handle -
// Output : FileWeaponInfo_t
//-----------------------------------------------------------------------------
FileWeaponInfo_t *GetFileWeaponInfoFromHandle( WEAPON_FILE_INFO_HANDLE handle )
{
if ( handle < 0 || handle >= m_WeaponInfoDatabase.Count() )
{
return &gNullWeaponInfo;
}
if ( handle == m_WeaponInfoDatabase.InvalidIndex() )
{
return &gNullWeaponInfo;
}
return m_WeaponInfoDatabase[ handle ];
}
//-----------------------------------------------------------------------------
// Purpose:
// Output : WEAPON_FILE_INFO_HANDLE
//-----------------------------------------------------------------------------
WEAPON_FILE_INFO_HANDLE GetInvalidWeaponInfoHandle( void )
{
return (WEAPON_FILE_INFO_HANDLE)m_WeaponInfoDatabase.InvalidIndex();
}
#if 0
void ResetFileWeaponInfoDatabase( void )
{
int c = m_WeaponInfoDatabase.Count();
for ( int i = 0; i < c; ++i )
{
delete m_WeaponInfoDatabase[ i ];
}
m_WeaponInfoDatabase.RemoveAll();
#ifdef _DEBUG
memset(g_bUsedWeaponSlots, 0, sizeof(g_bUsedWeaponSlots));
#endif
}
#endif
void PrecacheFileWeaponInfoDatabase( IFileSystem *filesystem, const unsigned char *pICEKey )
{
if ( m_WeaponInfoDatabase.Count() )
return;
char path[_MAX_PATH];
Q_snprintf(path, sizeof(path), "scripts/%s/weapon_manifest.txt", (cvar->FindVar("oc_weapons_scripts_preset")->GetString()));
KeyValues *manifest = new KeyValues( "weaponscripts" );
if (manifest->LoadFromFile(filesystem, path, "GAME"))//"scripts/weapons/weapon_manifest.txt"
{
for ( KeyValues *sub = manifest->GetFirstSubKey(); sub != NULL ; sub = sub->GetNextKey() )
{
if ( !Q_stricmp( sub->GetName(), "file" ) )
{
char fileBase[512];
Q_FileBase( sub->GetString(), fileBase, sizeof(fileBase) );
WEAPON_FILE_INFO_HANDLE tmp;
#ifdef CLIENT_DLL
if ( ReadWeaponDataFromFileForSlot( filesystem, fileBase, &tmp, pICEKey ) )
{
gWR.LoadWeaponSprites( tmp );
}
#else
ReadWeaponDataFromFileForSlot( filesystem, fileBase, &tmp, pICEKey );
#endif
}
else
{
Error( "Expecting 'file', got %s\n", sub->GetName() );
}
}
}
manifest->deleteThis();
}
KeyValues* ReadEncryptedKVFile( IFileSystem *filesystem, const char *szFilenameWithoutExtension, const unsigned char *pICEKey, bool bForceReadEncryptedFile /*= false*/ )
{
Assert( strchr( szFilenameWithoutExtension, '.' ) == NULL );
char szFullName[512];
const char *pSearchPath = "MOD";
if ( pICEKey == NULL )
{
pSearchPath = "GAME";
}
// Open the weapon data file, and abort if we can't
KeyValues *pKV = new KeyValues( "WeaponDatafile" );
Q_snprintf(szFullName,sizeof(szFullName), "%s.txt", szFilenameWithoutExtension);
if ( bForceReadEncryptedFile || !pKV->LoadFromFile( filesystem, szFullName, pSearchPath ) ) // try to load the normal .txt file first
{
#ifndef _XBOX
if ( pICEKey )
{
Q_snprintf(szFullName,sizeof(szFullName), "%s.ctx", szFilenameWithoutExtension); // fall back to the .ctx file
FileHandle_t f = filesystem->Open( szFullName, "rb", pSearchPath );
if (!f)
{
pKV->deleteThis();
return NULL;
}
// load file into a null-terminated buffer
int fileSize = filesystem->Size(f);
char *buffer = (char*)MemAllocScratch(fileSize + 1);
Assert(buffer);
filesystem->Read(buffer, fileSize, f); // read into local buffer
buffer[fileSize] = 0; // null terminate file as EOF
filesystem->Close( f ); // close file after reading
UTIL_DecodeICE( (unsigned char*)buffer, fileSize, pICEKey );
bool retOK = pKV->LoadFromBuffer( szFullName, buffer, filesystem );
MemFreeScratch();
if ( !retOK )
{
pKV->deleteThis();
return NULL;
}
}
else
{
pKV->deleteThis();
return NULL;
}
#else
pKV->deleteThis();
return NULL;
#endif
}
return pKV;
}
/*const char * WeapPathManifests[]
{
{"scripts/weapons/weapon_manifest.txt"},
{ "scripts/weapons/custom/weapon_manifest.txt" }
};
#define NUM_MANIFESTS (ARRAYSIZE(WeapPathManifests))*/
//-----------------------------------------------------------------------------
// Purpose: Read data on weapon from script file
// Output: true - if data2 successfully read
// false - if data load fails
//-----------------------------------------------------------------------------
bool ReadWeaponDataFromFileForSlot( IFileSystem* filesystem, const char *szWeaponName, WEAPON_FILE_INFO_HANDLE *phandle, const unsigned char *pICEKey )
{
if ( !phandle )
{
Assert( 0 );
return false;
}
*phandle = FindWeaponInfoSlot( szWeaponName );
FileWeaponInfo_t *pFileInfo = GetFileWeaponInfoFromHandle( *phandle );
Assert( pFileInfo );
/*if ( pFileInfo->bParsedScript )
return true;*/
char sz[128];
Q_snprintf( sz, sizeof( sz ), "scripts/%s/%s", cvar->FindVar("oc_weapons_scripts_preset")->GetString(), szWeaponName );//"scripts/weapons/%s"
KeyValues *pKV = ReadEncryptedKVFile( filesystem, sz, pICEKey,
#if defined( DOD_DLL )
true // Only read .ctx files!
#else
false
#endif
);
if (!pKV)
{
char szC[128];
Q_snprintf(szC, sizeof(szC), "scripts/%s/custom/%s", cvar->FindVar("oc_weapons_scripts_preset")->GetString(), szWeaponName);//"scripts/weapons/custom/%s"
pKV = ReadEncryptedKVFile(filesystem, szC, pICEKey,
#if defined( DOD_DLL )
true // Only read .ctx files!
#else
false
#endif
);
}
if ( !pKV )
return false;
pFileInfo->Parse( pKV, szWeaponName );
pKV->deleteThis();
return true;
}
//-----------------------------------------------------------------------------
// FileWeaponInfo_t implementation.
//-----------------------------------------------------------------------------
FileWeaponInfo_t::FileWeaponInfo_t()
{
bParsedScript = false;
bLoadedHudElements = false;
szClassName[0] = 0;
szPrintName[0] = 0;
szViewModel[0] = 0;
//szAdditionalViewModel[0] = 0;
szWorldModel[0] = 0;
szAnimationPrefix[0] = 0;
iSlot = 0;
iPosition = 0;
iMaxClip1 = 0;
iMaxClip2 = 0;
minScopeFov = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FOV <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//OverCharged
maxScopeFov = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FOV <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//OverCharged
iDefaultClip1 = 0;
iDefaultClip2 = 0;
iFlashLifeTime;//OverCharged
iFlashType = 0;//OverCharged
// iFlashLightType = 0;//OverCharged
// iFlashLightTypeNPC = 0;//OverCharged
iWeight = 0;
iRumbleEffect = -1;
bAutoSwitchTo = false;
bAutoSwitchFrom = false;
iFlags = 0;
szAmmo1[0] = 0;
szAmmo2[0] = 0;
memset( aShootSounds, 0, sizeof( aShootSounds ) );
iAmmoType = 0;
iAmmo2Type = 0;
m_bMeleeWeapon = false;
iSpriteCount = 0;
iconActive = 0;
iconInactive = 0;
iconAmmo = 0;
iconAmmo2 = 0;
iconCrosshair = 0;
iconAutoaim = 0;
iconZoomedCrosshair = 0;
iconZoomedAutoaim = 0;
bShowUsageHint = false;
m_bAllowFlipping = true;
m_bBuiltRightHanded = true;
}
#ifdef CLIENT_DLL
extern ConVar hud_fastswitch;
#endif
void FileWeaponInfo_t::ParseCustomData(KeyValues *pKeyValuesData, const char *szWeaponName)
{
/*Q_strncpy(MuzzleAttachment, pKeyValuesData->GetString("MuzzleAttachment", "muzzle"), MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachment2, pKeyValuesData->GetString("MuzzleAttachment2", "muzzle1"), MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentNPC, pKeyValuesData->GetString("MuzzleAttachmentNPC", "muzzle"), MAX_WEAPON_STRING);*/
m_bCanBePickedUpByNPCs = pKeyValuesData->GetBool("NPCAllowPickup", true);
m_bLowAmmoNotify = pKeyValuesData->GetBool("LowAmmoNotify", true);
//bool hasSecondaryAmmo = pKeyValuesData->GetInt("clip2_size", WEAPON_NOCLIP) > 0 || pKeyValuesData->GetInt("default_clip2", iMaxClip2) > 0;
m_bUsePrimaryAmmoAsSecondary = pKeyValuesData->GetBool("UsePrimaryAmmoAsSecondary", false);
m_bPickHint = false;
Q_strncpy(hintText, pKeyValuesData->GetString("PickupHint"), MAX_WEAPON_STRING);
if (hintText)
m_bPickHint = true;
viewmodel_fov = pKeyValuesData->GetInt("viewmodel_fov", 0);
ViewModelShake = true;
bool bulletInfo = false;
KeyValues *aP = pKeyValuesData->FindKey("Attachments_Properties");
if (aP)
{
KeyValues *pPlr = aP->FindKey("Player");
if (pPlr)
{
Q_strncpy(MuzzleAttachment, pPlr->GetString("MuzzleAttachment", "muzzle"), MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachment2, pPlr->GetString("MuzzleSecondAttachment", "muzzle1"), MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentSilencer, pPlr->GetString("MuzzleSilencerAttachment", "muzzle_sil"), MAX_WEAPON_STRING);
}
else
{
Q_strncpy(MuzzleAttachment, "muzzle", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachment2, "muzzle1", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentSilencer, "muzzle_sil", MAX_WEAPON_STRING);
}
KeyValues *pNpc = aP->FindKey("NPC");
if (pNpc)
{
Q_strncpy(MuzzleAttachmentNPC, pNpc->GetString("MuzzleAttachmentNPC", "muzzle"), MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentNPC2, pNpc->GetString("MuzzleSecondAttachmentNPC", "muzzle1"), MAX_WEAPON_STRING);
}
else
{
Q_strncpy(MuzzleAttachmentNPC, "muzzle", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentNPC2, "muzzle1", MAX_WEAPON_STRING);
}
}
else
{
Q_strncpy(MuzzleAttachment, "muzzle", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachment2, "muzzle1", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentSilencer, "muzzle_sil", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentNPC, "muzzle", MAX_WEAPON_STRING);
Q_strncpy(MuzzleAttachmentNPC2, "muzzle1", MAX_WEAPON_STRING);
}
KeyValues *bP = pKeyValuesData->FindKey("Bullet_Properties");
if (bP)
{
bulletInfo = true;
bulletPenetrationLength = bP->GetFloat("PenetrationLength", 5.f);
BulletImpulseForce = bP->GetFloat("ImpulseForce", 1500.f);
BulletSpeed = bP->GetFloat("Speed", 81.5f);
}
else
{
bulletInfo = false;
BulletSpeed = 81.5f;
bulletPenetrationLength = 5.f;
BulletImpulseForce = 1500.f;
}
BulletOverride = bulletInfo;
KeyValues *pShell = pKeyValuesData->FindKey("Weapon_shells");
if (pShell)
{
Q_strncpy(iWeaponShellAttachment, pShell->GetString("Shell_Attachment", "muzzle"), sizeof(iWeaponShellAttachment));
iWeaponShellModel = AllocPooledString(pShell->GetString("ShellModel", "models/weapons/shell.mdl"));
iWeaponShellBounceSound = AllocPooledString(pShell->GetString("ShellBounceSound", "Bounce.Shell"));
iWeaponShellHitSound = AllocPooledString(pShell->GetString("ShellBounceSound", "Bounce.Shell"));
iWeaponShellParticle = AllocPooledString(pShell->GetString("ShellParticle", "None"));
const char *pShellName = pShell->GetString("ShellModel", "models/weapons/shell.mdl");
CBaseEntity::PrecacheModel(pShellName);
const char *pShellSndName = pShell->GetString("ShellBounceSound", "Bounce.Shell");
CBaseEntity::PrecacheScriptSound(pShellSndName);
iWeaponShellExhaustAttachment = AllocPooledString(pShell->GetString("ShellExhaustAttachment", "None"));
iWeaponShellExhaustAttachmentDual1 = AllocPooledString(pShell->GetString("ShellExhaustAttachment1", "None"));
iWeaponShellExhaustAttachmentDual2 = AllocPooledString(pShell->GetString("ShellExhaustAttachment2", "None"));
iWeaponShellExhaustParticle = AllocPooledString(pShell->GetString("ShellExhaustParticle", "None"));
if (!FStrEq(STRING(iWeaponShellParticle), "None"))
PrecacheParticleSystem(pShell->GetString("ShellParticle", "None"));
if (!FStrEq(STRING(iWeaponShellExhaustParticle), "None"))
PrecacheParticleSystem(pShell->GetString("ShellExhaustParticle", "None"));
DevMsg("Weapon_shells\n");
}
else
{
Q_strncpy(iWeaponShellAttachment, "muzzle", sizeof(iWeaponShellAttachment));
iWeaponShellModel = AllocPooledString("models/weapons/shell.mdl");
iWeaponShellBounceSound = AllocPooledString("Bounce.Shell");
iWeaponShellHitSound = AllocPooledString("Bounce.Shell");
iWeaponShellParticle = AllocPooledString("None");
iWeaponShellExhaustParticle = AllocPooledString("None");
}
KeyValues *pSpread = pKeyValuesData->FindKey("Weapon_spread");
if (pSpread)
{
KeyValues *pPlr = pSpread->FindKey("Player");
if (pPlr)
{
ScopeSightSpread = pPlr->GetFloat("ScopeSight_spread", 1.f) / 1000;
irSightSpread = pPlr->GetFloat("IronSight_spread", 1.f) / 1000;
standingSpread = pPlr->GetFloat("Standing_spread", 2.f) / 1000;
crouchSpread = pPlr->GetFloat("Crouch_spread", 0.5f) / 1000;
walkingSpread = pPlr->GetFloat("Walking_spread", 3.f) / 1000;
runningSpread = pPlr->GetFloat("Running_spread", 5.f) / 1000;
}
else
{
ScopeSightSpread = 1.f / 1000;
irSightSpread = 1.f / 1000;
standingSpread = 2.f / 1000;
crouchSpread = 0.5f / 1000;
walkingSpread = 3.f / 1000;
runningSpread = 5.f / 1000;
}
KeyValues *pNpc = pSpread->FindKey("NPC");
if (pNpc)
{
standingSpreadNpc = pNpc->GetFloat("Standing_spread", 1.f) / 1000;
crouchSpreadNpc = pNpc->GetFloat("Crouch_spread", 0.5f) / 1000;
walkingSpreadNpc = pNpc->GetFloat("Walking_spread", 2.f) / 1000;
runningSpreadNpc = pNpc->GetFloat("Running_spread", 5.f) / 1000;
}
else
{
standingSpreadNpc = 1.f / 1000;
crouchSpreadNpc = 0.5f / 1000;
walkingSpreadNpc = 2.f / 1000;
runningSpreadNpc = 5.f / 1000;
}
}
else
{
ScopeSightSpread = 1.f / 1000;
irSightSpread = 1.f / 1000;
standingSpread = 2.f / 1000;
crouchSpread = 0.5f / 1000;
walkingSpread = 3.f / 1000;
runningSpread = 5.f / 1000;
standingSpreadNpc = 1.f / 1000;
crouchSpreadNpc = 0.5f / 1000;
walkingSpreadNpc = 2.f / 1000;
runningSpreadNpc = 5.f / 1000;
}
KeyValues *Recoil = pKeyValuesData->FindKey("Weapon_Recoil");
if (Recoil)
{
KeyValues *RecoilOld = Recoil->FindKey("Default_Kick");
if (RecoilOld)
{
useHl2KickSystem = true;
easyDampen = RecoilOld->GetFloat("easy_dampen", 0);
maxVerticalKick = RecoilOld->GetFloat("max_vertical_kick", 0);
slideLimit = RecoilOld->GetFloat("slide_limit", 0);
}
else
{
useHl2KickSystem = false;
}
recoilVelocity = Recoil->GetInt("velocity", 0);
ironOrScopeKoefficient = Recoil->GetFloat("IronScopeDecreaseKoefficient", 0.5f);
DoRandomPunch = Recoil->GetInt("DoRandomPunch", 0);
AutoReduce = Recoil->GetInt("AutoReduce", 0);
ViewPunch_X = Recoil->GetFloat("ViewPunch_X", 0);
ViewPunch_Y = Recoil->GetFloat("ViewPunch_Y", 0);
ViewPunch_Z = Recoil->GetFloat("ViewPunch_Z", 0);
DoRandomKick = Recoil->GetInt("DoRandomKick", 0);
ViewKick_X = Recoil->GetFloat("ViewKick_X", 0);
ViewKick_Y = Recoil->GetFloat("ViewKick_Y", 0);
ViewKick_Z = Recoil->GetFloat("ViewKick_Z", 0);
}
else
{
recoilVelocity = 0.f;
ironOrScopeKoefficient = 0.5f;
DoRandomPunch = 0;
AutoReduce = 0;
ViewPunch_X = 0.0f;
ViewPunch_Y = 0.0f;
ViewPunch_Z = 0.0f;
DoRandomKick = 0;
ViewKick_X = 0.0f;
ViewKick_Y = 0.0f;
ViewKick_Z = 0.0f;
}
KeyValues *PP = pKeyValuesData->FindKey("Particles_Properties");
if (PP)
{
KeyValues *kPlayer = PP->FindKey("Player");
if (kPlayer)
{
iAttachment = kPlayer->GetInt("Attachment", 1);
iAttachment_second = MAKE_STRING(kPlayer->GetString("Attachment_Secondary", "muzzle1"));
iAttachment_sil = MAKE_STRING(kPlayer->GetString("Attachment_Silencer", "muzzle_sil"));
KeyValues *tracers = kPlayer->FindKey("Muzzle_Tracers");
if (tracers)
{
for (int i = 0; i < 80; i++)
{
iMuzzleTracerType[i] = MAKE_STRING("None");
}
char muzzleTracer[256];
for (indexT = 0;; indexT++)
{
Q_snprintf(muzzleTracer, sizeof(muzzleTracer), "MuzzleTracer%i", indexT + 1);
if (tracers->GetString(muzzleTracer, "") == NULL || AllocPooledString(tracers->GetString(muzzleTracer, "")) == AllocPooledString(""))
{
break;
}
externalIndexT = indexT;
iMuzzleTracerType[indexT] = AllocPooledString(tracers->GetString(muzzleTracer, ""));
if (Q_strlen(muzzleTracer) > 0)
{
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleTracerType[indexT]));
//if (!FStrEq(parsedData, ""))
PrecacheParticleSystem(parsedData);
}
}
TracersCombined = tracers->GetBool("tracer_combined", false);
//const char *ccOldMuzzleTracerType = tracers->GetString("OldMuzzleTracer", "effects/spark");
//iOldMuzzleTracerType = MAKE_STRING(ccOldMuzzleTracerType);
Q_strncpy(iOldMuzzleTracerType, tracers->GetString("OldMuzzleTracer", "effects/spark"), MAX_WEAPON_STRING);
PrecacheMaterial(iOldMuzzleTracerType);
CBaseEntity::PrecacheModel(iOldMuzzleTracerType);
iOldMuzzleTracerLengthMin = tracers->GetFloat("OldMuzzleTracerLengthMin", 250.f);
iOldMuzzleTracerLengthMax = tracers->GetFloat("OldMuzzleTracerLengthMax", 500.f);
iOldMuzzleTracerScaleMin = tracers->GetFloat("OldMuzzleTracerScaleMin", 3.f);
iOldMuzzleTracerScaleMax = tracers->GetFloat("OldMuzzleTracerScaleMax", 5.f);
iOldMuzzleTracerVelocityMin = tracers->GetFloat("OldMuzzleTracerVelocityMin", 5000.f);
iOldMuzzleTracerVelocityMax = tracers->GetFloat("OldMuzzleTracerVelocityMax", 6000.f);
iOldMuzzleTracerWhiz = tracers->GetBool("OldMuzzleTracerWhiz", false);
}
else
{
externalIndexT = 0;
iMuzzleTracerType[0] = AllocPooledString("NULL");
Q_strncpy(iOldMuzzleTracerType, "effects/spark", MAX_WEAPON_STRING);
//iOldMuzzleTracerType = AllocPooledString("effects/spark");
TracersCombined = false;
iOldMuzzleTracerLengthMin = 250.f;
iOldMuzzleTracerLengthMax = 500.f;
iOldMuzzleTracerScaleMin = 3.f;
iOldMuzzleTracerScaleMax = 5.f;
iOldMuzzleTracerVelocityMin = 5000.f;
iOldMuzzleTracerVelocityMax = 6000.f;
iOldMuzzleTracerWhiz = false;
}
KeyValues *particles = kPlayer->FindKey("Muzzle_Particles");
if (particles)
{
/*iMuzzleFlashTransparentType = AllocPooledString(particles->GetString("MuzzleFlashTransparent", "None"));
if (!FStrEq(STRING(iMuzzleFlashTransparentType), "None"))
{
PrecacheParticleSystem(particles->GetString("MuzzleFlashTransparent", ""));
}*/
DevMsg("Muzzle_Particles\n");
iMuzzleFlashUnderWaterType = AllocPooledString(particles->GetString("MuzzleFlashUnderWater", "None"));
if (!FStrEq(STRING(iMuzzleFlashUnderWaterType), "None"))
{
PrecacheParticleSystem(particles->GetString("MuzzleFlashUnderWater", ""));
}
iMuzzleFlashShortBurst = AllocPooledString(particles->GetString("MuzzleFlashShortBurst", "None"));
if (!FStrEq(STRING(iMuzzleFlashShortBurst), "None"))
{
PrecacheParticleSystem(particles->GetString("MuzzleFlashShortBurst", ""));
}
iMuzzleSmoke = AllocPooledString(particles->GetString("MuzzleSmoke", "None"));
if (!FStrEq(STRING(iMuzzleSmoke), "None"))
{
PrecacheParticleSystem(particles->GetString("MuzzleSmoke", ""));
iMuzzleSmokeNumShots = particles->GetInt("ShotsBeforeSmoke", 0);
}
else
iMuzzleSmokeNumShots = 0;
char muzzleFlash[256];
for (index = 0;; index++)
{
Q_snprintf(muzzleFlash, sizeof(muzzleFlash), "MuzzleFlash%i", index + 1);//0+1
if (particles->GetString(muzzleFlash, "") == NULL || AllocPooledString(particles->GetString(muzzleFlash, "")) == AllocPooledString(""))
{
break;
}
externalIndex = index;
iMuzzleFlashType[index] = AllocPooledString(particles->GetString(muzzleFlash, ""));
if (Q_strlen(muzzleFlash) > 0)
{
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleFlashType[index]));
PrecacheParticleSystem(parsedData);
}
}
oldFlashType = particles->GetInt("OldMuzzleFlashType", 2);
//oldFlashTypeTP = particles->GetBool("OldMuzzleFlashTypeTPStyle", false);
oldFlashTypeTP = particles->GetBool("OldMuzzleFlashFirstPerson", true);
KeyValues *particlesSec = particles->FindKey("Muzzle_Particles_Secondary");
if (particlesSec)
{
char muzzleFlashS[256];
for (indexS = 0;; indexS++)
{
Q_snprintf(muzzleFlashS, sizeof(muzzleFlashS), "MuzzleFlashSecondary%i", indexS + 1);
if (particlesSec->GetString(muzzleFlashS, "") == NULL || AllocPooledString(particlesSec->GetString(muzzleFlashS, "")) == AllocPooledString(""))
{
break;
}
externalIndexS = indexS;
iMuzzleFlashTypeS[indexS] = AllocPooledString(particlesSec->GetString(muzzleFlashS, "None"));
if (Q_strlen(muzzleFlashS) > 0)
{
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleFlashTypeS[indexS]));
PrecacheParticleSystem(parsedData);
}
}
iMuzzleFlashDelayed = AllocPooledString(particlesSec->GetString("MuzzleFlashDelayed", "None"));
if (!FStrEq(STRING(iMuzzleFlashDelayed), "None"))
{
PrecacheParticleSystem(particlesSec->GetString("MuzzleFlashDelayed", "None"));
}
//iSecondaryAttachment = AllocPooledString(particlesSec->GetString("Attachment", "Muzzle"));
Q_strncpy(iSecondaryAttachment, particlesSec->GetString("Attachment", "Muzzle"), MAX_WEAPON_STRING);
}
else
{
indexS = 0;
externalIndexS = indexS;
char iMuzzleFlashTypeInterceptorS[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptorS, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashTypeS[indexS] = AllocPooledString(iMuzzleFlashTypeInterceptorS);
iMuzzleFlashDelayed = AllocPooledString("");
//iSecondaryAttachment = AllocPooledString("Muzzle");
Q_strncpy(iSecondaryAttachment, "Muzzle", MAX_WEAPON_STRING);
}
}
else
{
index = 0;
externalIndex = index;
char iMuzzleFlashTypeInterceptor[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptor, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashType[index] = AllocPooledString(iMuzzleFlashTypeInterceptor);
oldFlashType = 2;
oldFlashTypeTP = true;// false;
indexS = 0;
externalIndexS = indexS;
char iMuzzleFlashTypeInterceptorS[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptorS, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashTypeS[indexS] = AllocPooledString(iMuzzleFlashTypeInterceptorS);
iMuzzleFlashDelayed = AllocPooledString("");
//iSecondaryAttachment = AllocPooledString("Muzzle");
Q_strncpy(iSecondaryAttachment, "Muzzle", MAX_WEAPON_STRING);
iMuzzleSmokeNumShots = 0;
char iMuzzleFlashError[MAX_WEAPON_STRING];
Q_snprintf(iMuzzleFlashError, sizeof(iMuzzleFlashError), "%s: Error, not enough particles in script file", szWeaponName);
//iMuzzleFlashShortBurst = iMuzzleFlashTransparentType = iMuzzleFlashDelayed = iMuzzleSmoke = AllocPooledString(iMuzzleFlashError);
}
}
else
{
externalIndexT = 0;
iMuzzleTracerType[0] = AllocPooledString("NULL");
Q_strncpy(iOldMuzzleTracerType, "effects/spark", MAX_WEAPON_STRING);
//iOldMuzzleTracerType = AllocPooledString("effects/spark");
TracersCombined = false;
iOldMuzzleTracerLengthMin = 250.f;
iOldMuzzleTracerLengthMax = 500.f;
iOldMuzzleTracerScaleMin = 3.f;
iOldMuzzleTracerScaleMax = 5.f;
iOldMuzzleTracerVelocityMin = 5000.f;
iOldMuzzleTracerVelocityMax = 6000.f;
iOldMuzzleTracerWhiz = false;
index = 0;
externalIndex = index;
char iMuzzleFlashTypeInterceptor[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptor, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashType[index] = AllocPooledString(iMuzzleFlashTypeInterceptor);
oldFlashType = 2;
oldFlashTypeTP = true;// false;
indexS = 0;
externalIndexS = indexS;
char iMuzzleFlashTypeInterceptorS[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptorS, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashTypeS[indexS] = AllocPooledString(iMuzzleFlashTypeInterceptorS);
iMuzzleFlashDelayed = AllocPooledString("");
//iSecondaryAttachment = AllocPooledString("Muzzle");
Q_strncpy(iSecondaryAttachment, "Muzzle", MAX_WEAPON_STRING);
}
KeyValues *kNpc = PP->FindKey("Npc");
if (kNpc)
{
KeyValues *tracersNpc = kNpc->FindKey("Muzzle_Tracers");
if (tracersNpc)
{
char muzzleTracerNpc[256];
for (indexTN = 0;; indexTN++)
{
Q_snprintf(muzzleTracerNpc, sizeof(muzzleTracerNpc), "MuzzleTracer%i", indexTN + 1);
if (tracersNpc->GetString(muzzleTracerNpc, "") == NULL || AllocPooledString(tracersNpc->GetString(muzzleTracerNpc, "")) == AllocPooledString(""))
{
break;
}
externalIndexTN = indexTN;
iMuzzleTracerNpcType[indexTN] = AllocPooledString(tracersNpc->GetString(muzzleTracerNpc, ""));
if (Q_strlen(muzzleTracerNpc) > 0)
{
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleTracerNpcType[indexTN]));
PrecacheParticleSystem(parsedData);
}
}
TracersCombinedNpc = tracersNpc->GetBool("tracer_combined", false);
//const char *ccOldMuzzleTracerTypeNPC = tracersNpc->GetString("OldMuzzleTracer", "effects/spark");
//iOldMuzzleTracerTypeNPC = MAKE_STRING(ccOldMuzzleTracerTypeNPC);
Q_strncpy(iOldMuzzleTracerTypeNPC, tracersNpc->GetString("OldMuzzleTracer", "effects/spark"), MAX_WEAPON_STRING);
PrecacheMaterial(iOldMuzzleTracerTypeNPC);
CBaseEntity::PrecacheModel(iOldMuzzleTracerTypeNPC);
iOldMuzzleTracerLengthMinNPC = tracersNpc->GetFloat("OldMuzzleTracerLengthMin", 250.f);
iOldMuzzleTracerLengthMaxNPC = tracersNpc->GetFloat("OldMuzzleTracerLengthMax", 500.f);
iOldMuzzleTracerScaleMinNPC = tracersNpc->GetFloat("OldMuzzleTracerScaleMin", 3.f);
iOldMuzzleTracerScaleMaxNPC = tracersNpc->GetFloat("OldMuzzleTracerScaleMax", 5.f);
iOldMuzzleTracerVelocityMinNPC = tracersNpc->GetFloat("OldMuzzleTracerVelocityMin", 5000.f);
iOldMuzzleTracerVelocityMaxNPC = tracersNpc->GetFloat("OldMuzzleTracerVelocityMax", 6000.f);
iOldMuzzleTracerWhizNPC = tracersNpc->GetBool("OldMuzzleTracerWhiz", true);
}
else
{
externalIndexTN = 0;
iMuzzleTracerNpcType[0] = AllocPooledString("NULL");
Q_strncpy(iOldMuzzleTracerTypeNPC, "effects/spark", MAX_WEAPON_STRING);
//iOldMuzzleTracerTypeNPC = AllocPooledString("effects/spark");
TracersCombinedNpc = false;
iOldMuzzleTracerLengthMinNPC = 250.f;
iOldMuzzleTracerLengthMaxNPC = 500.f;
iOldMuzzleTracerScaleMinNPC = 3.f;
iOldMuzzleTracerScaleMaxNPC = 5.f;
iOldMuzzleTracerVelocityMinNPC = 5000.f;
iOldMuzzleTracerVelocityMaxNPC = 6000.f;
iOldMuzzleTracerWhizNPC = true;
}
KeyValues *particlesNpc = kNpc->FindKey("Muzzle_Particles");
if (particlesNpc)
{
iMuzzleFlashUnderWaterTypeNpc = AllocPooledString(particlesNpc->GetString("MuzzleFlashUnderWater", "None"));
if (particlesNpc->GetString("MuzzleFlashUnderWater", "") != NULL && !FStrEq(particlesNpc->GetString("MuzzleFlashUnderWater", "None"), "None"))
PrecacheParticleSystem(particlesNpc->GetString("MuzzleFlashUnderWater", "None"));
else
iMuzzleFlashUnderWaterTypeNpc = AllocPooledString("None");
char muzzleFlashNpc[256];
for (indexNpc = 0;; indexNpc++)
{
Q_snprintf(muzzleFlashNpc, sizeof(muzzleFlashNpc), "MuzzleFlash%i", indexNpc + 1);
if (particlesNpc->GetString(muzzleFlashNpc, "") == NULL || AllocPooledString(particlesNpc->GetString(muzzleFlashNpc, "")) == AllocPooledString(""))
{
break;
}
externalIndexNpc = indexNpc;
iMuzzleFlashTypeNpc[indexNpc] = AllocPooledString(particlesNpc->GetString(muzzleFlashNpc, ""));
if (Q_strlen(muzzleFlashNpc) > 0)
{
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleFlashTypeNpc[indexNpc]));
PrecacheParticleSystem(parsedData);
}
}
oldFlashTypeNPC = particlesNpc->GetInt("OldMuzzleFlashType", 2);
}
else
{
indexNpc = 0;
externalIndexNpc = indexNpc;
char iMuzzleFlashTypeInterceptorNpc[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptorNpc, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashTypeNpc[indexNpc] = AllocPooledString(iMuzzleFlashTypeInterceptorNpc);
oldFlashTypeNPC = 2;
}
}
else
{
externalIndexTN = 0;
iMuzzleTracerNpcType[0] = AllocPooledString("NULL");
Q_strncpy(iOldMuzzleTracerTypeNPC, "effects/spark", MAX_WEAPON_STRING);
//iOldMuzzleTracerTypeNPC = AllocPooledString("effects/spark");
TracersCombinedNpc = false;
iOldMuzzleTracerLengthMinNPC = 250.f;
iOldMuzzleTracerLengthMaxNPC = 500.f;
iOldMuzzleTracerScaleMinNPC = 3.f;
iOldMuzzleTracerScaleMaxNPC = 5.f;
iOldMuzzleTracerVelocityMinNPC = 5000.f;
iOldMuzzleTracerVelocityMaxNPC = 6000.f;
iOldMuzzleTracerWhizNPC = true;
indexNpc = 0;
externalIndexNpc = indexNpc;
char iMuzzleFlashTypeInterceptorNpc[MAX_WEAPON_STRING];
Q_strncpy(iMuzzleFlashTypeInterceptorNpc, PP->GetString("MuzzleFlashType"), MAX_WEAPON_STRING);
iMuzzleFlashTypeNpc[indexNpc] = AllocPooledString(iMuzzleFlashTypeInterceptorNpc);
oldFlashTypeNPC = 2;
}
}
else
{
iAttachment = 1;
iAttachment_second = MAKE_STRING("muzzle1");
iAttachment_sil = MAKE_STRING("muzzle_sil");
}
KeyValues *dlight = pKeyValuesData->FindKey("MuzzleDLight_Properties");
if (dlight)
{
KeyValues *dlightPlr = dlight->FindKey("Player");
if (dlightPlr)
{
AllowMuzzleFlashDLight = true;
DLightDisableForPlayer = false;
iMuzzleFlashLightNoModelIllumination = dlightPlr->GetBool("no_model_Illumination", false);
iMuzzleFlashLightR = dlightPlr->GetInt("DLightRed", 0);
iMuzzleFlashLightG = dlightPlr->GetInt("DLightGreen", 0);
iMuzzleFlashLightB = dlightPlr->GetInt("DLightBlue", 0);
iMuzzleFlashLightExponent = dlightPlr->GetInt("DLightExponent", 0);
iMuzzleFlashLightRadius = dlightPlr->GetFloat("DLightRadius", 400.f);
iMuzzleFlashLightDecayTime = dlightPlr->GetFloat("DLightDecay", 0.2f);
iMuzzleFlashLightLifeTime = dlightPlr->GetFloat("DLightLifeTime", 1.0f);
iMuzzleFlashLightAttachment = AllocPooledString(dlightPlr->GetString("DLightAttachment", "muzzle"));
//iMuzzleFlashLightAttachment = MAKE_STRING(dlightPlr->GetString("DLightAttachment", "muzzle"));
}
else
{
AllowMuzzleFlashDLight = true;
DLightDisableForPlayer = false;
iMuzzleFlashLightNoModelIllumination = dlight->GetBool("no_model_Illumination", false);
iMuzzleFlashLightR = dlight->GetInt("DLightRed", 0);
iMuzzleFlashLightG = dlight->GetInt("DLightGreen", 0);
iMuzzleFlashLightB = dlight->GetInt("DLightBlue", 0);
iMuzzleFlashLightExponent = dlight->GetInt("DLightExponent", 0);
iMuzzleFlashLightRadius = dlight->GetFloat("DLightRadius", 400.f);
iMuzzleFlashLightDecayTime = dlight->GetFloat("DLightDecay", 0.2f);
iMuzzleFlashLightLifeTime = dlight->GetFloat("DLightLifeTime", 1.0f);
iMuzzleFlashLightAttachment = AllocPooledString(dlight->GetString("DLightAttachment", "muzzle"));
}
if (DLightDisableForPlayer)
AllowMuzzleFlashDLight = false;
//DLightDisableForPlayer = dlight->GetBool("disabled_for_player", false);
KeyValues *dlightNpc = dlight->FindKey("Npc");
if (dlightNpc)
{
AllowMuzzleFlashDLightNpc = true;
iMuzzleFlashLightNoModelIlluminationNpc = dlightNpc->GetBool("no_model_Illumination", false);
iMuzzleFlashLightRNpc = dlightNpc->GetInt("DLightRed", 0);
iMuzzleFlashLightGNpc = dlightNpc->GetInt("DLightGreen", 0);
iMuzzleFlashLightBNpc = dlightNpc->GetInt("DLightBlue", 0);
iMuzzleFlashLightExponentNpc = dlightNpc->GetInt("DLightExponent", 0);
iMuzzleFlashLightRadiusNpc = dlightNpc->GetFloat("DLightRadius", 400.f);
iMuzzleFlashLightDecayTimeNpc = dlightNpc->GetFloat("DLightDecay", 0.2f);
iMuzzleFlashLightLifeTimeNpc = dlightNpc->GetFloat("DLightLifeTime", 1.0f);
iMuzzleFlashLightAttachmentNpc = AllocPooledString(dlightNpc->GetString("DLightAttachment", "muzzle"));
}
else
{
AllowMuzzleFlashDLightNpc = false;
iMuzzleFlashLightNoModelIlluminationNpc = iMuzzleFlashLightNoModelIllumination;
iMuzzleFlashLightRNpc = iMuzzleFlashLightR;
iMuzzleFlashLightGNpc = iMuzzleFlashLightG;
iMuzzleFlashLightBNpc = iMuzzleFlashLightB;
iMuzzleFlashLightExponentNpc = iMuzzleFlashLightExponent;
iMuzzleFlashLightRadiusNpc = iMuzzleFlashLightRadius;
iMuzzleFlashLightDecayTimeNpc = iMuzzleFlashLightDecayTime;
iMuzzleFlashLightLifeTimeNpc = iMuzzleFlashLightLifeTime;
iMuzzleFlashLightAttachmentNpc = iMuzzleFlashLightAttachment;
}
}
else
{
AllowMuzzleFlashDLight = false;
DLightDisableForPlayer = true;
iMuzzleFlashLightNoModelIllumination = false;
iMuzzleFlashLightR = 255;
iMuzzleFlashLightG = 255;
iMuzzleFlashLightB = 255;
iMuzzleFlashLightExponent = 0;
iMuzzleFlashLightRadius = 400.f;
iMuzzleFlashLightDecayTime = 0.2f;
iMuzzleFlashLightLifeTime = 1.0f;
iMuzzleFlashLightAttachment = AllocPooledString("muzzle");
//iMuzzleFlashLightAttachment = MAKE_STRING("muzzle");
AllowMuzzleFlashDLightNpc = false;
iMuzzleFlashLightNoModelIlluminationNpc = iMuzzleFlashLightNoModelIllumination;
iMuzzleFlashLightRNpc = iMuzzleFlashLightR;
iMuzzleFlashLightGNpc = iMuzzleFlashLightG;
iMuzzleFlashLightBNpc = iMuzzleFlashLightB;
iMuzzleFlashLightExponentNpc = iMuzzleFlashLightExponent;
iMuzzleFlashLightRadiusNpc = iMuzzleFlashLightRadius;
iMuzzleFlashLightDecayTimeNpc = iMuzzleFlashLightDecayTime;
iMuzzleFlashLightLifeTimeNpc = iMuzzleFlashLightLifeTime;
iMuzzleFlashLightAttachmentNpc = iMuzzleFlashLightAttachment;
}
KeyValues *light = pKeyValuesData->FindKey("MuzzleProjectedLight_Properties");
if (light)
{
AllowProjectedMuzzleFlashes = true;
Q_strncpy(iFlashFirstAttachment, light->GetString("FirstAttachment", "None"), MAX_WEAPON_STRING);
Q_strncpy(iFlashSecondAttachment, light->GetString("SecondAttachment", "None"), MAX_WEAPON_STRING);
iFlashRollPrimary = light->GetBool("RollFlash", iFlashRollPrimary);
iFlashLifeTime = light->GetFloat("FlashLifeTime", iFlashLifeTime);
iFlashXPos = light->GetFloat("X", iFlashXPos);
iFlashYPos = light->GetFloat("Y", iFlashYPos);
iFlashZPos = light->GetFloat("Z", iFlashZPos);
char muzzleLight[256];
for (indexLight = 0;; indexLight++)
{
Q_snprintf(muzzleLight, sizeof(muzzleLight), "MuzzleLight%i", indexLight + 1);
if (light->GetString(muzzleLight, "") == NULL || AllocPooledString(light->GetString(muzzleLight, "")) == AllocPooledString(""))
{
break;
}
externalIndexLight = indexLight;
iMuzzleLightType[indexLight] = AllocPooledString(light->GetString(muzzleLight, ""));
/*if (iMuzzleLightType[indexLight] == AllocPooledString(""))
allowMuzzleLight = false;
else
allowMuzzleLight = true;*/
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleLightType[indexLight]));
PrecacheMaterial(parsedData);
CBaseEntity::PrecacheModel(parsedData);
//PrecacheMaterial(light->GetString(muzzleLight, ""));
}
KeyValues *Slight = light->FindKey("SecondaryLight");
if (Slight)
{
iFlashRollSecondary = Slight->GetBool("RollFlash", iFlashRollSecondary);
char muzzleSLight[256];
for (indexSLight = 0;; indexSLight++)
{
Q_snprintf(muzzleSLight, sizeof(muzzleSLight), "MuzzleSecondaryLight%i", indexSLight + 1);
if (Slight->GetString(muzzleSLight, "") == NULL || AllocPooledString(Slight->GetString(muzzleSLight, "")) == AllocPooledString(""))
{
break;
}
externalIndexSLight = indexSLight;
iMuzzleSecondaryLightType[indexSLight] = AllocPooledString(Slight->GetString(muzzleSLight, ""));
char parsedData[256];
Q_snprintf(parsedData, sizeof(parsedData), STRING(iMuzzleSecondaryLightType[indexSLight]));
PrecacheMaterial(parsedData);
CBaseEntity::PrecacheModel(parsedData);
//PrecacheMaterial(Slight->GetString(muzzleSLight, ""));
}
iFlashType = 1;
}
else
{
iFlashRollSecondary = false;
externalIndexSLight = 0;
iFlashType = 0;
}
}
else
{
AllowProjectedMuzzleFlashes = false;
Q_strncpy(iFlashFirstAttachment, "muzzle", MAX_WEAPON_STRING);
Q_strncpy(iFlashSecondAttachment, "muzzle", MAX_WEAPON_STRING);
iFlashLifeTime = 0.3f;
iFlashXPos = 0.f;
iFlashYPos = 0.f;
iFlashZPos = 0.f;
externalIndexSLight = 0;
iFlashType = 0;
iFlashRollPrimary = true;
iFlashRollSecondary = false;
//allowMuzzleLight = false;
externalIndexLight = 0;
iMuzzleLightType[0] = AllocPooledString("NULL");
}
KeyValues *Attachment = pKeyValuesData->FindKey("CameraFollow_Properties");
if (Attachment)
{
AttachmentApply = true;
if (AllocPooledString(Attachment->GetString("Attachments")) != AllocPooledString("") && AllocPooledString(Attachment->GetString("Attachments")) != AllocPooledString("None"))
StringToIntArray(&AttachmentsArray, Attachment->GetString("Attachments"), " ");
//UTIL_StringToIntUTILVector(&AttachmentsArray, Attachment->GetString("Attachments"));
if (AllocPooledString(Attachment->GetString("Bones")) != AllocPooledString("") && AllocPooledString(Attachment->GetString("Bones")) != AllocPooledString("None"))
StringToIntArray(&BonesArray, Attachment->GetString("Bones"), " ");
//UTIL_StringToIntUTILVector(&BonesArray, Attachment->GetString("Bones"));
if (AllocPooledString(Attachment->GetString("Scales")) != AllocPooledString("") && AllocPooledString(Attachment->GetString("Scales")) != AllocPooledString("None"))
UTIL_StringToFloatUTILVector(&Scales, Attachment->GetString("Scales"));
Randomize = Attachment->GetBool("RandomizeScales", false);
}
else
{
AttachmentApply = false;
Randomize = false;
}
DevMsg("\n\n%s\n\n", szWeaponName);
m_bHasMag = false;
KeyValues *Mag = pKeyValuesData->FindKey("Garbage_Properties");
if (Mag)
{
Q_strncpy(iMagName, Mag->GetString("Garb_Name", "None"), sizeof(iMagName));
m_bHasMag = !(0 == Q_strcmp(iMagName, "None"));
if (m_bHasMag)
{
CBaseEntity::PrecacheModel(iMagName);
Q_strncpy(magHitSound, Mag->GetString("Garb_HitSound", "Magazines.Impact1"), sizeof(magHitSound));
CBaseEntity::PrecacheScriptSound(magHitSound);
Q_strncpy(Mag_Attachment, Mag->GetString("Garb_Attachment", "muzzle"), sizeof(Mag_Attachment));
Mag_Offset.x = Mag->GetFloat("Garb_Offset_x", 0);
Mag_Offset.y = Mag->GetFloat("Garb_Offset_y", 0);
Mag_Offset.z = Mag->GetFloat("Garb_Offset_z", 0);
Mag_Angle.x = Mag->GetFloat("Garb_Angle_x", 0);
Mag_Angle.y = Mag->GetFloat("Garb_Angle_y", 0);
Mag_Angle.z = Mag->GetFloat("Garb_Angle_z", 0);
Mag_Velocity.x = Mag->GetFloat("Garb_Velocity_x", 0);
Mag_Velocity.y = Mag->GetFloat("Garb_Velocity_y", 0);
Mag_Velocity.z = Mag->GetFloat("Garb_Velocity_z", 0);
Mag_AngularVelocity.x = Mag->GetFloat("Garb_AngularVelocity_x", 0);
Mag_AngularVelocity.y = Mag->GetFloat("Garb_AngularVelocity_y", 0);
Mag_AngularVelocity.z = Mag->GetFloat("Garb_AngularVelocity_z", 0);
//magHitSound = MAKE_STRING(Mag->GetString("HitSound", "Magazines.Impact1"));
}
}
else
{
Mag_Offset.x = 0.0f;
Mag_Offset.y = 0.0f;
Mag_Offset.z = 0.0f;
Mag_Angle.x = 0.0f;
Mag_Angle.y = 0.0f;
Mag_Angle.z = 0.0f;
Mag_Velocity.x = 0.0f;
Mag_Velocity.y = 0.0f;
Mag_Velocity.z = 0.0f;
Mag_AngularVelocity.x = 0.0f;
Mag_AngularVelocity.y = 0.0f;
Mag_AngularVelocity.z = 0.0f;
Q_strncpy(magHitSound, "Magazines.Impact1", sizeof(magHitSound));
CBaseEntity::PrecacheScriptSound(magHitSound);
Q_strncpy(Mag_Attachment, "muzzle", sizeof(Mag_Attachment));
}
// this just saves off the data in the script file for later use
KeyValues *pEt = pKeyValuesData->FindKey("ViewModel_Properties");
if (pEt)
{
KeyValues *pTP = pEt->FindKey("ThirdPerson");
if (pTP)
{
m_expOffsetTP.x = pTP->GetFloat("pos_x", 0.0f);
m_expOffsetTP.y = pTP->GetFloat("pos_y", 0.0f);
m_expOffsetTP.z = pTP->GetFloat("pos_z", 0.0f);
m_expOriOffsetTP.x = pTP->GetFloat("ang_x", 0.0f);
m_expOriOffsetTP.y = pTP->GetFloat("ang_y", 0.0f);
m_expOriOffsetTP.z = pTP->GetFloat("ang_z", 0.0f);
}
else
{
m_expOffsetTP = vec3_origin;
m_expOriOffsetTP.Init();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>//OverCharged
m_expOffset.x = pEt->GetFloat("pos_x", 0.0f);
m_expOffset.y = pEt->GetFloat("pos_y", 0.0f);
m_expOffset.z = pEt->GetFloat("pos_z", 0.0f);
m_expOriOffset.x = pEt->GetFloat("ang_x", 0.0f);
m_expOriOffset.y = pEt->GetFloat("ang_y", 0.0f);
m_expOriOffset.z = pEt->GetFloat("ang_z", 0.0f);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IRONSIGHT//OverCharged
m_expOffset2.x = pEt->GetFloat("iron_pos_x", 0.0f);
m_expOffset2.y = pEt->GetFloat("iron_pos_y", 0.0f);
m_expOffset2.z = pEt->GetFloat("iron_pos_z", 0.0f);
m_expOriOffset2.x = pEt->GetFloat("iron_ang_x", 0.0f);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_expOriOffset2.y = pEt->GetFloat("iron_ang_y", 0.0f);
m_expOriOffset2.z = pEt->GetFloat("iron_ang_z", 0.0f);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> In Scope//OverCharged
m_expOffsetScope.x = pEt->GetFloat("scope_pos_x", 0.0f);
m_expOffsetScope.y = pEt->GetFloat("scope_pos_y", 0.0f);
m_expOffsetScope.z = pEt->GetFloat("scope_pos_z", 0.0f);
m_expOriOffsetScope.x = pEt->GetFloat("scope_ang_x", 0.0f);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_expOriOffsetScope.y = pEt->GetFloat("scope_ang_y", 0.0f);
m_expOriOffsetScope.z = pEt->GetFloat("scope_ang_z", 0.0f);
PositionWall.x = pEt->GetFloat("PosW_x", m_expOffset.x);
PositionWall.y = pEt->GetFloat("PosW_y", m_expOffset.y);
PositionWall.z = pEt->GetFloat("PosW_z", m_expOffset.z);
AngleWall.x = pEt->GetFloat("AngleW_x", 0.0f);
AngleWall.y = pEt->GetFloat("AngleW_y", 0.0f);
AngleWall.z = pEt->GetFloat("AngleW_z", 0.0f);
PositionFwd.x = pEt->GetFloat("PosF_x", m_expOffset.x);
PositionFwd.y = pEt->GetFloat("PosF_y", m_expOffset.y);
PositionFwd.z = pEt->GetFloat("PosF_z", m_expOffset.z);
AngleFwd.x = pEt->GetFloat("AngleF_x", 0.0f);
AngleFwd.y = pEt->GetFloat("AngleF_y", 0.0f);
AngleFwd.z = pEt->GetFloat("AngleF_z", 0.0f);
ViewmodelRollFix = pEt->GetInt("ViewmodelRollFix", 0);
PositionBwd.x = pEt->GetFloat("PosB_x", 0.0f);
PositionBwd.y = pEt->GetFloat("PosB_y", 0.0f);
PositionBwd.z = pEt->GetFloat("PosB_z", 0.0f);
AngleBwd.x = pEt->GetFloat("AngleB_x", 0.0f);
AngleBwd.y = pEt->GetFloat("AngleB_y", 0.0f);
AngleBwd.z = pEt->GetFloat("AngleB_z", 0.0f);
PositionLeft.x = pEt->GetFloat("PosL_x", 0.0f);
PositionLeft.y = pEt->GetFloat("PosL_y", 0.0f);
PositionLeft.z = pEt->GetFloat("PosL_z", 0.0f);
AngleLeft.x = pEt->GetFloat("AngleL_x", 0.0f);
AngleLeft.y = pEt->GetFloat("AngleL_y", 0.0f);
AngleLeft.z = pEt->GetFloat("AngleL_z", 0.0f);
PositionRight.x = pEt->GetFloat("PosR_x", 0.0f);
PositionRight.y = pEt->GetFloat("PosR_y", 0.0f);
PositionRight.z = pEt->GetFloat("PosR_z", 0.0f);
AngleRight.x = pEt->GetFloat("AngleR_x", 0.0f);
AngleRight.y = pEt->GetFloat("AngleR_y", 0.0f);
AngleRight.z = pEt->GetFloat("AngleR_z", 0.0f);
DistanceToWall = pEt->GetFloat("DistanceToWall", 0.0f);
LaserSightPosition.x = pEt->GetFloat("LaserPos_x", 0.0f);
LaserSightPosition.y = pEt->GetFloat("LaserPos_y", 0.0f);
LaserSightPosition.z = pEt->GetFloat("LaserPos_z", 0.0f);
ProjectilePosition.x = pEt->GetFloat("ProjectilePos_x", 0.0f);
ProjectilePosition.y = pEt->GetFloat("ProjectilePos_y", 0.0f);
ProjectilePosition.z = pEt->GetFloat("ProjectilePos_z", 0.0f);
ParticleTracerPosition.x = pEt->GetFloat("ParticleTracerPos_x", 0.0f);//TracerPos_x
ParticleTracerPosition.y = pEt->GetFloat("ParticleTracerPos_y", 0.0f);
ParticleTracerPosition.z = pEt->GetFloat("ParticleTracerPos_z", 0.0f);
OriginTracerPosition.x = pEt->GetFloat("OriginTracerPos_x", 0.0f);
OriginTracerPosition.y = pEt->GetFloat("OriginTracerPos_y", 0.0f);
OriginTracerPosition.z = pEt->GetFloat("OriginTracerPos_z", 0.0f);//TracerPos2_z
bool particleTracers = cvar->FindVar("oc_particle_tracers")->GetBool();
ScopeParticleTracerPosition.x = pEt->GetFloat("ScopeParticleTracerPos_x", particleTracers ? ParticleTracerPosition.x : OriginTracerPosition.x);
ScopeParticleTracerPosition.y = pEt->GetFloat("ScopeParticleTracerPos_y", particleTracers ? ParticleTracerPosition.y : OriginTracerPosition.y);
ScopeParticleTracerPosition.z = pEt->GetFloat("ScopeParticleTracerPos_z", particleTracers ? ParticleTracerPosition.z : OriginTracerPosition.z);
IrSightParticleTracerPosition.x = pEt->GetFloat("IrSightParticleTracerPos_x", particleTracers ? ParticleTracerPosition.x : OriginTracerPosition.x);
IrSightParticleTracerPosition.y = pEt->GetFloat("IrSightParticleTracerPos_y", particleTracers ? ParticleTracerPosition.y : OriginTracerPosition.y);
IrSightParticleTracerPosition.z = pEt->GetFloat("IrSightParticleTracerPos_z", particleTracers ? ParticleTracerPosition.z : OriginTracerPosition.z);
ScopeOriginTracerPosition.x = pEt->GetFloat("ScopeOriginTracerPos_x", OriginTracerPosition.x);
ScopeOriginTracerPosition.y = pEt->GetFloat("ScopeOriginTracerPos_y", OriginTracerPosition.y);
ScopeOriginTracerPosition.z = pEt->GetFloat("ScopeOriginTracerPos_z", OriginTracerPosition.z);
IrSightOriginTracerPosition.x = pEt->GetFloat("IrSightOriginTracerPos_x", OriginTracerPosition.x);
IrSightOriginTracerPosition.y = pEt->GetFloat("IrSightOriginTracerPos_y", OriginTracerPosition.y);
IrSightOriginTracerPosition.z = pEt->GetFloat("IrSightOriginTracerPos_z", OriginTracerPosition.z);
flIronsightFOVOffset = pEt->GetFloat("iron_fov", 70.0f);
}
else
{
m_expOffsetTP = vec3_origin;
m_expOriOffsetTP.Init();
m_expOffset = vec3_origin;
m_expOffset2 = vec3_origin;
m_expOffsetScope = vec3_origin;
DistanceToWall = 0;
LaserSightPosition = vec3_origin;
ViewmodelRollFix = 0;
PositionWall = vec3_origin;
PositionFwd = vec3_origin;
PositionBwd = vec3_origin;
PositionLeft = vec3_origin;
PositionRight = vec3_origin;
m_expOriOffset.Init();
m_expOriOffset2.Init();
m_expOriOffsetScope.Init();
AngleWall.Init();
AngleFwd.Init();
AngleBwd.Init();
AngleLeft.Init();
AngleRight.Init();
ParticleTracerPosition = vec3_origin;
ProjectilePosition = vec3_origin;
OriginTracerPosition = vec3_origin;
IrSightParticleTracerPosition = vec3_origin;
ScopeParticleTracerPosition = vec3_origin;
ScopeOriginTracerPosition = vec3_origin;
IrSightOriginTracerPosition = vec3_origin;
flIronsightFOVOffset = 70.0f;
}
KeyValues *pLdP = pKeyValuesData->FindKey("LaserDot_Properties");
if (pLdP)
{
enableLaser = true;
useAsSecondaryAttack = pLdP->GetBool("laser_enable_on_altbutton", false);
Q_strncpy(beamAttachment, pLdP->GetString("Beam_attachment", "None"), MAX_WEAPON_STRING);
lightBeamColor.r = pLdP->GetInt("LightBeam_color_r", 0);
lightBeamColor.g = pLdP->GetInt("LightBeam_color_g", 0);
lightBeamColor.b = pLdP->GetInt("LightBeam_color_b", 0);
lightBeamColor.a = pLdP->GetInt("LightBeam_color_exponent", 0);
lightMinRadius = pLdP->GetFloat("Light_min_radius", 0.1f);
lightMaxRadius = pLdP->GetFloat("Light_max_radius", 0.1f);
beamWidth = pLdP->GetFloat("Beam_width", 0.1f);
beamEndWidth = pLdP->GetFloat("Beam_end_width", 0.1f);
lightDecay = pLdP->GetFloat("Light_decay", 0.1f);
lightDie = pLdP->GetFloat("Light_die_time", 0.1f);
Q_strncpy(beamMaterial, pLdP->GetString("Beam_material", "effects/bluelaser1.vmt"), MAX_WEAPON_STRING);
//if (Q_strcmp(beamMaterial, "None") != 0)
{
CBaseEntity::PrecacheModel(beamMaterial);
PrecacheMaterial(beamMaterial);
}
Q_strncpy(beamHaloMaterial, pLdP->GetString("Beam_halo_material", "sprites/light_glow03.vmt"), MAX_WEAPON_STRING);
{
CBaseEntity::PrecacheModel(beamHaloMaterial);
PrecacheMaterial(beamHaloMaterial);
}
beamHaloWidth = pLdP->GetFloat("Beam_halo_width", 0.1f);
beamHaloViewModelWidth = pLdP->GetFloat("Beam_halo_onmodel_width", 0.1f);
beamLaserPos.x = pLdP->GetFloat("Beam_pos_x", 0.0f);
beamLaserPos.y = pLdP->GetFloat("Beam_pos_y", 0.0f);
beamLaserPos.z = pLdP->GetFloat("Beam_pos_z", 0.0f);
beamLaserAng.x = pLdP->GetFloat("Beam_ang_x", 0.0f);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
beamLaserAng.y = pLdP->GetFloat("Beam_ang_y", 0.0f);
beamLaserAng.z = pLdP->GetFloat("Beam_ang_z", 0.0f);
beamLength = pLdP->GetFloat("Beam_length", -1.f);
lightVMMinRadius = pLdP->GetFloat("Light_vm_min_radius", 0.1f);
lightVMMaxRadius = pLdP->GetFloat("Light_vm_max_radius", 0.1f);
Q_strncpy(beamOnSound, pLdP->GetString("Beam_sound_on", "None"), MAX_WEAPON_STRING);
if (Q_strcmp(beamOnSound, "None") != 0)
CBaseEntity::PrecacheScriptSound(beamOnSound);
Q_strncpy(beamOffSound, pLdP->GetString("Beam_sound_off", "None"), MAX_WEAPON_STRING);
if (Q_strcmp(beamOffSound, "None") != 0)
CBaseEntity::PrecacheScriptSound(beamOffSound);
}
else
{
enableLaser = false;
useAsSecondaryAttack = false;
lightBeamColor.r = 0;
lightBeamColor.g = 0;
lightBeamColor.b = 0;
lightBeamColor.a = 0;
lightMinRadius = 0;
lightMaxRadius = 0;
lightDecay = 0;
lightDie = 0;
lightVMMinRadius = 0.f;
lightVMMaxRadius = 0.f;
beamLength = -1.f;
beamHaloWidth = 0.f;
beamHaloViewModelWidth = 0.f;
Q_strncpy(beamAttachment, "None", MAX_WEAPON_STRING);
Q_strncpy(beamMaterial, "None", MAX_WEAPON_STRING);
Q_strncpy(beamHaloMaterial, "None", MAX_WEAPON_STRING);
beamLaserPos = vec3_origin;
beamLaserAng = QAngle(0, 0, 0);
Q_strncpy(beamOnSound, "None", MAX_WEAPON_STRING);
Q_strncpy(beamOffSound, "None", MAX_WEAPON_STRING);
}
KeyValues *pTD = pKeyValuesData->FindKey("Scope2D_Properties");
if (pTD)
{
twoDScopeTexture = AllocPooledString(pTD->GetString("Texture", "Scope"));
allowTwoDScope = true;
}
else
{
twoDScopeTexture = AllocPooledString("Scope");
allowTwoDScope = false;
}
KeyValues *pZP = pKeyValuesData->FindKey("Zoom_Properties");
if (pZP)
{
minScopeFov = pZP->GetInt("min_scope_fov", minScopeFov); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FOV <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//OverCharged
maxScopeFov = pZP->GetInt("max_scope_fov", maxScopeFov); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FOV <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//OverCharged
rtFov = pZP->GetInt("render_targets_fov", rtFov); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FOV <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//OverCharged
const char *colors = pZP->GetString("RT_color", "255 255 255");
if (colors)
{
try
{
CUtlVector<int> colorArray;
StringToIntArray(&colorArray, colors, " ");
//float colorArray[3];
/*Vector colorArray;
StringToFloatArray(colorArray.Base(), 3, colors);*/
//UTIL_StringToFloatArray(colorArray, 3, colors);
color24 rt_Color;
rt_Color.r = colorArray.Element(0);
rt_Color.g = colorArray.Element(1);
rt_Color.b = colorArray.Element(2);
rtColor = rt_Color;
}
catch (...)
{
color24 rt_Color;
rt_Color.r = 1;
rt_Color.g = 1;
rt_Color.b = 1;
rtColor = rt_Color;
}
}
else
{
color24 rt_Color;
rt_Color.r = 1;
rt_Color.g = 1;
rt_Color.b = 1;
rtColor = rt_Color;
}
Q_strncpy(rtAttachment, pZP->GetString("Scope_attachment", "Scope"), MAX_WEAPON_STRING);
AllowEnablingLight = pZP->GetInt("allow_enabling_light", 0);
KeyValues *pLP = pZP->FindKey("Light_properties");
if (pLP && AllowEnablingLight)
{
lightConstant = pLP->GetFloat("light_constant", lightConstant);
lightFov = pLP->GetFloat("light_fov", lightFov);
lightFar = pLP->GetFloat("light_far", lightFar);
lightLinear = pLP->GetFloat("light_linear", lightLinear);
}
else
{
lightConstant = 0;
lightFov = 0;
lightFar = 0;
lightLinear = 0;
}
AllowEnablingIronsightLight = pZP->GetInt("allow_enabling_ironsight_light", 0);
KeyValues *pISLP = pZP->FindKey("IronSight_light_properties");
if (pISLP && AllowEnablingIronsightLight)
{
ironlightConstant = pISLP->GetFloat("Iron_light_constant", ironlightConstant);
ironlightFov = pISLP->GetFloat("Iron_light_fov", ironlightFov);
ironlightFar = pISLP->GetFloat("Iron_light_far", ironlightFar);
ironlightLinear = pISLP->GetFloat("Iron_light_linear", ironlightLinear);
}
else
{
ironlightConstant = 0;
ironlightFov = 0;
ironlightFar = 0;
ironlightLinear = 0;
}
iWeaponZoomUpSound = AllocPooledString(pZP->GetString("ZoomSound", "None"));
if (iWeaponZoomUpSound != AllocPooledString("None"))
CBaseEntity::PrecacheScriptSound(pZP->GetString("ZoomSound", ""));
RT_Offset.x = pZP->GetFloat("RT_Offset_x", 0.0f);
RT_Offset.y = pZP->GetFloat("RT_Offset_y", 0.0f);
RT_Offset.z = pZP->GetFloat("RT_Offset_z", 0.0f);
RT_OffsetIron.x = pZP->GetFloat("RT_OffsetIron_x", 0.0f);
RT_OffsetIron.y = pZP->GetFloat("RT_OffsetIron_y", 0.0f);
RT_OffsetIron.z = pZP->GetFloat("RT_OffsetIron_z", 0.0f);
RT_Angle.x = pZP->GetFloat("RT_Angle_x", 0.0f);
RT_Angle.y = pZP->GetFloat("RT_Angle_y", 0.0f);
RT_Angle.z = pZP->GetFloat("RT_Angle_z", 0.0f);
RT_AngleIron.x = pZP->GetFloat("RT_AngleIron_x", 0.0f);
RT_AngleIron.y = pZP->GetFloat("RT_AngleIron_y", 0.0f);
RT_AngleIron.z = pZP->GetFloat("RT_AngleIron_z", 0.0f);
}
else
{
iWeaponZoomUpSound = AllocPooledString("None");
minScopeFov = 50;
maxScopeFov = 90;
rtFov = minScopeFov;
color24 rt_Color;
rt_Color.r = 1;
rt_Color.g = 1;
rt_Color.b = 1;
rtColor = rt_Color;
Q_strncpy(rtAttachment, "Scope", MAX_WEAPON_STRING);
AllowEnablingLight = 0;
AllowEnablingIronsightLight = 0;
lightConstant = 0;
lightFov = 0;
lightFar = 0;
lightLinear = 0;
ironlightConstant = 0;
ironlightFov = 0;
ironlightFar = 0;
ironlightLinear = 0;
RT_Offset = vec3_origin;
RT_OffsetIron = vec3_origin;
RT_Angle.x = 0.0f;
RT_Angle.y = 0.0f;
RT_Angle.z = 0.0f;
RT_AngleIron.x = 0.0f;
RT_AngleIron.y = 0.0f;
RT_AngleIron.z = 0.0f;
}
bool trueFirstPerson = (cvar->FindVar("oc_player_draw_body")->GetInt() && cvar->FindVar("oc_player_true_firstperson_vm")->GetInt());
bool oldAnimProp = false;
KeyValues *pAP = pKeyValuesData->FindKey("Animation_Properties");
if (pAP)
{
ViewModelShake = pAP->GetBool("Shake", true);
if (!trueFirstPerson)
{
oldAnimProp = true;
animData[0] = SetumAnimations(pAP);
animData[3] = animData[2] = animData[1] = animData[0];
}
else
{
KeyValues *pATP = pAP->FindKey("ThirdPerson");
if (pATP)
{
oldAnimProp = true;
animData[0] = SetumAnimations(pATP);
animData[3] = animData[2] = animData[1] = animData[0];
}
}
}
KeyValues *pWFM = pKeyValuesData->FindKey("Weapon_firing_modes");
if (pWFM)
{
bool commonAnims = false;
KeyValues *pCAP = pWFM->FindKey("Animation_Properties");
if (pCAP && !oldAnimProp)
{
ViewModelShake = pAP->GetBool("Shake", true);
if (!trueFirstPerson)
{
commonAnims = true;
animData[0] = SetumAnimations(pCAP);
animData[3] = animData[2] = animData[1] = animData[0];
}
else
{
KeyValues *pCATP = pCAP->FindKey("ThirdPerson");
if (pCATP)
{
commonAnims = true;
animData[0] = SetumAnimations(pCATP);
animData[3] = animData[2] = animData[1] = animData[0];
}
}
}
if (AllocPooledString(pWFM->GetString("weapon_modes")) != AllocPooledString("") && AllocPooledString(pWFM->GetString("weapon_modes")) != AllocPooledString("None"))
{
//WeaponModes.RemoveAll();
//UTIL_StringToIntUTILVector(&WeaponModes, pWFM->GetString("weapon_modes"));
/*CUtlVector<char*, CUtlMemory<char*> > arr;
Q_SplitString(pWFM->GetString("weapon_modes"), " ", arr);
for (int i = 0; i < arr.Count(); i++)
{
int k = atoi(arr.Element(i));
WeaponModes.AddToTail(k);
}*/
StringToIntArray(&WeaponModes, pWFM->GetString("weapon_modes"), " ");
}
weaponType = FindType(pWFM->GetString("weapon_type", "None"));
WeaponDefaultMode = pWFM->GetInt("WeaponDefaultMode", 0);
NumShots = pWFM->GetInt("NumShots", 0);
SwingHitTime = pWFM->GetFloat("SwingHitTime", 0.7f);
SwingHitTime = Clamp(SwingHitTime, 0.f, 1.f);
SwingDamage = pWFM->GetFloat("SwingDamage", 20.f);
bool canFireUW = (weaponType == TYPE_MELEE || weaponType == TYPE_GRENADE || weaponType == TYPE_PISTOL || weaponType == TYPE_DUAL_PISTOLS) ? true : false;
m_bFiresUnderwater = pWFM->GetBool("FiresUnderWater", canFireUW);
m_bAltFiresUnderwater = pWFM->GetBool("AltFiresUnderWater", canFireUW);
KeyValues *ammo = pWFM->FindKey("ammo");
if (ammo)
{
ammoRegenDelay = ammo->GetFloat("regeneration_delay", 0.5f);
ammoRemoveDelay = ammo->GetFloat("remove_delay", 0.5f);
ammoEmptyDelay = ammo->GetFloat("empty_delay", 1.0f);
if (ammoRegenDelay && ammoRemoveDelay)
allowAmmoRegen = true;
}
else
{
ammoRegenDelay = 0.5f;
ammoRemoveDelay = 0.5f;
ammoEmptyDelay = 1.0f;
allowAmmoRegen = false;
}
KeyValues *pS = pWFM->FindKey("Silencer");
if (pS)
{
WeaponUsingSilencer = pS->GetBool("weapon_using_silencer", false);
Q_strncpy(silencerBodyGroup, pS->GetString("silencer_bodygroup", "silencer"), MAX_WEAPON_STRING);
silencerBGEnableValue = pS->GetInt("silencer_bodygroup_enable_value", 1);
silencerBGDisableValue = pS->GetInt("silencer_bodygroup_disable_value", 0);
}
else
{
WeaponUsingSilencer = false;
Q_strncpy(silencerBodyGroup, "silencer", MAX_WEAPON_STRING);
silencerBGEnableValue = 1;
silencerBGDisableValue = 0;
}
KeyValues *pP0 = pWFM->FindKey("weapon_mode:1");
if (pP0)
{
KeyValues *animProp = pP0->FindKey("Animation_Properties");
if (animProp && !commonAnims && !oldAnimProp)
{
if (!trueFirstPerson)
{
animData[1] = SetumAnimations(animProp);
animData[0] = animData[1];
}
else
{
KeyValues *pCATP = animProp->FindKey("ThirdPerson");
if (pCATP)
{
animData[1] = SetumAnimations(pCATP);
animData[0] = animData[1];
}
}
}
mode_fire_rate_single = pP0->GetFloat("mode_fire_rate_single", 0);
mode_accuracy_maximum_penalty_time = pP0->GetFloat("mode_accuracy_maximum_penalty_time", 0);
mode_fastest_refire_time = pP0->GetFloat("mode_fastest_refire_time", 0);
mode_accuracy_shot_penalty_time = pP0->GetFloat("mode_accuracy_shot_penalty_time", 0);
mode_fastest_dry_refire_time = pP0->GetFloat("mode_fastest_dry_refire_time", 0);
Q_strncpy(WeaponSwitchingMode1Sound, pP0->GetString("weapon_switching_sound", "None"), MAX_WEAPON_STRING);
CBaseEntity::PrecacheScriptSound(pP0->GetString("weapon_switching_sound"));
}
else
{
if (!commonAnims && !oldAnimProp)
animData[1] = animData[0];
/*if (!commonAnimsTP && !oldAnimPropTP)
animDataTP[1] = animDataTP[0];*/
mode_fire_rate_single = 0.f;
mode_accuracy_maximum_penalty_time = 0.f;
mode_fastest_refire_time = 0.f;
mode_accuracy_shot_penalty_time = 0.f;
mode_fastest_dry_refire_time = 0.f;
Q_strncpy(WeaponSwitchingMode1Sound, "None", MAX_WEAPON_STRING);
}
KeyValues *pP2 = pWFM->FindKey("weapon_mode:2");//AUTO
if (pP2)
{
KeyValues *animProp = pP2->FindKey("Animation_Properties");
if (animProp && !commonAnims && !oldAnimProp)
{
if (!trueFirstPerson)
{
animData[2] = SetumAnimations(animProp);
}
else
{
KeyValues *animPropTP = animProp->FindKey("ThirdPerson");
if (animPropTP)
{
animData[2] = SetumAnimations(animPropTP);
}
}
}
if (weaponType == TYPE_BEAM)
mode_fire_rate_automatic_startup_delay = pP2->GetFloat("startup_delay", 0.f);
else
mode_fire_rate_automatic_startup_delay = 0.0f;
mode_fire_rate_automatic = pP2->GetFloat("mode_fire_rate_automatic", 0);
AllowShotgunSecondaryAttack = pP2->GetBool("CanDoubleShoot", false);
Q_strncpy(WeaponSwitchingMode2Sound, pP2->GetString("weapon_switching_sound", "None"), MAX_WEAPON_STRING);
CBaseEntity::PrecacheScriptSound(pP2->GetString("weapon_switching_sound"));
}
else
{
if (!commonAnims && !oldAnimProp)
animData[2] = animData[0];
/*if (!commonAnimsTP && !oldAnimPropTP)
animDataTP[2] = animDataTP[0];*/
AllowShotgunSecondaryAttack = false;
mode_fire_rate_automatic_startup_delay = 0.0f;
mode_fire_rate_automatic = 0.f;
Q_strncpy(WeaponSwitchingMode2Sound, "None", MAX_WEAPON_STRING);
}
KeyValues *pP1 = pWFM->FindKey("weapon_mode:3");//BURST
if (pP1)
{
KeyValues *animProp = pP1->FindKey("Animation_Properties");
if (animProp && !commonAnims && !oldAnimProp)
{
if (!trueFirstPerson)
{
animData[3] = SetumAnimations(animProp);
}
else
{
KeyValues *animPropTP = animProp->FindKey("ThirdPerson");
if (animPropTP)
{
animData[3] = SetumAnimations(animPropTP);
}
}
}
mode_fire_rate_burst = pP1->GetFloat("mode_fire_rate_burst", 0);
mode_fire_rate_burst_refire_time = pP1->GetFloat("mode_fire_rate_burst_refire_time", 0);
mode_fire_burst_count = pP1->GetInt("mode_fire_burst_count", 3);
if (mode_fire_burst_count > 6)
{
mode_fire_burst_count = 6;
DevMsg("Warning: current weapon burst count defined larger than 5");
}
Q_strncpy(WeaponSwitchingMode3Sound, pP1->GetString("weapon_switching_sound", "None"), MAX_WEAPON_STRING);
CBaseEntity::PrecacheScriptSound(pP1->GetString("weapon_switching_sound"));
}
else
{
if (!commonAnims && !oldAnimProp)
animData[3] = animData[0];
/*if (!commonAnimsTP && !oldAnimPropTP)
animDataTP[3] = animDataTP[0];*/
mode_fire_rate_burst = 0.f;
mode_fire_rate_burst_refire_time = 0.f;
mode_fire_burst_count = 3;
Q_strncpy(WeaponSwitchingMode3Sound, "None", MAX_WEAPON_STRING);
}
KeyValues *pNpc = pWFM->FindKey("NPC");
if (pNpc)
{
npcMinBurst = pNpc->GetInt("MinBurst", 3);
npcMaxBurst = pNpc->GetInt("MaxBurst", 5);
}
else
{
npcMinBurst = 3;
npcMaxBurst = 5;
}
}
else
{
if (!pAP && !oldAnimProp)
{
animData[0] = SetumAnimations();
animData[3] = animData[2] = animData[1] = animData[0];
}
/*if (!pAP && !oldAnimPropTP)
{
animDataTP[0] = SetumAnimations();
animDataTP[3] = animDataTP[2] = animDataTP[1] = animDataTP[0];
}*/
ammoRegenDelay = 0.5f;
ammoRemoveDelay = 0.5f;
allowAmmoRegen = false;
WeaponDefaultMode = 0;
SwingHitTime = 0;//0.5f
SwingDamage = 20.f;
NumShots = 1;
weaponType = FindType(pKeyValuesData->GetString("weapon_type", "None"));
m_bFiresUnderwater = false;
m_bAltFiresUnderwater = false;
Q_strncpy(WeaponSwitchingMode1Sound, "None", MAX_WEAPON_STRING);
Q_strncpy(WeaponSwitchingMode2Sound, "None", MAX_WEAPON_STRING);
Q_strncpy(WeaponSwitchingMode3Sound, "None", MAX_WEAPON_STRING);
mode_accuracy_maximum_penalty_time = 0.f;
mode_fastest_refire_time = 0.f;
mode_accuracy_shot_penalty_time = 0.f;
mode_fastest_dry_refire_time = 0.f;
mode_fire_rate_burst = 0.f;
mode_fire_rate_burst_refire_time = 0.f;
mode_fire_burst_count = 3;
mode_fire_rate_automatic_startup_delay = 0.0f;
mode_fire_rate_automatic = 0.f;
mode_fire_rate_single = 0.f;
npcMinBurst = 3;
npcMaxBurst = 5;
}
fireRate = pKeyValuesData->GetFloat("GetFireRate", 0.08f);
meleeRange = pKeyValuesData->GetFloat("GetRange", 80);
meleeHull = pKeyValuesData->GetFloat("GetHull", 9);
}
AnimationData FileWeaponInfo_t::SetumAnimations(KeyValues *kv)
{
AnimationData animData;
if (kv)
{
animData.UseSpecialAnimations = kv->GetBool("UseSpecialAnimations", false);
animData.UseIronSightAnimations = kv->GetBool("UseIronSightAnimations", false);
animData.UseHalfFullMagAnimations = kv->GetBool("UseHalfFullMagAnimations", false);
animData.ReloadWaitWhileAnimation = kv->GetBool("ReloadWaitWhileAnimation", false);
animData.UsePistolRefireChecker = kv->GetBool("UsePistolRefireChecker", false);
animData.FirstDrawAnimation = FindAct(kv->GetString("FirstDrawAnimation", "None"));
animData.DryFireAnimation = FindAct(kv->GetString("DryFireAnimation", "None"));
//animData.DrawTwoRounds = FindAct(kv->GetString("DrawTwoRounds", "None"));
animData.DrawAnimation = FindAct(kv->GetString("DrawAnimation", "None"));
animData.DrawSilencedAnimation = FindAct(kv->GetString("DrawSilencedAnimation", "None"));
animData.DrawEmptyAnimation = FindAct(kv->GetString("DrawEmptyAnimation", "None"));
animData.DrawEmptySilencedAnimation = FindAct(kv->GetString("DrawEmptySilencedAnimation", "None"));
animData.ZeroIdleAnim = kv->GetBool("ZeroIdleAnim", false);
animData.CustomIdleAnimOnIronSightOrScope = FindAct(kv->GetString("CustomIdleAnimOnIronSightOrScope", "None"));
animData.ThrowPullUp = FindAct(kv->GetString("ThrowPullUp", "None"));
animData.ThrowPullDown = FindAct(kv->GetString("ThrowPullDown", "None"));
animData.ThrowPrimary = FindAct(kv->GetString("ThrowPrimary", "None"));
animData.ThrowSecondary = FindAct(kv->GetString("ThrowSecondary", "None"));
animData.IronsightIdle = FindAct(kv->GetString("IronsightIdle", "None"));
//animData.IdleTwoRounds = FindAct(kv->GetString("IdleTwoRounds", "None"));
animData.IdleAlmostEmpty = FindAct(kv->GetString("IdleAlmostEmpty", "None"));
animData.IdleFullEmpty = FindAct(kv->GetString("IdleFullEmpty", "None"));
animData.IdleAnimation = FindAct(kv->GetString("IdleAnimation", "None"));
//animData.WallTwoRounds = FindAct(kv->GetString("WallTwoRounds", "None"));
animData.WallAlmostEmpty = FindAct(kv->GetString("WallAlmostEmpty", "None"));
animData.WallFullEmpty = FindAct(kv->GetString("WallFullEmpty", "None"));
//animData.RunTwoRounds = FindAct(kv->GetString("RunTwoRounds", "None"));
animData.RunAlmostEmpty = FindAct(kv->GetString("RunAlmostEmpty", "None"));
animData.RunFullEmpty = FindAct(kv->GetString("RunFullEmpty", "None"));
//animData.WalkTwoRounds = FindAct(kv->GetString("WalkTwoRounds", "None"));
animData.WalkAlmostEmpty = FindAct(kv->GetString("WalkAlmostEmpty", "None"));
animData.WalkFullEmpty = FindAct(kv->GetString("WalkFullEmpty", "None"));
//animData.IronTwoRounds = FindAct(kv->GetString("IronTwoRounds", "None"));
animData.IronAlmostEmpty = FindAct(kv->GetString("IronAlmostEmpty", "None"));
animData.IronFullEmpty = FindAct(kv->GetString("IronFullEmpty", "None"));
//animData.LoweredTwoRounds = FindAct(kv->GetString("LoweredTwoRounds", "None"));
animData.LoweredAlmostEmpty = FindAct(kv->GetString("LoweredAlmostEmpty", "None"));
animData.LoweredFullEmpty = FindAct(kv->GetString("LoweredFullEmpty", "None"));
animData.LoweredAnimation = FindAct(kv->GetString("LoweredAnimation", "None"));
//animData.HolsterTwoRounds = FindAct(kv->GetString("HolsterTwoRounds", "None"));
animData.HolsterAlmostEmpty = FindAct(kv->GetString("HolsterAlmostEmpty", "None"));
animData.HolsterFullEmpty = FindAct(kv->GetString("HolsterFullEmpty", "None"));
animData.FirePrimaryTwoRounds = FindAct(kv->GetString("FirePrimaryTwoRounds", "None"));
animData.FirePrimaryAlmostEmpty = FindAct(kv->GetString("FirePrimaryAlmostEmpty", "None"));
animData.FirePrimaryCompleteEmpty = FindAct(kv->GetString("FirePrimaryCompleteEmpty", "None"));
animData.FireIronsightedTwoRounds = FindAct(kv->GetString("FireIronsightedTwoRounds", "None"));
animData.FireIronsightedAlmostEmpty = FindAct(kv->GetString("FireIronsightedAlmostEmpty", "None"));
animData.FireIronsightedCompleteEmpty = FindAct(kv->GetString("FireIronsightedCompleteEmpty", "None"));
animData.FireScopedTwoRounds = FindAct(kv->GetString("FireScopedTwoRounds", "None"));
animData.FireScopedAlmostEmpty = FindAct(kv->GetString("FireScopedAlmostEmpty", "None"));
animData.FireScopedCompleteEmpty = FindAct(kv->GetString("FireScopedCompleteEmpty", "None"));
animData.FirePrimary1 = FindAct(kv->GetString("FirePrimary1", "None"));
animData.FirePrimary2 = FindAct(kv->GetString("FirePrimary2", "None"));
animData.FirePrimary3 = FindAct(kv->GetString("FirePrimary3", "None"));
animData.FirePrimary4 = FindAct(kv->GetString("FirePrimary4", "None"));
animData.FirePrimarySilenced1 = FindAct(kv->GetString("FirePrimarySilenced1", "None"));
animData.FirePrimarySilenced2 = FindAct(kv->GetString("FirePrimarySilenced2", "None"));
animData.FirePrimarySilenced3 = FindAct(kv->GetString("FirePrimarySilenced3", "None"));
animData.FirePrimarySilenced4 = FindAct(kv->GetString("FirePrimarySilenced4", "None"));
animData.FirePrimarySpecial = FindAct(kv->GetString("FirePrimarySpecial", "None"));
animData.FireIronsighted1 = FindAct(kv->GetString("FireIronsighted1", "None"));
animData.FireIronsighted2 = FindAct(kv->GetString("FireIronsighted2", "None"));
animData.FireIronsighted3 = FindAct(kv->GetString("FireIronsighted3", "None"));
animData.FireIronsighted4 = FindAct(kv->GetString("FireIronsighted4", "None"));
animData.FireIronsightedSilenced1 = FindAct(kv->GetString("FireIronsightedSilenced1", "None"));
animData.FireIronsightedSilenced2 = FindAct(kv->GetString("FireIronsightedSilenced2", "None"));
animData.FireIronsightedSilenced3 = FindAct(kv->GetString("FireIronsightedSilenced3", "None"));
animData.FireIronsightedSilenced4 = FindAct(kv->GetString("FireIronsightedSilenced4", "None"));
animData.FireScoped1 = FindAct(kv->GetString("FireScoped1", "None"));
animData.FireScoped2 = FindAct(kv->GetString("FireScoped2", "None"));
animData.FireScoped3 = FindAct(kv->GetString("FireScoped3", "None"));
animData.FireScoped4 = FindAct(kv->GetString("FireScoped4", "None"));
animData.FireScopedSilenced1 = FindAct(kv->GetString("FireScopedSilenced1", "None"));
animData.FireScopedSilenced2 = FindAct(kv->GetString("FireScopedSilenced2", "None"));
animData.FireScopedSilenced3 = FindAct(kv->GetString("FireScopedSilenced3", "None"));
animData.FireScopedSilenced4 = FindAct(kv->GetString("FireScopedSilenced4", "None"));
animData.FireSecondary1 = FindAct(kv->GetString("FireSecondary1", "None"));
animData.FireSecondary2 = FindAct(kv->GetString("FireSecondary2", "None"));
animData.FireSecondary3 = FindAct(kv->GetString("FireSecondary3", "None"));
animData.FireSecondary4 = FindAct(kv->GetString("FireSecondary4", "None"));
animData.FireSecondaryLast = FindAct(kv->GetString("FireSecondaryLast", "None"));
animData.FireSecondaryCharging = FindAct(kv->GetString("FireSecondaryCharging", "None"));
animData.FireSecondaryIronsighted1 = FindAct(kv->GetString("FireSecondaryIronsighted1", "None"));
animData.FireSecondaryIronsighted2 = FindAct(kv->GetString("FireSecondaryIronsighted2", "None"));
animData.FireSecondaryIronsighted3 = FindAct(kv->GetString("FireSecondaryIronsighted3", "None"));
animData.FireSecondaryIronsighted4 = FindAct(kv->GetString("FireSecondaryIronsighted4", "None"));
animData.InspectAnimation = FindAct(kv->GetString("InspectAnimation", "None"));
animData.InspectSilencedAnimation = FindAct(kv->GetString("InspectSilencedAnimation", "None"));
animData.OverhaulAnimation = FindAct(kv->GetString("OverhaulAnimation", "None"));
animData.ShotgunFireAnimation = FindAct(kv->GetString("ShotgunFireAnimation", "None"));
animData.ShotgunPumpAnimation = FindAct(kv->GetString("ShotgunPumpAnimation", "None"));
animData.ShotgunDoublePumpAnimation = FindAct(kv->GetString("ShotgunDoublePumpAnimation", "None"));
animData.ShotgunStartReloadAnimation = FindAct(kv->GetString("ShotgunStartReloadAnimation", "None"));
animData.ShotgunFillClipAnimation = FindAct(kv->GetString("ShotgunFillClipAnimation", "None"));
animData.ShotgunStopReloadAnimation = FindAct(kv->GetString("ShotgunStopReloadAnimation", "None"));
animData.RunAnimation = FindAct(kv->GetString("RunAnimation", "None"));
animData.WalkAnimation = FindAct(kv->GetString("WalkAnimation", "None"));
animData.WallAnimation = FindAct(kv->GetString("WallAnimation", "None"));
//animData.ReloadTwoRounds = FindAct(kv->GetString("ReloadTwoRounds", "None"));
animData.ReloadMidEmptyAnimation = FindAct(kv->GetString("ReloadMidEmptyAnimation", "None"));
animData.ReloadFullEmptyAnimation = FindAct(kv->GetString("ReloadFullEmptyAnimation", "None"));
//animData.BMSEmptyReloadAnimation = FindAct(kv->GetString("BMSEmptyReloadAnimation", "None"));
animData.ReloadDefaultAnimation = FindAct(kv->GetString("ReloadDefaultAnimation", "None"));
animData.ReloadSilencedAnimation = FindAct(kv->GetString("ReloadSilencedAnimation", "None"));
animData.HolsterAnimation = FindAct(kv->GetString("HolsterAnimation", "None"));
animData.HolsterMode1Animation = FindAct(kv->GetString("HolsterMode1Animation", "None"));
animData.HolsterMode2Animation = FindAct(kv->GetString("HolsterMode2Animation", "None"));
animData.HolsterMode3Animation = FindAct(kv->GetString("HolsterMode3Animation", "None"));
animData.PumpAnimation = FindAct(kv->GetString("PumpAnimation", "None"));
animData.MeleeIdle = FindAct(kv->GetString("MeleeIdle", "None"));
animData.MeleeAttack1 = FindAct(kv->GetString("MeleeAttack1", "None"));
animData.MeleeAttack2 = FindAct(kv->GetString("MeleeAttack2", "None"));
animData.MeleeMiss1 = FindAct(kv->GetString("MeleeMiss1", "None"));
animData.MeleeMiss2 = FindAct(kv->GetString("MeleeMiss2", "None"));
animData.MeleeSwing1 = FindAct(kv->GetString("MeleeSwing1", "None"));
animData.MeleeSwing2 = FindAct(kv->GetString("MeleeSwing2", "None"));
animData.WeaponSwitchAnim = FindAct(kv->GetString("weapon_switch_animation", "None"));
animData.SwingAnim = FindAct(kv->GetString("SwingAnimation", "None"));
}
else
{
/*animData.DrawTwoRounds
animData.IdleTwoRounds
animData.WallTwoRounds
animData.RunTwoRounds
animData.WalkTwoRounds*/
animData.DryFireAnimation = (Activity)0;
animData.DrawAnimation = (Activity)0;
animData.DrawSilencedAnimation = (Activity)0;
animData.DrawEmptyAnimation = (Activity)0;
animData.DrawEmptySilencedAnimation = (Activity)0;
animData.ThrowPullUp = (Activity)0;
animData.ThrowPullDown = (Activity)0;
animData.ThrowPrimary = (Activity)0;
animData.ThrowSecondary = (Activity)0;
animData.UseSpecialAnimations = false;
animData.UseIronSightAnimations = false;
animData.UseHalfFullMagAnimations = false;
animData.UsePistolRefireChecker = false;
animData.FirstDrawAnimation = (Activity)0;
animData.ZeroIdleAnim = false;
animData.CustomIdleAnimOnIronSightOrScope = (Activity)0;
animData.ReloadWaitWhileAnimation = 0;
animData.IronsightIdle = (Activity)0;
animData.IdleAlmostEmpty = (Activity)0;
animData.IdleFullEmpty = (Activity)0;
animData.IdleAnimation = (Activity)0;
animData.WallAlmostEmpty = (Activity)0;
animData.WallFullEmpty = (Activity)0;
animData.RunAlmostEmpty = (Activity)0;
animData.RunFullEmpty = (Activity)0;
animData.WalkAlmostEmpty = (Activity)0;
animData.WalkFullEmpty = (Activity)0;
animData.IronAlmostEmpty = (Activity)0;
animData.IronFullEmpty = (Activity)0;
animData.LoweredAlmostEmpty = (Activity)0;
animData.LoweredFullEmpty = (Activity)0;
animData.LoweredAnimation = (Activity)0;
animData.HolsterAlmostEmpty = (Activity)0;
animData.HolsterFullEmpty = (Activity)0;
animData.FirePrimaryTwoRounds = (Activity)0;
animData.FirePrimaryAlmostEmpty = (Activity)0;
animData.FirePrimaryCompleteEmpty = (Activity)0;
animData.FireIronsightedTwoRounds = (Activity)0;
animData.FireIronsightedAlmostEmpty = (Activity)0;
animData.FireIronsightedCompleteEmpty = (Activity)0;
animData.FireScopedTwoRounds = (Activity)0;
animData.FireScopedAlmostEmpty = (Activity)0;
animData.FireScopedCompleteEmpty = (Activity)0;
animData.FirePrimary1 = (Activity)0;
animData.FirePrimary2 = (Activity)0;
animData.FirePrimary3 = (Activity)0;
animData.FirePrimary4 = (Activity)0;
animData.FirePrimarySilenced1 = (Activity)0;
animData.FirePrimarySilenced2 = (Activity)0;
animData.FirePrimarySilenced3 = (Activity)0;
animData.FirePrimarySilenced4 = (Activity)0;
animData.FireIronsighted1 = (Activity)0;
animData.FireIronsighted2 = (Activity)0;
animData.FireIronsighted3 = (Activity)0;
animData.FireIronsighted4 = (Activity)0;
animData.FireIronsightedSilenced1 = (Activity)0;
animData.FireIronsightedSilenced2 = (Activity)0;
animData.FireIronsightedSilenced3 = (Activity)0;
animData.FireIronsightedSilenced4 = (Activity)0;
animData.FireScoped1 = (Activity)0;
animData.FireScoped2 = (Activity)0;
animData.FireScoped3 = (Activity)0;
animData.FireScoped4 = (Activity)0;
animData.FireScopedSilenced1 = (Activity)0;
animData.FireScopedSilenced2 = (Activity)0;
animData.FireScopedSilenced3 = (Activity)0;
animData.FireScopedSilenced4 = (Activity)0;
animData.FirePrimarySpecial = (Activity)0;
animData.FireSecondary1 = (Activity)0;
animData.FireSecondary2 = (Activity)0;
animData.FireSecondary3 = (Activity)0;
animData.FireSecondary4 = (Activity)0;
animData.FireSecondaryLast = (Activity)0;
animData.FireSecondaryCharging = (Activity)0;
animData.FireSecondaryIronsighted1 = (Activity)0;
animData.FireSecondaryIronsighted2 = (Activity)0;
animData.FireSecondaryIronsighted3 = (Activity)0;
animData.FireSecondaryIronsighted4 = (Activity)0;
animData.InspectAnimation = (Activity)0;
animData.InspectSilencedAnimation = (Activity)0;
animData.OverhaulAnimation = (Activity)0;
animData.ShotgunFireAnimation = (Activity)0;
animData.ShotgunPumpAnimation = (Activity)0;
animData.ShotgunDoublePumpAnimation = (Activity)0;
animData.ShotgunStartReloadAnimation = (Activity)0;
animData.ShotgunFillClipAnimation = (Activity)0;
animData.ShotgunStopReloadAnimation = (Activity)0;
animData.RunAnimation = (Activity)0;
animData.WalkAnimation = (Activity)0;
animData.WallAnimation = (Activity)0;
animData.ReloadMidEmptyAnimation = (Activity)0;
animData.ReloadFullEmptyAnimation = (Activity)0;
//animData.BMSEmptyReloadAnimation = (Activity)0;
animData.ReloadDefaultAnimation = (Activity)0;
animData.ReloadSilencedAnimation = (Activity)0;
animData.HolsterAnimation = (Activity)0;
animData.HolsterMode1Animation = (Activity)0;
animData.HolsterMode2Animation = (Activity)0;
animData.HolsterMode3Animation = (Activity)0;
animData.PumpAnimation = (Activity)0;
animData.MeleeIdle = (Activity)0;
animData.MeleeAttack1 = (Activity)0;
animData.MeleeAttack2 = (Activity)0;
animData.MeleeMiss1 = (Activity)0;
animData.MeleeMiss2 = (Activity)0;
animData.MeleeSwing1 = (Activity)0;
animData.MeleeSwing2 = (Activity)0;
animData.WeaponSwitchAnim = (Activity)0;
animData.SwingAnim = (Activity)0;
}
return animData;
}
void FileWeaponInfo_t::Parse( KeyValues *pKeyValuesData, const char *szWeaponName )
{
if (bParsedScript)
{
ParseCustomData(pKeyValuesData, szWeaponName);
return;
}
ParseCustomData(pKeyValuesData, szWeaponName);
viewbob_model_scale = pKeyValuesData->GetFloat("viewbob_model_scale", 0);
MeleeStunbattonParticleEffects = (Activity)pKeyValuesData->GetInt("MeleeStunbattonParticleEffects", 0);
AllowIronSight = pKeyValuesData->GetInt("AllowIronSight", 1);
AllowFreeAim = pKeyValuesData->GetInt("AllowFreeAim", 0);
AllowShellEjectSmokeFlash = pKeyValuesData->GetInt("AllowShellEjectSmokeFlash", AllowShellEjectSmokeFlash);
PlayerDisableSprint = pKeyValuesData->GetBool("PlayerDisableSprint", 0);
PlayerSpeedWalkKoefficient = pKeyValuesData->GetFloat("PlayerSpeedWalkKoefficient", 0);
PlayerSpeedRunKoefficient = pKeyValuesData->GetFloat("PlayerSpeedRunKoefficient", 0);
PlayerSpeedCrouchKoefficient = pKeyValuesData->GetFloat("PlayerSpeedCrouchKoefficient", 0);
// Okay, we tried at least once to look this up...
bParsedScript = true;
// Classname
Q_strncpy( szClassName, szWeaponName, MAX_WEAPON_STRING );
// Printable name
Q_strncpy( szPrintName, pKeyValuesData->GetString( "printname", WEAPON_PRINTNAME_MISSING ), MAX_WEAPON_STRING );
// View model & world model
Q_strncpy( szViewModel, pKeyValuesData->GetString( "viewmodel" ), MAX_WEAPON_STRING );
//szAdditionalViewModel = AllocPooledString(pKeyValuesData->GetString("additional_viewmodel", ""));
Q_strncpy(szAdditionalViewModel, pKeyValuesData->GetString("additional_viewmodel"), MAX_WEAPON_STRING);
char emp1[2] = "";
if (szAdditionalViewModel != NULL && szAdditionalViewModel != emp1)
CBaseEntity::PrecacheModel(pKeyValuesData->GetString("additional_viewmodel", ""));
Q_strncpy( szWorldModel, pKeyValuesData->GetString( "playermodel" ), MAX_WEAPON_STRING );
Q_strncpy(szAnimationPrefix, pKeyValuesData->GetString("anim_prefix"), MAX_WEAPON_STRING);
if (cvar->FindVar("oc_player_allow_fast_gren_throw")->GetInt() && weaponType == TYPE_GRENADE)
{
iSlot = -1;
iPosition = -1;
}
else
{
iSlot = pKeyValuesData->GetInt("bucket", 0);
iPosition = pKeyValuesData->GetInt("bucket_position", 0);
}
m_bReservedSlot = pKeyValuesData->GetBool("bucket_reserved", 0);
// BriJee OVR: Silent w_ model.
Q_strncpy(szSilentModel, pKeyValuesData->GetString("playermodel_silent"), sizeof(szSilentModel));
if (szSilentModel != NULL && szSilentModel != emp1)
CBaseEntity::PrecacheModel(pKeyValuesData->GetString("playermodel_silent", ""));
//Q_strncpy(iMagName, pKeyValuesData->GetString("MagName"), sizeof(iMagName));
// Use the console (X360) buckets if hud_fastswitch is set to 2.
#ifdef CLIENT_DLL
if ( hud_fastswitch.GetInt() == 2 )
#else
if ( IsX360() )
#endif
{
iSlot = pKeyValuesData->GetInt( "bucket_360", iSlot );
iPosition = pKeyValuesData->GetInt( "bucket_position_360", iPosition );
}
iMaxClip1 = pKeyValuesData->GetInt( "clip_size", WEAPON_NOCLIP ); // Max primary clips gun can hold (assume they don't use clips by default)
iMaxClip2 = pKeyValuesData->GetInt( "clip2_size", WEAPON_NOCLIP ); // Max secondary clips gun can hold (assume they don't use clips by default)
iDefaultClip1 = pKeyValuesData->GetInt( "default_clip", iMaxClip1 ); // amount of primary ammo placed in the primary clip when it's picked up
iDefaultClip2 = pKeyValuesData->GetInt( "default_clip2", iMaxClip2 ); // amount of secondary ammo placed in the secondary clip when it's picked up
iWeight = pKeyValuesData->GetInt( "weight", 0 );
iRumbleEffect = pKeyValuesData->GetInt( "rumble", -1 );
// LAME old way to specify item flags.
// Weapon scripts should use the flag names.
iFlags = pKeyValuesData->GetInt( "item_flags", ITEM_FLAG_LIMITINWORLD );
for ( int i=0; i < ARRAYSIZE( g_ItemFlags ); i++ )
{
int iVal = pKeyValuesData->GetInt( g_ItemFlags[i].m_pFlagName, -1 );
if ( iVal == 0 )
{
iFlags &= ~g_ItemFlags[i].m_iFlagValue;
}
else if ( iVal == 1 )
{
iFlags |= g_ItemFlags[i].m_iFlagValue;
}
}
bShowUsageHint = ( pKeyValuesData->GetInt( "showusagehint", 0 ) != 0 ) ? true : false;
bAutoSwitchTo = ( pKeyValuesData->GetInt( "autoswitchto", 1 ) != 0 ) ? true : false;
bAutoSwitchFrom = ( pKeyValuesData->GetInt( "autoswitchfrom", 1 ) != 0 ) ? true : false;
m_bBuiltRightHanded = ( pKeyValuesData->GetInt( "BuiltRightHanded", 1 ) != 0 ) ? true : false;
m_bAllowFlipping = ( pKeyValuesData->GetInt( "AllowFlipping", 1 ) != 0 ) ? true : false;
m_bMeleeWeapon = ( pKeyValuesData->GetInt( "MeleeWeapon", 0 ) != 0 ) ? true : false;
#if defined(_DEBUG) && defined(HL2_CLIENT_DLL)
// make sure two weapons aren't in the same slot & position
if ( iSlot >= MAX_WEAPON_SLOTS ||
iPosition >= MAX_WEAPON_POSITIONS )
{
Warning( "Invalid weapon slot or position [slot %d/%d max], pos[%d/%d max]\n",
iSlot, MAX_WEAPON_SLOTS - 1, iPosition, MAX_WEAPON_POSITIONS - 1 );
}
else
{
if (g_bUsedWeaponSlots[iSlot][iPosition])
{
Warning( "Duplicately assigned weapon slots in selection hud: %s (%d, %d)\n", szPrintName, iSlot, iPosition );
}
g_bUsedWeaponSlots[iSlot][iPosition] = true;
}
#endif
// Primary ammo used
const char *pAmmo = pKeyValuesData->GetString( "primary_ammo", "None" );
if ( strcmp("None", pAmmo) == 0 )
Q_strncpy( szAmmo1, "", sizeof( szAmmo1 ) );
else
Q_strncpy( szAmmo1, pAmmo, sizeof( szAmmo1 ) );
iAmmoType = GetAmmoDef()->Index( szAmmo1 );
// Secondary ammo used
pAmmo = pKeyValuesData->GetString( "secondary_ammo", "None" );
if ( strcmp("None", pAmmo) == 0)
Q_strncpy( szAmmo2, "", sizeof( szAmmo2 ) );
else
Q_strncpy( szAmmo2, pAmmo, sizeof( szAmmo2 ) );
iAmmo2Type = GetAmmoDef()->Index( szAmmo2 );
// Now read the weapon sounds
memset( aShootSounds, 0, sizeof( aShootSounds ) );
KeyValues *pSoundData = pKeyValuesData->FindKey( "SoundData" );
if (pSoundData)
{
KeyValues *pLoop = pSoundData->FindKey("LoopSound");
if (pLoop)
{
Q_strncpy(ShootLoopingSound, pLoop->GetString("LoopShooting", ""), MAX_WEAPON_STRING);
if (Q_strlen(ShootLoopingSound) <= 1)
{
allowLoopSound = false;
}
else
{
allowLoopSound = true;
CBaseEntity::PrecacheScriptSound(ShootLoopingSound);
LoopSoundBurstPitchMultiplier = pLoop->GetFloat("LoopSoundBurstPitchMultiplier", 1.0f);
LoopSoundSlowMoPitchDivider = pLoop->GetFloat("LoopSoundSlowMoPitchDivider", 0.125);
Q_strncpy(EndLoopingSound, pLoop->GetString("EndLoopShooting", ""), MAX_WEAPON_STRING);
if (Q_strlen(EndLoopingSound) > 0)
{
CBaseEntity::PrecacheScriptSound(EndLoopingSound);
}
}
Q_strncpy(ShootLoopingSilencerSound, pLoop->GetString("LoopSilencerShooting", ""), MAX_WEAPON_STRING);
if (Q_strlen(ShootLoopingSilencerSound) <= 1)
{
allowLoopSilencerSound = false;
}
else
{
allowLoopSilencerSound = true;
CBaseEntity::PrecacheScriptSound(ShootLoopingSilencerSound);
LoopSoundBurstPitchMultiplier = pLoop->GetFloat("LoopSoundBurstPitchMultiplier", 1.0f);
LoopSilencerSoundSlowMoPitchDivider = pLoop->GetFloat("LoopSilencerSoundSlowMoPitchDivider", 0.125);
Q_strncpy(EndLoopingSilencerSound, pLoop->GetString("EndLoopSilencerShooting", ""), MAX_WEAPON_STRING);
if (Q_strlen(EndLoopingSilencerSound) > 0)
{
CBaseEntity::PrecacheScriptSound(EndLoopingSilencerSound);
}
}
}
else
{
Q_strncpy(ShootLoopingSound, "", MAX_WEAPON_STRING);
Q_strncpy(EndLoopingSound, "", MAX_WEAPON_STRING);
Q_strncpy(ShootLoopingSilencerSound, "", MAX_WEAPON_STRING);
Q_strncpy(EndLoopingSilencerSound, "", MAX_WEAPON_STRING);
allowLoopSound = false;
allowLoopSilencerSound = false;
LoopSoundBurstPitchMultiplier = 1.0f;
LoopSoundSlowMoPitchDivider = 0.125f;
LoopSilencerSoundSlowMoPitchDivider = 0.125f;
}
for (int i = EMPTY; i < NUM_SHOOT_SOUND_TYPES; i++)
{
const char *soundname = pSoundData->GetString(pWeaponSoundCategories[i]);
if (soundname && soundname[0])
{
Q_strncpy(aShootSounds[i], soundname, MAX_WEAPON_STRING);
}
}
}
else
{
Q_strncpy(ShootLoopingSound, "", MAX_WEAPON_STRING);
Q_strncpy(EndLoopingSound, "", MAX_WEAPON_STRING);
Q_strncpy(ShootLoopingSilencerSound, "", MAX_WEAPON_STRING);
Q_strncpy(EndLoopingSilencerSound, "", MAX_WEAPON_STRING);
allowLoopSound = false;
allowLoopSilencerSound = false;
LoopSoundBurstPitchMultiplier = 1.0f;
LoopSoundSlowMoPitchDivider = 0.125f;
LoopSilencerSoundSlowMoPitchDivider = 0.125f;
}
}