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/ |
||
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 |