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