Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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/<name>.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
  258.