// NULL = no model
model_t *model;
- // current uninterpolated animation frame (for things which do not use interpolation)
- int frame;
+ // number of the entity represents, or 0 for non-network entities
+ int entitynumber;
// entity shirt and pants colors (-1 if not colormapped)
int colormap;
// literal colors for renderer
vec3_t colormap_shirtcolor;
// light, particles, etc
int effects;
+ // qw CTF flags and other internal-use-only effect bits
+ int internaleffects;
// for Alias models
int skinnum;
// render flags
// particle trail
float trail_time;
+ qboolean trail_allowed; // set to false by teleports, true by update code, prevents bad lerps
// muzzleflash fading
float muzzleflash;
int impulse;
int sequence;
qboolean applied; // if false we're still accumulating a move
+ qboolean predicted; // if true the sequence should be sent as 0
} usercmd_t;
typedef struct lightstyle_s
double starttime;
double framerate;
// for AVI saving some values have to be written after capture ends
+ fs_offset_t videofile_firstchunkframes_offset;
fs_offset_t videofile_totalframes_offset1;
fs_offset_t videofile_totalframes_offset2;
fs_offset_t videofile_totalsampleframes_offset;
int soundrate;
int frame;
int soundsampleframe; // for AVI saving
- unsigned char *buffer;
+ unsigned char *screenbuffer;
+ unsigned char *outbuffer;
sizebuf_t riffbuffer;
unsigned char riffbufferdata[128];
// note: riffindex buffer has an allocated ->data member, not static like most!
short rgbtoyuvscaletable[3][3][256];
unsigned char yuvnormalizetable[3][256];
char basename[64];
+ int width, height;
}
capturevideostate_t;
float move[3];
qboolean jump;
qboolean crouch;
+ qboolean canjump;
}
client_movementqueue_t;
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
+ float delayedcollisions; // time that p->bounce becomes active
+ float delayedspawn; // time that particle appears and begins moving
+ float die; // time when this particle should be removed, regardless of alpha
}
particle_t;
// information for local display
// health, etc
int stats[MAX_CL_STATS];
+ float *statsf; // points to stats[] array
// last known inventory bit flags, for blinking
int olditems;
// cl.time of acquiring item, for blinking
int viewentity;
// the real player entity (normally same as viewentity,
// different than viewentity if mod uses chasecam or other tricks)
+ int realplayerentity;
+ // this is updated to match cl.viewentity whenever it is in the clients
+ // range, basically this is used in preference to cl.realplayerentity for
+ // most purposes because when spectating another player it should show
+ // their information rather than yours
int playerentity;
// max players that can be in this game
int maxclients;
int downloadsound_current;
int loadsound_total;
qboolean downloadcsqc;
+ qboolean loadcsqc;
qboolean loadbegun;
qboolean loadfinished;
int qw_teamplay;
// unused: indicates whether the player is spectating
- // use cl.scores[cl.playerentity].qw_spectator instead
+ // use cl.scores[cl.playerentity-1].qw_spectator instead
//qboolean qw_spectator;
// movement parameters for client prediction
- float qw_movevars_gravity;
- float qw_movevars_stopspeed;
- float qw_movevars_maxspeed; // can change during play
- float qw_movevars_spectatormaxspeed;
- float qw_movevars_accelerate;
- float qw_movevars_airaccelerate;
- float qw_movevars_wateraccelerate;
- float qw_movevars_friction;
- float qw_movevars_waterfriction;
- float qw_movevars_entgravity; // can change during play
+ float movevars_wallfriction;
+ float movevars_waterfriction;
+ float movevars_friction;
+ float movevars_ticrate;
+ float movevars_timescale;
+ float movevars_gravity;
+ float movevars_stopspeed;
+ float movevars_maxspeed;
+ float movevars_spectatormaxspeed;
+ float movevars_accelerate;
+ float movevars_airaccelerate;
+ float movevars_wateraccelerate;
+ float movevars_entgravity;
+ float movevars_jumpvelocity;
+ float movevars_edgefriction;
+ float movevars_maxairspeed;
+ float movevars_stepheight;
+ float movevars_airaccel_qw;
+ float movevars_airaccel_sideways_friction;
// models used by qw protocol
int qw_modelindex_spike;
int qw_deltasequence[QW_UPDATE_BACKUP];
// csqc stuff:
+ // server entity number corresponding to a clientside entity
+ unsigned short csqc_server2csqcentitynumber[MAX_EDICTS];
+ qboolean csqc_loaded;
+ vec3_t csqc_origin;
+ vec3_t csqc_angles;
+ qboolean csqc_usecsqclistener;
+ matrix4x4_t csqc_listenermatrix;
+ char csqc_printtextbuf[MAX_INPUTLINE];
// collision culling data
world_t world;
// this is updated to cl.movement_origin whenever health is < 1
// used by %d print in say/say_team messages if cl_locs_enable is on
vec3_t lastdeathorigin;
+
+ // processing buffer used by R_BuildLightMap, reallocated as needed,
+ // freed on each level change
+ size_t buildlightmapmemorysize;
+ unsigned char *buildlightmapmemory;
}
client_state_t;
#define NUMCROSSHAIRS 32
extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1];
-#define FOGTABLEWIDTH 1024
-#define VERTEXFOGTABLE(dist) (r_refdef.fogtable[min((unsigned int)((dist) * r_refdef.fogtabledistmultiplier), FOGTABLEWIDTH - 1)])
+float FogPoint_World(const vec3_t p);
+float FogPoint_Model(const vec3_t p);
typedef struct r_refdef_stats_s
{
vec3_t fogcolor;
vec_t fogrange;
vec_t fograngerecip;
- vec_t fogtabledistmultiplier;
- float fogtable[FOGTABLEWIDTH];
+ vec_t fogmasktabledistmultiplier;
+#define FOGMASKTABLEWIDTH 1024
+ float fogmasktable[FOGMASKTABLEWIDTH];
float fog_density;
float fog_red;
float fog_green;
vec3_t left;
vec3_t right;
vec3_t up;
- mplane_t frustum[5];
+ int numfrustumplanes;
+ mplane_t frustum[6];
+ qboolean useclipplane;
+ qboolean usecustompvs; // uses r_viewcache.pvsbits as-is rather than computing it
+ mplane_t clipplane;
float frustum_x, frustum_y;
vec3_t frustumcorner[4];
+ // if turned off it renders an ortho view
+ int useperspective;
+ float ortho_x, ortho_y;
// screen area to render in
int x;
// global RGB color multiplier for rendering, this is required by HDR
float colorscale;
+
+ // whether to draw r_showtris and such, this is only true for the main
+ // view render, all secondary renders (HDR, mirrors, portals, cameras,
+ // distortion effects, etc) omit such debugging information
+ qboolean showdebug;
+
+ // these define which values to use in GL_CullFace calls to request frontface or backface culling
+ int cullface_front;
+ int cullface_back;
}
r_view_t;
// flag arrays used for visibility checking on world model
// (all other entities have no per-surface/per-leaf visibility checks)
// TODO: dynamic resize according to r_refdef.worldmodel->brush.num_clusters
- unsigned char world_pvsbits[(32768+7)>>3];
+ unsigned char world_pvsbits[(32768+7)>>3]; // FIXME: buffer overflow on huge maps
// TODO: dynamic resize according to r_refdef.worldmodel->brush.num_leafs
- unsigned char world_leafvisible[32768];
+ unsigned char world_leafvisible[32768]; // FIXME: buffer overflow on huge maps
// TODO: dynamic resize according to r_refdef.worldmodel->num_surfaces
- unsigned char world_surfacevisible[262144];
+ unsigned char world_surfacevisible[262144]; // FIXME: buffer overflow on huge maps
// if true, the view is currently in a leaf without pvs data
qboolean world_novis;
}