1cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/*
2cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichCopyright (C) 1996-1997 Id Software, Inc.
3cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
4cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is free software; you can redistribute it and/or
5cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichmodify it under the terms of the GNU General Public License
6cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichas published by the Free Software Foundation; either version 2
7cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichof the License, or (at your option) any later version.
8cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
9cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is distributed in the hope that it will be useful,
10cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichbut WITHOUT ANY WARRANTY; without even the implied warranty of
11cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
13cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichSee the GNU General Public License for more details.
14cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
15cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichYou should have received a copy of the GNU General Public License
16cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichalong with this program; if not, write to the Free Software
17cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
19cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/
20cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// client.h
21cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
22cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
23cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
24cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t	viewangles;
25cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
26cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// intended velocities
27cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	forwardmove;
28cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	sidemove;
29cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	upmove;
30cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
31cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte	lightlevel;
32cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
33cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} usercmd_t;
34cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
35cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
36cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
37cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		length;
38cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char	map[MAX_STYLESTRING];
39cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} lightstyle_t;
40cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
41cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
42cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
43cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char	name[MAX_SCOREBOARDNAME];
44cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	entertime;
45cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		frags;
46cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		colors;			// two 4 bit fields
47cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte	translations[VID_GRADES*256];
48cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} scoreboard_t;
49cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
50cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
51cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
52cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		destcolor[3];
53cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		percent;		// 0-256
54cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} cshift_t;
55cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
56cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	CSHIFT_CONTENTS	0
57cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	CSHIFT_DAMAGE	1
58cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	CSHIFT_BONUS	2
59cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	CSHIFT_POWERUP	3
60cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	NUM_CSHIFTS		4
61cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
62cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	NAME_LENGTH	64
63cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
64cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
65cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
66cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// client_state_t should hold all pieces of the client state
67cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
68cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
69cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SIGNONS		4			// signon messages to receive before connected
70cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
71cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_DLIGHTS		32
72cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
73cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
74cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t	origin;
75cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	radius;
76cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	die;				// stop lighting after this time
77cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	decay;				// drop this each second
78cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	minlight;			// don't add when contributing less
79cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		key;
80cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
81cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	dark;			// subtracts light instead of adding
82cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
83cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} dlight_t;
84cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
85cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
86cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_BEAMS	24
87cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
88cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
89cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		entity;
90cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct model_s	*model;
91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	endtime;
92cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t	start, end;
93cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} beam_t;
94cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
95cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_EFRAGS		640
96cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
97cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_MAPSTRING	2048
98cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_DEMOS		8
99cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_DEMONAME	16
100cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
101cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef enum {
102cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_dedicated, 		// a dedicated server with no ability to start a client
103cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_disconnected, 	// full screen console with no connection
104cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichca_connected,		// valid netcon, talking to a server
105cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcactive_t_max = 1 << 30
106cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} cactive_t;
107cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
108cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
109cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client_static_t structure is persistant through an arbitrary number
110cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// of server connections
111cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
112cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
113cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
114cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	cactive_t	state;
115cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
116cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// personalization data sent to server
117cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		mapstring[MAX_QPATH];
118cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		spawnparms[MAX_MAPSTRING];	// to restart a level
119cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
120cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// demo loop control
121cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			demonum;		// -1 = don't play demos
122cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		demos[MAX_DEMOS][MAX_DEMONAME];		// when not playing
123cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
124cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// demo recording info must be here, because record is started before
125cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// entering a map (and clearing client_state_t)
126cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	demorecording;
127cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	demoplayback;
128cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	timedemo;
129cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			forcetrack;			// -1 = use normal cd track
130cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	FILE		*demofile;
131cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			td_lastframe;		// to meter out one message a frame
132cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			td_startframe;		// host_framecount at start
133cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		td_starttime;		// realtime at second frame of timedemo
134cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
135cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
136cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// connection information
137cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			signon;			// 0 to SIGNONS
138cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct qsocket_s	*netcon;
139cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	sizebuf_t	message;		// writing buffer to send to server
140cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
141cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} client_static_t;
142cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
143cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern client_static_t	cls;
144cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
145cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
146cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client_state_t structure is wiped completely at every
147cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// server signon
148cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
149cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
150cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
151cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			movemessages;	// since connecting to this server
152cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// throw out the first couple, so the player
153cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// doesn't accidentally do something the
154cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// first frame
155cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	usercmd_t	cmd;			// last command sent to the server
156cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
157cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// information for local display
158cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			stats[MAX_CL_STATS];	// health, etc
159cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			items;			// inventory bit flags
160cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	item_gettime[32];	// cl.time of aquiring item, for blinking
161cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		faceanimtime;	// use anim frame if cl.time < this
162cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
163cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	cshift_t	cshifts[NUM_CSHIFTS];	// color shifts for damage, powerups
164cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	cshift_t	prev_cshifts[NUM_CSHIFTS];	// and content types
165cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
166cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the client maintains its own idea of view angles, which are
167cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// sent to the server each frame.  The server sets punchangle when
168cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// the view is temporarliy offset, and an angle reset commands at the start
169cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// of each level and after teleporting.
170cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		mviewangles[2];	// during demo playback viewangles is lerped
171cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// between these
172cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		viewangles;
173cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
174cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		mvelocity[2];	// update by server, used for lean+bob
175cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// (0 is newest)
176cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		velocity;		// lerped between mvelocity[0] and [1]
177cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
178cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		punchangle;		// temporary offset
179cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
180cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// pitch drifting vars
181cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		idealpitch;
182cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		pitchvel;
183cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	nodrift;
184cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		driftmove;
185cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		laststop;
186cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
187cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		viewheight;
188cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		crouch;			// local amount for smoothing stepups
189cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
190cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	paused;			// send over by server
191cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	onground;
192cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	inwater;
193cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
194cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			intermission;	// don't change view angle, full screen, etc
195cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			completed_time;	// latched at intermission start
196cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
197cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		mtime[2];		// the timestamp of last two messages
198cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		time;			// clients view of time, should be between
199cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// servertime and oldservertime to generate
200cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// a lerp point for other data
201cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		oldtime;		// previous cl.time, time-oldtime is used
202cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich								// to decay light values and smooth step ups
203cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
204cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
205cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		last_received_message;	// (realtime) for net trouble icon
206cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
207cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
208cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// information that is static for the entire time connected to a server
209cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
210cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct model_s		*model_precache[MAX_MODELS];
211cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct sfx_s		*sound_precache[MAX_SOUNDS];
212cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
213cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		levelname[40];	// for display on solo scoreboard
214cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			viewentity;		// cl_entitites[cl.viewentity] = player
215cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			maxclients;
216cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			gametype;
217cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
218cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// refresh related state
219cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct model_s	*worldmodel;	// cl_entitites[0].model
220cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct efrag_s	*free_efrags;
221cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			num_entities;	// held in cl_entities array
222cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			num_statics;	// held in cl_staticentities array
223cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	entity_t	viewent;			// the gun model
224cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
225cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			cdtrack, looptrack;	// cd audio
226cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
227cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// frag scoreboard
228cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	scoreboard_t	*scores;		// [cl.maxclients]
229cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
230cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
231cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// light level at player's position including dlights
232cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// this is sent back to the server each frame
233cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// architectually ugly but it works
234cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			light_level;
235cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
236cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} client_state_t;
237cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
238cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
239cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
240cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cvars
241cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
242cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_name;
243cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_color;
244cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
245cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_upspeed;
246cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_forwardspeed;
247cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_backspeed;
248cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_sidespeed;
249cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
250cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_movespeedkey;
251cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
252cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_yawspeed;
253cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_pitchspeed;
254cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
255cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_anglespeedkey;
256cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
257cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_autofire;
258cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
259cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_shownet;
260cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_nolerp;
261cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
262cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	cl_pitchdriftspeed;
263cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	lookspring;
264cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	lookstrafe;
265cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	sensitivity;
266cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
267cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	m_pitch;
268cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	m_yaw;
269cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	m_forward;
270cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	m_side;
271cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
272cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
273cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_TEMP_ENTITIES	64			// lightning bolts, etc
274cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_STATIC_ENTITIES	128			// torches, etc
275cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
276cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	client_state_t	cl;
277cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
278cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// FIXME, allocate dynamically
279cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	efrag_t			cl_efrags[MAX_EFRAGS];
280cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t		cl_entities[MAX_EDICTS];
281cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t		cl_static_entities[MAX_STATIC_ENTITIES];
282cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	lightstyle_t	cl_lightstyle[MAX_LIGHTSTYLES];
283cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	dlight_t		cl_dlights[MAX_DLIGHTS];
284cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t		cl_temp_entities[MAX_TEMP_ENTITIES];
285cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	beam_t			cl_beams[MAX_BEAMS];
286cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
287cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//=============================================================================
288cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
289cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
290cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_main
291cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
292cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichdlight_t *CL_AllocDlight (int key);
293cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid	CL_DecayLights (void);
294cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
295cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Init (void);
296cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
297cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_EstablishConnection (const char *host);
298cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon1 (void);
299cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon2 (void);
300cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon3 (void);
301cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Signon4 (void);
302cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
303cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Disconnect (void);
304cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Disconnect_f (void);
305cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_NextDemo (void);
306cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
307cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define			MAX_VISEDICTS	256
308cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int				cl_numvisedicts;
309cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t		*cl_visedicts[MAX_VISEDICTS];
310cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
311cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
312cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_input
313cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
314cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
315cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
316cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		down[2];		// key nums holding it down
317cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int		state;			// low bit is down state
318cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} kbutton_t;
319cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
320cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	kbutton_t	in_mlook, in_klook;
321cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern 	kbutton_t 	in_strafe;
322cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern 	kbutton_t 	in_speed;
323cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
324cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_InitInput (void);
325cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SendCmd (void);
326cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SendMove (usercmd_t *cmd);
327cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
328cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ParseTEnt (void);
329cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_UpdateTEnts (void);
330cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
331cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ClearState (void);
332cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
333cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
334cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint  CL_ReadFromServer (void);
335cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_WriteToServer (usercmd_t *cmd);
336cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_BaseMove (usercmd_t *cmd);
337cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
338cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
339cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichfloat CL_KeyState (kbutton_t *key);
340cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichconst char *Key_KeynumToString (int keynum);
341cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
342cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
343cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_demo.c
344cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
345cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_StopPlayback (void);
346cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint CL_GetMessage (void);
347cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
348cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Stop_f (void);
349cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_Record_f (void);
350cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_PlayDemo_f (void);
351cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_TimeDemo_f (void);
352cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
353cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
354cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_parse.c
355cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
356cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_ParseServerMessage (void);
357cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_NewTranslation (int slot);
358cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
359cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
360cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// view
361cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
362cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_StartPitchDrift (void);
363cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_StopPitchDrift (void);
364cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
365cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_RenderView (void);
366cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_UpdatePalette (void);
367cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_Register (void);
368cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_ParseDamage (void);
369cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid V_SetContentsColor (int contents);
370cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
371cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
372cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
373cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// cl_tent
374cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
375cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_InitTEnts (void);
376cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid CL_SignonReply (void);
377