source-engine/game/shared/tf2/tf_shareddefs.h
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

664 lines
21 KiB
C++

//========= 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