//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef DOD_SHAREDDEFS_H #define DOD_SHAREDDEFS_H #ifdef _WIN32 #pragma once #endif #include "dod_playeranimstate.h" #define DOD_PLAYER_VIEW_OFFSET Vector( 0, 0, 54 ) // DOD Team IDs. #define TEAM_ALLIES 2 #define TEAM_AXIS 3 #define TEAM_MAXCOUNT 4 // update this if we ever add teams (unlikely) enum SubTeam { SUBTEAM_NORMAL = 0, SUBTEAM_PARA, SUBTEAM_ALT_NATION, NUM_SUBTEAMS }; #define MAX_CONTROL_POINTS 8 #define MAX_CONTROL_POINT_GROUPS 8 #define DEATH_CAM_TIME 5.0f #define MAX_WAVE_RESPAWN_TIME 20.0f #define DOD_BOMB_TIMER_LENGTH 20 #define DOD_BOMB_DEFUSE_TIME 3.0f #define DOD_BOMB_PLANT_TIME 2.0f #define DOD_BOMB_PLANT_RADIUS 80 #define DOD_BOMB_DEFUSE_MAXDIST 96.0f enum { CAP_EVENT_NONE, CAP_EVENT_BOMB, CAP_EVENT_FLAG, CAP_EVENT_TIMER_EXPIRE }; enum { WINPANEL_TOP3_NONE, WINPANEL_TOP3_BOMBERS, WINPANEL_TOP3_CAPPERS, WINPANEL_TOP3_DEFENDERS, WINPANEL_TOP3_KILLERS }; //-------------- // DoD Specific damage flags //-------------- // careful when reusing HL2 DMG_ flags, some of them cancel out the damage, eg if they are in DMG_TIMEBASED #define DMG_STUN (DMG_PARALYZE) //(1<<15) #define DMG_MACHINEGUN (DMG_LASTGENERICFLAG<<1) //(1<<30) #define DMG_BOMB (DMG_LASTGENERICFLAG<<2) //(1<<31) //END OF THE EXTENDABLE LIST!! Start reusing HL2 specific flags #define MELEE_DMG_SECONDARYATTACK (1<<0) #define MELEE_DMG_FIST (1<<1) #define MELEE_DMG_EDGE (1<<2) #define MELEE_DMG_STRONGATTACK (1<<3) #define SANDBAG_NOT_TOUCHING 0 #define SANDBAG_TOUCHING 1 #define SANDBAG_TOUCHING_ALIGNED 2 #define SANDBAG_DEPLOYED 3 #define PRONE_DEPLOY_HEIGHT -1 #define STANDING_DEPLOY_HEIGHT 58 #define CROUCHING_DEPLOY_HEIGHT 28 #define TIME_TO_DEPLOY 0.3 #define MIN_DEPLOY_PITCH 45 #define MAX_DEPLOY_PITCH -60 #define VEC_DUCK_MOVING_HULL_MIN Vector(-16, -16, 0 ) #define VEC_DUCK_MOVING_HULL_MAX Vector( 16, 16, 55 ) #define VEC_PRONE_HULL_MIN DODGameRules()->GetDODViewVectors()->m_vProneHullMin #define VEC_PRONE_HULL_MAX DODGameRules()->GetDODViewVectors()->m_vProneHullMax // MUST be shorter than duck hull for deploy check #define VEC_PRONE_HULL_MIN_SCALED( player ) ( DODGameRules()->GetDODViewVectors()->m_vProneHullMin * player->GetModelScale() ) #define VEC_PRONE_HULL_MAX_SCALED( player ) ( DODGameRules()->GetDODViewVectors()->m_vProneHullMax * player->GetModelScale() ) #define VEC_PRONE_HELPER_HULL_MIN Vector(-48, -48, 0 ) #define VEC_PRONE_HELPER_HULL_MAX Vector( 48, 48, 24 ) #define GRENADE_FUSE_LENGTH 5.0 #define RIFLEGRENADE_FUSE_LENGTH 3.5 #define CONTENTS_PRONE_HELPER 0x80000000 #define PASS_OUT_CHANGE_TIME 1.5 #define PASS_OUT_GET_UP_TIME 1.5 // DOD-specific viewport panels #define PANEL_TEAM "team" #define PANEL_CLASS_ALLIES "class_us" #define PANEL_CLASS_AXIS "class_ger" #define PANEL_BACKGROUND "background" #define COLOR_DOD_GREEN Color(77, 121, 66, 255) // Color(76, 102, 76, 255) #define COLOR_DOD_RED Color(255, 64, 64, 255) #define DOD_HUD_HEALTH_IMAGE_LENGTH 64 // The various states the player can be in during the join game process. enum DODPlayerState { // Happily running around in the game. // 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_OBSERVING, // Done playing death anim. Waiting for keypress to go into observer mode. STATE_OBSERVER_MODE, // Noclipping around, watching players, etc. NUM_PLAYER_STATES }; enum DODRoundState { // initialize the game, create teams STATE_INIT=0, //Before players have joined the game. Periodically checks to see if enough players are ready //to start a game. Also reverts to this when there are no active players STATE_PREGAME, //The game is about to start, wait a bit and spawn everyone STATE_STARTGAME, //All players are respawned, frozen in place STATE_PREROUND, //Round is on, playing normally STATE_RND_RUNNING, //Someone has won the round STATE_ALLIES_WIN, STATE_AXIS_WIN, //Noone has won, manually restart the game, reset scores STATE_RESTART, //Game is over, showing the scoreboard etc STATE_GAME_OVER, NUM_ROUND_STATES }; #define PLAYERCLASS_RANDOM -2 #define PLAYERCLASS_UNDEFINED -1 #define DOD_PLAYERMODEL_AXIS_RIFLEMAN "models/player/german_rifleman.mdl" #define DOD_PLAYERMODEL_AXIS_ASSAULT "models/player/german_assault.mdl" #define DOD_PLAYERMODEL_AXIS_SUPPORT "models/player/german_support.mdl" #define DOD_PLAYERMODEL_AXIS_SNIPER "models/player/german_sniper.mdl" #define DOD_PLAYERMODEL_AXIS_MG "models/player/german_mg.mdl" #define DOD_PLAYERMODEL_AXIS_ROCKET "models/player/german_rocket.mdl" #define DOD_PLAYERMODEL_US_RIFLEMAN "models/player/american_rifleman.mdl" #define DOD_PLAYERMODEL_US_ASSAULT "models/player/american_assault.mdl" #define DOD_PLAYERMODEL_US_SUPPORT "models/player/american_support.mdl" #define DOD_PLAYERMODEL_US_SNIPER "models/player/american_sniper.mdl" #define DOD_PLAYERMODEL_US_MG "models/player/american_mg.mdl" #define DOD_PLAYERMODEL_US_ROCKET "models/player/american_rocket.mdl" typedef struct DodClassInfo_s { char selectcmd[32]; char classname[128]; char modelname[128]; int team; //which team. 0 == allies, 1 == axis int primarywpn; int secondarywpn; int meleewpn; int numgrenades; int armskin; //what skin does this class show in grenades / knives int headgroup; //bodygroups int helmetgroup; int geargroup; int bodygroup; int hairgroup; //what helmet group to switch to when the helmet comes off } DodClassInfo_t; extern DodClassInfo_t g_ClassInfo[]; //a structure to hold all of the classes extern DodClassInfo_t g_ParaClassInfo[]; // Voice Commands typedef struct DodVoiceCommand_s { const char *pszCommandName; // console command that will produce the voice command const char *pszSoundName; // name of sound to play PlayerAnimEvent_t iHandSignal; //index into the hand signal array const char *pszAlliedSubtitle; // subtitles for each nationality const char *pszAxisSubtitle; const char *pszBritishSubtitle; } DodVoiceCommand_t; extern DodVoiceCommand_t g_VoiceCommands[]; // Hand Signals typedef struct DodHandSignal_s { const char *pszCommandName; // console command that will produce the voice command PlayerAnimEvent_t iHandSignal; //index into the hand signal array const char *pszSubtitle; // subtitles for each nationality } DodHandSignal_t; extern DodHandSignal_t g_HandSignals[]; #define ARM_SKIN_UNDEFINED 0 enum { HEAD_GROUP_0 = 0, HEAD_GROUP_1, HEAD_GROUP_2, HEAD_GROUP_3, HEAD_GROUP_4, HEAD_GROUP_5, HEAD_GROUP_6, }; enum { HELMET_GROUP_0 = 0, HELMET_GROUP_1, HELMET_GROUP_2, HELMET_GROUP_3, HELMET_GROUP_4, HELMET_GROUP_5, HELMET_GROUP_6, HELMET_GROUP_7, }; enum { BODY_GROUP_0 = 0, BODY_GROUP_1, BODY_GROUP_2, BODY_GROUP_3, BODY_GROUP_4, BODY_GROUP_5, }; enum { GEAR_GROUP_0 = 0, GEAR_GROUP_1, GEAR_GROUP_2, GEAR_GROUP_3, GEAR_GROUP_4, GEAR_GROUP_5, GEAR_GROUP_6, }; enum { BODYGROUP_BODY = 0, BODYGROUP_HELMET, BODYGROUP_HEAD, BODYGROUP_GEAR, BODYGROUP_JUMPGEAR }; enum { BODYGROUP_HEAD1 = 0, BODYGROUP_HEAD2, BODYGROUP_HEAD3, BODYGROUP_HEAD4, BODYGROUP_HEAD5, BODYGROUP_HEAD6, BODYGROUP_HEAD7 }; //helmet groups #define BODYGROUP_HELMET_ON 0 #define BODYGROUP_ALLIES_HELMET_HELMET1 0 #define BODYGROUP_ALLIES_HELMET_HELMET2 1 #define BODYGROUP_ALLIES_HELMET_OFF 2 #define BODYGROUP_AXIS_HAIR0 1 #define BODYGROUP_AXIS_HAIR1 2 #define BODYGROUP_AXIS_HAIR2 3 #define BODYGROUP_AXIS_HAIR3 4 #define BODYGROUP_AXIS_HAIR4 5 #define BODYGROUP_AXIS_HAIR5 6 #define BODYGROUP_AXIS_HAIR6 7 //battle gear groups #define BODYGROUP_TOMMYGEAR 0 #define BODYGROUP_SPRINGGEAR 1 #define BODYGROUP_GARANDGEAR 2 #define BODYGROUP_MGGEAR 3 #define BODYGROUP_BARGEAR 4 #define BODYGROUP_CARBGEAR 5 #define BODYGROUP_GREASEGUNGEAR 6 //jump gear #define BODYGROUP_JUMPGEAR_OFF 0 #define BODYGROUP_JUMPGEAR_ON 1 enum { HELMET_ALLIES = 0, HELMET_AXIS, NUM_HELMETS }; extern const char *m_pszHelmetModels[NUM_HELMETS]; //Materials /* #define CHAR_TEX_CONCRETE 'C' // texture types #define CHAR_TEX_METAL 'M' #define CHAR_TEX_DIRT 'D' #define CHAR_TEX_GRATE 'G' #define CHAR_TEX_TILE 'T' #define CHAR_TEX_WOOD 'W' #define CHAR_TEX_GLASS 'Y' #define CHAR_TEX_FLESH 'F' #define CHAR_TEX_WATER 'S' #define CHAR_TEX_ROCK 'R' #define CHAR_TEX_SAND 'A' #define CHAR_TEX_GRAVEL 'L' #define CHAR_TEX_STUCCO 'Z' #define CHAR_TEX_BRICK 'B' #define CHAR_TEX_SNOW 'N' #define CHAR_TEX_HEAVYMETAL 'H' #define CHAR_TEX_LEAVES 'E' #define CHAR_TEX_SKY 'K' #define CHAR_TEX_GRASS 'P' */ #define WPN_SLOT_PRIMARY 0 #define WPN_SLOT_SECONDARY 1 #define WPN_SLOT_MELEE 2 #define WPN_SLOT_GRENADES 3 #define WPN_SLOT_BOMB 4 #define SLEEVE_AXIS 0 #define SLEEVE_ALLIES 1 #define VM_BODYGROUP_GUN 0 #define VM_BODYGROUP_SLEEVE 1 #define PLAYER_SPEED_FROZEN 1 #define PLAYER_SPEED_PRONE 50 #define PLAYER_SPEED_PRONE_ZOOMED 30 #define PLAYER_SPEED_PRONE_BAZOOKA_DEPLOYED 30 #define PLAYER_SPEED_ZOOMED 42 #define PLAYER_SPEED_BAZOOKA_DEPLOYED 50 #define PLAYER_SPEED_NORMAL 600.0f #define PLAYER_SPEED_SLOWED 120 #define PLAYER_SPEED_RUN 220 #define PLAYER_SPEED_SPRINT 330 #define PUSHAWAY_THINK_INTERVAL (1.0f / 20.0f) #define VEC_PRONE_VIEW Vector(0,0,10) #define VEC_PRONE_VIEW_SCALED( player ) ( Vector(0,0,10) * player->GetModelScale() ) #define TIME_TO_PRONE 1.2f // should be 1.5! #define INITIAL_SPRINT_STAMINA_PENALTY 15 #define LOW_STAMINA_THRESHOLD 35 // changed to 80% of goldsrc values, gives the same end result #define ZOOM_SWAY_PRONE 0.1 #define ZOOM_SWAY_DUCKING 0.2 #define ZOOM_SWAY_STANDING 0.5 #define ZOOM_SWAY_MOVING_PENALTY 0.4 extern const char * s_WeaponAliasInfo[]; enum { //Dod hint messages HINT_FRIEND_SEEN = 0, // #Hint_spotted_a_friend HINT_ENEMY_SEEN, // #Hint_spotted_an_enemy HINT_FRIEND_INJURED, // #Hint_try_not_to_injure_teammates HINT_FRIEND_KILLED, // #Hint_careful_around_teammates HINT_ENEMY_KILLED, // #Hint_killing_enemies_is_good HINT_IN_AREA_CAP, // #Hint_touched_area_capture HINT_FLAG_TOUCH, // #Hint_touched_control_point HINT_OBJECT_PICKUP, // #Hint_picked_up_object HINT_MG_FIRE_UNDEPLOYED, // #Hint_mgs_fire_better_deployed HINT_SANDBAG_AREA, // #Hint_sandbag_area_touch HINT_BAZOOKA_PICKUP, // #Hint_rocket_weapon_pickup HINT_AMMO_EXHAUSTED, // #Hint_out_of_ammo HINT_PRONE, // #Hint_prone HINT_LOW_STAMINA, // #Hint_low_stamina HINT_OBJECT_REQUIRED, // #Hint_area_requires_object HINT_PLAYER_KILLED_WAVETIME, // #Hint_player_killed_wavetime HINT_WEAPON_OVERHEAT, // #Hint_mg_overheat HINT_SHOULDER_WEAPON, // #game_shoulder_rpg HINT_PICK_UP_WEAPON, // #Hint_pick_up_weapon HINT_PICK_UP_GRENADE, // #Hint_pick_up_grenade HINT_DEATHCAM, // #Hint_death_cam HINT_CLASSMENU, // #Hint_class_menu HINT_USE_MELEE, // #Hint_use_2e_melee HINT_USE_ZOOM, // #Hint_use_zoom HINT_USE_IRON_SIGHTS, // #Hint_use_iron_sights HINT_USE_SEMI_AUTO, // #Hint_use_semi_auto HINT_USE_SPRINT, // #Hint_use_sprint HINT_USE_DEPLOY, // #Hint_use_deploy HINT_USE_PRIME, // #Hint_use_prime HINT_MG_DEPLOY_USAGE, // #Hint_mg_deploy_usage HINT_MG_DEPLOY_TO_RELOAD, // #Dod_mg_reload HINT_GARAND_RELOAD, // #Hint_garand_reload HINT_TURN_OFF_HINTS, // #Hint_turn_off_hints HINT_NEED_BOMB, // #Hint_need_bomb_to_plant HINT_BOMB_PLANTED, // #Hint_bomb_planted HINT_DEFUSE_BOMB, // #Hint_defuse_bomb HINT_BOMB_TARGET, // #Hint_bomb_target HINT_BOMB_PICKUP, // #Hint_bomb_pickup HINT_BOMB_DEFUSE_ONGROUND, // #Hint_bomb_defuse_onground HINT_BOMB_PLANT_MAP, // #Hint_bomb_plant_map HINT_BOMB_FIRST_SELECT, // #Hint_bomb_first_select NUM_HINTS }; extern const char *g_pszHintMessages[]; // HINT_xxx bits to clear when the round restarts #define HINT_MASK_SPAWN_CLEAR ( 1 << HINT_FRIEND_KILLED ) // criteria for when a weapon model wants to use an alt model #define ALTWPN_CRITERIA_NONE 0 #define ALTWPN_CRITERIA_FIRING (1 << 0) #define ALTWPN_CRITERIA_RELOADING (1 << 1) #define ALTWPN_CRITERIA_DEPLOYED (1 << 2) #define ALTWPN_CRITERIA_DEPLOYED_RELOAD (1 << 3) #define ALTWPN_CRITERIA_PRONE (1 << 4) // player is prone #define ALTWPN_CRITERIA_PRONE_DEPLOYED_RELOAD (1 << 5) // player should use special alt model when prone deployed reloading // eject brass shells #define EJECTBRASS_PISTOL 0 #define EJECTBRASS_RIFLE 1 #define EJECTBRASS_MG 2 #define EJECTBRASS_MG_2 3 // ? #define EJECTBRASS_GARANDCLIP 4 extern const char *pszTeamAlliesClasses[]; extern const char *pszTeamAxisClasses[]; enum { DOD_COLLISIONGROUP_SHELLS = LAST_SHARED_COLLISION_GROUP, DOD_COLLISIONGROUP_BLOCKERWALL, }; enum { PROGRESS_BAR_BANDAGER = 0, PROGRESS_BAR_BANDAGEE, PROGRESS_BAR_CAP, // done by objective resource NUM_PROGRESS_BAR_TYPES }; // used for the corner cut panels in the HUD enum { DOD_CORNERCUT_PANEL_BOTTOMRIGHT = 0, DOD_CORNERCUT_PANEL_BOTTOMLEFT, DOD_CORNERCUT_PANEL_TOPRIGHT, DOD_CORNERCUT_PANEL_TOPLEFT, }; enum ViewAnimationType { VIEW_ANIM_LINEAR_Z_ONLY, VIEW_ANIM_SPLINE_Z_ONLY, VIEW_ANIM_EXPONENTIAL_Z_ONLY, }; enum BombTargetState { // invisible, not active BOMB_TARGET_INACTIVE=0, // visible, accepts planting +use BOMB_TARGET_ACTIVE, // visible, accepts disarm +use, counts down to explosion // if disarmed, returns to BOMB_TARGET_ACTIVE // if explodes, returns to BOMB_TARGET_INACTIVE BOMB_TARGET_ARMED, NUM_BOMB_TARGET_STATES }; extern const char *pszWinPanelCategoryHeaders[]; enum { // Season 1 ACHIEVEMENT_DOD_THROW_BACK_GREN = 0, ACHIEVEMENT_DOD_CONSECUTIVE_HEADSHOTS, ACHIEVEMENT_DOD_MG_POSITION_STREAK, ACHIEVEMENT_DOD_WIN_KNIFE_FIGHT, ACHIEVEMENT_DOD_PLAY_CUSTOM_MAPS, ACHIEVEMENT_DOD_KILLS_WITH_GRENADE, ACHIEVEMENT_DOD_LONG_RANGE_ROCKET, ACHIEVEMENT_DOD_END_ROUND_KILLS, ACHIEVEMENT_DOD_CAP_LAST_FLAG, ACHIEVEMENT_DOD_USE_ENEMY_WEAPONS, ACHIEVEMENT_DOD_KILL_DOMINATING_MG, ACHIEVEMENT_DOD_COLMAR_DEFENSE, ACHIEVEMENT_DOD_BLOCK_CAPTURES, ACHIEVEMENT_DOD_JAGD_OVERTIME_CAP, ACHIEVEMENT_DOD_WEAPON_MASTERY, // grinds ACHIEVEMENT_DOD_KILLS_AS_ALLIES, ACHIEVEMENT_DOD_KILLS_AS_AXIS, ACHIEVEMENT_DOD_KILLS_AS_RIFLEMAN, ACHIEVEMENT_DOD_KILLS_AS_ASSAULT, ACHIEVEMENT_DOD_KILLS_AS_SUPPORT, ACHIEVEMENT_DOD_KILLS_AS_SNIPER, ACHIEVEMENT_DOD_KILLS_AS_MG, ACHIEVEMENT_DOD_KILLS_AS_BAZOOKAGUY, ACHIEVEMENT_DOD_KILLS_WITH_GARAND, ACHIEVEMENT_DOD_KILLS_WITH_THOMPSON, ACHIEVEMENT_DOD_KILLS_WITH_BAR, ACHIEVEMENT_DOD_KILLS_WITH_SPRING, ACHIEVEMENT_DOD_KILLS_WITH_30CAL, ACHIEVEMENT_DOD_KILLS_WITH_BAZOOKA, ACHIEVEMENT_DOD_KILLS_WITH_K98, ACHIEVEMENT_DOD_KILLS_WITH_MP40, ACHIEVEMENT_DOD_KILLS_WITH_MP44, ACHIEVEMENT_DOD_KILLS_WITH_K98SCOPED, ACHIEVEMENT_DOD_KILLS_WITH_MG42, ACHIEVEMENT_DOD_KILLS_WITH_PSCHRECK, ACHIEVEMENT_DOD_KILLS_WITH_COLT, ACHIEVEMENT_DOD_KILLS_WITH_P38, ACHIEVEMENT_DOD_KILLS_WITH_C96, ACHIEVEMENT_DOD_KILLS_WITH_M1CARBINE, ACHIEVEMENT_DOD_KILLS_WITH_AMERKNIFE, ACHIEVEMENT_DOD_KILLS_WITH_SPADE, ACHIEVEMENT_DOD_KILLS_WITH_PUNCH, ACHIEVEMENT_DOD_KILLS_WITH_FRAG_US, ACHIEVEMENT_DOD_KILLS_WITH_FRAG_GER, ACHIEVEMENT_DOD_KILLS_WITH_RIFLEGREN_US, ACHIEVEMENT_DOD_KILLS_WITH_RIFLEGREN_GER, ACHIEVEMENT_DOD_CAPTURE_GRIND, ACHIEVEMENT_DOD_BLOCK_CAPTURES_GRIND, ACHIEVEMENT_DOD_ROUNDS_WON_GRIND, ACHIEVEMENT_DOD_BOMBS_PLANTED_GRIND, ACHIEVEMENT_DOD_BOMBS_DEFUSED_GRIND, ACHIEVEMENT_DOD_ALL_PACK_1, ACHIEVEMENT_DOD_BEAT_THE_HEAT, // Winter 2011 ACHIEVEMENT_DOD_COLLECT_HOLIDAY_GIFTS, NUM_DOD_ACHIEVEMENTS }; #define ACHIEVEMENT_NUM_CONSECUTIVE_HEADSHOTS 5 #define ACHIEVEMENT_MG_STREAK_IS_DOMINATING 8 #define ACHIEVEMENT_NUM_ENEMY_WPN_KILLS 5 #define ACHIEVEMENT_LONG_RANGE_ROCKET_DIST 1200 // other magic numbers exist inside the achievements themselves in achievements_dod.cpp enum { DOD_MUZZLEFLASH_PISTOL = 0, DOD_MUZZLEFLASH_AUTO, DOD_MUZZLEFLASH_RIFLE, DOD_MUZZLEFLASH_MG, DOD_MUZZLEFLASH_ROCKET, DOD_MUZZLEFLASH_MG42 }; #define DOD_KILLS_DOMINATION 4 // Death notice flags #define DOD_DEATHFLAG_DOMINATION 0x0001 // killer is dominating victim #define DOD_DEATHFLAG_REVENGE 0x0002 // killer got revenge on victim enum { ACHIEVEMENT_AWARDS_NONE = 0, ACHIEVEMENT_AWARDS_RIFLEMAN, ACHIEVEMENT_AWARDS_ASSAULT, ACHIEVEMENT_AWARDS_SUPPORT, ACHIEVEMENT_AWARDS_SNIPER, ACHIEVEMENT_AWARDS_MG, ACHIEVEMENT_AWARDS_ROCKET, ACHIEVEMENT_AWARDS_ALL_PACK_1, NUM_ACHIEVEMENT_AWARDS }; extern const char *g_pszAchievementAwards[NUM_ACHIEVEMENT_AWARDS]; extern const char *g_pszAchievementAwardMaterials_Allies[NUM_ACHIEVEMENT_AWARDS]; extern const char *g_pszAchievementAwardMaterials_Axis[NUM_ACHIEVEMENT_AWARDS]; enum DODStatType_t { DODSTAT_PLAYTIME = 0, DODSTAT_ROUNDSWON, DODSTAT_ROUNDSLOST, DODSTAT_KILLS, DODSTAT_DEATHS, DODSTAT_CAPTURES, DODSTAT_BLOCKS, DODSTAT_BOMBSPLANTED, DODSTAT_BOMBSDEFUSED, DODSTAT_DOMINATIONS, DODSTAT_REVENGES, DODSTAT_SHOTS_HIT, DODSTAT_SHOTS_FIRED, DODSTAT_HEADSHOTS, DODSTAT_MAX }; #define DODSTAT_FIRST DODSTAT_PLAYTIME typedef struct { int m_iStat[DODSTAT_MAX]; bool m_bDirty[DODSTAT_MAX]; } dod_stat_accumulator_t; #define NUM_DOD_PLAYERCLASSES 6 #endif // DOD_SHAREDDEFS_H