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// server.h
21cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
22cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
23cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
24cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			maxclients;
25cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			maxclientslimit;
26cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct client_s	*clients;		// [maxclients]
27cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			serverflags;		// episode completion information
28cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	changelevel_issued;	// cleared when at SV_SpawnServer
29cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} server_static_t;
30cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
31cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//=============================================================================
32cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
33cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef enum {ss_loading, ss_active, server_state_t_max = 1 << 30} server_state_t;
34cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
35cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
36cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
37cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	active;				// false if only a net client
38cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
39cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	paused;
40cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean	loadgame;			// handle connections specially
41cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
42cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		time;
43cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
44cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			lastcheck;			// used by PF_checkclient
45cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double		lastchecktime;
46cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
47cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		name[64];			// map name
48cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
49cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		startspot[64];
50cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
51cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		modelname[64];		// maps/<name>.bsp, for model_precache[0]
52cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct model_s 	*worldmodel;
53cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		*model_precache[MAX_MODELS];	// NULL terminated
54cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct model_s	*models[MAX_MODELS];
55cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		*sound_precache[MAX_SOUNDS];	// NULL terminated
56cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char		*lightstyles[MAX_LIGHTSTYLES];
57cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			num_edicts;
58cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			max_edicts;
59cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	edict_t		*edicts;			// can NOT be array indexed, because
60cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich									// edict_t is variable sized, but can
61cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich									// be used to reference the world ent
62cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	server_state_t	state;			// some actions are only valid during load
63cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
64cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	sizebuf_t	datagram;
65cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte		datagram_buf[MAX_DATAGRAM];
66cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
67cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	sizebuf_t	reliable_datagram;	// copied to all clients at end of frame
68cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte		reliable_datagram_buf[MAX_DATAGRAM];
69cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
70cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	sizebuf_t	signon;
71cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte		signon_buf[8192];
72cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} server_t;
73cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
74cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
75cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	NUM_PING_TIMES		16
76cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	NUM_SPAWN_PARMS		16
77cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
78cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct client_s
79cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
80cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean		active;				// false = client is free
81cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean		spawned;			// false = don't send datagrams
82cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean		dropasap;			// has been told to go to another level
83cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean		privileged;			// can execute any host command
84cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	qboolean		sendsignon;			// only valid before spawned
85cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
86cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	double			last_message;		// reliable messages must be sent
87cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich										// periodically
88cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
89cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct qsocket_s *netconnection;	// communications handle
90cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	usercmd_t		cmd;				// movement
92cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t			wishdir;			// intended motion calced from cmd
93cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
94cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	sizebuf_t		message;			// can be added to at any time,
95cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich										// copied and clear once per frame
96cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte			msgbuf[MAX_MSGLEN];
97cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	edict_t			*edict;				// EDICT_NUM(clientnum+1)
98cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	char			name[32];			// for printing to other people
99cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int				colors;
100cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
101cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float			ping_times[NUM_PING_TIMES];
102cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int				num_pings;			// ping_times[num_pings%NUM_PING_TIMES]
103cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
104cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// spawn parms are carried from level to level
105cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float			spawn_parms[NUM_SPAWN_PARMS];
106cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
107cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// client known data for deltas
108cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int				old_frags;
109cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} client_t;
110cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
111cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
112cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//=============================================================================
113cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
114cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// edict->movetype values
115cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_NONE			0		// never moves
116cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_ANGLENOCLIP	1
117cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_ANGLECLIP		2
118cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_WALK			3		// gravity
119cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_STEP			4		// gravity, special edge handling
120cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_FLY			5
121cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_TOSS			6		// gravity
122cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_PUSH			7		// no clip to world, push and crush
123cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_NOCLIP			8
124cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_FLYMISSILE		9		// extra size to monsters
125cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MOVETYPE_BOUNCE			10
126cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
127cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MOVETYPE_BOUNCEMISSILE	11		// bounce w/o gravity
128cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define MOVETYPE_FOLLOW			12		// track movement of aiment
129cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
130cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
131cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// edict->solid values
132cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SOLID_NOT				0		// no interaction with other objects
133cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SOLID_TRIGGER			1		// touch on edge, but not blocking
134cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SOLID_BBOX				2		// touch on edge, block
135cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SOLID_SLIDEBOX			3		// touch on edge, but not an onground
136cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SOLID_BSP				4		// bsp clip, touch on edge, block
137cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
138cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// edict->deadflag values
139cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DEAD_NO					0
140cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DEAD_DYING				1
141cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DEAD_DEAD				2
142cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
143cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DAMAGE_NO				0
144cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DAMAGE_YES				1
145cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	DAMAGE_AIM				2
146cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
147cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// edict->flags
148cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_FLY					1
149cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_SWIM					2
150cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//#define	FL_GLIMPSE				4
151cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_CONVEYOR				4
152cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_CLIENT				8
153cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_INWATER				16
154cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_MONSTER				32
155cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_GODMODE				64
156cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_NOTARGET				128
157cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_ITEM					256
158cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_ONGROUND				512
159cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_PARTIALGROUND		1024	// not all corners are valid
160cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_WATERJUMP			2048	// player jumping out of water
161cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	FL_JUMPRELEASED			4096	// for jump debouncing
162cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
163cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define FL_FLASHLIGHT			8192
164cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define FL_ARCHIVE_OVERRIDE		1048576
165cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
166cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
167cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// entity effects
168cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
169cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	EF_BRIGHTFIELD			1
170cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	EF_MUZZLEFLASH 			2
171cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	EF_BRIGHTLIGHT 			4
172cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	EF_DIMLIGHT 			8
173cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
174cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define EF_DARKLIGHT			16
175cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define EF_DARKFIELD			32
176cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define EF_LIGHT				64
177cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define EF_NODRAW				128
178cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
179cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
180cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SPAWNFLAG_NOT_EASY			256
181cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SPAWNFLAG_NOT_MEDIUM		512
182cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SPAWNFLAG_NOT_HARD			1024
183cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SPAWNFLAG_NOT_DEATHMATCH	2048
184cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
185cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
186cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// server flags
187cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_EPISODE_1		1
188cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_EPISODE_2		2
189cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_EPISODE_3		4
190cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_EPISODE_4		8
191cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_NEW_UNIT		16
192cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_NEW_EPISODE		32
193cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SFL_CROSS_TRIGGERS	65280
194cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
195cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
196cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//============================================================================
197cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
198cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	teamplay;
199cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	skill;
200cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	deathmatch;
201cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	coop;
202cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	fraglimit;
203cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	timelimit;
204cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
205cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	server_static_t	svs;				// persistant server info
206cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	server_t		sv;					// local server
207cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
208cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	client_t	*host_client;
209cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
210cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	jmp_buf 	host_abortserver;
211cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
212cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	double		host_time;
213cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
214cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	edict_t		*sv_player;
215cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
216cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//===========================================================
217cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
218cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_Init (void);
219cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
220cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_StartParticle (vec3_t org, vec3_t dir, int color, int count);
221cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_StartSound (edict_t *entity, int channel, const char *sample, int volume,
222cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich    float attenuation);
223cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
224cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_DropClient (qboolean crash);
225cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
226cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_SendClientMessages (void);
227cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_ClearDatagram (void);
228cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
229cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint SV_ModelIndex (const char *name);
230cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
231cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_SetIdealPitch (void);
232cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
233cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_AddUpdates (void);
234cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
235cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_ClientThink (void);
236cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_AddClientToServer (struct qsocket_s	*ret);
237cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
238cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_ClientPrintf (const char *fmt, ...);
239cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_BroadcastPrintf (const char *fmt, ...);
240cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
241cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_Physics (void);
242cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
243cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichqboolean SV_CheckBottom (edict_t *ent);
244cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichqboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink);
245cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
246cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_WriteClientdataToMessage (edict_t *ent, sizebuf_t *msg);
247cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
248cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_MoveToGoal (void);
249cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
250cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_CheckForNewClients (void);
251cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_RunClients (void);
252cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_SaveSpawnparms ();
253cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef QUAKE2
254cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_SpawnServer (char *server, char *startspot);
255cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else
256cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid SV_SpawnServer (char *server);
257cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
258