summaryrefslogtreecommitdiff
path: root/game/shared/shareddefs.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/shareddefs.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/shareddefs.h')
-rw-r--r--game/shared/shareddefs.h955
1 files changed, 955 insertions, 0 deletions
diff --git a/game/shared/shareddefs.h b/game/shared/shareddefs.h
new file mode 100644
index 0000000..c55e856
--- /dev/null
+++ b/game/shared/shareddefs.h
@@ -0,0 +1,955 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Definitions that are shared by the game DLL and the client DLL.
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef SHAREDDEFS_H
+#define SHAREDDEFS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#define TICK_INTERVAL (gpGlobals->interval_per_tick)
+
+
+#define TIME_TO_TICKS( dt ) ( (int)( 0.5f + (float)(dt) / TICK_INTERVAL ) )
+#define TICKS_TO_TIME( t ) ( TICK_INTERVAL *( t ) )
+#define ROUND_TO_TICKS( t ) ( TICK_INTERVAL * TIME_TO_TICKS( t ) )
+#define TICK_NEVER_THINK (-1)
+
+#if defined( TF_DLL )
+#define ANIMATION_CYCLE_BITS 10
+#else
+#define ANIMATION_CYCLE_BITS 15
+#endif
+#define ANIMATION_CYCLE_MINFRAC (1.0f / (1<<ANIMATION_CYCLE_BITS))
+
+// Each mod defines these for itself.
+class CViewVectors
+{
+public:
+ CViewVectors() {}
+
+ CViewVectors(
+ Vector vView,
+ Vector vHullMin,
+ Vector vHullMax,
+ Vector vDuckHullMin,
+ Vector vDuckHullMax,
+ Vector vDuckView,
+ Vector vObsHullMin,
+ Vector vObsHullMax,
+ Vector vDeadViewHeight )
+ {
+ m_vView = vView;
+ m_vHullMin = vHullMin;
+ m_vHullMax = vHullMax;
+ m_vDuckHullMin = vDuckHullMin;
+ m_vDuckHullMax = vDuckHullMax;
+ m_vDuckView = vDuckView;
+ m_vObsHullMin = vObsHullMin;
+ m_vObsHullMax = vObsHullMax;
+ m_vDeadViewHeight = vDeadViewHeight;
+ }
+
+ // Height above entity position where the viewer's eye is.
+ Vector m_vView;
+
+ Vector m_vHullMin;
+ Vector m_vHullMax;
+
+ Vector m_vDuckHullMin;
+ Vector m_vDuckHullMax;
+ Vector m_vDuckView;
+
+ Vector m_vObsHullMin;
+ Vector m_vObsHullMax;
+
+ Vector m_vDeadViewHeight;
+};
+
+// Height above entity position where the viewer's eye is.
+#define VEC_VIEW g_pGameRules->GetViewVectors()->m_vView
+#define VEC_HULL_MIN g_pGameRules->GetViewVectors()->m_vHullMin
+#define VEC_HULL_MAX g_pGameRules->GetViewVectors()->m_vHullMax
+
+#define VEC_DUCK_HULL_MIN g_pGameRules->GetViewVectors()->m_vDuckHullMin
+#define VEC_DUCK_HULL_MAX g_pGameRules->GetViewVectors()->m_vDuckHullMax
+#define VEC_DUCK_VIEW g_pGameRules->GetViewVectors()->m_vDuckView
+
+#define VEC_OBS_HULL_MIN g_pGameRules->GetViewVectors()->m_vObsHullMin
+#define VEC_OBS_HULL_MAX g_pGameRules->GetViewVectors()->m_vObsHullMax
+
+#define VEC_DEAD_VIEWHEIGHT g_pGameRules->GetViewVectors()->m_vDeadViewHeight
+
+// If the player (enemy bots) are scaled, adjust the hull
+#define VEC_VIEW_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vView * player->GetModelScale() )
+#define VEC_HULL_MIN_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vHullMin * player->GetModelScale() )
+#define VEC_HULL_MAX_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vHullMax * player->GetModelScale() )
+
+#define VEC_DUCK_HULL_MIN_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vDuckHullMin * player->GetModelScale() )
+#define VEC_DUCK_HULL_MAX_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vDuckHullMax * player->GetModelScale() )
+#define VEC_DUCK_VIEW_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vDuckView * player->GetModelScale() )
+
+#define VEC_OBS_HULL_MIN_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vObsHullMin * player->GetModelScale() )
+#define VEC_OBS_HULL_MAX_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vObsHullMax * player->GetModelScale() )
+
+#define VEC_DEAD_VIEWHEIGHT_SCALED( player ) ( g_pGameRules->GetViewVectors()->m_vDeadViewHeight * player->GetModelScale() )
+
+#define WATERJUMP_HEIGHT 8
+
+#define MAX_CLIMB_SPEED 200
+
+#if defined(TF_DLL) || defined(TF_CLIENT_DLL)
+ #define TIME_TO_DUCK 0.2
+ #define TIME_TO_DUCK_MS 200.0f
+#else
+ #define TIME_TO_DUCK 0.4
+ #define TIME_TO_DUCK_MS 400.0f
+#endif
+#define TIME_TO_UNDUCK 0.2
+#define TIME_TO_UNDUCK_MS 200.0f
+
+#define MAX_WEAPON_SLOTS 6 // hud item selection slots
+#define MAX_WEAPON_POSITIONS 20 // max number of items within a slot
+#define MAX_ITEM_TYPES 6 // hud item selection slots
+#define MAX_WEAPONS 48 // Max number of weapons available
+
+#define MAX_ITEMS 5 // hard coded item types
+
+#define WEAPON_NOCLIP -1 // clip sizes set to this tell the weapon it doesn't use a clip
+
+#define MAX_AMMO_TYPES 32 // ???
+#define MAX_AMMO_SLOTS 32 // not really slots
+
+#define HUD_PRINTNOTIFY 1
+#define HUD_PRINTCONSOLE 2
+#define HUD_PRINTTALK 3
+#define HUD_PRINTCENTER 4
+
+// Vote creation or processing failure codes
+typedef enum
+{
+ VOTE_FAILED_GENERIC = 0,
+ VOTE_FAILED_TRANSITIONING_PLAYERS,
+ VOTE_FAILED_RATE_EXCEEDED,
+ VOTE_FAILED_YES_MUST_EXCEED_NO,
+ VOTE_FAILED_QUORUM_FAILURE,
+ VOTE_FAILED_ISSUE_DISABLED,
+ VOTE_FAILED_MAP_NOT_FOUND,
+ VOTE_FAILED_MAP_NAME_REQUIRED,
+ VOTE_FAILED_ON_COOLDOWN,
+ VOTE_FAILED_TEAM_CANT_CALL,
+ VOTE_FAILED_WAITINGFORPLAYERS,
+ VOTE_FAILED_PLAYERNOTFOUND,
+ VOTE_FAILED_CANNOT_KICK_ADMIN,
+ VOTE_FAILED_SCRAMBLE_IN_PROGRESS,
+ VOTE_FAILED_SPECTATOR,
+ VOTE_FAILED_NEXTLEVEL_SET,
+ VOTE_FAILED_MAP_NOT_VALID,
+ VOTE_FAILED_CANNOT_KICK_FOR_TIME,
+ VOTE_FAILED_CANNOT_KICK_DURING_ROUND,
+ VOTE_FAILED_VOTE_IN_PROGRESS,
+ VOTE_FAILED_KICK_LIMIT_REACHED,
+ VOTE_FAILED_KICK_DENIED_BY_GC,
+
+ // TF-specific?
+ VOTE_FAILED_MODIFICATION_ALREADY_ACTIVE,
+} vote_create_failed_t;
+
+enum
+{
+#ifdef STAGING_ONLY
+ SERVER_MODIFICATION_ITEM_DURATION_IN_MINUTES = 2
+#else
+ SERVER_MODIFICATION_ITEM_DURATION_IN_MINUTES = 120
+#endif
+};
+
+#define MAX_VOTE_DETAILS_LENGTH 64
+#define INVALID_ISSUE -1
+#define MAX_VOTE_OPTIONS 5
+#define DEDICATED_SERVER 99
+
+enum CastVote
+{
+ VOTE_OPTION1, // Use this for Yes
+ VOTE_OPTION2, // Use this for No
+ VOTE_OPTION3,
+ VOTE_OPTION4,
+ VOTE_OPTION5,
+ VOTE_UNCAST
+};
+
+//===================================================================================================================
+// Close caption flags
+#define CLOSE_CAPTION_WARNIFMISSING ( 1<<0 )
+#define CLOSE_CAPTION_FROMPLAYER ( 1<<1 )
+#define CLOSE_CAPTION_GENDER_MALE ( 1<<2 )
+#define CLOSE_CAPTION_GENDER_FEMALE ( 1<<3 )
+
+//===================================================================================================================
+// Hud Element hiding flags
+#define HIDEHUD_WEAPONSELECTION ( 1<<0 ) // Hide ammo count & weapon selection
+#define HIDEHUD_FLASHLIGHT ( 1<<1 )
+#define HIDEHUD_ALL ( 1<<2 )
+#define HIDEHUD_HEALTH ( 1<<3 ) // Hide health & armor / suit battery
+#define HIDEHUD_PLAYERDEAD ( 1<<4 ) // Hide when local player's dead
+#define HIDEHUD_NEEDSUIT ( 1<<5 ) // Hide when the local player doesn't have the HEV suit
+#define HIDEHUD_MISCSTATUS ( 1<<6 ) // Hide miscellaneous status elements (trains, pickup history, death notices, etc)
+#define HIDEHUD_CHAT ( 1<<7 ) // Hide all communication elements (saytext, voice icon, etc)
+#define HIDEHUD_CROSSHAIR ( 1<<8 ) // Hide crosshairs
+#define HIDEHUD_VEHICLE_CROSSHAIR ( 1<<9 ) // Hide vehicle crosshair
+#define HIDEHUD_INVEHICLE ( 1<<10 )
+#define HIDEHUD_BONUS_PROGRESS ( 1<<11 ) // Hide bonus progress display (for bonus map challenges)
+
+#define HIDEHUD_BITCOUNT 12
+
+//===================================================================================================================
+// suit usage bits
+#define bits_SUIT_DEVICE_SPRINT 0x00000001
+#define bits_SUIT_DEVICE_FLASHLIGHT 0x00000002
+#define bits_SUIT_DEVICE_BREATHER 0x00000004
+
+#define MAX_SUIT_DEVICES 3
+
+
+//===================================================================================================================
+// Player Defines
+
+// Max number of players in a game ( see const.h for ABSOLUTE_PLAYER_LIMIT (256 ) )
+// The Source engine is really designed for 32 or less players. If you raise this number above 32, you better know what you are doing
+// and have a good answer for a bunch of perf question related to player simulation, thinking logic, tracelines, networking overhead, etc.
+// But if you are brave or are doing something interesting, go for it... ywb 9/22/03
+
+//You might be wondering why these aren't multiple of 2. Well the reason is that if servers decide to have HLTV or Replay enabled we need the extra slot.
+//This is ok since MAX_PLAYERS is used for code specific things like arrays and loops, but it doesn't really means that this is the max number of players allowed
+//Since this is decided by the gamerules (and it can be whatever number as long as its less than MAX_PLAYERS).
+#if defined( CSTRIKE_DLL )
+ #define MAX_PLAYERS 65 // Absolute max players supported
+#else
+ #define MAX_PLAYERS 33 // Absolute max players supported
+#endif
+
+#define MAX_PLACE_NAME_LENGTH 18
+
+#define MAX_FOV 90
+
+//===================================================================================================================
+// Team Defines
+#define TEAM_ANY -2
+#define TEAM_INVALID -1
+#define TEAM_UNASSIGNED 0 // not assigned to a team
+#define TEAM_SPECTATOR 1 // spectator team
+// Start your team numbers after this
+#define LAST_SHARED_TEAM TEAM_SPECTATOR
+
+// The first team that's game specific (i.e. not unassigned / spectator)
+#define FIRST_GAME_TEAM (LAST_SHARED_TEAM+1)
+
+#define MAX_TEAMS 32 // Max number of teams in a game
+#define MAX_TEAM_NAME_LENGTH 32 // Max length of a team's name
+
+// Weapon m_iState
+#define WEAPON_IS_ONTARGET 0x40
+
+#define WEAPON_NOT_CARRIED 0 // Weapon is on the ground
+#define WEAPON_IS_CARRIED_BY_PLAYER 1 // This client is carrying this weapon.
+#define WEAPON_IS_ACTIVE 2 // This client is carrying this weapon and it's the currently held weapon
+
+// -----------------------------------------
+// Skill Level
+// -----------------------------------------
+#define SKILL_EASY 1
+#define SKILL_MEDIUM 2
+#define SKILL_HARD 3
+
+
+// Weapon flags
+// -----------------------------------------
+// Flags - NOTE: KEEP g_ItemFlags IN WEAPON_PARSE.CPP UPDATED WITH THESE
+// -----------------------------------------
+#define ITEM_FLAG_SELECTONEMPTY (1<<0)
+#define ITEM_FLAG_NOAUTORELOAD (1<<1)
+#define ITEM_FLAG_NOAUTOSWITCHEMPTY (1<<2)
+#define ITEM_FLAG_LIMITINWORLD (1<<3)
+#define ITEM_FLAG_EXHAUSTIBLE (1<<4) // A player can totally exhaust their ammo supply and lose this weapon
+#define ITEM_FLAG_DOHITLOCATIONDMG (1<<5) // This weapon take hit location into account when applying damage
+#define ITEM_FLAG_NOAMMOPICKUPS (1<<6) // Don't draw ammo pickup sprites/sounds when ammo is received
+#define ITEM_FLAG_NOITEMPICKUP (1<<7) // Don't draw weapon pickup when this weapon is picked up by the player
+// NOTE: KEEP g_ItemFlags IN WEAPON_PARSE.CPP UPDATED WITH THESE
+
+
+// Humans only have left and right hands, though we might have aliens with more
+// than two, sigh
+#define MAX_VIEWMODELS 2
+
+#define MAX_BEAM_ENTS 10
+
+#define TRACER_TYPE_DEFAULT 0x00000001
+#define TRACER_TYPE_GUNSHIP 0x00000002
+#define TRACER_TYPE_STRIDER 0x00000004 // Here ya go, Jay!
+#define TRACER_TYPE_GAUSS 0x00000008
+#define TRACER_TYPE_WATERBULLET 0x00000010
+
+#define MUZZLEFLASH_TYPE_DEFAULT 0x00000001
+#define MUZZLEFLASH_TYPE_GUNSHIP 0x00000002
+#define MUZZLEFLASH_TYPE_STRIDER 0x00000004
+
+// Muzzle flash definitions (for the flags field of the "MuzzleFlash" DispatchEffect)
+enum
+{
+ MUZZLEFLASH_AR2 = 0,
+ MUZZLEFLASH_SHOTGUN,
+ MUZZLEFLASH_SMG1,
+ MUZZLEFLASH_SMG2,
+ MUZZLEFLASH_PISTOL,
+ MUZZLEFLASH_COMBINE,
+ MUZZLEFLASH_357,
+ MUZZLEFLASH_RPG,
+ MUZZLEFLASH_COMBINE_TURRET,
+
+ MUZZLEFLASH_FIRSTPERSON = 0x100,
+};
+
+// Tracer Flags
+#define TRACER_FLAG_WHIZ 0x0001
+#define TRACER_FLAG_USEATTACHMENT 0x0002
+
+#define TRACER_DONT_USE_ATTACHMENT -1
+
+// Entity Dissolve types
+enum
+{
+ ENTITY_DISSOLVE_NORMAL = 0,
+ ENTITY_DISSOLVE_ELECTRICAL,
+ ENTITY_DISSOLVE_ELECTRICAL_LIGHT,
+ ENTITY_DISSOLVE_CORE,
+
+ // NOTE: Be sure to up the bits if you make more dissolve types
+ ENTITY_DISSOLVE_BITS = 3
+};
+
+// ---------------------------
+// Hit Group standards
+// ---------------------------
+#define HITGROUP_GENERIC 0
+#define HITGROUP_HEAD 1
+#define HITGROUP_CHEST 2
+#define HITGROUP_STOMACH 3
+#define HITGROUP_LEFTARM 4
+#define HITGROUP_RIGHTARM 5
+#define HITGROUP_LEFTLEG 6
+#define HITGROUP_RIGHTLEG 7
+#define HITGROUP_GEAR 10 // alerts NPC, but doesn't do damage or bleed (1/100th damage)
+
+//
+// Enumerations for setting player animation.
+//
+enum PLAYER_ANIM
+{
+ PLAYER_IDLE,
+ PLAYER_WALK,
+ PLAYER_JUMP,
+ PLAYER_SUPERJUMP,
+ PLAYER_DIE,
+ PLAYER_ATTACK1,
+ PLAYER_IN_VEHICLE,
+
+ // TF Player animations
+ PLAYER_RELOAD,
+ PLAYER_START_AIMING,
+ PLAYER_LEAVE_AIMING,
+};
+
+#ifdef HL2_DLL
+// HL2 has 600 gravity by default
+// NOTE: The discrete ticks can have quantization error, so these numbers are biased a little to
+// make the heights more exact
+#define PLAYER_FATAL_FALL_SPEED 922.5f // approx 60 feet sqrt( 2 * gravity * 60 * 12 )
+#define PLAYER_MAX_SAFE_FALL_SPEED 526.5f // approx 20 feet sqrt( 2 * gravity * 20 * 12 )
+#define PLAYER_LAND_ON_FLOATING_OBJECT 173 // Can fall another 173 in/sec without getting hurt
+#define PLAYER_MIN_BOUNCE_SPEED 173
+#define PLAYER_FALL_PUNCH_THRESHOLD 303.0f // won't punch player's screen/make scrape noise unless player falling at least this fast - at least a 76" fall (sqrt( 2 * g * 76))
+#else
+#define PLAYER_FATAL_FALL_SPEED 1024 // approx 60 feet
+#define PLAYER_MAX_SAFE_FALL_SPEED 580 // approx 20 feet
+#define PLAYER_LAND_ON_FLOATING_OBJECT 200 // Can go another 200 units without getting hurt
+#define PLAYER_MIN_BOUNCE_SPEED 200
+#define PLAYER_FALL_PUNCH_THRESHOLD (float)350 // won't punch player's screen/make scrape noise unless player falling at least this fast.
+#endif
+#define DAMAGE_FOR_FALL_SPEED 100.0f / ( PLAYER_FATAL_FALL_SPEED - PLAYER_MAX_SAFE_FALL_SPEED ) // damage per unit per second.
+
+
+#define AUTOAIM_2DEGREES 0.0348994967025
+#define AUTOAIM_5DEGREES 0.08715574274766
+#define AUTOAIM_8DEGREES 0.1391731009601
+#define AUTOAIM_10DEGREES 0.1736481776669
+#define AUTOAIM_20DEGREES 0.3490658503989
+
+#define AUTOAIM_SCALE_DEFAULT 1.0f
+#define AUTOAIM_SCALE_DIRECT_ONLY 0.0f
+
+// instant damage
+
+// For a means of resolving these consts into debug string text, see function
+// CTakeDamageInfo::DebugGetDamageTypeString(unsigned int DamageType, char *outbuf, unsigned int outbuflength )
+#define DMG_GENERIC 0 // generic damage -- do not use if you want players to flinch and bleed!
+#define DMG_CRUSH (1 << 0) // crushed by falling or moving object.
+ // NOTE: It's assumed crush damage is occurring as a result of physics collision, so no extra physics force is generated by crush damage.
+ // DON'T use DMG_CRUSH when damaging entities unless it's the result of a physics collision. You probably want DMG_CLUB instead.
+#define DMG_BULLET (1 << 1) // shot
+#define DMG_SLASH (1 << 2) // cut, clawed, stabbed
+#define DMG_BURN (1 << 3) // heat burned
+#define DMG_VEHICLE (1 << 4) // hit by a vehicle
+#define DMG_FALL (1 << 5) // fell too far
+#define DMG_BLAST (1 << 6) // explosive blast damage
+#define DMG_CLUB (1 << 7) // crowbar, punch, headbutt
+#define DMG_SHOCK (1 << 8) // electric shock
+#define DMG_SONIC (1 << 9) // sound pulse shockwave
+#define DMG_ENERGYBEAM (1 << 10) // laser or other high energy beam
+#define DMG_PREVENT_PHYSICS_FORCE (1 << 11) // Prevent a physics force
+#define DMG_NEVERGIB (1 << 12) // with this bit OR'd in, no damage type will be able to gib victims upon death
+#define DMG_ALWAYSGIB (1 << 13) // with this bit OR'd in, any damage type can be made to gib victims upon death.
+#define DMG_DROWN (1 << 14) // Drowning
+
+
+#define DMG_PARALYZE (1 << 15) // slows affected creature down
+#define DMG_NERVEGAS (1 << 16) // nerve toxins, very bad
+#define DMG_POISON (1 << 17) // blood poisoning - heals over time like drowning damage
+#define DMG_RADIATION (1 << 18) // radiation exposure
+#define DMG_DROWNRECOVER (1 << 19) // drowning recovery
+#define DMG_ACID (1 << 20) // toxic chemicals or acid burns
+#define DMG_SLOWBURN (1 << 21) // in an oven
+
+#define DMG_REMOVENORAGDOLL (1<<22) // with this bit OR'd in, no ragdoll will be created, and the target will be quietly removed.
+ // use this to kill an entity that you've already got a server-side ragdoll for
+
+#define DMG_PHYSGUN (1<<23) // Hit by manipulator. Usually doesn't do any damage.
+#define DMG_PLASMA (1<<24) // Shot by Cremator
+#define DMG_AIRBOAT (1<<25) // Hit by the airboat's gun
+
+#define DMG_DISSOLVE (1<<26) // Dissolving!
+#define DMG_BLAST_SURFACE (1<<27) // A blast on the surface of water that cannot harm things underwater
+#define DMG_DIRECT (1<<28)
+#define DMG_BUCKSHOT (1<<29) // not quite a bullet. Little, rounder, different.
+
+// NOTE: DO NOT ADD ANY MORE CUSTOM DMG_ TYPES. MODS USE THE DMG_LASTGENERICFLAG BELOW, AND
+// IF YOU ADD NEW DMG_ TYPES, THEIR TYPES WILL BE HOSED. WE NEED A BETTER SOLUTION.
+
+// TODO: keep this up to date so all the mod-specific flags don't overlap anything.
+#define DMG_LASTGENERICFLAG DMG_BUCKSHOT
+
+
+
+// settings for m_takedamage
+#define DAMAGE_NO 0
+#define DAMAGE_EVENTS_ONLY 1 // Call damage functions, but don't modify health
+#define DAMAGE_YES 2
+#define DAMAGE_AIM 3
+
+// Spectator Movement modes
+enum {
+ OBS_MODE_NONE = 0, // not in spectator mode
+ OBS_MODE_DEATHCAM, // special mode for death cam animation
+ OBS_MODE_FREEZECAM, // zooms to a target, and freeze-frames on them
+ OBS_MODE_FIXED, // view from a fixed camera position
+ OBS_MODE_IN_EYE, // follow a player in first person view
+ OBS_MODE_CHASE, // follow a player in third person view
+ OBS_MODE_POI, // PASSTIME point of interest - game objective, big fight, anything interesting; added in the middle of the enum due to tons of hard-coded "<ROAMING" enum compares
+ OBS_MODE_ROAMING, // free roaming
+
+ NUM_OBSERVER_MODES,
+};
+
+#define LAST_PLAYER_OBSERVERMODE OBS_MODE_ROAMING
+
+// Force Camera Restrictions with mp_forcecamera
+enum {
+ OBS_ALLOW_ALL = 0, // allow all modes, all targets
+ OBS_ALLOW_TEAM, // allow only own team & first person, no PIP
+ OBS_ALLOW_NONE, // don't allow any spectating after death (fixed & fade to black)
+
+ OBS_ALLOW_NUM_MODES,
+};
+
+enum
+{
+ TYPE_TEXT = 0, // just display this plain text
+ TYPE_INDEX, // lookup text & title in stringtable
+ TYPE_URL, // show this URL
+ TYPE_FILE, // show this local file
+} ;
+
+//=============================================================================
+// HPE_BEGIN:
+// [Forrest] Replaced text window command string with TEXTWINDOW_CMD enumeration
+// of options. Passing a command string is dangerous and allowed a server network
+// message to run arbitrary commands on the client.
+//=============================================================================
+enum
+{
+ TEXTWINDOW_CMD_NONE = 0,
+ TEXTWINDOW_CMD_JOINGAME,
+ TEXTWINDOW_CMD_CHANGETEAM,
+ TEXTWINDOW_CMD_IMPULSE101,
+ TEXTWINDOW_CMD_MAPINFO,
+ TEXTWINDOW_CMD_CLOSED_HTMLPAGE,
+ TEXTWINDOW_CMD_CHOOSETEAM,
+};
+//=============================================================================
+// HPE_END
+//=============================================================================
+
+// VGui Screen Flags
+enum
+{
+ VGUI_SCREEN_ACTIVE = 0x1,
+ VGUI_SCREEN_VISIBLE_TO_TEAMMATES = 0x2,
+ VGUI_SCREEN_ATTACHED_TO_VIEWMODEL = 0x4,
+ VGUI_SCREEN_TRANSPARENT = 0x8,
+ VGUI_SCREEN_ONLY_USABLE_BY_OWNER = 0x10,
+
+ VGUI_SCREEN_MAX_BITS = 5
+};
+
+typedef enum
+{
+ USE_OFF = 0,
+ USE_ON = 1,
+ USE_SET = 2,
+ USE_TOGGLE = 3
+} USE_TYPE;
+
+// basic team colors
+#define COLOR_RED Color(255, 64, 64, 255)
+#define COLOR_BLUE Color(153, 204, 255, 255)
+#define COLOR_YELLOW Color(255, 178, 0, 255)
+#define COLOR_GREEN Color(153, 255, 153, 255)
+#define COLOR_GREY Color(204, 204, 204, 255)
+#define COLOR_WHITE Color(255, 255, 255, 255)
+#define COLOR_BLACK Color(0, 0, 0, 255)
+
+// All NPCs need this data
+enum
+{
+ DONT_BLEED = -1,
+
+ BLOOD_COLOR_RED = 0,
+ BLOOD_COLOR_YELLOW,
+ BLOOD_COLOR_GREEN,
+ BLOOD_COLOR_MECH,
+
+#if defined( HL2_EPISODIC )
+ BLOOD_COLOR_ANTLION, // FIXME: Move to Base HL2
+ BLOOD_COLOR_ZOMBIE, // FIXME: Move to Base HL2
+ BLOOD_COLOR_ANTLION_WORKER,
+#endif // HL2_EPISODIC
+};
+
+//-----------------------------------------------------------------------------
+// Vehicles may have more than one passenger.
+// This enum may be expanded by derived classes
+//-----------------------------------------------------------------------------
+enum PassengerRole_t
+{
+ VEHICLE_ROLE_NONE = -1,
+
+ VEHICLE_ROLE_DRIVER = 0, // Only one driver
+
+ LAST_SHARED_VEHICLE_ROLE,
+};
+
+//-----------------------------------------------------------------------------
+// Water splash effect flags
+//-----------------------------------------------------------------------------
+enum
+{
+ FX_WATER_IN_SLIME = 0x1,
+};
+
+
+// Shared think context stuff
+#define MAX_CONTEXT_LENGTH 32
+#define NO_THINK_CONTEXT -1
+
+// entity flags, CBaseEntity::m_iEFlags
+enum
+{
+ EFL_KILLME = (1<<0), // This entity is marked for death -- This allows the game to actually delete ents at a safe time
+ EFL_DORMANT = (1<<1), // Entity is dormant, no updates to client
+ EFL_NOCLIP_ACTIVE = (1<<2), // Lets us know when the noclip command is active.
+ EFL_SETTING_UP_BONES = (1<<3), // Set while a model is setting up its bones.
+ EFL_KEEP_ON_RECREATE_ENTITIES = (1<<4), // This is a special entity that should not be deleted when we restart entities only
+
+ EFL_HAS_PLAYER_CHILD= (1<<4), // One of the child entities is a player.
+
+ EFL_DIRTY_SHADOWUPDATE = (1<<5), // Client only- need shadow manager to update the shadow...
+ EFL_NOTIFY = (1<<6), // Another entity is watching events on this entity (used by teleport)
+
+ // The default behavior in ShouldTransmit is to not send an entity if it doesn't
+ // have a model. Certain entities want to be sent anyway because all the drawing logic
+ // is in the client DLL. They can set this flag and the engine will transmit them even
+ // if they don't have a model.
+ EFL_FORCE_CHECK_TRANSMIT = (1<<7),
+
+ EFL_BOT_FROZEN = (1<<8), // This is set on bots that are frozen.
+ EFL_SERVER_ONLY = (1<<9), // Non-networked entity.
+ EFL_NO_AUTO_EDICT_ATTACH = (1<<10), // Don't attach the edict; we're doing it explicitly
+
+ // Some dirty bits with respect to abs computations
+ EFL_DIRTY_ABSTRANSFORM = (1<<11),
+ EFL_DIRTY_ABSVELOCITY = (1<<12),
+ EFL_DIRTY_ABSANGVELOCITY = (1<<13),
+ EFL_DIRTY_SURROUNDING_COLLISION_BOUNDS = (1<<14),
+ EFL_DIRTY_SPATIAL_PARTITION = (1<<15),
+// UNUSED = (1<<16),
+
+ EFL_IN_SKYBOX = (1<<17), // This is set if the entity detects that it's in the skybox.
+ // This forces it to pass the "in PVS" for transmission.
+ EFL_USE_PARTITION_WHEN_NOT_SOLID = (1<<18), // Entities with this flag set show up in the partition even when not solid
+ EFL_TOUCHING_FLUID = (1<<19), // Used to determine if an entity is floating
+
+ // FIXME: Not really sure where I should add this...
+ EFL_IS_BEING_LIFTED_BY_BARNACLE = (1<<20),
+ EFL_NO_ROTORWASH_PUSH = (1<<21), // I shouldn't be pushed by the rotorwash
+ EFL_NO_THINK_FUNCTION = (1<<22),
+ EFL_NO_GAME_PHYSICS_SIMULATION = (1<<23),
+
+ EFL_CHECK_UNTOUCH = (1<<24),
+ EFL_DONTBLOCKLOS = (1<<25), // I shouldn't block NPC line-of-sight
+ EFL_DONTWALKON = (1<<26), // NPC;s should not walk on this entity
+ EFL_NO_DISSOLVE = (1<<27), // These guys shouldn't dissolve
+ EFL_NO_MEGAPHYSCANNON_RAGDOLL = (1<<28), // Mega physcannon can't ragdoll these guys.
+ EFL_NO_WATER_VELOCITY_CHANGE = (1<<29), // Don't adjust this entity's velocity when transitioning into water
+ EFL_NO_PHYSCANNON_INTERACTION = (1<<30), // Physcannon can't pick these up or punt them
+ EFL_NO_DAMAGE_FORCES = (1<<31), // Doesn't accept forces from physics damage
+};
+
+//-----------------------------------------------------------------------------
+// EFFECTS
+//-----------------------------------------------------------------------------
+const int FX_BLOODSPRAY_DROPS = 0x01;
+const int FX_BLOODSPRAY_GORE = 0x02;
+const int FX_BLOODSPRAY_CLOUD = 0x04;
+const int FX_BLOODSPRAY_ALL = 0xFF;
+
+//-----------------------------------------------------------------------------
+#define MAX_SCREEN_OVERLAYS 10
+
+// These are the types of data that hang off of CBaseEntities and the flag bits used to mark their presence
+enum
+{
+ GROUNDLINK = 0,
+ TOUCHLINK,
+ STEPSIMULATION,
+ MODELSCALE,
+ POSITIONWATCHER,
+ PHYSICSPUSHLIST,
+ VPHYSICSUPDATEAI,
+ VPHYSICSWATCHER,
+
+ // Must be last and <= 32
+ NUM_DATAOBJECT_TYPES,
+};
+
+class CBaseEntity;
+
+//-----------------------------------------------------------------------------
+// Bullet firing information
+//-----------------------------------------------------------------------------
+class CBaseEntity;
+
+enum FireBulletsFlags_t
+{
+ FIRE_BULLETS_FIRST_SHOT_ACCURATE = 0x1, // Pop the first shot with perfect accuracy
+ FIRE_BULLETS_DONT_HIT_UNDERWATER = 0x2, // If the shot hits its target underwater, don't damage it
+ FIRE_BULLETS_ALLOW_WATER_SURFACE_IMPACTS = 0x4, // If the shot hits water surface, still call DoImpactEffect
+ FIRE_BULLETS_TEMPORARY_DANGER_SOUND = 0x8, // Danger sounds added from this impact can be stomped immediately if another is queued
+};
+
+
+struct FireBulletsInfo_t
+{
+ FireBulletsInfo_t()
+ {
+ m_iShots = 1;
+ m_vecSpread.Init( 0, 0, 0 );
+ m_flDistance = 8192;
+ m_iTracerFreq = 4;
+ m_flDamage = 0;
+ m_iPlayerDamage = 0;
+ m_pAttacker = NULL;
+ m_nFlags = 0;
+ m_pAdditionalIgnoreEnt = NULL;
+ m_flDamageForceScale = 1.0f;
+
+#ifdef _DEBUG
+ m_iAmmoType = -1;
+ m_vecSrc.Init( VEC_T_NAN, VEC_T_NAN, VEC_T_NAN );
+ m_vecDirShooting.Init( VEC_T_NAN, VEC_T_NAN, VEC_T_NAN );
+#endif
+ m_bPrimaryAttack = true;
+ m_bUseServerRandomSeed = false;
+ }
+
+ FireBulletsInfo_t( int nShots, const Vector &vecSrc, const Vector &vecDir, const Vector &vecSpread, float flDistance, int nAmmoType, bool bPrimaryAttack = true )
+ {
+ m_iShots = nShots;
+ m_vecSrc = vecSrc;
+ m_vecDirShooting = vecDir;
+ m_vecSpread = vecSpread;
+ m_flDistance = flDistance;
+ m_iAmmoType = nAmmoType;
+ m_iTracerFreq = 4;
+ m_flDamage = 0;
+ m_iPlayerDamage = 0;
+ m_pAttacker = NULL;
+ m_nFlags = 0;
+ m_pAdditionalIgnoreEnt = NULL;
+ m_flDamageForceScale = 1.0f;
+ m_bPrimaryAttack = bPrimaryAttack;
+ m_bUseServerRandomSeed = false;
+ }
+
+ int m_iShots;
+ Vector m_vecSrc;
+ Vector m_vecDirShooting;
+ Vector m_vecSpread;
+ float m_flDistance;
+ int m_iAmmoType;
+ int m_iTracerFreq;
+ float m_flDamage;
+ int m_iPlayerDamage; // Damage to be used instead of m_flDamage if we hit a player
+ int m_nFlags; // See FireBulletsFlags_t
+ float m_flDamageForceScale;
+ CBaseEntity *m_pAttacker;
+ CBaseEntity *m_pAdditionalIgnoreEnt;
+ bool m_bPrimaryAttack;
+ bool m_bUseServerRandomSeed;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Data for making the MOVETYPE_STEP entities appear to simulate every frame
+// We precompute the simulation and then meter it out each tick during networking of the
+// entities origin and orientation. Uses a bit more bandwidth, but it solves the NPCs interacting
+// with elevators/lifts bugs.
+//-----------------------------------------------------------------------------
+struct StepSimulationStep
+{
+ int nTickCount;
+ Vector vecOrigin;
+ Quaternion qRotation;
+};
+
+struct StepSimulationData
+{
+ // Are we using the Step Simulation Data
+ bool m_bOriginActive;
+ bool m_bAnglesActive;
+
+ // This is the pre-pre-Think position, orientation (Quaternion) and tick count
+ StepSimulationStep m_Previous2;
+
+ // This is the pre-Think position, orientation (Quaternion) and tick count
+ StepSimulationStep m_Previous;
+
+ // This is a potential mid-think position, orientation (Quaternion) and tick count
+ // Used to mark motion discontinuities that happen between thinks
+ StepSimulationStep m_Discontinuity;
+
+ // This is the goal or post-Think position and orientation (and Quaternion for blending) and next think time tick
+ StepSimulationStep m_Next;
+ QAngle m_angNextRotation;
+
+ // This variable is used so that we only compute networked origin/angles once per tick
+ int m_nLastProcessTickCount;
+ // The computed/interpolated network origin/angles to use
+ Vector m_vecNetworkOrigin;
+ QAngle m_angNetworkAngles;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Simple state tracking for changing model sideways shrinkage during barnacle swallow
+//-----------------------------------------------------------------------------
+struct ModelScale
+{
+ float m_flModelScaleStart;
+ float m_flModelScaleGoal;
+ float m_flModelScaleFinishTime;
+ float m_flModelScaleStartTime;
+};
+
+#include "soundflags.h"
+
+struct CSoundParameters;
+typedef short HSOUNDSCRIPTHANDLE;
+//-----------------------------------------------------------------------------
+// Purpose: Aggregates and sets default parameters for EmitSound function calls
+//-----------------------------------------------------------------------------
+struct EmitSound_t
+{
+ EmitSound_t() :
+ m_nChannel( 0 ),
+ m_pSoundName( 0 ),
+ m_flVolume( VOL_NORM ),
+ m_SoundLevel( SNDLVL_NONE ),
+ m_nFlags( 0 ),
+ m_nPitch( PITCH_NORM ),
+ m_nSpecialDSP( 0 ),
+ m_pOrigin( 0 ),
+ m_flSoundTime( 0.0f ),
+ m_pflSoundDuration( 0 ),
+ m_bEmitCloseCaption( true ),
+ m_bWarnOnMissingCloseCaption( false ),
+ m_bWarnOnDirectWaveReference( false ),
+ m_nSpeakerEntity( -1 ),
+ m_UtlVecSoundOrigin(),
+ m_hSoundScriptHandle( -1 )
+ {
+ }
+
+ EmitSound_t( const CSoundParameters &src );
+
+ int m_nChannel;
+ char const *m_pSoundName;
+ float m_flVolume;
+ soundlevel_t m_SoundLevel;
+ int m_nFlags;
+ int m_nPitch;
+ int m_nSpecialDSP;
+ const Vector *m_pOrigin;
+ float m_flSoundTime; ///< NOT DURATION, but rather, some absolute time in the future until which this sound should be delayed
+ float *m_pflSoundDuration;
+ bool m_bEmitCloseCaption;
+ bool m_bWarnOnMissingCloseCaption;
+ bool m_bWarnOnDirectWaveReference;
+ int m_nSpeakerEntity;
+ mutable CUtlVector< Vector > m_UtlVecSoundOrigin; ///< Actual sound origin(s) (can be multiple if sound routed through speaker entity(ies) )
+ mutable HSOUNDSCRIPTHANDLE m_hSoundScriptHandle;
+};
+
+#define MAX_ACTORS_IN_SCENE 16
+
+//-----------------------------------------------------------------------------
+// Multiplayer specific defines
+//-----------------------------------------------------------------------------
+#define MAX_CONTROL_POINTS 8
+#define MAX_CONTROL_POINT_GROUPS 8
+
+// Maximum number of points that a control point may need owned to be cappable
+#define MAX_PREVIOUS_POINTS 3
+
+// The maximum number of teams the control point system knows how to deal with
+#define MAX_CONTROL_POINT_TEAMS 8
+
+// Maximum length of the cap layout string
+#define MAX_CAPLAYOUT_LENGTH 32
+
+// Maximum length of the current round printname
+#define MAX_ROUND_NAME 32
+
+// Maximum length of the current round name
+#define MAX_ROUND_IMAGE_NAME 64
+
+// Score added to the team score for a round win
+#define TEAMPLAY_ROUND_WIN_SCORE 1
+
+enum
+{
+ CP_WARN_NORMAL = 0,
+ CP_WARN_FINALCAP,
+ CP_WARN_NO_ANNOUNCEMENTS
+};
+
+// YWB: 3/12/2007
+// Changing the following #define for Prediction Error checking (See gamemovement.cpp for overview) will to 1 or 2 enables the system, 0 turns it off
+// Level 1 enables it, but doesn't force "full precision" networking, so you can still get lots of errors in position/velocity/etc.
+// Level 2 enables it but also forces origins/angles to be sent full precision, so other fields can be error / tolerance checked
+// NOTE: This stuff only works on a listen server since it punches a hole from the client .dll to server .dll!!!
+#define PREDICTION_ERROR_CHECK_LEVEL 0
+
+//-----------------------------------------------------------------------------
+// Round timer states
+//-----------------------------------------------------------------------------
+enum
+{
+ RT_STATE_SETUP, // Timer is in setup mode
+ RT_STATE_NORMAL, // Timer is in normal mode
+};
+
+enum
+{
+ SIMULATION_TIME_WINDOW_BITS = 8,
+};
+
+//-----------------------------------------------------------------------------
+// Commentary Mode
+//-----------------------------------------------------------------------------
+#if defined(TF_DLL) || defined(TF_CLIENT_DLL)
+#define GAME_HAS_NO_USE_KEY
+
+#if defined( SPROP_COORD )
+#undef SPROP_COORD
+#endif
+
+#define SPROP_COORD SPROP_COORD_MP
+
+#endif
+
+// The player's method of starting / stopping commentary
+#ifdef GAME_HAS_NO_USE_KEY
+#define COMMENTARY_BUTTONS (IN_ATTACK | IN_ATTACK2 | IN_USE)
+#else
+#define COMMENTARY_BUTTONS (IN_USE)
+#endif
+
+#define TEAM_TRAIN_MAX_TEAMS 4
+#define TEAM_TRAIN_MAX_HILLS 5
+#define TEAM_TRAIN_FLOATS_PER_HILL 2
+#define TEAM_TRAIN_HILLS_ARRAY_SIZE TEAM_TRAIN_MAX_TEAMS * TEAM_TRAIN_MAX_HILLS * TEAM_TRAIN_FLOATS_PER_HILL
+
+enum
+{
+ HILL_TYPE_NONE = 0,
+ HILL_TYPE_UPHILL,
+ HILL_TYPE_DOWNHILL,
+};
+
+#define NOINTERP_PARITY_MAX 4
+#define NOINTERP_PARITY_MAX_BITS 2
+
+//-----------------------------------------------------------------------------
+// Generic activity lookup support
+//-----------------------------------------------------------------------------
+enum
+{
+ kActivityLookup_Unknown = -2, // hasn't been searched for
+ kActivityLookup_Missing = -1, // has been searched for but wasn't found
+};
+
+#if defined(TF_DLL) || defined(TF_CLIENT_DLL)
+//-----------------------------------------------------------------------------
+// Vision Filters.
+//-----------------------------------------------------------------------------
+// Also used in the item schema to define vision filter or vision mode opt in
+#define TF_VISION_FILTER_NONE 0
+#define TF_VISION_FILTER_PYRO (1<<0) // 1
+#define TF_VISION_FILTER_HALLOWEEN (1<<1) // 2
+#define TF_VISION_FILTER_ROME (1<<2) // 4
+
+// THIS ENUM SHOULD MATCH THE ORDER OF THE FLAGS ABOVE
+enum
+{
+ VISION_MODE_NONE = 0,
+ VISION_MODE_PYRO,
+ VISION_MODE_HALLOWEEN,
+ VISION_MODE_ROME,
+
+ MAX_VISION_MODES
+};
+#endif // TF_DLL || TF_CLIENT_DLL
+
+#endif // SHAREDDEFS_H