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