]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
fixed stair smoothing code so it no longer jitters when riding lifts
[xonotic/darkplaces.git] / client.h
index cb69ceac4844036c28f112b8a35a19ac8d176afe..f53943dcb6aa045e6fe0ba001a333549fb1e6892 100644 (file)
--- a/client.h
+++ b/client.h
@@ -27,6 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 // LordHavoc: 256 dynamic lights
 #define MAX_DLIGHTS 256
 
+// this is the maximum number of input packets that can be lost without a
+// misprediction
+#define CL_MAX_USERCMDS 16
+
 // flags for rtlight rendering
 #define LIGHTFLAG_NORMALMODE 1
 #define LIGHTFLAG_REALTIMEMODE 2
@@ -146,11 +150,7 @@ typedef struct dlight_s
        // color of light
        // (worldlight: saved to .rtlights file)
        vec3_t color;
-       // cubemap number to use on this light
-       // (dlight only)
-       int cubemapnum;
        // cubemap name to use on this light
-       // (worldlight only)
        // (worldlight: saved to .rtlights file)
        char cubemapname[64];
        // make light flash while selected
@@ -197,7 +197,7 @@ typedef struct dlight_s
        // (worldlight only)
        struct dlight_s *next;
        // embedded rtlight struct for renderer
-       // (renderer only)
+       // (worldlight only)
        rtlight_t rtlight;
 }
 dlight_t;
@@ -332,6 +332,7 @@ typedef struct usercmd_s
 
        double time;
        double receivetime;
+       int msec; // for qw moves
        int buttons;
        int impulse;
        int sequence;
@@ -566,18 +567,6 @@ typedef struct
        qboolean drawcrosshair;
 }csqc_vidvars_t;
 
-typedef struct qw_usercmd_s
-{
-       vec3_t angles;
-       short forwardmove, sidemove, upmove;
-       unsigned char padding1[2];
-       unsigned char msec;
-       unsigned char buttons;
-       unsigned char impulse;
-       unsigned char padding2;
-}
-qw_usercmd_t;
-
 typedef enum
 {
        PARTICLE_BILLBOARD = 0,
@@ -651,15 +640,13 @@ typedef struct client_state_s
        // true if playing in a local game and no one else is connected
        int islocalgame;
 
-       // when connecting to the server throw out the first couple move messages
-       // so the player doesn't accidentally do something the first frame
-       int movemessages;
-
        // send a clc_nop periodically until connected
        float sendnoptime;
 
-       // current input to send to the server
+       // current input being accumulated by mouse/joystick/etc input
        usercmd_t cmd;
+       // latest moves sent to the server that have not been confirmed yet
+       usercmd_t movecmd[CL_MAX_USERCMDS];
 
 // information for local display
        // health, etc
@@ -675,7 +662,8 @@ typedef struct client_state_s
        // use pain anim frame if cl.time < this
        float faceanimtime;
        // for stair smoothing
-       float stairoffset;
+       float stairsmoothz;
+       double stairsmoothtime;
 
        // color shifts for damage, powerups
        cshift_t cshifts[NUM_CSHIFTS];
@@ -712,10 +700,8 @@ typedef struct client_state_s
        // this is set true by svc_time parsing and causes a new movement to be
        // queued for prediction purposes
        qboolean movement_needupdate;
-       // indicates the queue has been updated and should be replayed
-       qboolean movement_replay;
        // timestamps of latest two predicted moves for interpolation
-       double movement_time[2];
+       double movement_time[4];
        // simulated data (this is valid even if cl.movement is false)
        vec3_t movement_origin;
        vec3_t movement_oldorigin;
@@ -765,6 +751,8 @@ typedef struct client_state_s
        // clients view of time, time should be between mtime[0] and mtime[1] to
        // generate a lerp point for other data, oldtime is the previous frame's
        // value of time, frametime is the difference between time and oldtime
+       // note: cl.time may be beyond cl.mtime[0] if packet loss is occuring, it
+       // is only forcefully limited when a packet is received
        double time, oldtime;
        // how long it has been since the previous client frame in real time
        // (not game time, for that use cl.time - cl.oldtime)
@@ -939,9 +927,12 @@ typedef struct client_state_s
 
        int qw_validsequence;
 
-       qw_usercmd_t qw_moves[QW_UPDATE_BACKUP];
-
        int qw_deltasequence[QW_UPDATE_BACKUP];
+
+       // csqc stuff:
+
+       // collision culling data
+       world_t world;
 }
 client_state_t;
 
@@ -974,6 +965,7 @@ extern cvar_t cl_autofire;
 
 extern cvar_t cl_shownet;
 extern cvar_t cl_nolerp;
+extern cvar_t cl_nettimesyncmode;
 
 extern cvar_t cl_pitchdriftspeed;
 extern cvar_t lookspring;
@@ -1004,7 +996,7 @@ extern cvar_t cl_prydoncursor;
 
 extern client_state_t cl;
 
-extern void CL_AllocDlight (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
+extern void CL_AllocLightFlash (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
 
 //=============================================================================
 
@@ -1060,7 +1052,7 @@ void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allo
 
 int  CL_ReadFromServer (void);
 void CL_WriteToServer (void);
-void CL_Move (void);
+void CL_Input (void);
 extern qboolean cl_ignoremousemove;
 
 
@@ -1177,6 +1169,7 @@ effectnameindex_t;
 int CL_ParticleEffectIndexForName(const char *name);
 const char *CL_ParticleEffectNameForIndex(int i);
 void CL_ParticleEffect(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor);
+void CL_ParticleTrail(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles);
 void CL_ParseParticleEffect (void);
 void CL_ParticleCube (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, vec_t gravity, vec_t randomvel);
 void CL_ParticleRain (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, int type);
@@ -1261,7 +1254,7 @@ typedef struct r_refdef_s
        int maxentities;
 
        // renderable dynamic lights
-       dlight_t *lights[MAX_DLIGHTS];
+       rtlight_t lights[MAX_DLIGHTS];
        int numlights;
 
        // 8.8bit fixed point intensities for light styles