diff options
Diffstat (limited to 'game/shared/tf2/tf_shareddefs.h')
| -rw-r--r-- | game/shared/tf2/tf_shareddefs.h | 663 |
1 files changed, 663 insertions, 0 deletions
diff --git a/game/shared/tf2/tf_shareddefs.h b/game/shared/tf2/tf_shareddefs.h new file mode 100644 index 0000000..310ac15 --- /dev/null +++ b/game/shared/tf2/tf_shareddefs.h @@ -0,0 +1,663 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TF_SHAREDDEFS_H +#define TF_SHAREDDEFS_H + +#ifdef _WIN32 +#pragma once +#endif + +#define MAX_TF_TEAMS 4 + +extern ConVar inv_demo; +extern ConVar lod_effect_distance; + +#include "const.h" + +//-------------------------------------------------------------------------- +// Teams +#define TEAM_HUMANS 1 +#define TEAM_ALIENS 2 + +//-------------------------------------------------------------------------- +// TF player flags. +#define TF_PLAYER_HIDDEN (1<<0) +#define TF_PLAYER_DAMAGE_BOOST (1<<1) +#define TF_PLAYER_NUMFLAGS 2 +//-------------------------------------------------------------------------- +// Custom Kill types +#define DMG_KILL_BULLRUSH 1 + + +//-------------- +// TF2 SPECIFIC DAMAGE FLAGS +//-------------- +#define DMG_EMP (DMG_LASTGENERICFLAG<<1) // Hit by EMP +#define DMG_PROBE (DMG_LASTGENERICFLAG<<2) // Doing a shield-aware probe (heal guns, emp guns) + + +//-------------------------------------------------------------------------- +// Zone states +#define ZONE_FRIENDLY 1 +#define ZONE_ENEMY 2 +#define ZONE_CONTESTED 3 + +//-------------------------------------------------------------------------- +// Loot state +#define LOOT_NOT 0 +#define LOOT_CAPABLE 1 +#define LOOT_LOOTING 2 + +//-------------------------------------------------------------------------- +// Powerups +//-------------------------------------------------------------------------- +enum +{ + POWERUP_BOOST, // Medic, buff station + POWERUP_EMP, // Technician + POWERUP_RUSH, // Rally flag + POWERUP_POWER, // Object power + MAX_POWERUPS +}; + +#define MAX_CABLE_CONNECTIONS 4 + +//-------------------------------------------------------------------------- +// Acts +//-------------------------------------------------------------------------- +#define MIN_ACT_OVERLAY_TIME 10.0 + +// C/C_InfoAct spawnflags +#define SF_ACT_INTERMISSION 1 +#define SF_ACT_WAITINGFORGAMESTART 2 + +#define SF_ACT_BITS 2 + +//-------------------------------------------------------------------------- +// Order types +//-------------------------------------------------------------------------- +enum +{ + ORDER_NONE = 0, + ORDER_ATTACK, // Enemy held resource zone, attack it and capture it + ORDER_DEFEND, // Defend a resource zone we own + ORDER_CAPTURE, // Resource zone not held by either team, capture it + ORDER_KILL, // Kill a specific enemy player + ORDER_HEAL, // Heal a specific friendly player + ORDER_BUILD, // Order to build something. + // m_iStructure is one of the OBJ_ defines. + // If it's a sentry gun order, it's always OBJ_SENTRYGUN_PLASMA. + ORDER_REPAIR, // Repair a built item. + ORDER_MORTAR_ATTACK, // Build a mortar to shell an enemy object. + ORDER_ASSIST // Assist a player who is under attack. +}; + + +//-------------------------------------------------------------------------- +// Collision groups +//-------------------------------------------------------------------------- +enum +{ + TFCOLLISION_GROUP_SHIELD = LAST_SHARED_COLLISION_GROUP, + TFCOLLISION_GROUP_WEAPON, + TFCOLLISION_GROUP_GRENADE, + TFCOLLISION_GROUP_RESOURCE_CHUNK, + // Combat objects (override for above) + TFCOLLISION_GROUP_COMBATOBJECT, + // Objects in general + TFCOLLISION_GROUP_OBJECT, + TFCOLLISION_GROUP_OBJECT_SOLIDTOPLAYERMOVEMENT, +}; + +//-------------------------------------------------------------------------- +// MAP DEFINED OBJECTS +//-------------------------------------------------------------------------- +#define MAX_OBJ_CUSTOMNAME_SIZE 128 + +//-------------------------------------------------------------------------- +// OBJECTS +//-------------------------------------------------------------------------- +enum +{ + OBJ_POWERPACK=0, + OBJ_RESUPPLY, + OBJ_SENTRYGUN_PLASMA, // Orders always refer to this type of sentry gun. + OBJ_SENTRYGUN_ROCKET_LAUNCHER, + OBJ_SHIELDWALL, + OBJ_RESOURCEPUMP, + OBJ_RESPAWN_STATION, + OBJ_RALLYFLAG, + OBJ_MANNED_PLASMAGUN, + OBJ_MANNED_MISSILELAUNCHER, + OBJ_MANNED_SHIELD, + OBJ_EMPGENERATOR, + OBJ_BUFF_STATION, + OBJ_BARBED_WIRE, + OBJ_MCV_SELECTION_PANEL, + OBJ_MAPDEFINED, + OBJ_MORTAR, + // ADD STANDARD OBJECTS HERE + + // Upgrades + OBJ_SELFHEAL, + OBJ_ARMOR_UPGRADE, + OBJ_VEHICLE_BOOST, + OBJ_EXPLOSIVES, + OBJ_DRIVER_MACHINEGUN, + // ADD UPGRADES HERE + + // Vehicles + OBJ_BATTERING_RAM, + OBJ_SIEGE_TOWER, + OBJ_WAGON, + OBJ_FLATBED, + OBJ_VEHICLE_MORTAR, + OBJ_VEHICLE_TELEPORT_STATION, + OBJ_VEHICLE_TANK, + OBJ_VEHICLE_MOTORCYCLE, + OBJ_WALKER_STRIDER, + OBJ_WALKER_MINI_STRIDER, + // ADD VEHICLES HERE + + // Defensive buildings + OBJ_TOWER, + OBJ_TUNNEL, + OBJ_SANDBAG_BUNKER, + OBJ_BUNKER, + OBJ_DRAGONSTEETH, + // ADD DEFENSIVE-ONLY BUILDINGS HERE + + // If you add a new object, you need to add it to the g_ObjectInfos array + // in tf_shareddefs.cpp, and add it's data to the scripts/object.txt + + OBJ_LAST, +}; + +#define OBJECT_COST_MULTIPLIER_PER_OBJECT 3 +#define OBJECT_UPGRADE_COST_MULTIPLIER_PER_LEVEL 3 + +bool IsObjectAnUpgrade( int iObjectType ); +bool IsObjectAVehicle( int iObjectType ); +bool IsObjectADefensiveBuilding( int iObjectType ); + +class CHudTexture; + +class CObjectInfo +{ +public: + CObjectInfo( char *pObjectName ); + ~CObjectInfo(); + + // This is initialized by the code and matched with a section in objects.txt + char *m_pObjectName; + + // This stuff all comes from objects.txt + char *m_pClassName; // Code classname (in LINK_ENTITY_TO_CLASS). + char *m_pStatusName; // Shows up when crosshairs are on the object. + float m_flBuildTime; + int m_nMaxObjects; // Maximum number of objects per player + int m_Cost; // Base object resource cost + float m_CostMultiplierPerInstance; // Cost multiplier + int m_UpgradeCost; // Base object resource cost for upgrading + int m_MaxUpgradeLevel; // Max object upgrade level + char *m_pBuilderWeaponName; // Names shown for each object onscreen when using the builder weapon + char *m_pBuilderPlacementString; // String shown to player during placement of this object + int m_SelectionSlot; // Weapon selection slots for objects + int m_SelectionPosition; // Weapon selection positions for objects + bool m_bSolidToPlayerMovement; + float m_flSapperAttachTime; // Time it takes to place a sapper on this object + + // HUD weapon selection menu icon ( from hud_textures.txt ) + char *m_pIconActive; +}; + +// Loads the objects.txt script. +class IBaseFileSystem; +void LoadObjectInfos( IBaseFileSystem *pFileSystem ); + +// Get a CObjectInfo from a TFOBJ_ define. +const CObjectInfo* GetObjectInfo( int iObject ); + + +// Object utility funcs +bool ClassCanBuild( int iClass, int iObjectType ); +int CalculateObjectCost( int iObjectType, int iNumberOfObjects, int iTeam, bool bLast = false ); +int CalculateObjectUpgrade( int iObjectType, int iObjectLevel ); + +//-------------------------------------------------------------------------- +// OBJECT FLAGS +//-------------------------------------------------------------------------- +enum +{ + OF_SUPPRESS_APPEAR_ON_MINIMAP = 0x0001, + OF_SUPPRESS_NOTIFY_UNDER_ATTACK = 0x0002, + OF_SUPPRESS_VISIBLE_TO_TACTICAL = 0x0004, + OF_ALLOW_REPEAT_PLACEMENT = 0x0008, + OF_SUPPRESS_TECH_ANALYZER = 0x0010, + OF_DONT_AUTO_REPAIR = 0x0020, + OF_ALIGN_TO_GROUND = 0x0040, // Align my angles to match the ground underneath me + OF_DONT_PREVENT_BUILD_NEAR_OBJ = 0x0080, // Don't prevent building if there's another object nearby + OF_CAN_BE_PICKED_UP = 0x0100, + OF_DOESNT_NEED_POWER = 0x0200, // Doesn't need power, even on the human team + OF_DOESNT_HAVE_A_MODEL = 0x0400, // It's built from map placed geometry + OF_MUST_BE_BUILT_IN_CONSTRUCTION_YARD = 0x0800, + OF_MUST_BE_BUILT_IN_RESOURCE_ZONE = 0x1000, + OF_MUST_BE_BUILT_ON_ATTACHMENT = 0x2000, + OF_CANNOT_BE_DISMANTLED = 0x4000, + + OF_BIT_COUNT = 15 +}; + + +//-------------------------------------------------------------------------- +// Builder "weapon" states +//-------------------------------------------------------------------------- +enum +{ + BS_IDLE = 0, + BS_SELECTING, + BS_PLACING, + BS_PLACING_INVALID, + BS_BUILDING, + BS_REPAIR, +}; + + +//-------------------------------------------------------------------------- +// Builder object id... +//-------------------------------------------------------------------------- +enum +{ + BUILDER_OBJECT_BITS = 8, + BUILDER_INVALID_OBJECT = ((1 << BUILDER_OBJECT_BITS) - 1) +}; + +// Analyzer state +enum +{ + AS_INACTIVE = 0, + AS_SUBVERTING, + AS_ANALYZING +}; + +// Max number of objects a team can have +#define MAX_OBJECTS_PER_TEAM 512 +#define MAX_OBJECTS_PER_PLAYER 64 + + +//-------------------------------------------------------------------------- +// BUILDING +//-------------------------------------------------------------------------- +// Build checks will return one of these for a player +enum +{ + CB_CAN_BUILD, // Player is allowed to build this object + CB_NOT_RESEARCHED, // Player's team hasn't researched this object + CB_LIMIT_REACHED, // Player has reached the limit of the number of these objects allowed + CB_NEED_RESOURCES, // Player doesn't have enough resources to build this object + CB_NEED_ADRENALIN, // Commando doesn't have enough adrenalin to build a rally flag +}; + +//-------------------------------------------------------------------------- +// MORTAR +//-------------------------------------------------------------------------- +// Mortar Firing States +enum +{ + MORTAR_IDLE, + MORTAR_CHARGING_POWER, + MORTAR_CHARGING_ACCURACY, +}; + +// Mortar salvos +#define MORTAR_SALVO_SIZE 5 +#define MORTAR_RELOAD_TIME 5.0 + +// Mortar firing details +#define MORTAR_RANGE_MIN 1024 +#define MORTAR_RANGE_MAX_INITIAL 3000 +#define MORTAR_RANGE_MAX_UPGRADED 5000 + +// Inaccuracy Data +// These values are all max inaccuracies. The accuracy used is between 0 & Max, based upon how close the player gets to hitting +// the fire button at the right time on the mortar firing slider bar. +// Perpendicular-to-the-shot inaccuracy +#define MORTAR_INACCURACY_MAX_INITIAL 0.85 // Percentage of distance that a mortar can be wide of the mark +#define MORTAR_INACCURACY_MAX_UPGRADED 0.35 // Percentage of distance that a mortar can be wide of the mark +// Distance inaccuracy +#define MORTAR_DIST_INACCURACY 0.3 // Percentage of distance that the mortar can deviate + +// Mortar firing details +#define MORTAR_CHARGE_POWER_RATE 1.5 // Time taken to hit full charge for power +#define MORTAR_CHARGE_ACCURACY_RATE 1.25 // Time taken to hit perfect accuracy, given a half-power shot + +// Mortar ammo types +enum MortarAmmoType +{ + MA_SHELL = 0, // Normal mortar round + //MA_SMOKE, // Smoke mortar round + MA_CLUSTER, // Mirv mortar round + MA_STARBURST, // Starburst / phosphorous mortar round + + MA_LASTAMMOTYPE, +}; + +extern char *MortarAmmoNames[ MA_LASTAMMOTYPE ]; +extern char *MortarAmmoTechs[ MA_LASTAMMOTYPE ]; +extern int MortarAmmoMax[ MA_LASTAMMOTYPE ]; + +//-------------------------------------------------------------------------- +// ROCKET PACK +//-------------------------------------------------------------------------- +#define RP_LOCK_TIME 3.0 // Time taken to lock onto a target + +//-------------------------------------------------------------------------- +// PARTICLE BEAM +//-------------------------------------------------------------------------- +#define PB_RECHARGE_TIME 30.0 // Time taken to recharge the particle beam + +//-------------------------------------------------------------------------- +// PLASMA PROJECTILE TYPES +//-------------------------------------------------------------------------- +enum +{ + PLASMATYPE_GATLING, + PLASMATYPE_EMP, + PLASMATYPE_GUIDED, + PLASMATYPE_GUIDED_NOTARGET, + PLASMATYPE_GUIDED_PARRIED, + PLASMATYPE_PLASMABALL, + PLASMATYPE_PLASMABALL_EXPLOSIVE, +}; + +#define PLASMA_VELOCITY ( 2500 ) + +//-------------------------------------------------------------------------- +// SCANNERS +//-------------------------------------------------------------------------- +// Ranges +#define SCANNER_RANGE 3000 +#define LOCAL_PLAYER_SCANNER_RANGE 1500 + +//-------------------------------------------------------------------------- +// EMP +//-------------------------------------------------------------------------- +#define EMP_HITSCAN_DURATION 5.0f + +//-------------------------------------------------------------------------- +// KNOCKDOWN +//-------------------------------------------------------------------------- +// Knockdown blend in and out times +#define KNOCKDOWN_BLEND_IN ( 0.3f ) +#define KNOCKDOWN_BLEND_OUT ( 0.5f ) + +//-------------------------------------------------------------------------- +// THERMAL VISION +//-------------------------------------------------------------------------- +// Thermal vision radius +// Players outside of this radius will not be sent to the local player +// Player's inside start to fade at the startfade distance and are alpha'd out completely +// at the full radius +#define THERMAL_VISION_RADIUS ( 1024.0f ) +#define THERMAL_VISION_STARTFADE ( THERMAL_VISION_RADIUS / 2.0f ) + +//-------------------------------------------------------------------------- +// CAMO +//-------------------------------------------------------------------------- +// Infiltrator Camouflage constants +// # of seconds to go into/back into camo mode +#define CAMO_ENABLETIME ( 3.0f ) +// # of seconds to remove +#define CAMO_REMOVETIME ( 1.0f ) +// # of seconds to temporarily suppress +#define CAMO_SUPPRESSTIME ( 1.0f ) + +// Outside this, exclude from PVS +#define CAMO_OUTER_RADIUS ( 2048.0f ) +// From here to outer, just alpha to 0 +#define CAMO_INNER_RADIUS ( CAMO_OUTER_RADIUS / 2.0f ) +// 75 % opacity at the inner_radius +#define CAMO_INNER_ALPHA ( 192 ) +// From here to inner fade alpha again and start using invis effect +#define CAMO_INVIS_RADIUS ( CAMO_INNER_RADIUS / 2.0f ) + +// Infiltrator's phaseout duration +#define INFILTRATOR_PHASEOUT_DURATION 30.0f +// Time required to recharge +#define INFILTRATOR_PHASEOUT_RECHARGETIME 30.0f + +// After sitting still, remove from tactical and minimiap starting at this time +#define SNIPER_STATIONARY_FADESTART 2.5f +// After sitting still, remove from tactical and minimiap starting and finishing here +#define SNIPER_STATIONARY_FADEFINISH 7.5f + +// Infiltrator Camouflage constants +// # of seconds to go into/back into camo mode +#define CAMO_ENABLETIME ( 3.0f ) +// # of seconds to remove +#define CAMO_REMOVETIME ( 1.0f ) +// # of seconds to temporarily suppress +#define CAMO_SUPPRESSTIME ( 1.0f ) + +// Outside this, exclude from PVS +#define CAMO_OUTER_RADIUS ( 2048.0f ) +// From here to outer, just alpha to 0 +#define CAMO_INNER_RADIUS ( CAMO_OUTER_RADIUS / 2.0f ) +// 75 % opacity at the inner_radius +#define CAMO_INNER_ALPHA ( 192 ) +// From here to inner fade alpha again and start using invis effect +#define CAMO_INVIS_RADIUS ( CAMO_INNER_RADIUS / 2.0f ) + +// Infiltrator's phaseout duration +#define INFILTRATOR_PHASEOUT_DURATION 30.0f +// Time required to recharge +#define INFILTRATOR_PHASEOUT_RECHARGETIME 30.0f + +// After sitting still, remove from tactical and minimiap starting at this time +#define SNIPER_STATIONARY_FADESTART 2.5f +// After sitting still, remove from tactical and minimiap starting and finishing here +#define SNIPER_STATIONARY_FADEFINISH 7.5f + + +//-------------------------------------------------------------------------- +// ANIM STATEMACHINE DEFINES +//-------------------------------------------------------------------------- +// Sniper deploy node +enum +{ + SNIPER_DEPLOY_START = 1, + SNIPER_DEPLOY_IDLE, + SNIPER_DEPLOY_LEAVE, +}; + +//-------------------------------------------------------------------------- +// COMBAT SHIELD +//-------------------------------------------------------------------------- +#define SHIELD_HITGROUP 1 + +// Length after raising the shield during which releasing the shield will cause a parry +#define PARRY_DETECTION_TIME 0.5 +// Length after a parry detection in which a parry can occur +#define PARRY_OPPORTUNITY_LENGTH 0.3 +// Length after a parry has finished before I can do anything again +#define PARRY_VULNERABLE_TIME 0.5 + +//-------------------------------------------------------------------------- +// SENTRYGUNS +//-------------------------------------------------------------------------- +// Time it takes to turtle / unturtle +#define SENTRY_TURTLE_TIME 2.0 + +//-------------------------------------------------------------------------- +// PORTABLE POWER GENERATOR - BUFF STATION +//-------------------------------------------------------------------------- +#define BUFF_STATION_MAX_PLAYERS 4 +#define BUFF_STATION_MAX_PLAYER_BITS 3 +#define BUFF_STATION_MAX_OBJECTS 3 +#define BUFF_STATION_MAX_OBJECT_BITS 2 + +//-------------------------------------------------------------------------- +// ADRENALIN +//-------------------------------------------------------------------------- +// Animation speed while in adrenalin +#define ADRENALIN_ANIM_SPEED 1.5 + +//-------------------------------------------------------------------------- +// PLASMA RIFLE +//-------------------------------------------------------------------------- +#define MAX_RIFLE_POWER 3.0 +#define RIFLE_CHARGE_TIME 2.0 + +//-------------------------------------------------------------------------- +// HUMAN POWER PACKS +//-------------------------------------------------------------------------- +#define MAX_OBJECTS_PER_PACK 3 + +//-------------------------------------------------------------------------- +// Rally flag defines +//-------------------------------------------------------------------------- + +#define RALLYFLAG_MINS Vector(-20, -20, 0) +#define RALLYFLAG_MAXS Vector( 20, 20, 90) +#define RALLYFLAG_RADIUS 512 +#define RALLYFLAG_LIFETIME 30 +#define RALLYFLAG_RATE 2 // Rate at which it looks for friendlies to rally +#define RALLYFLAG_ADRENALIN_TIME 5 // Time an adrenalin rush lasts +#define RALLYFLAG_MODEL "models/props/common/holo_banner/holo_banner.mdl" + + +//-------------------------------------------------------------------------- +// Resupply-related stuff +//-------------------------------------------------------------------------- +enum ResupplyBuyType_t +{ + RESUPPLY_BUY_AMMO = 0, + RESUPPLY_BUY_HEALTH, + RESUPPLY_BUY_GRENADES, + RESUPPLY_BUY_ALL, + + RESUPPLY_BUY_TYPE_COUNT +}; + +#define RESUPPLY_HEALTH_COST 20 +#define RESUPPLY_AMMO_COST 5 +#define RESUPPLY_GRENADES_COST 25 +#define RESUPPLY_ALL_COST 50 +#define RESUPPLY_ROCKET_COST 100 + +// Build animation events +#define TF_OBJ_ENABLEBODYGROUP 6000 +#define TF_OBJ_DISABLEBODYGROUP 6001 +#define TF_OBJ_ENABLEALLBODYGROUPS 6002 +#define TF_OBJ_DISABLEALLBODYGROUPS 6003 +#define TF_OBJ_PLAYBUILDSOUND 6004 + +//-------------------------------------------------------------------------- +// Class id +//-------------------------------------------------------------------------- + +#include "tfclassdata_shared.h" + + +//-------------------------------------------------------------------------- +// +// Class info tables. Any time a class is added or removed, this is where +// generic data about each class is stored. +// +// The other things you need to add or remove for a class are: +// +// - A class derived from CPlayerClass. +// - Class-specific accessors and data members functions in CTFMoveData. +// - tf_gamemovement_chooser.h and CTFGameMovementChooser::CTFGameMovementChooser(). +// - DEFINE_PRED_TYPEDESCRIPTION_PTR entries in c_basetfplayer.cpp +// - Add class_X_health in skill1.cfg. +// +//-------------------------------------------------------------------------- + +class CPlayerClass; +class CBaseTFPlayer; +typedef CPlayerClass* (*PlayerClassAllocFn_Server)( CBaseTFPlayer *pPlayer ); + +class C_PlayerClass; +class C_BaseTFPlayer; +typedef C_PlayerClass* (*PlayerClassAllocFn_Client)( C_BaseTFPlayer *pPlayer ); + + +class ConVar; + + +class CTFClassInfo +{ +public: + char *m_pClassName; + + // Objects that each class can build + // OBJ_X, OBJ_Y ... terminated with OBJ_LAST. + int *m_pClassObjects; + + // This is just to make stats gathering easy... which classes are in the game right now? + bool m_pCurrentlyActive; + + PlayerClassAllocFn_Client m_pClientAlloc; // Only valid in client.dll + PlayerClassAllocFn_Server m_pServerAlloc; // Only valid in the game dll + + ConVar *m_pMaxHealthCVar; // Only valid in game dll +}; + +const CTFClassInfo* GetTFClassInfo( int i ); + + +#if defined( CLIENT_DLL ) + + #define CAllPlayerClasses C_AllPlayerClasses + #define PLAYER_CLASS_TYPE C_PlayerClass + #define PLAYER_TYPE C_BaseTFPlayer + + EXTERN_RECV_TABLE( DT_AllPlayerClasses ); + +#else + + #define PLAYER_CLASS_TYPE CPlayerClass + #define PLAYER_TYPE CBaseTFPlayer + + EXTERN_SEND_TABLE( DT_AllPlayerClasses ); + +#endif + + +class PLAYER_TYPE; +class PLAYER_CLASS_TYPE; + +// +// The player object contains this on both the client and the server. +// It holds a copy of each player class that can be used. +// +class CAllPlayerClasses // (#define as C_AllPlayerClasses on the client) +{ +public: + CAllPlayerClasses( PLAYER_TYPE *pPlayer ); + ~CAllPlayerClasses(); + + PLAYER_CLASS_TYPE* GetPlayerClass( int iClass ); + +public: + + PLAYER_CLASS_TYPE* m_pClasses[ TFCLASS_CLASS_COUNT ]; +}; + +//-------------------------------------------------------------------------- +// Impact data +//-------------------------------------------------------------------------- +// This sucks +#define NUM_WOOD_GIBS_SMALL 5 +extern const char *ImpactHurtGibs_Wood_Small[ NUM_WOOD_GIBS_SMALL ]; + +#define PLAYER_MSG_PERSONAL_SHIELD 2 + +#endif // TF_SHAREDDEFS_H + |