home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / glquake_src / server.h < prev    next >
C/C++ Source or Header  |  1999-12-28  |  8KB  |  258 lines

  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.