19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc.
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version.
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful,
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details.
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// client.h
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		name[16];
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	failedload;		// the name isn't a valid skin
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cache_user_t	cache;
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} skin_t;
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// player_state_t is the information needed by a player entity
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// to do move prediction and to generate a drawable entity
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			messagenum;		// all player's won't be updated each frame
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		state_time;		// not the same as the packet time,
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// because player commands come asyncronously
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	usercmd_t	command;		// last command for prediction
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		origin;
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		viewangles;		// only for demos, not from server
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		velocity;
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			weaponframe;
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			modelindex;
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			frame;
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			skinnum;
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			effects;
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			flags;			// dead, gib, etc
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		waterjumptime;
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			onground;		// -1 = in air, else pmove entity number
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			oldbuttons;
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} player_state_t;
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_SCOREBOARDNAME	16
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct player_info_s
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		userid;
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char	userinfo[MAX_INFO_STRING];
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// scoreboard information
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char	name[MAX_SCOREBOARDNAME];
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	entertime;
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		frags;
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		ping;
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	byte	pl;
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// skin information
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		topcolor;
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		bottomcolor;
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		_topcolor;
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		_bottomcolor;
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		spectator;
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	byte	translations[VID_GRADES*256];
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	skin_t	*skin;
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} player_info_t;
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// generated on client side
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	usercmd_t	cmd;		// cmd that generated the frame
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		senttime;	// time cmd was sent off
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			delta_sequence;		// sequence number to delta from, -1 = full update
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	// received from server
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		receivedtime;	// time message was received, or -1
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	player_state_t	playerstate[MAX_CLIENTS];	// message received that reflects performing
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							// the usercmd
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	packet_entities_t	packet_entities;
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	invalid;		// true if the packet_entities delta was invalid
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} frame_t;
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		destcolor[3];
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		percent;		// 0-256
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} cshift_t;
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	CSHIFT_CONTENTS	0
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	CSHIFT_DAMAGE	1
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	CSHIFT_BONUS	2
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	CSHIFT_POWERUP	3
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	NUM_CSHIFTS		4
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// client_state_t should hold all pieces of the client state
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_DLIGHTS		32
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		key;				// so entities can reuse same entry
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t	origin;
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	radius;
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	die;				// stop lighting after this time
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	decay;				// drop this each second
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	minlight;			// don't add when contributing less
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float   color[4];
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} dlight_t;
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		length;
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char	map[MAX_STYLESTRING];
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} lightstyle_t;
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_EFRAGS		512
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_DEMOS		8
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_DEMONAME	16
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum {
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_disconnected, 	// full screen console with no connection
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_demostart,		// starting up a demo
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_connected,		// netchan_t established, waiting for svc_serverdata
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_onserver,		// processing data lists, donwloading, etc
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamca_active			// everything is in, so frames can be rendered
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} cactive_t;
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum {
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dl_none,
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dl_model,
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dl_sound,
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dl_skin,
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dl_single
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} dltype_t;		// download type
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client_static_t structure is persistant through an arbitrary number
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// of server connections
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// connection information
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cactive_t	state;
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// network stuff
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	netchan_t	netchan;
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// private userinfo for sending to masterless servers
1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		userinfo[MAX_INFO_STRING];
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		servername[MAX_OSPATH];	// name of server from original connect
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			qport;
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	FILE		*download;		// file transfer from server
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		downloadtempname[MAX_OSPATH];
1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		downloadname[MAX_OSPATH];
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			downloadnumber;
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	dltype_t	downloadtype;
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			downloadpercent;
1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// demo loop control
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			demonum;		// -1 = don't play demos
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		demos[MAX_DEMOS][MAX_DEMONAME];		// when not playing
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// demo recording info must be here, because record is started before
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// entering a map (and clearing client_state_t)
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	demorecording;
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	demoplayback;
1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	timedemo;
1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	FILE		*demofile;
1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		td_lastframe;		// to meter out one message a frame
1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			td_startframe;		// host_framecount at start
1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		td_starttime;		// realtime at second frame of timedemo
1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			challenge;
1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		latency;		// rolling average
2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} client_static_t;
2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern client_static_t	cls;
2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client_state_t structure is wiped completely at every
2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// server signon
2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			servercount;	// server identification for prespawns
2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		serverinfo[MAX_SERVERINFO_STRING];
2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			parsecount;		// server message counter
2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			validsequence;	// this is the sequence number of the last good
2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// packetentity_t we got.  If this is 0, we can't
2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// render a frame yet
2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			movemessages;	// since connecting to this server
2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// throw out the first couple, so the player
2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// doesn't accidentally do something the
2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// first frame
2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			spectator;
2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		last_ping_request;	// while showing scoreboard
2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		last_servermessage;
2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sentcmds[cl.netchan.outgoing_sequence & UPDATE_MASK] = cmd
2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	frame_t		frames[UPDATE_BACKUP];
2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// information for local display
2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			stats[MAX_CL_STATS];	// health, etc
2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		item_gettime[32];	// cl.time of aquiring item, for blinking
2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		faceanimtime;		// use anim frame if cl.time < this
2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cshift_t	cshifts[NUM_CSHIFTS];	// color shifts for damage, powerups
2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cshift_t	prev_cshifts[NUM_CSHIFTS];	// and content types
2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client maintains its own idea of view angles, which are
2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sent to the server each frame.  And only reset at level change
2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// and teleport times
2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		viewangles;
2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the client simulates or interpolates movement to get these values
2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		time;			// this is the time value that the client
2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// is rendering at.  allways <= realtime
2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		simorg;
2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		simvel;
2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		simangles;
2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// pitch drifting vars
2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		pitchvel;
2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	nodrift;
2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		driftmove;
2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double		laststop;
2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		crouch;			// local amount for smoothing stepups
2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean	paused;			// send over by server
2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		punchangle;		// temporar yview kick from weapon firing
2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			intermission;	// don't change view angle, full screen, etc
2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			completed_time;	// latched ffrom time at intermission start
2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// information that is static for the entire time connected to a server
2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		model_name[MAX_MODELS][MAX_QPATH];
2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		sound_name[MAX_SOUNDS][MAX_QPATH];
2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct model_s		*model_precache[MAX_MODELS];
2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct sfx_s		*sound_precache[MAX_SOUNDS];
2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	char		levelname[40];	// for display on solo scoreboard
2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			playernum;
2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// refresh related state
2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct model_s	*worldmodel;	// cl_entitites[0].model
2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct efrag_s	*free_efrags;
2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			num_entities;	// stored bottom up in cl_entities array
2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			num_statics;	// stored top down in cl_entitiers
2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			cdtrack;		// cd audio
2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	entity_t	viewent;		// weapon model
2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// all player information
2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	player_info_t	players[MAX_CLIENTS];
2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} client_state_t;
2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cvars
2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern  cvar_t	cl_warncmd;
2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_upspeed;
2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_forwardspeed;
3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_backspeed;
3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_sidespeed;
3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_movespeedkey;
3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_yawspeed;
3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_pitchspeed;
3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_anglespeedkey;
3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_shownet;
3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_sbar;
3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_hudswap;
3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	cl_pitchdriftspeed;
3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	lookspring;
3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	lookstrafe;
3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	sensitivity;
3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	m_pitch;
3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	m_yaw;
3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	m_forward;
3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	m_side;
3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t		_windowed_mouse;
3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	name;
3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_STATIC_ENTITIES	128			// torches, etc
3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	client_state_t	cl;
3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// FIXME, allocate dynamically
3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_state_t	cl_baselines[MAX_EDICTS];
3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	efrag_t			cl_efrags[MAX_EFRAGS];
3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_t		cl_static_entities[MAX_STATIC_ENTITIES];
3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	lightstyle_t	cl_lightstyle[MAX_LIGHTSTYLES];
3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	dlight_t		cl_dlights[MAX_DLIGHTS];
3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	qboolean	nomaster;
3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern float	server_version;	// version of server we connected to
3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_main
3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamdlight_t *CL_AllocDlight (int key);
3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	CL_DecayLights (void);
3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Init (void);
3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Host_WriteConfiguration (void);
3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_EstablishConnection (char *host);
3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Disconnect (void);
3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Disconnect_f (void);
3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NextDemo (void);
3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_DemoBehind(void);
3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_BeginServerConnect(void);
3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define			MAX_VISEDICTS	256
3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int				cl_numvisedicts, cl_oldnumvisedicts;
3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_t		*cl_visedicts, *cl_oldvisedicts;
3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_t		cl_visedicts_list[2][MAX_VISEDICTS];
3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern char emodel_name[], pmodel_name[], prespawn_name[], modellist_name[], soundlist_name[];
3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_input
3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		down[2];		// key nums holding it down
3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int		state;			// low bit is down state
3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} kbutton_t;
3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	kbutton_t	in_mlook, in_klook;
3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern 	kbutton_t 	in_strafe;
3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern 	kbutton_t 	in_speed;
3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitInput (void);
3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SendCmd (void);
3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SendMove (usercmd_t *cmd);
3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseTEnt (void);
3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_UpdateTEnts (void);
3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearState (void);
3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ReadPackets (void);
3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint  CL_ReadFromServer (void);
3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_WriteToServer (usercmd_t *cmd);
3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_BaseMove (usercmd_t *cmd);
3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfloat CL_KeyState (kbutton_t *key);
4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar *Key_KeynumToString (int keynum);
4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_demo.c
4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StopPlayback (void);
4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_GetMessage (void);
4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_WriteDemoCmd (usercmd_t *pcmd);
4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Stop_f (void);
4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_Record_f (void);
4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ReRecord_f (void);
4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PlayDemo_f (void);
4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_TimeDemo_f (void);
4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_parse.c
4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NET_TIMINGS 256
4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NET_TIMINGSMASK 255
4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int	packet_latency[NET_TIMINGS];
4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint CL_CalcNet (void);
4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseServerMessage (void);
4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NewTranslation (int slot);
4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean	CL_CheckOrDownloadFile (char *filename);
4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean CL_IsUploading(void);
4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_NextUpload(void);
4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StartUpload (byte *data, int size);
4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_StopUpload(void);
4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// view.c
4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_StartPitchDrift (void);
4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_StopPitchDrift (void);
4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_RenderView (void);
4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_UpdatePalette (void);
4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_Register (void);
4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_ParseDamage (void);
4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_SetContentsColor (int contents);
4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid V_CalcBlend (void);
4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_tent
4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitTEnts (void);
4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearTEnts (void);
4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_ents.c
4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetSolidPlayers (int playernum);
4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetUpPlayerPrediction(qboolean dopred);
4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_EmitEntities (void);
4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ClearProjectiles (void);
4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParseProjectiles (void);
4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParsePacketEntities (qboolean delta);
4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_SetSolidEntities (void);
4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_ParsePlayerinfo (void);
4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_pred.c
4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitPrediction (void);
4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PredictMove (void);
4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_PredictUsercmd (player_state_t *from, player_state_t *to, usercmd_t *u, qboolean spectator);
4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// cl_cam.c
4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CAM_NONE	0
4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define CAM_TRACK	1
4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		autocam;
4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int spec_track; // player# of who we are tracking
4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean Cam_DrawViewModel(void);
4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean Cam_DrawPlayer(int playernum);
4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_Track(usercmd_t *cmd);
4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_FinishMove(usercmd_t *cmd);
4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Cam_Reset(void);
4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid CL_InitCam(void);
4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// skin.c
4889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	manufacturer;
4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	version;
4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	encoding;
4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	bits_per_pixel;
4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned short	xmin,ymin,xmax,ymax;
4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned short	hres,vres;
4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned char	palette[48];
4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	reserved;
5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	color_planes;
5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned short	bytes_per_line;
5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned short	palette_type;
5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    char	filler[58];
5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned char	data;			// unbounded
5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} pcx_t;
5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	Skin_Find (player_info_t *sc);
5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte	*Skin_Cache (skin_t *skin);
5109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	Skin_Skins_f (void);
5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	Skin_AllSkins_f (void);
5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	Skin_NextDownload (void);
5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RSSHOT_WIDTH 320
5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RSSHOT_HEIGHT 200
516