summaryrefslogtreecommitdiff
path: root/game/shared/dod/dod_shareddefs.h
blob: 35bae96b5b97ed72ac7f48e6c122a8dcdd109d82 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
//========= 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