|
|
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: Shared CS definitions.
//
//=============================================================================//
#ifndef CS_SHAREDDEFS_H
#define CS_SHAREDDEFS_H
#ifdef _WIN32
#pragma once
#endif
#if !defined (_GAMECONSOLE) && !defined( GC_DLL )
#include "econ_item_view.h"
#endif
#include "csgo_limits.h"
/*======================*/ // Menu stuff //
/*======================*/
#include <game/client/iviewport.h>
#include "cs_achievementdefs.h"
// CS-specific viewport panels
#define PANEL_CHOOSE_CLASS "choose_class"
// Buy sub menus
// #define MENU_PISTOL "menu_pistol"
// #define MENU_SHOTGUN "menu_shotgun"
// #define MENU_RIFLE "menu_rifle"
// #define MENU_SMG "menu_smg"
// #define MENU_MACHINEGUN "menu_mg"
// #define MENU_EQUIPMENT "menu_equip"
#define CSTRIKE_VISUALS_DATA_BYTES 96
#define MAX_HOSTAGES 12
#define MAX_HOSTAGE_RESCUES 4
#define HOSTAGE_RULE_CAN_PICKUP 1
#define MAX_MATCH_STATS_ROUNDS 30
#define MATCH_STATS_TEAM_SWAP_ROUND 15
#define IRONSIGHT // Enable viewmodel ironsight feature
#define GRENADE_UNDERHAND_FEATURE_ENABLED // Enable underhand grenade feature
#define GRENADE_DEFAULT_SIZE 2.0
// Brock H. - TR - 03/31/09
// This will allow the player to control CS bots
#define CS_CONTROLLABLE_BOTS_ENABLED 1
// demo & press build flags
#if !defined( CSTRIKE_DEMO_PRESSBUILD )
#define CSTRIKE_DEMO_PRESSBUILD 0
#endif
// Code for subscribing to SO caches for other players is disabled on the client because
// we don't use it, and the optimization to have the server send all inventory data instead
// of the gc has broken it. If we need that in the future for some reason, re-enable and figure out
// how to network (subscribing is expensive, probably should network from server like dota does).
//#define ENABLE_CLIENT_INVENTORIES_FOR_OTHER_PLAYERS
// E3
#if !defined( CSTRIKE_E3_BUILD )
#define CSTRIKE_E3_BUILD 0
#endif
//=============================================================================
#define CSTRIKE_DEFAULT_AVATAR "avatar_default_64"
#define CSTRIKE_DEFAULT_T_AVATAR "avatar_default-t_64"
#define CSTRIKE_DEFAULT_CT_AVATAR "avatar_default_64"
//=============================================================================
extern const float CS_PLAYER_SPEED_RUN; extern const float CS_PLAYER_SPEED_VIP; extern const float CS_PLAYER_SPEED_SHIELD; extern const float CS_PLAYER_SPEED_STOPPED; extern const float CS_PLAYER_SPEED_HAS_HOSTAGE; extern const float CS_PLAYER_SPEED_OBSERVER;
extern const float CS_PLAYER_SPEED_DUCK_MODIFIER; extern const float CS_PLAYER_SPEED_WALK_MODIFIER; extern const float CS_PLAYER_SPEED_CLIMB_MODIFIER; extern const float CS_PLAYER_HEAVYARMOR_FLINCH_MODIFIER;
extern const float CS_PLAYER_DUCK_SPEED_IDEAL;
#ifdef CSTRIKE15
#ifdef CLIENT_DLL
#define OLD_CROUCH_PROTOCOL_INDEX 13546
inline bool IsPreCrouchUpdateDemo( void ) { return (engine->IsHLTV() || engine->IsPlayingDemo()) && engine->GetConnectionDataProtocol() <= OLD_CROUCH_PROTOCOL_INDEX; } #endif
#endif
template< class T > class CUtlVectorInitialized : public CUtlVector< T > { public: CUtlVectorInitialized( T* pMemory, int numElements ) : CUtlVector< T >( pMemory, numElements ) { CUtlVector< T >::SetSize( numElements ); } };
namespace TeamJoinFailedReason { enum Type { CHANGED_TOO_OFTEN, BOTH_TEAMS_FULL, TERRORISTS_FULL, CTS_FULL, CANT_JOIN_SPECTATOR, HUMANS_CAN_ONLY_JOIN_TS, HUMANS_CAN_ONLY_JOIN_CTS, TOO_MANY_TS, TOO_MANY_CTS, }; };
#define CS_HOSTAGE_TRANSTIME_PICKUP 0.1
#define CS_HOSTAGE_TRANSTIME_DROP 0.25
#define CS_HOSTAGE_TRANSTIME_RESCUE 4.0
enum EHostageStates_t { k_EHostageStates_Idle = 0, k_EHostageStates_BeingUntied, k_EHostageStates_GettingPickedUp, k_EHostageStates_BeingCarried, k_EHostageStates_FollowingPlayer, k_EHostageStates_GettingDropped, k_EHostageStates_Rescued, k_EHostageStates_Dead, };
#define CONSTANT_UNITS_SMOKEGRENADERADIUS 166
#define CONSTANT_UNITS_GENERICGRENADERADIUS 115
const float SmokeGrenadeRadius = CONSTANT_UNITS_SMOKEGRENADERADIUS; const float FlashbangGrenadeRadius = CONSTANT_UNITS_GENERICGRENADERADIUS; const float HEGrenadeRadius = CONSTANT_UNITS_GENERICGRENADERADIUS; const float MolotovGrenadeRadius = CONSTANT_UNITS_GENERICGRENADERADIUS; const float DecoyGrenadeRadius = CONSTANT_UNITS_GENERICGRENADERADIUS;
// These go in CCSPlayer::m_iAddonBits and get sent to the client so it can create
// grenade models hanging off players.
// [mlowrance] Molotov purposely left out
#define ADDON_FLASHBANG_1 0x0001
#define ADDON_FLASHBANG_2 0x0002
#define ADDON_HE_GRENADE 0x0004
#define ADDON_SMOKE_GRENADE 0x0008
#define ADDON_C4 0x0010
#define ADDON_DEFUSEKIT 0x0020
#define ADDON_PRIMARY 0x0040
#define ADDON_PISTOL 0x0080
#define ADDON_PISTOL2 0x0100
#define ADDON_DECOY 0x0200
#define ADDON_KNIFE 0x0400
#define ADDON_MASK 0x0800
#define ADDON_TAGRENADE 0x1000
#define NUM_ADDON_BITS 13
#define ADDON_CLIENTSIDE_HOLIDAY_HAT ( 0x1 << NUM_ADDON_BITS )
#define ADDON_CLIENTSIDE_GHOST ( 0x2 << NUM_ADDON_BITS )
#define ADDON_CLIENTSIDE_ASSASSINATION_TARGET ( 0x4 << NUM_ADDON_BITS )
#define NUM_CLIENTSIDE_ADDON_BITS 3
// Indices of each weapon slot.
#define WEAPON_SLOT_RIFLE 0 // (primary slot)
#define WEAPON_SLOT_PISTOL 1 // (secondary slot)
#define WEAPON_SLOT_KNIFE 2
#define WEAPON_SLOT_GRENADES 3
#define WEAPON_SLOT_C4 4
#define WEAPON_SLOT_FIRST 0
#define WEAPON_SLOT_LAST 4
// CS Team IDs.
#define TEAM_TERRORIST 2
#define TEAM_CT 3
#define TEAM_MAXCOUNT 4 // update this if we ever add teams (unlikely)
#define TEAM_TERRORIST_BASE0 TEAM_TERRORIST - 2
#define TEAM_CT_BASE0 TEAM_CT - 2
// [menglish] CS specific death animation time now that freeze cam is implemented
// in order to linger on the players body less
#define CS_DEATH_ANIMATION_TIME 0.5
// [tj] The number of times you must kill a given player to be dominating them
// Should always be more than 1
#define CS_KILLS_FOR_DOMINATION 4
#define CS_DEATH_DOMINATION 0x0001 // killer is dominating victim
#define CS_DEATH_REVENGE 0x0002 // killer got revenge on victim
//--------------
// CSPort Specific damage flags
//--------------
#define DMG_HEADSHOT (DMG_LASTGENERICFLAG<<1)
struct PlayerViewmodelArmConfig { const char *szPlayerModelSearchSubStr; const char *szSkintoneIndex; const char *szAssociatedGloveModel; const char *szAssociatedSleeveModel; const char *szAssociatedSleeveModelEconOverride; };
// The various states the player can be in during the join game process.
enum CSPlayerState { // Happily running around in the game.
// You can't move though if CSGameRules()->IsFreezePeriod() returns true.
// This state can jump to a bunch of other states like STATE_PICKINGCLASS or STATE_DEATH_ANIM.
STATE_ACTIVE=0, // This is the state you're in when you first enter the server.
// It's switching between intro cameras every few seconds, and there's a level info
// screen up.
STATE_WELCOME, // Show the level intro screen.
// During these states, you can either be a new player waiting to join, or
// you can be a live player in the game who wants to change teams.
// Either way, you can't move while choosing team or class (or while any menu is up).
STATE_PICKINGTEAM, // Choosing team.
STATE_PICKINGCLASS, // Choosing class.
STATE_DEATH_ANIM, // Playing death anim, waiting for that to finish.
STATE_DEATH_WAIT_FOR_KEY, // Done playing death anim. Waiting for keypress to go into observer mode.
STATE_OBSERVER_MODE, // Noclipping around, watching players, etc.
STATE_GUNGAME_RESPAWN, // Respawning the player in a gun game
STATE_DORMANT, // No thinking, client updates, etc
NUM_PLAYER_STATES };
enum e_RoundEndReason { /*
NOTE/WARNING: these enum values are stored in demo files, they are explicitly numbered for consistency and editing, do not renumber existing elements, always add new elements with different numeric values! */ Invalid_Round_End_Reason = -1, RoundEndReason_StillInProgress = 0, Target_Bombed = 1, VIP_Escaped = 2, VIP_Assassinated = 3, Terrorists_Escaped = 4, CTs_PreventEscape = 5, Escaping_Terrorists_Neutralized = 6, Bomb_Defused = 7, CTs_Win = 8, Terrorists_Win = 9, Round_Draw = 10, All_Hostages_Rescued = 11, Target_Saved = 12, Hostages_Not_Rescued = 13, Terrorists_Not_Escaped = 14, VIP_Not_Escaped = 15, Game_Commencing = 16, Terrorists_Surrender = 17, CTs_Surrender = 18, Terrorists_Planted = 19, CTs_ReachedHostage = 20, RoundEndReason_Count = 21, };
enum GamePhase { GAMEPHASE_WARMUP_ROUND, GAMEPHASE_PLAYING_STANDARD, GAMEPHASE_PLAYING_FIRST_HALF, GAMEPHASE_PLAYING_SECOND_HALF, GAMEPHASE_HALFTIME, GAMEPHASE_MATCH_ENDED, GAMEPHASE_MAX };
enum GrenadeType_t { GRENADE_TYPE_EXPLOSIVE, GRENADE_TYPE_FLASH, GRENADE_TYPE_FIRE, GRENADE_TYPE_DECOY, GRENADE_TYPE_SMOKE, GRENADE_TYPE_SENSOR,
GRENADE_TYPE_TOTAL, };
#define PUSHAWAY_THINK_INTERVAL (1.0f / 20.0f)
#define GLOWUPDATE_DEFAULT_THINK_INTERVAL 0.2f
#define CS_MAX_PLAYER_MODELS 10
#define MAX_MODEL_STRING_SIZE 256
#define CS_CLASS_NONE 0
#define MAX_ENDMATCH_VOTE_PANELS 10
const PlayerViewmodelArmConfig *GetPlayerViewmodelArmConfigForPlayerModel( const char* szPlayerModel );
class PlayerModelInfo { public: PlayerModelInfo();
#if !defined( CLIENT_DLL )
bool IsTClass( int classID ); bool IsCTClass( int classID );
int GetFirstTClass( void ) const { return 1; } int GetFirstCTClass( void ) const { return m_NumTModels + 1; } int GetFirstClass( void ) const { return GetFirstTClass(); }
int GetLastTClass( void ) const { return m_NumTModels; } int GetLastCTClass( void ) const { return m_NumTModels + m_NumCTModels; } int GetLastClass( void ) const { return GetLastCTClass(); }
int GetNextClassForTeam( int team );
const char *GetClassName( int classID ); const char *GetClassModelPath( int classID );
int GetNumTModels( void ) const { return m_NumTModels; } int GetNumCTModels( void ) const { return m_NumCTModels; }
void InitializeForCurrentMap( void );
private: void AddModel( const char *modelName ); void SetTViewModelArms( const char *modelName ); void SetCTViewModelArms( const char *modelName );
#endif // !CLIENT_DLL
public: static const char* g_customizationModelCT; static const char* g_customizationModelT; static const char *g_defaultTModel; static const char *g_defaultCTModel;
static PlayerModelInfo* GetPtr( void ) { return &s_PlayerModelInfo; }
private: static PlayerModelInfo s_PlayerModelInfo;
#if !defined( CLIENT_DLL )
char m_ClassModelPaths[CS_MAX_PLAYER_MODELS][MAX_MODEL_STRING_SIZE]; char m_ClassNames[CS_MAX_PLAYER_MODELS][MAX_MODEL_STRING_SIZE]; char m_mapName[MAX_MODEL_STRING_SIZE];
int m_NumTModels; int m_NumCTModels; int m_NumModels; int m_nNextClassT; int m_nNextClassCT; #endif // !CLIENT_DLL
};
// MVP reasons
enum CSMvpReason_t { CSMVP_UNDEFINED = 0, CSMVP_ELIMINATION, CSMVP_BOMBPLANT, CSMVP_BOMBDEFUSE, CSMVP_HOSTAGERESCUE,
CSMVP_GUNGAMEWINNER, };
// Keep these in sync with CSClasses.
#define CS_MUZZLEFLASH_NONE -1
#define CS_MUZZLEFLASH_NORM 0
#define CS_MUZZLEFLASH_X 1
extern const char *pszWinPanelCategoryHeaders[];
// Possible results for CSPlayer::CanAcquire
namespace AcquireResult { enum Type { Allowed, InvalidItem, AlreadyOwned, AlreadyPurchased, ReachedGrenadeTypeLimit, ReachedGrenadeTotalLimit, NotAllowedByTeam, NotAllowedByMap, NotAllowedByMode, NotAllowedForPurchase, NotAllowedByProhibition, }; }
// Possible results for CSPlayer::CanAcquire
namespace AcquireMethod { enum Type { PickUp, Buy, }; }
// Results for CSPlayer::CanProgressQuest()
namespace QuestProgress { enum Reason { // Default value: not initialized yet (game rules or inventory data not yet retrieved)
QUEST_NONINITIALIZED,
// Quest can make progression
QUEST_OK,
// Quest can make progression if more humans connect to server
QUEST_NOT_ENOUGH_PLAYERS,
// Quest can make progression once warmup is ended.
// This is only verified on client, and could be mismatched between client and server.
QUEST_WARMUP,
// No steam account found
QUEST_NOT_CONNECTED_TO_STEAM,
// Playing on community server, quests only enabled on Valve servers
QUEST_NONOFFICIAL_SERVER,
// Don't have the challenge coin
QUEST_NO_ENTITLEMENT,
// User has no active quest
QUEST_NO_QUEST,
// User isn't human
QUEST_PLAYER_IS_BOT,
// Doesn't match state required by quest
QUEST_WRONG_MAP, QUEST_WRONG_MODE,
// Client thinks it has quest, but the server doesn't know about it
QUEST_NOT_SYNCED_WITH_SERVER,
// Sentinel entry, never used except for maximum size verification
QUEST_REASON_MAX, };
const int QuestReasonBits = 4; COMPILE_TIME_ASSERT( QUEST_REASON_MAX <= ( 1 << QuestReasonBits ) );
const char* ReasonString(Reason reason); // for use by UI code, so that values stay consistent if enum changes
}
#endif // CS_SHAREDDEFS_H
|