diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/shareddefs.h | |
| download | archived-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.h | 955 |
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 |