1 // g_local.h -- local definitions for game module
2 
3 #include "q_shared.h"
4 
5 // define GAME_INCLUDE so that game.h does not define the
6 // short, server-visible gclient_t and edict_t structures,
7 // because we define the full size ones in this file
8 #define	GAME_INCLUDE
9 #include "game.h"
10 
11 // the "gameversion" client command will print this plus compile date
12 #define	GAMEVERSION	"PsychoMod v3.1"
13 
14 // protocol bytes that can be directly added to messages
15 #define	svc_muzzleflash		1
16 #define	svc_muzzleflash2	2
17 #define	svc_temp_entity		3
18 #define	svc_layout			4
19 #define	svc_inventory		5
20 #define	svc_stufftext		11
21 
22 //==================================================================
23 
24 // view pitching times
25 #define DAMAGE_TIME		0.5
26 #define	FALL_TIME		0.3
27 #define B_TIME_MIN -27
28 
29 //Time in seconds for something to fade + rand()3 seconds
30 #define FADETIME 15
31 
32 
33 // edict->spawnflags
34 // these are set with checkboxes on each entity in the map editor
35 #define	SPAWNFLAG_NOT_EASY			0x00000100
36 #define	SPAWNFLAG_NOT_MEDIUM		0x00000200
37 #define	SPAWNFLAG_NOT_HARD			0x00000400
38 #define	SPAWNFLAG_NOT_DEATHMATCH	0x00000800
39 #define	SPAWNFLAG_NOT_COOP			0x00001000
40 
41 // edict->flags
42 #define	FL_FLY					0x00000001
43 #define	FL_SWIM					0x00000002	// implied immunity to drowining
44 #define FL_IMMUNE_LASER			0x00000004
45 #define	FL_INWATER				0x00000008
46 #define	FL_GODMODE				0x00000010
47 #define	FL_NOTARGET				0x00000020
48 #define FL_IMMUNE_SLIME			0x00000040
49 #define FL_IMMUNE_LAVA			0x00000080
50 #define	FL_PARTIALGROUND		0x00000100	// not all corners are valid
51 #define	FL_WATERJUMP			0x00000200	// player jumping out of water
52 #define	FL_TEAMSLAVE			0x00000400	// not the first on the team
53 #define FL_NO_KNOCKBACK			0x00000800
54 #define FL_POWER_ARMOR			0x00001000	// power armor (if any) is active
55 #define FL_RESPAWN				0x80000000	// used for item respawning
56 
57 
58 #define	FRAMETIME		0.1
59 
60 // memory tags to allow dynamic memory to be cleaned up
61 #define	TAG_GAME	765		// clear when unloading the dll
62 #define	TAG_LEVEL	766		// clear when loading a new level
63 
64 
65 #define MELEE_DISTANCE	80
66 
67 #define BODY_QUEUE_SIZE		8
68 
69 typedef enum
70 {
71 	DAMAGE_NO,
72 	DAMAGE_YES,			// will take damage if hit
73 	DAMAGE_AIM			// auto targeting recognizes this
74 } damage_t;
75 
76 typedef enum
77 {
78 	WEAPON_READY,
79 	WEAPON_ACTIVATING,
80 	WEAPON_DROPPING,
81 	WEAPON_FIRING
82 } weaponstate_t;
83 
84 typedef enum
85 {
86 	AMMO_BULLETS,
87 	AMMO_SHELLS,
88 	AMMO_ROCKETS,
89 	AMMO_GRENADES,
90 	AMMO_CELLS,
91 	AMMO_SLUGS
92 } ammo_t;
93 
94 
95 //deadflag
96 #define DEAD_NO					0
97 #define DEAD_DYING				1
98 #define DEAD_DEAD				2
99 #define DEAD_RESPAWNABLE		3
100 
101 //range
102 #define RANGE_MELEE				0
103 #define RANGE_NEAR				1
104 #define RANGE_MID				2
105 #define RANGE_FAR				3
106 
107 //gib types
108 #define GIB_ORGANIC				0
109 #define GIB_METALLIC			1
110 
111 //monster ai flags
112 #define AI_STAND_GROUND			0x00000001
113 #define AI_TEMP_STAND_GROUND	0x00000002
114 #define AI_SOUND_TARGET			0x00000004
115 #define AI_LOST_SIGHT			0x00000008
116 #define AI_PURSUIT_LAST_SEEN	0x00000010
117 #define AI_PURSUE_NEXT			0x00000020
118 #define AI_PURSUE_TEMP			0x00000040
119 #define AI_HOLD_FRAME			0x00000080
120 #define AI_GOOD_GUY				0x00000100
121 #define AI_BRUTAL				0x00000200
122 #define AI_NOSTEP				0x00000400
123 #define AI_DUCKED				0x00000800
124 #define AI_COMBAT_POINT			0x00001000
125 #define AI_MEDIC				0x00002000
126 #define AI_RESURRECTING			0x00004000
127 
128 //weapon spawning
129 #define NO_BLASTER				0x00000001
130 #define NO_SHOTGUN				0x00000002
131 #define NO_SSHOTGUN				0x00000004
132 #define NO_MACHINEGUN			0x00000008
133 #define NO_CHAINGUN				0x00000010
134 #define NO_GRENADE_LAUNCHER		0x00000020
135 #define NO_ROCKET_LAUNCHER		0x00000040
136 #define NO_HYPERBLASTER			0x00000080
137 #define NO_RAILGUN				0x00000100
138 #define NO_TAZER				0x00000200
139 #define NO_ROCKETBFG			0x00000400
140 #define NO_BFGLASER				0x00000800
141 #define NO_GRENADES				0x00001000
142 
143 //monster attack state
144 #define AS_STRAIGHT				1
145 #define AS_SLIDING				2
146 #define	AS_MELEE				3
147 #define	AS_MISSILE				4
148 
149 // armor types
150 #define ARMOR_NONE				0
151 #define ARMOR_JACKET			1
152 #define ARMOR_COMBAT			2
153 #define ARMOR_BODY				3
154 #define ARMOR_SHARD				4
155 
156 // power armor types
157 #define POWER_ARMOR_NONE		0
158 #define POWER_ARMOR_SCREEN		1
159 #define POWER_ARMOR_SHIELD		2
160 
161 // handedness values
162 #define RIGHT_HANDED			0
163 #define LEFT_HANDED				1
164 #define CENTER_HANDED			2
165 
166 
167 // game.serverflags values
168 #define SFL_CROSS_TRIGGER_1		0x00000001
169 #define SFL_CROSS_TRIGGER_2		0x00000002
170 #define SFL_CROSS_TRIGGER_3		0x00000004
171 #define SFL_CROSS_TRIGGER_4		0x00000008
172 #define SFL_CROSS_TRIGGER_5		0x00000010
173 #define SFL_CROSS_TRIGGER_6		0x00000020
174 #define SFL_CROSS_TRIGGER_7		0x00000040
175 #define SFL_CROSS_TRIGGER_8		0x00000080
176 #define SFL_CROSS_TRIGGER_MASK	0x000000ff
177 
178 
179 // noise types for PlayerNoise
180 #define PNOISE_SELF				0
181 #define PNOISE_WEAPON			1
182 #define PNOISE_IMPACT			2
183 
184 // edict->movetype values
185 typedef enum
186 {
187 MOVETYPE_NONE,			// never moves
188 MOVETYPE_NOCLIP,		// origin and angles change with no interaction
189 MOVETYPE_PUSH,			// no clip to world, push on box contact
190 MOVETYPE_STOP,			// no clip to world, stops on box contact
191 
192 MOVETYPE_WALK,			// gravity
193 MOVETYPE_STEP,			// gravity, special edge handling
194 MOVETYPE_FLY,
195 MOVETYPE_TOSS,			// gravity
196 MOVETYPE_FLYMISSILE,	// extra size to monsters
197 MOVETYPE_BOUNCE,
198 
199 MOVETYPE_MOVEWITH		// decals moving with BSP nicely
200 } movetype_t;
201 
202 
203 
204 typedef struct
205 {
206 	int		base_count;
207 	int		max_count;
208 	float	normal_protection;
209 	float	energy_protection;
210 	int		armor;
211 } gitem_armor_t;
212 
213 
214 // gitem_t->flags
215 #define	IT_WEAPON		1		// use makes active weapon
216 #define	IT_AMMO			2
217 #define IT_ARMOR		4
218 #define IT_STAY_COOP	8
219 #define IT_KEY			16
220 #define IT_POWERUP		32
221 
222 // gitem_t->weapmodel for weapons indicates model index
223 #define WEAP_BLASTER				1
224 #define WEAP_SHOTGUN				2
225 #define WEAP_SUPERSHOTGUN			3
226 #define WEAP_MACHINEGUN				4
227 #define WEAP_CHAINGUN				5
228 #define WEAP_GRENADELAUNCHER		6
229 #define WEAP_ROCKETLAUNCHER			7
230 #define WEAP_HYPERBLASTER			8
231 #define WEAP_RAILGUN				9
232 #define WEAP_BFG					10
233 #define WEAP_GRENADES				11
234 
235 typedef struct gitem_s
236 {
237 	char		*classname;	// spawning name
238 	qboolean	(*pickup)(struct edict_s *ent, struct edict_s *other);
239 	void		(*use)(struct edict_s *ent, struct gitem_s *item);
240 	void		(*drop)(struct edict_s *ent, struct gitem_s *item);
241 	void		(*weaponthink)(struct edict_s *ent);
242 	char		*pickup_sound;
243 	char		*world_model;
244 	int			world_model_flags;
245 	char		*view_model;
246 
247 	// client side info
248 	char		*icon;
249 	char		*pickup_name;	// for printing on pickup
250 	int			count_width;		// number of digits to display by icon
251 
252 	int			quantity;		// for ammo how much, for weapons how much is used per shot
253 	char		*ammo;			// for weapons
254 	int			flags;			// IT_* flags
255 
256 	int			weapmodel;		// weapon model index (for weapons)
257 
258 	void		*info;
259 	int			tag;
260 
261 	char		*precaches;		// string of all models, sounds, and images this item will use
262 } gitem_t;
263 
264 
265 
266 //
267 // this structure is left intact through an entire game
268 // it should be initialized at dll load time, and read/written to
269 // the server.ssv file for savegames
270 //
271 typedef struct
272 {
273 	char		helpmessage1[512];
274 	char		helpmessage2[512];
275 	int			helpchanged;	// flash F1 icon if non 0, play sound
276 								// and increment only if 1, 2, or 3
277 
278 	gclient_t	*clients;		// [maxclients]
279 
280 	// can't store spawnpoint in level, because
281 	// it would get overwritten by the savegame restore
282 	char		spawnpoint[512];	// needed for coop respawns
283 
284 	// store latched cvars here that we want to get at often
285 	int			maxclients;
286 	int			maxentities;
287 
288 	// cross level triggers
289 	int			serverflags;
290 
291 	// items
292 	int			num_items;
293 
294 	qboolean	autosaved;
295 } game_locals_t;
296 
297 
298 //
299 // this structure is cleared as each map is entered
300 // it is read/written to the level.sav file for savegames
301 //
302 typedef struct
303 {
304 	int			framenum;
305 	float		time;
306 
307 	char		level_name[MAX_QPATH];	// the descriptive name (Outer Base, etc)
308 	char		mapname[MAX_QPATH];		// the server name (base1, etc)
309 	char		nextmap[MAX_QPATH];		// go here when fraglimit is hit
310 
311 	// intermission state
312 	float		intermissiontime;		// time the intermission was started
313 	char		*changemap;
314 	int			exitintermission;
315 	vec3_t		intermission_origin;
316 	vec3_t		intermission_angle;
317 
318 	edict_t		*sight_client;	// changed once each frame for coop games
319 
320 	edict_t		*sight_entity;
321 	int			sight_entity_framenum;
322 	edict_t		*sound_entity;
323 	int			sound_entity_framenum;
324 	edict_t		*sound2_entity;
325 	int			sound2_entity_framenum;
326 
327 	int			pic_health;
328 
329 	int			total_secrets;
330 	int			found_secrets;
331 
332 	int			total_goals;
333 	int			found_goals;
334 
335 	int			total_monsters;
336 	int			killed_monsters;
337 
338 	edict_t		*current_entity;	// entity running from G_RunFrame
339 	int			body_que;			// dead bodies
340 
341 	int			power_cubes;		// ugly necessity for coop
342 } level_locals_t;
343 
344 
345 // spawn_temp_t is only used to hold entity field values that
346 // can be set from the editor, but aren't actualy present
347 // in edict_t during gameplay
348 typedef struct
349 {
350 	// world vars
351 	char		*sky;
352 	float		skyrotate;
353 	vec3_t		skyaxis;
354 	char		*nextmap;
355 
356 	int			lip;
357 	int			distance;
358 	int			height;
359 	char		*noise;
360 	float		pausetime;
361 	char		*item;
362 	char		*gravity;
363 
364 	float		minyaw;
365 	float		maxyaw;
366 	float		minpitch;
367 	float		maxpitch;
368 } spawn_temp_t;
369 
370 
371 typedef struct
372 {
373 	// fixed data
374 	vec3_t		start_origin;
375 	vec3_t		start_angles;
376 	vec3_t		end_origin;
377 	vec3_t		end_angles;
378 
379 	int			sound_start;
380 	int			sound_middle;
381 	int			sound_end;
382 
383 	float		accel;
384 	float		speed;
385 	float		decel;
386 	float		distance;
387 
388 	float		wait;
389 
390 	// state data
391 	int			state;
392 	vec3_t		dir;
393 	float		current_speed;
394 	float		move_speed;
395 	float		next_speed;
396 	float		remaining_distance;
397 	float		decel_distance;
398 	void		(*endfunc)(edict_t *);
399 } moveinfo_t;
400 
401 
402 typedef struct
403 {
404 	void	(*aifunc)(edict_t *self, float dist);
405 	float	dist;
406 	void	(*thinkfunc)(edict_t *self);
407 } mframe_t;
408 
409 typedef struct
410 {
411 	int			firstframe;
412 	int			lastframe;
413 	mframe_t	*frame;
414 	void		(*endfunc)(edict_t *self);
415 } mmove_t;
416 
417 typedef struct
418 {
419 	mmove_t		*currentmove;
420 	int			aiflags;
421 	int			nextframe;
422 	float		scale;
423 
424 	void		(*stand)(edict_t *self);
425 	void		(*idle)(edict_t *self);
426 	void		(*search)(edict_t *self);
427 	void		(*walk)(edict_t *self);
428 	void		(*run)(edict_t *self);
429 	void		(*dodge)(edict_t *self, edict_t *other, float eta);
430 	void		(*attack)(edict_t *self);
431 	void		(*melee)(edict_t *self);
432 	void		(*sight)(edict_t *self, edict_t *other);
433 	qboolean	(*checkattack)(edict_t *self);
434 	qboolean	(*enemycheck)(edict_t *self, edict_t *other);
435 
436 
437 	float		pausetime;
438 	float		attack_finished;
439 
440 	vec3_t		saved_goal;
441 	float		search_time;
442 	float		trail_time;
443 	vec3_t		last_sighting;
444 	int			attack_state;
445 	int			lefty;
446 	float		idle_time;
447 	int			linkcount;
448 
449 	int			power_armor_type;
450 	int			power_armor_power;
451 } monsterinfo_t;
452 
453 
454 
455 extern	game_locals_t	game;
456 extern	level_locals_t	level;
457 extern	game_import_t	gi;
458 extern	game_export_t	globals;
459 extern	spawn_temp_t	st;
460 
461 extern	int	sm_meat_index;
462 extern	int	snd_fry;
463 
464 extern	int	jacket_armor_index;
465 extern	int	combat_armor_index;
466 extern	int	body_armor_index;
467 
468 
469 // means of death
470 #define MOD_UNKNOWN			0
471 #define MOD_BLASTER			1
472 #define MOD_SHOTGUN			2
473 #define MOD_SSHOTGUN		3
474 #define MOD_MACHINEGUN		4
475 #define MOD_CHAINGUN		5
476 #define MOD_GRENADE			6
477 #define MOD_G_SPLASH		7
478 #define MOD_ROCKET			8
479 #define MOD_R_SPLASH		9
480 #define MOD_HYPERBLASTER	10
481 #define MOD_RAILGUN			11
482 #define MOD_BFG_LASER		12
483 #define MOD_BFG_BLAST		13
484 #define MOD_BFG_EFFECT		14
485 #define MOD_HANDGRENADE		15
486 #define MOD_HG_SPLASH		16
487 #define MOD_WATER			17
488 #define MOD_SLIME			18
489 #define MOD_LAVA			19
490 #define MOD_CRUSH			20
491 #define MOD_TELEFRAG		21
492 #define MOD_FALLING			22
493 #define MOD_SUICIDE			23
494 #define MOD_HELD_GRENADE	24
495 #define MOD_EXPLOSIVE		25
496 #define MOD_BARREL			26
497 #define MOD_BOMB			27
498 #define MOD_EXIT			28
499 #define MOD_SPLASH			29
500 #define MOD_TARGET_LASER	30
501 #define MOD_TRIGGER_HURT	31
502 #define MOD_HIT				32
503 #define MOD_TARGET_BLASTER	33
504 #define MOD_GRAPPLE			34
505 #define MOD_C4				35
506 #define MOD_GREN_HIT		36
507 #define MOD_FIRE			37
508 #define MOD_KICK			38
509 #define MOD_ROCKET_BFG		39
510 #define MOD_R_BFG_SPLASH	40
511 #define MOD_MAGIC			41
512 #define MOD_BLASTER2		42
513 #define MOD_SHOTGUN2		43
514 #define MOD_SSHOTGUN2		44
515 #define MOD_MACHINEGUN2		45
516 #define MOD_CHAINGUN2		46
517 #define MOD_GRENADE2		47
518 #define MOD_G_SPLASH2		48
519 #define MOD_ROCKET2			49
520 #define MOD_HYPERBLASTER2	51
521 #define MOD_PUNCH			52
522 #define MOD_GASGREN			53
523 #define MOD_SMACK			54
524 #define MOD_FLAME			55
525 #define MOD_GAS_BOOM		56
526 #define MOD_TAZER			57
527 #define MOD_DISCHARGE		58
528 #define MOD_HEAD			0x4000000
529 #define MOD_FRIENDLY_FIRE	0x8000000
530 
531 extern	int	meansOfDeath;
532 
533 extern	edict_t			*g_edicts;
534 
535 #define	FOFS(x) (int)&(((edict_t *)0)->x)
536 #define	STOFS(x) (int)&(((spawn_temp_t *)0)->x)
537 #define	LLOFS(x) (int)&(((level_locals_t *)0)->x)
538 #define	CLOFS(x) (int)&(((gclient_t *)0)->x)
539 
540 #define random()	((rand () & 0x7fff) / ((float)0x7fff))
541 #define crandom()	(2.0 * (random() - 0.5))
542 
543 extern	cvar_t	*maxentities;
544 extern	cvar_t	*deathmatch;
545 extern	cvar_t	*coop;
546 extern	cvar_t	*dmflags;
547 extern	cvar_t	*skill;
548 extern	cvar_t	*fraglimit;
549 extern	cvar_t	*timelimit;
550 extern	cvar_t	*password;
551 extern	cvar_t	*spectator_password;
552 extern	cvar_t	*needpass;
553 extern	cvar_t	*g_select_empty;
554 extern	cvar_t	*dedicated;
555 
556 extern	cvar_t	*filterban;
557 
558 extern	cvar_t	*sv_gravity;
559 extern	cvar_t	*sv_maxvelocity;
560 
561 extern	cvar_t	*gun_x, *gun_y, *gun_z;
562 extern	cvar_t	*sv_rollspeed;
563 extern	cvar_t	*sv_rollangle;
564 
565 extern	cvar_t	*run_pitch;
566 extern	cvar_t	*run_roll;
567 extern	cvar_t	*bob_up;
568 extern	cvar_t	*bob_pitch;
569 extern	cvar_t	*bob_roll;
570 
571 extern	cvar_t	*sv_cheats;
572 extern	cvar_t	*maxclients;
573 extern	cvar_t	*maxspectators;
574 
575 extern	cvar_t	*flood_msgs;
576 extern	cvar_t	*flood_persecond;
577 extern	cvar_t	*flood_waitdelay;
578 
579 extern	cvar_t	*sv_maplist;
580 
581 extern	cvar_t	*motd;
582 extern	cvar_t	*sv_teams;
583 extern	cvar_t	*sv_teams_locked;
584 extern	cvar_t	*sv_fall;
585 extern	cvar_t	*sv_laser_type;
586 extern	cvar_t	*sv_tracers;
587 extern	cvar_t	*sv_bulletmarks;	//limit
588 extern	cvar_t	*sv_waterlevel;
589 extern	cvar_t	*sv_stunts;
590 extern	cvar_t	*sv_bloodyview;
591 extern	cvar_t	*sv_matrix;
592 extern	cvar_t	*sv_banned_weapons;
593 extern	cvar_t	*sv_grapple;
594 extern	cvar_t	*sv_chatdistance;
595 extern	cvar_t	*sv_stunt_door;
596 extern	cvar_t	*sv_realbullets;
597 extern	cvar_t	*sv_spawner;
598 extern	cvar_t	*sv_serversideonly;
599 extern	cvar_t	*sv_sprite_explosions;
600 extern	cvar_t	*sv_damageslow;
601 extern	cvar_t	*sv_surfacereflection;
602 extern	cvar_t	*sv_itemrotate;
603 extern	cvar_t	*sv_mzlmodel;
604 extern	cvar_t	*sv_lowlag;
605 
606 extern	cvar_t	*sv_monsterspawntime;
607 
608 extern	int		bulletmarks;	//actual in-game
609 extern	int		tracers;
610 extern	int		headShot;
611 
612 edict_t	*bulletptr[2048];
613 edict_t	*tracerptr[2048];
614 
615 char *base_weapon;
616 
617 #define world	(&g_edicts[0])
618 
619 // item spawnflags
620 #define ITEM_TRIGGER_SPAWN		0x00000001
621 #define ITEM_NO_TOUCH			0x00000002
622 // 6 bits reserved for editor flags
623 // 8 bits used as power cube id bits for coop games
624 #define DROPPED_ITEM			0x00010000
625 #define	DROPPED_PLAYER_ITEM		0x00020000
626 #define ITEM_TARGETS_USED		0x00040000
627 
628 //
629 // fields are needed for spawning from the entity string
630 // and saving / loading games
631 //
632 #define FFL_SPAWNTEMP		1
633 #define FFL_NOSPAWN			2
634 
635 typedef enum {
636 	F_INT,
637 	F_FLOAT,
638 	F_LSTRING,			// string on disk, pointer in memory, TAG_LEVEL
639 	F_GSTRING,			// string on disk, pointer in memory, TAG_GAME
640 	F_VECTOR,
641 	F_ANGLEHACK,
642 	F_EDICT,			// index on disk, pointer in memory
643 	F_ITEM,				// index on disk, pointer in memory
644 	F_CLIENT,			// index on disk, pointer in memory
645 	F_FUNCTION,
646 	F_MMOVE,
647 	F_IGNORE
648 } fieldtype_t;
649 
650 typedef struct
651 {
652 	char	*name;
653 	int		ofs;
654 	fieldtype_t	type;
655 	int		flags;
656 } field_t;
657 
658 
659 extern	field_t fields[];
660 extern	gitem_t	itemlist[];
661 
662 
663 //
664 // g_cmds.c
665 //
666 void Cmd_Help_f (edict_t *ent);
667 void Cmd_Score_f (edict_t *ent);
668 
669 char *make_green (char *s);
670 char *make_white (char *s);
671 
672 //
673 // g_items.c
674 //
675 void PrecacheItem (gitem_t *it);
676 void InitItems (void);
677 void SetItemNames (void);
678 gitem_t	*FindItem (char *pickup_name);
679 gitem_t	*FindItemByClassname (char *classname);
680 #define	ITEM_INDEX(x) ((x)-itemlist)
681 edict_t *Drop_Item (edict_t *ent, gitem_t *item);
682 void SetRespawn (edict_t *ent, float delay);
683 void ChangeWeapon (edict_t *ent);
684 void SpawnItem (edict_t *ent, gitem_t *item);
685 void Think_Weapon (edict_t *ent);
686 int ArmorIndex (edict_t *ent);
687 int PowerArmorType (edict_t *ent);
688 gitem_t	*GetItemByIndex (int index);
689 qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
690 void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
691 
692 //
693 // g_utils.c
694 //
695 
696 int daycycletime;
697 int lightlevel;
698 int oldlightlevel;
699 extern cvar_t *day;
700 int	GameSlowMo;
701 int	GameSlowMoValue;
702 
703 void stuffcmd(edict_t *ent, char *s);
704 
705 qboolean	KillBox (edict_t *ent);
706 void	G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
707 edict_t *G_Find (edict_t *from, int fieldofs, char *match);
708 edict_t *findradius (edict_t *from, vec3_t org, float rad);
709 edict_t *G_PickTarget (char *targetname);
710 void	G_UseTargets (edict_t *ent, edict_t *activator);
711 void	G_SetMovedir (vec3_t angles, vec3_t movedir);
712 
713 void	G_InitEdict (edict_t *e);
714 edict_t	*G_Spawn (void);
715 void	G_FreeEdict (edict_t *e);
716 
717 void	G_TouchTriggers (edict_t *ent);
718 void	G_TouchSolids (edict_t *ent);
719 
720 char	*G_CopyString (char *in);
721 
722 float	*tv (float x, float y, float z);
723 char	*vtos (vec3_t v);
724 
725 float vectoyaw (vec3_t vec);
726 void vectoangles (vec3_t vec, vec3_t angles);
727 
728 //
729 // g_combat.c
730 //
731 qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
732 qboolean CanDamage (edict_t *targ, edict_t *inflictor);
733 void T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod);
734 void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
735 void T_FlashRadius (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius);
736 void T_RadiusDamageGas (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
737 void T_RadiusDamageFire (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
738 void T_RadiusDamageDischarge (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
739 
740 void spawnGas(vec3_t start);
741 void bigExplosion(vec3_t start, vec3_t dir, int skin);
742 
743 // damage flags
744 #define DAMAGE_RADIUS			0x00000001	// damage was indirect
745 #define DAMAGE_NO_ARMOR			0x00000002	// armour does not protect from this damage
746 #define DAMAGE_ENERGY			0x00000004	// damage is from an energy based weapon
747 #define DAMAGE_NO_KNOCKBACK		0x00000008	// do not affect velocity, just view angles
748 #define DAMAGE_BULLET			0x00000010  // damage is from a bullet (used for ricochets)
749 #define DAMAGE_NO_PROTECTION	0x00000020  // armor, shields, invulnerability, and godmode have no effect
750 
751 #define DEFAULT_BULLET_HSPREAD	300
752 #define DEFAULT_BULLET_VSPREAD	500
753 #define DEFAULT_SHOTGUN_HSPREAD	1000
754 #define DEFAULT_SHOTGUN_VSPREAD	300
755 #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT	12
756 #define DEFAULT_SHOTGUN_COUNT	12
757 #define DEFAULT_SSHOTGUN_COUNT	20
758 
759 //
760 // g_monster.c
761 //
762 void predictTargPos (edict_t *self, vec3_t source, vec3_t targPos, vec3_t targVel, float speed, qboolean feet);
763 void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
764 void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype);
765 void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
766 //My addition
767 void monster_fire_flame (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
768 //My addition
769 void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
770 void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
771 void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
772 void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
773 void MuzzleEffect (edict_t *ent, vec3_t start, vec3_t forward, vec3_t offset);
774 void M_droptofloor (edict_t *ent);
775 void monster_think (edict_t *self);
776 void walkmonster_start (edict_t *self);
777 void swimmonster_start (edict_t *self);
778 void flymonster_start (edict_t *self);
779 void AttackFinished (edict_t *self, float time);
780 void monster_death_use (edict_t *self);
781 void M_CatagorizePosition (edict_t *ent);
782 qboolean M_CheckAttack (edict_t *self);
783 void M_FlyCheck (edict_t *self);
784 void M_CheckGround (edict_t *ent);
785 
786 //
787 // g_misc.c
788 //
789 void ThrowGibHead (edict_t *self, char *gibname, int damage, int type);
790 void ThrowHead (edict_t *self, char *gibname, int damage, int type);
791 void ThrowClientHead (edict_t *self, int damage);
792 void ThrowGib (edict_t *self, char *gibname, int damage, int type);
793 void BecomeExplosion1(edict_t *self);
794 
795 //
796 // g_ai.c
797 //
798 void AI_SetSightClient (void);
799 
800 void ai_stand (edict_t *self, float dist);
801 void ai_move (edict_t *self, float dist);
802 void ai_walk (edict_t *self, float dist);
803 void ai_turn (edict_t *self, float dist);
804 void ai_run (edict_t *self, float dist);
805 void ai_charge (edict_t *self, float dist);
806 int range (edict_t *self, edict_t *other);
807 
808 void FoundTarget (edict_t *self);
809 qboolean infront (edict_t *self, edict_t *other);
810 qboolean visible (edict_t *self, edict_t *other);
811 qboolean FacingIdeal(edict_t *self);
812 
813 //
814 // g_weapon.c
815 //
816 void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
817 qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
818 void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
819 void fire_bullet_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int mod);
820 void fire_bullet_3 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
821 void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
822 void fire_shotgun_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
823 void fire_shotgun_3 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
824 void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
825 void fire_blaster_hyper (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
826 void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
827 void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
828 void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
829 void fire_rocket_2 (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
830 void fire_rocket_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
831 void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
832 void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
833 
834 void weapon_fire_laser_bfg (edict_t *ent);
835 
836 void fireMagic (edict_t *ent);
837 void fire_bullet_slow (edict_t *self, vec3_t start, vec3_t dir, int speed, int kick, int damage, int mod, int effect);
838 void fire_rail_2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
839 void fire_plasma (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect, qboolean hyper);
840 void fire_tracer (edict_t *self, vec3_t start, vec3_t dir, int speed);
841 void fire_smack (edict_t *ent, vec3_t start, vec3_t aimdir);
842 void fire_tazer (edict_t *self, vec3_t start, vec3_t dir, int speed);
843 void fire_c4 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
844 void weapon_c4_fire (edict_t *ent);
845 void target_earthquake_think (edict_t *self);
846 
847 void BulletMarkSlow (edict_t *self, vec3_t dir, edict_t *other);
848 void BulletMark (edict_t *self, trace_t* tr, int mod);
849 void ExplodeMark (edict_t *self, vec3_t origin, float time);
850 
851 void FadeDie (edict_t *ent);
852 void FadeDieSink (edict_t *ent);
853 
854 void weapon_flashlight_fire (edict_t *ent);
855 void weapon_fire_laser (edict_t *ent);
856 void weapon_muzzleflash (edict_t *ent);
857 
858 void weapon_kick_fire (edict_t *ent);
859 
860 void weapon_fire_grapple (edict_t *ent);
861 
862 void Linked_Flame (edict_t *flamed, edict_t *owner);
863 
864 #define LITHIUM_GRAPPLE 1
865 #define ROPE_GRAPPLE 2
866 #define PSYCHOMOD_GRAPPLE 3
867 
868 #define GRAPPLE_ROPE  0
869 #define GRAPPLE_LASER 1
870 #define GRAPPLE_CHAIN 2
871 #define GRAPPLE_SHIP1 100
872 #define GRAPPLE_SHIP2 101
873 
874 #define	BFG_LASER_BLUE	1
875 #define	BFG_LASER_RED	2
876 #define	BFG_LASER_GREEN	3
877 
878 //
879 // g_ptrail.c
880 //
881 void PlayerTrail_Init (void);
882 void PlayerTrail_Add (vec3_t spot);
883 void PlayerTrail_New (vec3_t spot);
884 edict_t *PlayerTrail_PickFirst (edict_t *self);
885 edict_t *PlayerTrail_PickNext (edict_t *self);
886 edict_t	*PlayerTrail_LastSpot (void);
887 
888 //
889 // g_client.c
890 //
891 void respawn (edict_t *ent);
892 void BeginIntermission (edict_t *targ);
893 void PutClientInServer (edict_t *ent);
894 void InitClientPersistant (gclient_t *client);
895 void InitClientResp (gclient_t *client);
896 void InitBodyQue (void);
897 void ClientBeginServerFrame (edict_t *ent);
898 void PrintMOTDmsg (edict_t *ent);
899 void MakeSlowMo (edict_t *ent);
900 void CheckStunt(edict_t * ent);
901 void CheckDiveGlassBreak (edict_t * ent);
902 //
903 // g_player.c
904 //
905 void player_pain (edict_t *self, edict_t *other, float kick, int damage);
906 void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
907 
908 //
909 // g_svcmds.c
910 //
911 void	ServerCommand (void);
912 qboolean SV_FilterPacket (char *from);
913 
914 //
915 // p_view.c
916 //
917 void ClientEndServerFrame (edict_t *ent);
918 
919 //
920 // p_hud.c
921 //
922 void MoveClientToIntermission (edict_t *client);
923 void G_SetStats (edict_t *ent);
924 void G_SetSpectatorStats (edict_t *ent);
925 void G_CheckChaseStats (edict_t *ent);
926 void ValidateSelectedItem (edict_t *ent);
927 void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
928 
929 //
930 // g_pweapon.c
931 //
932 void PlayerNoise(edict_t *who, vec3_t where, int type);
933 
934 //
935 // m_move.c
936 //
937 qboolean M_CheckBottom (edict_t *ent);
938 qboolean M_walkmove (edict_t *ent, float yaw, float dist);
939 void M_MoveToGoal (edict_t *ent, float dist);
940 void M_ChangeYaw (edict_t *ent);
941 
942 //
943 // g_phys.c
944 //
945 void G_RunEntity (edict_t *ent);
946 
947 //
948 // g_main.c
949 //
950 void SaveClientData (void);
951 void FetchClientEntData (edict_t *ent);
952 
953 //
954 // g_chase.c
955 //
956 void UpdateChaseCam(edict_t *ent);
957 void ChaseNext(edict_t *ent);
958 void ChasePrev(edict_t *ent);
959 void GetChaseTarget(edict_t *ent);
960 
961 //============================================================================
962 
963 // client_t->anim_priority
964 #define	ANIM_BASIC		0		// stand / run
965 #define	ANIM_WAVE		1
966 #define	ANIM_JUMP		2
967 #define	ANIM_PAIN		3
968 #define	ANIM_ATTACK		4
969 #define	ANIM_DEATH		5
970 #define	ANIM_REVERSE	6
971 
972 
973 // client data that stays across multiple level loads
974 typedef struct
975 {
976 	char		userinfo[MAX_INFO_STRING];
977 	char		netname[16];
978 	int			hand;
979 
980 	qboolean	connected;			// a loadgame will leave valid entities that
981 									// just don't have a connection yet
982 
983 	// values saved and restored from edicts when changing levels
984 	int			health;
985 	int			max_health;
986 	int			savedFlags;
987 
988 	int			selected_item;
989 	int			inventory[MAX_ITEMS];
990 	gitem_t		*weapon;
991 	gitem_t		*lastweapon;
992 
993 	int			power_cubes;	// used for tracking the cubes in coop games
994 	int			score;			// for calculating total unit score in coop games
995 
996 	int			game_helpchanged;
997 	int			helpchanged;
998 
999 	qboolean	spectator;			// client is a spectator
1000 
1001 	int			grappleType;
1002 	int			bfg_laser_type;
1003 	int			Player_ID;
1004 	int 		TeamName;
1005 	int			viewcam_on;
1006 
1007 	// ammo capacities
1008 	int			max_bullets;
1009 	int			max_shells;
1010 	int			max_rockets;
1011 	int			max_grenades;
1012 	int			max_cells;
1013 	int			max_slugs;
1014 
1015 	int			headshots;
1016 
1017 	int         chasetoggle;                    //Chasetoggle
1018 
1019 } client_persistant_t;
1020 
1021 // client data that stays across deathmatch respawns
1022 typedef struct
1023 {
1024 	client_persistant_t	coop_respawn;	// what to set client->pers to on a respawn
1025 	int			enterframe;			// level.framenum the client entered the game
1026 	int			score;				// frags, etc
1027 
1028 	vec3_t		cmd_angles;			// angles sent over in the last command
1029 
1030 	qboolean	spectator;			// client is a spectator
1031 
1032 	int			fps_counter;
1033 	int			bullettime;
1034 
1035 	int			headshots;			//amount of headshots made
1036 
1037 } client_respawn_t;
1038 
1039 // this structure is cleared on each PutClientInServer(),
1040 // except for 'client->pers'
1041 
1042 struct gclient_s
1043 {
1044 	// known to server
1045 	player_state_t	ps;				// communicated by server to clients
1046 	int				ping;
1047 
1048 	// private to game
1049 	client_persistant_t	pers;
1050 	client_respawn_t	resp;
1051 	pmove_state_t		old_pmove;	// for detecting out-of-pmove changes
1052 
1053 	qboolean	showscores;			// set layout stat
1054 	qboolean	showinventory;		// set layout stat
1055 	qboolean	showhelp;
1056 	qboolean	showhelpicon;
1057 
1058 	int			ammo_index;
1059 
1060 	int			buttons;
1061 	int			oldbuttons;
1062 	int			latched_buttons;
1063 
1064 	qboolean	weapon_thunk;
1065 
1066 	gitem_t		*newweapon;
1067 
1068 	// sum up damage over an entire frame, so
1069 	// shotgun blasts give a single big kick
1070 	int			damage_armor;		// damage absorbed by armor
1071 	int			damage_parmor;		// damage absorbed by power armor
1072 	int			damage_blood;		// damage taken out of health
1073 	int			damage_knockback;	// impact damage
1074 	vec3_t		damage_from;		// origin for vector calculation
1075 
1076 	float		killer_yaw;			// when dead, look at killer
1077 
1078 	weaponstate_t	weaponstate;
1079 	vec3_t		kick_angles;	// weapon kicks
1080 	vec3_t		kick_origin;
1081 	float		v_dmg_roll, v_dmg_pitch, v_dmg_time;	// damage kicks
1082 	float		fall_time, fall_value;		// for view drop on fall
1083 	float		damage_alpha;
1084 	float		bonus_alpha;
1085 	vec3_t		damage_blend;
1086 	vec3_t		v_angle;			// aiming direction
1087 	float		bobtime;			// so off-ground doesn't change it
1088 	vec3_t		oldviewangles;
1089 	vec3_t		oldvelocity;
1090 	vec3_t		old_origin;
1091 
1092 	float		next_drown_time;
1093 	int			old_waterlevel;
1094 	int			breather_sound;
1095 
1096 	int			machinegun_shots;	// for weapon raising
1097 
1098 	// animation vars
1099 	int			anim_end;
1100 	int			anim_priority;
1101 	qboolean	anim_duck;
1102 	qboolean	anim_run;
1103 
1104 	// powerup timers
1105 	float		quad_framenum;
1106 	float		invincible_framenum;
1107 	float		breather_framenum;
1108 	float		enviro_framenum;
1109 
1110 	int			weaphold;	//check to see what holding for laser sight...
1111 
1112 	int			hitmode;
1113 	int			kicktime;
1114 
1115 	qboolean	grenade_blew_up;
1116 	float		grenade_time;
1117 	int			silencer_shots;
1118 	int			weapon_sound;
1119 
1120 	float		goggles;			//Goggles
1121 	float		aquasuit;			//UnderWaterSuit
1122 	float		laser_on;			//New Laser Sight
1123 	float		flashlight_on;		//New Flashlight
1124 
1125 	int			IR_View;
1126 
1127 	int			lastSpeed;
1128 	int			lastSpeedUp;
1129 
1130 	float		health_dir;			//Bloody View Maker...
1131 	float		health_view;		//Bloody View Maker...
1132 
1133 	//WEAP MODES
1134 	float		blst_set;
1135 	float		shot_set;
1136 	float		mach_set;
1137 	float		chan_set;
1138 	float		gren_set;
1139 	float		grn_set;
1140 	float		grnl_set;
1141 	float		rock_set;
1142 	float		hypr_set;
1143 	float		rail_set;
1144 	float		bfg_set;
1145 	//WEAP MODES
1146 
1147 	qboolean	stunt;
1148 	int			stunts;
1149 	int			wallrunning;
1150 
1151 	vec3_t		laser_ptr;		// player we are chasing
1152 
1153 	float		bfg_firing;
1154 	float		old_fov;
1155 	int			isOnTurret;
1156 	int			hud;			// ADVANCED HUD ON/OFF
1157 
1158 	int			viewcam_dist;
1159 
1160 	int			flightRoll;
1161 
1162 	edict_t		*laser_targeted;
1163 
1164 	int			tazer;
1165 	edict_t		*tazer_on;
1166 
1167 	int			MotdTime;
1168 	int			MOTDrot;
1169 	int			MOTDrotChange;
1170 	char		MOTDmsg[50];
1171 
1172 	edict_t		*lasersight_dot;
1173 	edict_t		*grapple_on;
1174 	int			grapple;
1175 	int			grappleType;
1176 	int			jets;
1177 	int			climbing;
1178 	int			kami;
1179 
1180 	int			foot;
1181 	int			bootwater;
1182 	int			bootblood;
1183 
1184 	qboolean	heldfire;
1185 	qboolean	jumping;
1186 
1187 	float		pickup_msg_time;
1188 
1189 //	float		flood_locktill;		// locked from talking
1190 //	float		flood_when[10];		// when messages were said
1191 //	int			flood_whenhead;		// head pointer for when said
1192 
1193 	float		respawn_time;		// can respawn when time > this
1194 	float		damage_div;
1195 
1196 
1197     int             chasetoggle;
1198     edict_t         *chasecam;
1199     edict_t         *oldplayer;
1200     int             use;
1201     int             zoom;
1202     int             delayedstart;
1203 
1204 	vec3_t			cl_origin;
1205 
1206 	edict_t		*chase_target;		// player we are chasing
1207 	qboolean	update_chase;		// need to update chase info?
1208 };
1209 
1210 struct edict_s
1211 {
1212 	entity_state_t	s;
1213 	struct gclient_s	*client;	// NULL if not a player
1214 									// the server expects the first part
1215 									// of gclient_s to be a player_state_t
1216 									// but the rest of it is opaque
1217 
1218 	qboolean	inuse;
1219 	int			linkcount;
1220 
1221 	// FIXME: move these fields to a server private sv_entity_t
1222 	link_t		area;				// linked to a division node or leaf
1223 
1224 	int			num_clusters;		// if -1, use headnode instead
1225 	int			clusternums[MAX_ENT_CLUSTERS];
1226 	int			headnode;			// unused if num_clusters != -1
1227 	int			areanum, areanum2;
1228 
1229 	//================================
1230 
1231 	int			svflags;
1232 	vec3_t		mins, maxs;
1233 	vec3_t		absmin, absmax, size;
1234 	solid_t		solid;
1235 	int			clipmask;
1236 	edict_t		*owner;
1237 
1238 
1239 	// DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
1240 	// EXPECTS THE FIELDS IN THAT ORDER!
1241 
1242 	//================================
1243 
1244 	int			movetype;
1245 	int			flags;
1246 
1247 	char		*model;
1248 	float		freetime;			// sv.time when the object was freed
1249 
1250 	//
1251 	// only used locally in game, not by server
1252 	//
1253 	char		*message;
1254 	char		*classname;
1255 	int			spawnflags;
1256 
1257 	float		timestamp;
1258 
1259 	float		angle;			// set in qe3, -1 = up, -2 = down
1260 	char		*target;
1261 	char		*targetname;
1262 	char		*killtarget;
1263 	char		*team;
1264 	char		*pathtarget;
1265 	char		*deathtarget;
1266 	char		*combattarget;
1267 	edict_t		*target_ent;
1268 	edict_t		*linkedto;
1269 	edict_t		*MonsterFind;
1270 	int			linkedtoclient;
1271 
1272 	float		speed, accel, decel;
1273 	vec3_t		movedir;
1274 	vec3_t		pos1, pos2;
1275 
1276 	vec3_t		velocity;
1277 	vec3_t		avelocity;
1278 	int			mass;
1279 	float		air_finished;
1280 	float		gravity;		// per entity gravity multiplier (1.0 is normal)
1281 								// use for lowgrav artifact, flares
1282 	vec3_t		end_pt;
1283 	float		lt_on;
1284 	int			mod;
1285 	int			floater;		//if "1" then entity floats in water :)
1286 	float		timer;			//used to time out events.
1287 	float		phase;			//used for fading body
1288 	float		healthtimer;	//used for regen timing
1289 
1290 	edict_t		*goalentity;
1291 	edict_t		*movetarget;
1292 	float		yaw_speed;
1293 	float		ideal_yaw;
1294 
1295 	float		nextthink;
1296 	void		(*prethink) (edict_t *ent);
1297 	void		(*think)(edict_t *self);
1298 	void		(*thinklinked)(edict_t *self);
1299 	void		(*blocked)(edict_t *self, edict_t *other);	//move to moveinfo?
1300 	void		(*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
1301 	void		(*use)(edict_t *self, edict_t *other, edict_t *activator);
1302 	void		(*pain)(edict_t *self, edict_t *other, float kick, int damage);
1303 	void		(*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
1304 
1305 	float		touch_debounce_time;		// are all these legit?  do we need more/less of them?
1306 	float		pain_debounce_time;
1307 	float		damage_debounce_time;
1308 	float		fly_sound_debounce_time;	//move to clientinfo
1309 	float		last_move_time;
1310 
1311 	int			health;
1312 	int			max_health;
1313 	int			gib_health;
1314 	int			deadflag;
1315 	qboolean	show_hostile;
1316 
1317 	float		powerarmor_time;
1318 
1319 	char		*map;			// target_changelevel
1320 
1321 	int			viewheight;		// height above origin where eyesight is determined
1322 
1323 	vec3_t		viewangles;		// now it looks cool when u fall
1324 
1325 	int			takedamage;
1326 
1327 	int			flaming;	//check for fire...
1328 	edict_t		*flamed;
1329 	edict_t		*linked_flame;
1330 
1331 	int			grappleType;
1332 	int			bfg_laser_type;
1333 	int			grapple;
1334 	int			tazer;
1335 	int			Player_ID;
1336 	int 		TeamName;
1337 
1338 	int			configed;
1339 
1340 	int			viewcam_on;
1341 
1342 	int			dmg;
1343 	int			radius_dmg;
1344 	float		dmg_radius;
1345 	int			sounds;			//make this a spawntemp var?
1346 	int			count;
1347 	int			reload;
1348 
1349 	edict_t		*chain;
1350 	edict_t		*enemy;
1351 	edict_t		*oldenemy;
1352 	edict_t		*activator;
1353 	edict_t		*groundentity;
1354 	int			groundentity_linkcount;
1355 	edict_t		*teamchain;
1356 	edict_t		*teammaster;
1357 
1358     edict_t		*flashlight;  //flashlight
1359 
1360 	short		Move_forward, Move_side, Move_up, lightlevel;
1361 
1362 	edict_t		*mynoise;		// can go in client only
1363 	edict_t		*mynoise2;
1364 
1365 	int			fallen;			//now i can check for falling over of ents
1366 
1367 	int			linked_ents_num;
1368 	edict_t		*linked_ents[50];
1369 
1370 	edict_t		*blockedChat[100];
1371 	edict_t		*killer;
1372 	edict_t		*shadow;
1373 	edict_t		*reflection;
1374 
1375 	float		flashbanged;	//for blinding :P
1376 
1377 	int			IsGrapple;
1378 	int			IsTazer;
1379 
1380 	int			noise_index;
1381 	int			noise_index2;
1382 	float		volume;
1383 	float		attenuation;
1384 
1385 	// timing variables
1386 	float		wait;
1387 	float		delay;			// before firing targets
1388 	float		random;
1389 
1390 	float		teleport_time;
1391 
1392 	int			watertype;
1393 	int			waterlevel;
1394 
1395 	vec3_t		move_origin;
1396 	vec3_t		move_angles;
1397 
1398 	vec3_t		link_offset;
1399 
1400 	// move this to clientinfo?
1401 	int			light_level;
1402 
1403 	char		*PlayerDeadName;
1404 
1405 	int			style;			// also used as areaportal number
1406 
1407 	gitem_t		*item;			// for bonus items
1408 
1409 	float		chasedist1;
1410 	float		chasedist2;
1411 
1412 	// common data blocks
1413 	moveinfo_t		moveinfo;
1414 	monsterinfo_t	monsterinfo;
1415 };
1416 
1417 vec3_t nextmonsterspawn;
1418 vec3_t nextmonsterspawnangles;
1419 
1420 edict_t *SPClient; //for SP effects
1421 void sprite_explosion (vec3_t start, int type, cplane_t *plane);
1422 void SP_LensFlare (edict_t *flare);
1423 void SP_SunFlare (edict_t *flare);
1424 
1425 void AddShadow(edict_t *ent);
1426 void AddReflection(edict_t *ent);
1427 
1428 extern void CheckChasecam_Viewent (edict_t *ent);
1429 extern void Cmd_Chasecam_Toggle (edict_t *ent);
1430 extern void ChasecamRemove (edict_t *ent, int opt);
1431 extern void ChasecamStart (edict_t *ent);
1432 #define OPTION_OFF        0
1433 #define OPTION_BACKGROUND 1
1434