qboolean loadgame; // handle connections specially
double time;
-
+
+ double frametime;
+
int lastcheck; // used by PF_checkclient
double lastchecktime;
-
+
char name[64]; // map name
char modelname[64]; // maps/<name>.bsp, for model_precache[0]
struct model_s *worldmodel;
server_state_t state; // some actions are only valid during load
sizebuf_t datagram;
- byte datagram_buf[MAX_DATAGRAM];
+ qbyte datagram_buf[MAX_DATAGRAM];
sizebuf_t reliable_datagram; // copied to all clients at end of frame
- byte reliable_datagram_buf[MAX_DATAGRAM];
+ qbyte reliable_datagram_buf[MAX_DATAGRAM];
sizebuf_t signon;
- byte signon_buf[32768]; // LordHavoc: increased signon message buffer from 8192 to 32768
+ qbyte signon_buf[32768]; // LordHavoc: increased signon message buffer from 8192 to 32768
} server_t;
qboolean dropasap; // has been told to go to another level
qboolean sendsignon; // only valid before spawned
+#ifndef NOROUTINGFIX
+ // LordHavoc: to make netquake protocol get through NAT routers, have to wait for client to ack
+ qboolean waitingforconnect; // waiting for connect from client (stage 1)
+ qboolean sendserverinfo; // send server info in next datagram (stage 2)
+#endif
+
double last_message; // reliable messages must be sent
// periodically
sizebuf_t message; // can be added to at any time,
// copied and clear once per frame
- byte msgbuf[MAX_MSGLEN];
+ qbyte msgbuf[MAX_MSGLEN];
edict_t *edict; // EDICT_NUM(clientnum+1)
char name[32]; // for printing to other people
int colors;
-
+
float ping_times[NUM_PING_TIMES];
int num_pings; // ping_times[num_pings%NUM_PING_TIMES]
+ float ping; // LordHavoc: can be used for prediction or whatever...
+ float latency; // LordHavoc: specifically used for prediction, accounts for sys_ticrate too
// spawn parms are carried from level to level
float spawn_parms[NUM_SPAWN_PARMS];
-// client known data for deltas
+// client known data for deltas
int old_frags;
int pmodel;
+
+#ifdef QUAKEENTITIES
+ // delta compression state
+ float nextfullupdate[MAX_EDICTS];
+#endif
+ // visibility state
+ float visibletime[MAX_EDICTS];
+
+#ifndef QUAKEENTITIES
+ entity_database_t entitydatabase;
+ int entityframenumber; // incremented each time an entity frame is sent
+#endif
} client_t;
//============================================================================
-extern cvar_t teamplay;
-extern cvar_t skill;
-extern cvar_t deathmatch;
-extern cvar_t coop;
-extern cvar_t fraglimit;
-extern cvar_t timelimit;
-
-extern server_static_t svs; // persistant server info
-extern server_t sv; // local server
-
-extern client_t *host_client;
-
-extern jmp_buf host_abortserver;
-
-extern double host_time;
-
-extern edict_t *sv_player;
+extern cvar_t teamplay;
+extern cvar_t skill;
+extern cvar_t deathmatch;
+extern cvar_t coop;
+extern cvar_t fraglimit;
+extern cvar_t timelimit;
+extern cvar_t pausable;
+extern cvar_t sv_deltacompress;
+extern cvar_t sv_maxvelocity;
+extern cvar_t sv_gravity;
+extern cvar_t sv_nostep;
+extern cvar_t sv_friction;
+extern cvar_t sv_edgefriction;
+extern cvar_t sv_stopspeed;
+extern cvar_t sv_maxspeed;
+extern cvar_t sv_accelerate;
+extern cvar_t sv_idealpitchscale;
+extern cvar_t sv_aim;
+extern cvar_t sv_predict;
+
+extern server_static_t svs; // persistant server info
+extern server_t sv; // local server
+
+extern client_t *host_client;
+
+extern jmp_buf host_abortserver;
+
+extern edict_t *sv_player;
//===========================================================
void SV_Init (void);
void SV_StartParticle (vec3_t org, vec3_t dir, int color, int count);
-void SV_StartSound (edict_t *entity, int channel, char *sample, int volume,
- float attenuation);
+void SV_StartEffect (vec3_t org, int modelindex, int startframe, int framecount, int framerate);
+void SV_StartSound (edict_t *entity, int channel, char *sample, int volume, float attenuation);
void SV_DropClient (qboolean crash);
void SV_CheckForNewClients (void);
void SV_RunClients (void);
-void SV_SaveSpawnparms ();
+void SV_SaveSpawnparms (void);
void SV_SpawnServer (char *server);