Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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