]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
implemented direct AVI video capture using the I420 colorspace (aka Intel(r) 4:2...
[xonotic/darkplaces.git] / client.h
index 02053f21ae23cf989e0098eade28db0826b17dcc..1fdcf14446989428d535c0a67f4c58950256b0f0 100644 (file)
--- a/client.h
+++ b/client.h
@@ -55,12 +55,6 @@ typedef struct beam_s
        struct model_s  *model;
        float   endtime;
        vec3_t  start, end;
-       // if this beam is owned by an entity, this is the beam start relative to
-       // that entity's matrix for per frame start updates
-       vec3_t  relativestart;
-       vec3_t  relativeend;
-       // indicates whether relativestart is valid
-       int     relativestartvalid;
 }
 beam_t;
 
@@ -410,10 +404,40 @@ typedef enum capturevideoformat_e
        CAPTUREVIDEOFORMAT_TARGA,
        CAPTUREVIDEOFORMAT_JPEG,
        CAPTUREVIDEOFORMAT_RAWRGB,
-       CAPTUREVIDEOFORMAT_RAWYV12
+       CAPTUREVIDEOFORMAT_RAWYV12,
+       CAPTUREVIDEOFORMAT_AVI_I420
 }
 capturevideoformat_t;
 
+typedef struct capturevideostate_s
+{
+       double starttime;
+       double framerate;
+       // for AVI saving some values have to be written after capture ends
+       fs_offset_t videofile_totalframes_offset1;
+       fs_offset_t videofile_totalframes_offset2;
+       fs_offset_t videofile_totalsampleframes_offset;
+       qfile_t *videofile;
+       qfile_t *soundfile;
+       qboolean active;
+       qboolean error;
+       capturevideoformat_t format;
+       int soundrate;
+       int frame;
+       int soundsampleframe; // for AVI saving
+       unsigned char *buffer;
+       sizebuf_t riffbuffer;
+       unsigned char riffbufferdata[128];
+       // note: riffindex buffer has an allocated ->data member, not static like most!
+       sizebuf_t riffindexbuffer;
+       int riffstacklevel;
+       fs_offset_t riffstackstartoffset[4];
+       short rgbtoyuvscaletable[3][3][256];
+       unsigned char yuvnormalizetable[3][256];
+       char basename[64];
+}
+capturevideostate_t;
+
 //
 // the client_static_t structure is persistent through an arbitrary number
 // of server connections
@@ -474,6 +498,9 @@ typedef struct client_static_s
 
        // value of "qport" cvar at time of connection
        int qw_qport;
+       // copied from cls.netcon->qw. variables every time they change, or set by demos (which have no cls.netcon)
+       int qw_incoming_sequence;
+       int qw_outgoing_sequence;
 
        // current file download buffer (only saved when file is completed)
        char qw_downloadname[MAX_QPATH];
@@ -495,17 +522,7 @@ typedef struct client_static_s
        char userinfo[MAX_USERINFO_STRING];
 
        // video capture stuff
-       qboolean capturevideo_active;
-       capturevideoformat_t capturevideo_format;
-       double capturevideo_starttime;
-       double capturevideo_framerate;
-       int capturevideo_soundrate;
-       int capturevideo_frame;
-       unsigned char *capturevideo_buffer;
-       qfile_t *capturevideo_videofile;
-       qfile_t *capturevideo_soundfile;
-       short capturevideo_rgbtoyuvscaletable[3][3][256];
-       unsigned char capturevideo_yuvnormalizetable[3][256];
+       capturevideostate_t capturevideo;
 }
 client_static_t;
 
@@ -597,6 +614,16 @@ typedef struct particle_s
 }
 particle_t;
 
+typedef enum cl_parsingtextmode_e
+{
+       CL_PARSETEXTMODE_NONE,
+       CL_PARSETEXTMODE_PING,
+       CL_PARSETEXTMODE_STATUS,
+       CL_PARSETEXTMODE_STATUS_PLAYERID,
+       CL_PARSETEXTMODE_STATUS_PLAYERIP
+}
+cl_parsingtextmode_t;
+
 //
 // the client_state_t structure is wiped completely at every
 // server signon
@@ -629,6 +656,8 @@ typedef struct client_state_s
        float weapontime;
        // use pain anim frame if cl.time < this
        float faceanimtime;
+       // for stair smoothing
+       float stairoffset;
 
        // color shifts for damage, powerups
        cshift_t cshifts[NUM_CSHIFTS];
@@ -660,7 +689,8 @@ typedef struct client_state_s
 
        // client movement simulation
        // these fields are only updated by CL_ClientMovement (called by CL_SendMove after parsing each network packet)
-       qboolean movement;
+       // set by CL_ClientMovement_Replay functions
+       qboolean movement_predicted;
        // this is set true by svc_time parsing and causes a new movement to be
        // queued for prediction purposes
        qboolean movement_needupdate;
@@ -674,9 +704,11 @@ typedef struct client_state_s
        vec3_t movement_velocity;
        // queue of proposed moves
        int movement_numqueue;
-       client_movementqueue_t movement_queue[64];
+       client_movementqueue_t movement_queue[256];
        int movesequence;
        int servermovesequence;
+       // whether the replay should allow a jump at the first sequence
+       qboolean movement_replay_canjump;
 
 // pitch drifting vars
        float idealpitch;
@@ -772,6 +804,16 @@ typedef struct client_state_s
        // [cl.maxclients]
        scoreboard_t *scores;
 
+       // keep track of svc_print parsing state (analyzes ping reports and status reports)
+       cl_parsingtextmode_t parsingtextmode;
+       int parsingtextplayerindex;
+       // set by scoreboard code when sending ping command, this causes the next ping results to be hidden
+       // (which could eat the wrong ping report if the player issues one
+       //  manually, but they would still see a ping report, just a later one
+       //  caused by the scoreboard code rather than the one they intentionally
+       //  issued)
+       int parsingtextexpectingpingforscores;
+
        // entity database stuff
        // latest received entity frame numbers
 #define LATESTFRAMENUMS 3
@@ -905,9 +947,6 @@ extern cvar_t cl_anglespeedkey;
 
 extern cvar_t cl_autofire;
 
-extern cvar_t csqc_progname;   //[515]: csqc crc check and right csprogs name according to progs.dat
-extern cvar_t csqc_progcrc;
-
 extern cvar_t cl_shownet;
 extern cvar_t cl_nolerp;
 
@@ -958,10 +997,6 @@ void CL_Disconnect_f (void);
 
 void CL_BoundingBoxForEntity(entity_render_t *ent);
 
-extern cvar_t cl_beams_polygons;
-extern cvar_t cl_beams_relative;
-extern cvar_t cl_beams_lightatend;
-
 //
 // cl_input
 //
@@ -983,7 +1018,9 @@ void CL_ValidateState(entity_state_t *s);
 void CL_MoveLerpEntityStates(entity_t *ent);
 void CL_LerpUpdate(entity_t *e);
 void CL_ParseTEnt (void);
+void CL_NewBeam (int ent, vec3_t start, vec3_t end, model_t *m, int lightning);
 void CL_RelinkBeams (void);
+void CL_Beam_CalculatePositions (const beam_t *b, vec3_t start, vec3_t end);
 
 void CL_ClearTempEntities (void);
 entity_t *CL_NewTempEntity (void);
@@ -1080,7 +1117,6 @@ typedef enum effectnameindex_s
        EFFECT_TE_SUPERSPIKEQUAD,
        EFFECT_TE_WIZSPIKE,
        EFFECT_TE_KNIGHTSPIKE,
-       EFFECT_TE_VORESPIKE,
        EFFECT_TE_EXPLOSION,
        EFFECT_TE_EXPLOSIONQUAD,
        EFFECT_TE_TAREXPLOSION,
@@ -1127,6 +1163,8 @@ void R_NewExplosion(const vec3_t org);
 
 #include "cl_screen.h"
 
+extern qboolean sb_showscores;
+
 #define NUMCROSSHAIRS 32
 extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1];
 
@@ -1267,6 +1305,9 @@ typedef struct r_view_s
 
        // which color components to allow (for anaglyph glasses)
        int colormask[4];
+
+       // global RGB color multiplier for rendering, this is required by HDR
+       float colorscale;
 }
 r_view_t;