summaryrefslogtreecommitdiff
path: root/game/shared/tfc/tfc_shareddefs.h
blob: 8eae5ec8340d635d7a1cb4d09880f6bc1c82182a (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
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#ifndef TFC_SHAREDDEFS_H
#define TFC_SHAREDDEFS_H
#ifdef _WIN32
#pragma once
#endif


#include "shareddefs.h"


// Using MAP_DEBUG mode?
#ifdef MAP_DEBUG
	#define MDEBUG(x) x
#else
	#define MDEBUG(x)
#endif


#define TFC_PLAYER_VIEW_OFFSET	Vector( 0, 0, 53.5 )


// Team IDs.
//	#define TEAM_SPECTATOR	0 // This is set in shareddefs.h
#define	TEAM_BLUE		1
#define TEAM_RED		2
#define TEAM_YELLOW		3
#define TEAM_GREEN		4
#define TEAM_MAXCOUNT	5	// update this if we ever add teams (unlikely)


// Defines for the playerclass
#define PC_UNDEFINED	0 

#define PC_SCOUT		1 
#define PC_SNIPER		2 
#define PC_SOLDIER		3 
#define PC_DEMOMAN		4 
#define PC_MEDIC		5 
#define PC_HWGUY		6 
#define PC_PYRO			7
#define PC_SPY			8
#define PC_ENGINEER		9
#define PC_LAST_NORMAL_CLASS	9

#define PC_CIVILIAN		10		// Civilians are a special class. They cannot
								// be chosen by players, only enforced by maps
#define PC_LASTCLASS	11 		// Use this as the high-boundary for any loops
								// through the playerclass.


/*======================*/
//      Menu stuff      //
/*======================*/

#define MENU_DEFAULT				1
#define MENU_TEAM 					2
#define MENU_CLASS 					3
#define MENU_MAPBRIEFING			4
#define MENU_INTRO 					5
#define MENU_CLASSHELP				6
#define MENU_CLASSHELP2 			7
#define MENU_REPEATHELP 			8

#define MENU_SPECHELP				9


#define MENU_SPY					12
#define MENU_SPY_SKIN				13
#define MENU_SPY_COLOR				14
#define MENU_ENGINEER				15
#define MENU_ENGINEER_FIX_DISPENSER	16
#define MENU_ENGINEER_FIX_SENTRYGUN	17
#define MENU_ENGINEER_FIX_MORTAR	18
#define MENU_DISPENSER				19
#define MENU_CLASS_CHANGE			20
#define MENU_TEAM_CHANGE			21

#define MENU_REFRESH_RATE 			25

#define MENU_VOICETWEAK				50



// Additional classes
// NOTE: adding them onto the Class_T's in baseentity.h is cheesy, but so is
// having an #ifdef for each mod in baseentity.h.
#define CLASS_TFGOAL				((Class_T)NUM_AI_CLASSES)
#define CLASS_TFGOAL_TIMER			((Class_T)(NUM_AI_CLASSES+1))
#define CLASS_TFGOAL_ITEM			((Class_T)(NUM_AI_CLASSES+2))
#define CLASS_TFSPAWN				((Class_T)(NUM_AI_CLASSES+3))
#define CLASS_MACHINE				((Class_T)(NUM_AI_CLASSES+4))


// Building types
#define BUILD_DISPENSER				1
#define BUILD_SENTRYGUN				2
#define BUILD_MORTAR				3
#define BUILD_TELEPORTER_ENTRY		4
#define BUILD_TELEPORTER_EXIT		5


// Grenade types.
enum GrenadeType_t
{
	GR_TYPE_NONE=0,
	GR_TYPE_NORMAL,
	GR_TYPE_CONCUSSION,
	GR_TYPE_NAIL,
	GR_TYPE_MIRV,
	GR_TYPE_NAPALM,
	GR_TYPE_GAS,
	GR_TYPE_EMP,
	GR_TYPE_CALTROP,
	NUM_GRENADE_TYPES
};

// Max amount of each grenade each player can carry.
// This is in addition to the player's
extern int g_nMaxGrenades[NUM_GRENADE_TYPES];


// These are the names of the ammo types that go in the CAmmoDefs and that the 
// weapon script files reference.
// These directly correspond to ammo_X in the goldsrc tfc code.
#define TFC_AMMO_DUMMY			0	// This is a dummy index, to make the CAmmoDef indices correct for the other ammo types.

#define TFC_AMMO_SHELLS			1
#define TFC_AMMO_SHELLS_NAME	"TFC_AMMO_SHELLS"

#define TFC_AMMO_NAILS			2
#define TFC_AMMO_NAILS_NAME		"TFC_AMMO_NAILS"

#define TFC_AMMO_ROCKETS		3
#define TFC_AMMO_ROCKETS_NAME	"TFC_AMMO_ROCKETS"

#define TFC_AMMO_CELLS			4
#define TFC_AMMO_CELLS_NAME		"TFC_AMMO_CELLS"

#define TFC_AMMO_MEDIKIT		5
#define TFC_AMMO_MEDIKIT_NAME	"TFC_AMMO_MEDIKIT"

#define TFC_AMMO_DETPACK		6
#define TFC_AMMO_DETPACK_NAME	"TFC_AMMO_DETPACK"

#define TFC_AMMO_GRENADES1		7
#define TFC_AMMO_GRENADES1_NAME "TFC_AMMO_GRENADES1"

#define TFC_AMMO_GRENADES2		8
#define TFC_AMMO_GRENADES2_NAME	"TFC_AMMO_GRENADES2"

#define TFC_NUM_AMMO_TYPES		9	// NOTE: KEEP THESE UP TO DATE WITH g_AmmoTypeNames[]
extern const char* g_AmmoTypeNames[TFC_NUM_AMMO_TYPES];



// TeamFortress State Flags
#define TFSTATE_GRENPRIMED		0x000001 // Whether the player has a primed grenade
#define TFSTATE_RELOADING		0x000002 // Whether the player is reloading
#define TFSTATE_ALTKILL			0x000004 // #TRUE if killed with a weapon not in self.weapon: NOT USED ANYMORE
#define TFSTATE_RANDOMPC		0x000008 // Whether Playerclass is random, new one each respawn
#define TFSTATE_INFECTED		0x000010 // set when player is infected by the bioweapon
#define TFSTATE_INVINCIBLE		0x000020 // Player has permanent Invincibility (Usually by GoalItem)
#define TFSTATE_INVISIBLE		0x000040 // Player has permanent Invisibility (Usually by GoalItem)
#define TFSTATE_QUAD			0x000080 // Player has permanent Quad Damage (Usually by GoalItem)
#define TFSTATE_RADSUIT			0x000100 // Player has permanent Radsuit (Usually by GoalItem)
#define TFSTATE_BURNING			0x000200 // Is on fire
#define TFSTATE_GRENTHROWING	0x000400  // is throwing a grenade
#define TFSTATE_AIMING			0x000800  // is using the laser sight
#define TFSTATE_ZOOMOFF			0x001000  // doesn't want the FOV changed when zooming
#define TFSTATE_RESPAWN_READY	0x002000  // is waiting for respawn, and has pressed fire
#define TFSTATE_HALLUCINATING	0x004000  // set when player is hallucinating
#define TFSTATE_TRANQUILISED	0x008000  // set when player is tranquilised
#define TFSTATE_CANT_MOVE		0x010000  // set when player is setting a detpack
#define TFSTATE_RESET_FLAMETIME 0x020000 // set when the player has to have his flames increased in health
#define TFSTATE_HIGHEST_VALUE	TFSTATE_RESET_FLAMETIME


// items
#define IT_SHOTGUN				(1<<0)
#define IT_SUPER_SHOTGUN		(1<<1) 
#define IT_NAILGUN				(1<<2) 
#define IT_SUPER_NAILGUN		(1<<3) 
#define IT_GRENADE_LAUNCHER		(1<<4) 
#define IT_ROCKET_LAUNCHER		(1<<5) 
#define IT_LIGHTNING			(1<<6) 
#define IT_EXTRA_WEAPON			(1<<7) 

#define IT_SHELLS				(1<<8) 
#define IT_NAILS				(1<<9) 
#define IT_ROCKETS				(1<<10) 
#define IT_CELLS				(1<<11) 
#define IT_AXE					(1<<12) 

#define IT_ARMOR1				(1<<13) 
#define IT_ARMOR2				(1<<14) 
#define IT_ARMOR3				(1<<15) 
#define IT_SUPERHEALTH			(1<<16) 

#define IT_KEY1					(1<<17) 
#define IT_KEY2					(1<<18) 

#define IT_INVISIBILITY			(1<<19) 
#define IT_INVULNERABILITY		(1<<20) 
#define IT_SUIT					(1<<21)
#define IT_QUAD					(1<<22) 
#define IT_HOOK					(1<<23)

#define IT_KEY3					(1<<24)	// Stomp invisibility
#define IT_KEY4					(1<<25)	// Stomp invulnerability
#define IT_LAST_ITEM			IT_KEY4


enum TFCTimer_t
{
	TF_TIMER_ANY=0,
	TF_TIMER_CONCUSSION,
	TF_TIMER_INFECTION,
	TF_TIMER_HALLUCINATION,
	TF_TIMER_TRANQUILISATION,
	TF_TIMER_ROTHEALTH,
	TF_TIMER_REGENERATION,
	TF_TIMER_GRENPRIME,
	TF_TIMER_CELLREGENERATION,
	TF_TIMER_DETPACKSET,
	TF_TIMER_DETPACKDISARM,
	TF_TIMER_BUILD,
	TF_TIMER_CHECKBUILDDISTANCE,
	TF_TIMER_DISGUISE,
	TF_TIMER_DISPENSERREFILL,

	// Non player timers.
	TF_TIMER_RETURNITEM,
	TF_TIMER_DELAYEDGOAL,
	TF_TIMER_ENDROUND
};



/*==================================================*/
/* New Weapon Related Defines		                */
/*==================================================*/

// Medikit
#define WEAP_MEDIKIT_OVERHEAL 50 // Amount of superhealth over max_health the medikit will dispense
#define WEAP_MEDIKIT_HEAL	200  // Amount medikit heals per hit



//--------------
// TFC Specific damage flags
//--------------
#define DMG_IGNORE_MAXHEALTH	(DMG_LASTGENERICFLAG<<1)
#define DMG_IGNOREARMOR			(DMG_LASTGENERICFLAG<<2)


// ------------------------------------------------------------------------------ //
// Info for each player class.
// ------------------------------------------------------------------------------ //

class CTFCPlayerClassInfo
{
public:
	const char *m_pClassName;
	const char *m_pModelName;	// What model this class uses.
	
	float m_flMaxSpeed;
	int m_iMaxHealth;
	
	int m_iInitArmor;
	int m_iMaxArmor;
	float m_flInitArmorType;
	float m_flMaxArmorType;
	int m_iInitArmorClass;
	int m_nArmorClasses;

	// What types of grenades does this guy carry?
	// GR_TYPE_ defines.
	GrenadeType_t m_iGrenadeType1;
	GrenadeType_t m_iGrenadeType2;
	
	int m_InitAmmo[TFC_NUM_AMMO_TYPES]; // These are in the same order as g_AmmoTypeNames.
	int m_MaxAmmo[TFC_NUM_AMMO_TYPES]; // These are in the same order as g_AmmoTypeNames.
};

const CTFCPlayerClassInfo* GetTFCClassInfo( int iClass );


// The various states the player can be in during the join game process.
enum TFCPlayerState
{
	// 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_OBSERVER_MODE,

	STATE_DYING,

	TFC_NUM_PLAYER_STATES
};


#endif // TFC_SHAREDDEFS_H