typedef struct entity_render_s
{
// location
- vec3_t origin;
+ //vec3_t origin;
// orientation
- vec3_t angles;
+ //vec3_t angles;
// transform matrix for model to world
matrix4x4_t matrix;
// transform matrix for world to model
typedef enum capturevideoformat_e
{
- CAPTUREVIDEOFORMAT_TARGA,
- CAPTUREVIDEOFORMAT_JPEG,
- CAPTUREVIDEOFORMAT_RAWRGB,
- 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;
+ qboolean active;
+ qboolean realtime;
+ 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
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;
float airfriction; // how much air friction affects this object (objects with a low mass/size ratio tend to get more air friction)
float liquidfriction; // how much liquid friction affects this object (objects with a low mass/size ratio tend to get more liquid friction)
unsigned char color[4];
- unsigned short owner; // decal stuck to this entity
+ unsigned int owner; // decal stuck to this entity
model_t *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
vec3_t relativeorigin; // decal at this location in entity's coordinate space
vec3_t relativedirection; // decal oriented this way relative to entity's coordinate space
}
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
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];
// 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;
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
// [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
// updated from serverinfo
int qw_teamplay;
- // indicates whether the player is spectating
- qboolean qw_spectator;
+ // unused: indicates whether the player is spectating
+ // use cl.scores[cl.playerentity].qw_spectator instead
+ //qboolean qw_spectator;
// movement parameters for client prediction
float qw_movevars_gravity;
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;
void CL_Disconnect (void);
void CL_Disconnect_f (void);
-void CL_BoundingBoxForEntity(entity_render_t *ent);
+void CL_UpdateRenderEntity(entity_render_t *ent);
//
// cl_input
EFFECT_TE_SUPERSPIKEQUAD,
EFFECT_TE_WIZSPIKE,
EFFECT_TE_KNIGHTSPIKE,
- EFFECT_TE_VORESPIKE,
EFFECT_TE_EXPLOSION,
EFFECT_TE_EXPLOSIONQUAD,
EFFECT_TE_TAREXPLOSION,
#include "cl_screen.h"
+extern qboolean sb_showscores;
+
#define NUMCROSSHAIRS 32
extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1];
// 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;