]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
protocol/dp8: Implement parting messages
[xonotic/darkplaces.git] / client.h
index 435299c4d64f32353cee87cc35a43c79e3cc6c59..3e007c70bde34b181c6f6739917f2a2e4def9d21 100644 (file)
--- a/client.h
+++ b/client.h
@@ -24,171 +24,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "matrixlib.h"
 #include "snd_main.h"
-
-// NOTE: r_stat_name[] must match this indexing
-typedef enum r_stat_e
-{
-       r_stat_timedelta,
-       r_stat_quality,
-       r_stat_renders,
-       r_stat_entities,
-       r_stat_entities_surfaces,
-       r_stat_entities_triangles,
-       r_stat_world_leafs,
-       r_stat_world_portals,
-       r_stat_world_surfaces,
-       r_stat_world_triangles,
-       r_stat_lightmapupdates,
-       r_stat_lightmapupdatepixels,
-       r_stat_particles,
-       r_stat_drawndecals,
-       r_stat_totaldecals,
-       r_stat_draws,
-       r_stat_draws_vertices,
-       r_stat_draws_elements,
-       r_stat_lights,
-       r_stat_lights_clears,
-       r_stat_lights_scissored,
-       r_stat_lights_lighttriangles,
-       r_stat_lights_shadowtriangles,
-       r_stat_lights_dynamicshadowtriangles,
-       r_stat_bouncegrid_lights,
-       r_stat_bouncegrid_particles,
-       r_stat_bouncegrid_traces,
-       r_stat_bouncegrid_hits,
-       r_stat_bouncegrid_splats,
-       r_stat_bouncegrid_bounces,
-       r_stat_photoncache_animated,
-       r_stat_photoncache_cached,
-       r_stat_photoncache_traced,
-       r_stat_bloom,
-       r_stat_bloom_copypixels,
-       r_stat_bloom_drawpixels,
-       r_stat_rendertargets_used,
-       r_stat_rendertargets_pixels,
-       r_stat_indexbufferuploadcount,
-       r_stat_indexbufferuploadsize,
-       r_stat_vertexbufferuploadcount,
-       r_stat_vertexbufferuploadsize,
-       r_stat_framedatacurrent,
-       r_stat_framedatasize,
-       r_stat_bufferdatacurrent_vertex, // R_BUFFERDATA_ types are added to this index
-       r_stat_bufferdatacurrent_index16,
-       r_stat_bufferdatacurrent_index32,
-       r_stat_bufferdatacurrent_uniform,
-       r_stat_bufferdatasize_vertex, // R_BUFFERDATA_ types are added to this index
-       r_stat_bufferdatasize_index16,
-       r_stat_bufferdatasize_index32,
-       r_stat_bufferdatasize_uniform,
-       r_stat_animcache_skeletal_count,
-       r_stat_animcache_skeletal_bones,
-       r_stat_animcache_skeletal_maxbones,
-       r_stat_animcache_shade_count,
-       r_stat_animcache_shade_vertices,
-       r_stat_animcache_shade_maxvertices,
-       r_stat_animcache_shape_count,
-       r_stat_animcache_shape_vertices,
-       r_stat_animcache_shape_maxvertices,
-       r_stat_batch_batches,
-       r_stat_batch_withgaps,
-       r_stat_batch_surfaces,
-       r_stat_batch_vertices,
-       r_stat_batch_triangles,
-       r_stat_batch_fast_batches,
-       r_stat_batch_fast_surfaces,
-       r_stat_batch_fast_vertices,
-       r_stat_batch_fast_triangles,
-       r_stat_batch_copytriangles_batches,
-       r_stat_batch_copytriangles_surfaces,
-       r_stat_batch_copytriangles_vertices,
-       r_stat_batch_copytriangles_triangles,
-       r_stat_batch_dynamic_batches,
-       r_stat_batch_dynamic_surfaces,
-       r_stat_batch_dynamic_vertices,
-       r_stat_batch_dynamic_triangles,
-       r_stat_batch_dynamicskeletal_batches,
-       r_stat_batch_dynamicskeletal_surfaces,
-       r_stat_batch_dynamicskeletal_vertices,
-       r_stat_batch_dynamicskeletal_triangles,
-       r_stat_batch_dynamic_batches_because_cvar,
-       r_stat_batch_dynamic_surfaces_because_cvar,
-       r_stat_batch_dynamic_vertices_because_cvar,
-       r_stat_batch_dynamic_triangles_because_cvar,
-       r_stat_batch_dynamic_batches_because_lightmapvertex,
-       r_stat_batch_dynamic_surfaces_because_lightmapvertex,
-       r_stat_batch_dynamic_vertices_because_lightmapvertex,
-       r_stat_batch_dynamic_triangles_because_lightmapvertex,
-       r_stat_batch_dynamic_batches_because_deformvertexes_autosprite,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_autosprite,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_autosprite,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_autosprite,
-       r_stat_batch_dynamic_batches_because_deformvertexes_autosprite2,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_autosprite2,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_autosprite2,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_autosprite2,
-       r_stat_batch_dynamic_batches_because_deformvertexes_normal,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_normal,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_normal,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_normal,
-       r_stat_batch_dynamic_batches_because_deformvertexes_wave,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_wave,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_wave,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_wave,
-       r_stat_batch_dynamic_batches_because_deformvertexes_bulge,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_bulge,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_bulge,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_bulge,
-       r_stat_batch_dynamic_batches_because_deformvertexes_move,
-       r_stat_batch_dynamic_surfaces_because_deformvertexes_move,
-       r_stat_batch_dynamic_vertices_because_deformvertexes_move,
-       r_stat_batch_dynamic_triangles_because_deformvertexes_move,
-       r_stat_batch_dynamic_batches_because_tcgen_lightmap,
-       r_stat_batch_dynamic_surfaces_because_tcgen_lightmap,
-       r_stat_batch_dynamic_vertices_because_tcgen_lightmap,
-       r_stat_batch_dynamic_triangles_because_tcgen_lightmap,
-       r_stat_batch_dynamic_batches_because_tcgen_vector,
-       r_stat_batch_dynamic_surfaces_because_tcgen_vector,
-       r_stat_batch_dynamic_vertices_because_tcgen_vector,
-       r_stat_batch_dynamic_triangles_because_tcgen_vector,
-       r_stat_batch_dynamic_batches_because_tcgen_environment,
-       r_stat_batch_dynamic_surfaces_because_tcgen_environment,
-       r_stat_batch_dynamic_vertices_because_tcgen_environment,
-       r_stat_batch_dynamic_triangles_because_tcgen_environment,
-       r_stat_batch_dynamic_batches_because_tcmod_turbulent,
-       r_stat_batch_dynamic_surfaces_because_tcmod_turbulent,
-       r_stat_batch_dynamic_vertices_because_tcmod_turbulent,
-       r_stat_batch_dynamic_triangles_because_tcmod_turbulent,
-       r_stat_batch_dynamic_batches_because_nogaps,
-       r_stat_batch_dynamic_surfaces_because_nogaps,
-       r_stat_batch_dynamic_vertices_because_nogaps,
-       r_stat_batch_dynamic_triangles_because_nogaps,
-       r_stat_batch_dynamic_batches_because_derived,
-       r_stat_batch_dynamic_surfaces_because_derived,
-       r_stat_batch_dynamic_vertices_because_derived,
-       r_stat_batch_dynamic_triangles_because_derived,
-       r_stat_batch_entitycache_count,
-       r_stat_batch_entitycache_surfaces,
-       r_stat_batch_entitycache_vertices,
-       r_stat_batch_entitycache_triangles,
-       r_stat_batch_entityanimate_count,
-       r_stat_batch_entityanimate_surfaces,
-       r_stat_batch_entityanimate_vertices,
-       r_stat_batch_entityanimate_triangles,
-       r_stat_batch_entityskeletal_count,
-       r_stat_batch_entityskeletal_surfaces,
-       r_stat_batch_entityskeletal_vertices,
-       r_stat_batch_entityskeletal_triangles,
-       r_stat_batch_entitystatic_count,
-       r_stat_batch_entitystatic_surfaces,
-       r_stat_batch_entitystatic_vertices,
-       r_stat_batch_entitystatic_triangles,
-       r_stat_batch_entitycustom_count,
-       r_stat_batch_entitycustom_surfaces,
-       r_stat_batch_entitycustom_vertices,
-       r_stat_batch_entitycustom_triangles,
-       r_stat_count // size of array
-}
-r_stat_t;
+#include "view.h"
+#include "cap.h"
+#include "cl_parse.h"
+#include "cl_particles.h"
+#include "r_stats.h"
 
 // flags for rtlight rendering
 #define LIGHTFLAG_NORMALMODE 1
@@ -214,7 +54,7 @@ tridecal_t;
 
 typedef struct decalsystem_s
 {
-       dp_model_t *model;
+       model_t *model;
        double lastupdatetime;
        int maxdecals;
        int freedecal;
@@ -234,7 +74,7 @@ typedef struct effect_s
        vec3_t origin;
        double starttime;
        float framerate;
-       int modelindex;
+       model_t *model;
        int startframe;
        int endframe;
        // these are for interpolation
@@ -313,9 +153,9 @@ typedef struct rtlight_s
        /// this is R_GetCubemap(rtlight->cubemapname)
        rtexture_t *currentcubemap;
        /// set by R_Shadow_PrepareLight to decide whether R_Shadow_DrawLight should draw it
-       qboolean draw;
+       qbool draw;
        /// set by R_Shadow_PrepareLight to indicate whether R_Shadow_DrawShadowMaps should do anything
-       qboolean castshadows;
+       qbool castshadows;
        /// these fields are set by R_Shadow_PrepareLight for later drawing
        int cached_numlightentities;
        int cached_numlightentities_noselfshadow;
@@ -501,7 +341,7 @@ typedef struct entity_render_s
        float transparent_offset;
 
        // NULL = no model
-       dp_model_t *model;
+       model_t *model;
        // number of the entity represents, or 0 for non-network entities
        int entitynumber;
        // literal colormap colors for renderer, if both are 0 0 0 it is not colormapped
@@ -576,7 +416,8 @@ typedef struct entity_render_s
        // MATERIALFLAG_MODELLIGHT uses these parameters
        float render_modellight_ambient[3];
        float render_modellight_diffuse[3];
-       float render_modellight_lightdir[3];
+       float render_modellight_lightdir_world[3];
+       float render_modellight_lightdir_local[3];
        float render_modellight_specular[3];
        // lightmap rendering (not MATERIALFLAG_MODELLIGHT)
        float render_lightmap_ambient[3];
@@ -586,11 +427,11 @@ typedef struct entity_render_s
        float render_rtlight_diffuse[3];
        float render_rtlight_specular[3];
        // ignore lightmap and use fixed lighting settings on this entity (e.g. FULLBRIGHT)
-       qboolean render_modellight_forced;
+       qbool render_modellight_forced;
        // do not process per pixel lights on this entity at all (like MATERIALFLAG_NORTLIGHT)
-       qboolean render_rtlight_disabled;
+       qbool render_rtlight_disabled;
        // use the 3D lightmap from q3bsp on this entity
-       qboolean render_lightgrid;
+       qbool render_lightgrid;
 
        // storage of decals on this entity
        // (note: if allowdecals is set, be sure to call R_DecalSystem_Reset on removal!)
@@ -617,7 +458,7 @@ typedef struct entity_persistent_s
        vec_t lerpdeltatime; // lerp
        float muzzleflash; // muzzleflash intensity, fades over time
        float trail_time; // residual error accumulation for particle trail spawning (to keep spacing across frames)
-       qboolean trail_allowed; // set to false by teleports, true by update code, prevents bad lerps
+       qbool trail_allowed; // set to false by teleports, true by update code, prevents bad lerps
 }
 entity_persistent_t;
 
@@ -638,40 +479,6 @@ typedef struct entity_s
 }
 entity_t;
 
-typedef struct usercmd_s
-{
-       vec3_t  viewangles;
-
-// intended velocities
-       float   forwardmove;
-       float   sidemove;
-       float   upmove;
-
-       vec3_t  cursor_screen;
-       vec3_t  cursor_start;
-       vec3_t  cursor_end;
-       vec3_t  cursor_impact;
-       vec3_t  cursor_normal;
-       vec_t   cursor_fraction;
-       int             cursor_entitynumber;
-
-       double time; // time the move is executed for (cl_movement: clienttime, non-cl_movement: receivetime)
-       double receivetime; // time the move was received at
-       double clienttime; // time to which server state the move corresponds to
-       int msec; // for predicted moves
-       int buttons;
-       int impulse;
-       unsigned int sequence;
-       qboolean applied; // if false we're still accumulating a move
-       qboolean predicted; // if true the sequence should be sent as 0
-
-       // derived properties
-       double frametime;
-       qboolean canjump;
-       qboolean jump;
-       qboolean crouch;
-} usercmd_t;
-
 typedef struct lightstyle_s
 {
        int             length;
@@ -737,58 +544,6 @@ typedef enum qw_downloadtype_e
 }
 qw_downloadtype_t;
 
-typedef enum capturevideoformat_e
-{
-       CAPTUREVIDEOFORMAT_AVI_I420,
-       CAPTUREVIDEOFORMAT_OGG_VORBIS_THEORA
-}
-capturevideoformat_t;
-
-typedef struct capturevideostate_s
-{
-       double startrealtime;
-       double framerate;
-       int framestep;
-       int framestepframe;
-       qboolean active;
-       qboolean realtime;
-       qboolean error;
-       int soundrate;
-       int soundchannels;
-       int frame;
-       double starttime;
-       double lastfpstime;
-       int lastfpsframe;
-       int soundsampleframe;
-       unsigned char *screenbuffer;
-       unsigned char *outbuffer;
-       char basename[MAX_QPATH];
-       int width, height;
-
-       // precomputed RGB to YUV tables
-       // converts the RGB values to YUV (see cap_avi.c for how to use them)
-       short rgbtoyuvscaletable[3][3][256];
-       unsigned char yuvnormalizetable[3][256];
-
-       // precomputed gamma ramp (only needed if the capturevideo module uses RGB output)
-       // note: to map from these values to RGB24, you have to multiply by 255.0/65535.0, then add 0.5, then cast to integer
-       unsigned short vidramp[256 * 3];
-
-       // stuff to be filled in by the video format module
-       capturevideoformat_t format;
-       const char *formatextension;
-       qfile_t *videofile;
-               // always use this:
-               //   cls.capturevideo.videofile = FS_OpenRealFile(va(vabuf, sizeof(vabuf), "%s.%s", cls.capturevideo.basename, cls.capturevideo.formatextension), "wb", false);
-       void (*endvideo) (void);
-       void (*videoframes) (int num);
-       void (*soundframe) (const portable_sampleframe_t *paintbuffer, size_t length);
-
-       // format specific data
-       void *formatspecific;
-}
-capturevideostate_t;
-
 #define CL_MAX_DOWNLOADACKS 4
 
 typedef struct cl_downloadack_s
@@ -822,17 +577,17 @@ typedef struct client_static_s
        int demonum;
        // list of demos in loop
        char demos[MAX_DEMOS][MAX_DEMONAME];
-       // the actively playing demo (set by CL_PlayDemo_f)
+       // the actively playing demo (set by CL_PlayDemo)
        char demoname[MAX_QPATH];
 
 // demo recording info must be here, because record is started before
 // entering a map (and clearing client_state_t)
-       qboolean demorecording;
+       qbool demorecording;
        fs_offset_t demo_lastcsprogssize;
        int demo_lastcsprogscrc;
-       qboolean demoplayback;
-       qboolean demostarting; // set if currently starting a demo, to stop -demo from quitting when switching to another demo
-       qboolean timedemo;
+       qbool demoplayback;
+       qbool demostarting; // set if currently starting a demo, to stop -demo from quitting when switching to another demo
+       qbool timedemo;
        // -1 = use normal cd track
        int forcetrack;
        qfile_t *demofile;
@@ -847,12 +602,12 @@ typedef struct client_static_s
        double td_onesecondavgfps;
        int td_onesecondavgcount;
        // LadyHavoc: pausedemo
-       qboolean demopaused;
+       qbool demopaused;
 
        // sound mixer statistics for showsound display
        cl_soundstats_t soundstats;
 
-       qboolean connect_trying;
+       qbool connect_trying;
        int connect_remainingtries;
        double connect_nextsendtime;
        lhnetsocket_t *connect_mysocket;
@@ -902,7 +657,7 @@ typedef struct client_static_s
        double qw_downloadspeedtime;
        int qw_downloadspeedcount;
        int qw_downloadspeedrate;
-       qboolean qw_download_deflate;
+       qbool qw_download_deflate;
 
        // current file upload buffer (for uploading screenshots to server)
        unsigned char *qw_uploaddata;
@@ -917,8 +672,10 @@ typedef struct client_static_s
        // extra user info for the "connect" command
        char connect_userinfo[MAX_USERINFO_STRING];
 
+#ifdef CONFIG_VIDEO_CAPTURE
        // video capture stuff
        capturevideostate_t capturevideo;
+#endif
 
        // crypto channel
        crypto_t crypto;
@@ -947,87 +704,11 @@ extern client_static_t    cls;
 //[515]: csqc
 typedef struct
 {
-       qboolean drawworld;
-       qboolean drawenginesbar;
-       qboolean drawcrosshair;
+       qbool drawworld;
+       qbool drawenginesbar;
+       qbool drawcrosshair;
 }csqc_vidvars_t;
 
-typedef enum
-{
-       PARTICLE_BILLBOARD = 0,
-       PARTICLE_SPARK = 1,
-       PARTICLE_ORIENTED_DOUBLESIDED = 2,
-       PARTICLE_VBEAM = 3,
-       PARTICLE_HBEAM = 4,
-       PARTICLE_INVALID = -1
-}
-porientation_t;
-
-typedef enum
-{
-       PBLEND_ALPHA = 0,
-       PBLEND_ADD = 1,
-       PBLEND_INVMOD = 2,
-       PBLEND_INVALID = -1
-}
-pblend_t;
-
-typedef struct particletype_s
-{
-       pblend_t blendmode;
-       porientation_t orientation;
-       qboolean lighting;
-}
-particletype_t;
-
-typedef enum ptype_e
-{
-       pt_dead, pt_alphastatic, pt_static, pt_spark, pt_beam, pt_rain, pt_raindecal, pt_snow, pt_bubble, pt_blood, pt_smoke, pt_decal, pt_entityparticle, pt_total
-}
-ptype_t;
-
-typedef struct particle_s
-{
-       // for faster batch rendering, particles are rendered in groups by effect (resulting in less perfect sorting but far less state changes)
-
-       // fields used by rendering: (48 bytes)
-       vec3_t          sortorigin; // sort by this group origin, not particle org
-       vec3_t          org;
-       vec3_t          vel; // velocity of particle, or orientation of decal, or end point of beam
-       float           size;
-       float           alpha; // 0-255
-       float           stretch; // only for sparks
-
-       // fields not used by rendering:  (44 bytes)
-       float           stainsize;
-       float           stainalpha;
-       float           sizeincrease; // rate of size change per second
-       float           alphafade; // how much alpha reduces per second
-       float           time2; // used for snow fluttering and decal fade
-       float           bounce; // how much bounce-back from a surface the particle hits (0 = no physics, 1 = stop and slide, 2 = keep bouncing forever, 1.5 is typical)
-       float           gravity; // how much gravity affects this particle (1.0 = normal gravity, 0.0 = none)
-       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)
-//     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
-
-       // short variables grouped to save memory (4 bytes)
-       short                   angle; // base rotation of particle
-       short                   spin; // geometry rotation speed around the particle center normal
-
-       // byte variables grouped to save memory (12 bytes)
-       unsigned char   color[3];
-       unsigned char   qualityreduction; // enables skipping of this particle according to r_refdef.view.qualityreduction
-       unsigned char   typeindex;
-       unsigned char   blendmode;
-       unsigned char   orientation;
-       unsigned char   texnum;
-       unsigned char   staincolor[3];
-       signed char     staintexnum;
-}
-particle_t;
-
 typedef enum cl_parsingtextmode_e
 {
        CL_PARSETEXTMODE_NONE,
@@ -1048,7 +729,7 @@ cl_locnode_t;
 
 typedef struct showlmp_s
 {
-       qboolean        isactive;
+       qbool   isactive;
        float           x;
        float           y;
        char            label[32];
@@ -1117,19 +798,19 @@ typedef struct client_state_s
        // this is used primarily by teleporters, and when spectating players
        // special checking of the old fixangle[1] is used to differentiate
        // between teleporting and spectating
-       qboolean fixangle[2];
+       qbool fixangle[2];
 
        // client movement simulation
        // these fields are only updated by CL_ClientMovement (called by CL_SendMove after parsing each network packet)
        // set by CL_ClientMovement_Replay functions
-       qboolean movement_predicted;
+       qbool movement_predicted;
        // if true the CL_ClientMovement_Replay function will update origin, etc
-       qboolean movement_replay;
+       qbool movement_replay;
        // simulated data (this is valid even if cl.movement is false)
        vec3_t movement_origin;
        vec3_t movement_velocity;
        // whether the replay should allow a jump at the first sequence
-       qboolean movement_replay_canjump;
+       qbool movement_replay_canjump;
 
        // previous gun angles (for leaning effects)
        vec3_t gunangles_prev;
@@ -1145,27 +826,26 @@ typedef struct client_state_s
 // pitch drifting vars
        float idealpitch;
        float pitchvel;
-       qboolean nodrift;
+       qbool nodrift;
        float driftmove;
        double laststop;
 
 //[515]: added for csqc purposes
        float sensitivityscale;
        csqc_vidvars_t csqc_vidvars;    //[515]: these parms must be set to true by default
-       qboolean csqc_wantsmousemove;
-       qboolean csqc_paused; // vortex: int because could be flags
+       qbool csqc_wantsmousemove;
        struct model_s *csqc_model_precache[MAX_MODELS];
 
        // local amount for smoothing stepups
        //float crouch;
 
        // sent by server
-       qboolean paused;
-       qboolean onground;
-       qboolean inwater;
+       qbool paused;
+       qbool onground;
+       qbool inwater;
 
        // used by bob
-       qboolean oldonground;
+       qbool oldonground;
        double lastongroundtime;
        double hitgroundtime;
        float bob2_smooth;
@@ -1190,7 +870,12 @@ typedef struct client_state_s
        // how long it has been since the previous client frame in real time
        // (not game time, for that use cl.time - cl.oldtime)
        double realframetime;
-       
+
+       // used by cl_nettimesyncboundmode 7
+#define NUM_TS_ERRORS 32 // max 256
+       unsigned char ts_error_num;
+       float ts_error_stor[NUM_TS_ERRORS];
+
        // fade var for fading while dead
        float deathfade;
 
@@ -1230,10 +915,10 @@ typedef struct client_state_s
        int gametype;
 
        // models and sounds used by engine code (particularly cl_parse.c)
-       dp_model_t *model_bolt;
-       dp_model_t *model_bolt2;
-       dp_model_t *model_bolt3;
-       dp_model_t *model_beam;
+       model_t *model_bolt;
+       model_t *model_bolt2;
+       model_t *model_bolt3;
+       model_t *model_beam;
        sfx_t *sfx_wizhit;
        sfx_t *sfx_knighthit;
        sfx_t *sfx_tink1;
@@ -1242,7 +927,7 @@ typedef struct client_state_s
        sfx_t *sfx_ric3;
        sfx_t *sfx_r_exp3;
        // indicates that the file "sound/misc/talk2.wav" was found (for use by team chat messages)
-       qboolean foundtalk2wav;
+       qbool foundteamchatsound;
 
 // refresh related state
 
@@ -1338,10 +1023,10 @@ typedef struct client_state_s
        int loadsound_current;
        int downloadsound_current;
        int loadsound_total;
-       qboolean downloadcsqc;
-       qboolean loadcsqc;
-       qboolean loadbegun;
-       qboolean loadfinished;
+       qbool downloadcsqc;
+       qbool loadcsqc;
+       qbool loadbegun;
+       qbool loadfinished;
 
        // quakeworld stuff
 
@@ -1359,10 +1044,10 @@ typedef struct client_state_s
 
        // unused: indicates whether the player is spectating
        // use cl.scores[cl.playerentity-1].qw_spectator instead
-       //qboolean qw_spectator;
+       //qbool qw_spectator;
 
-       // last time an input packet was sent
-       double lastpackettime;
+       // time accumulated since an input packet was sent
+       float timesincepacket;
 
        // movement parameters for client prediction
        unsigned int moveflags;
@@ -1422,13 +1107,13 @@ typedef struct client_state_s
        // csqc stuff:
        // server entity number corresponding to a clientside entity
        unsigned short csqc_server2csqcentitynumber[MAX_EDICTS];
-       qboolean csqc_loaded;
+       qbool csqc_loaded;
        vec3_t csqc_vieworigin;
        vec3_t csqc_viewangles;
        vec3_t csqc_vieworiginfromengine;
        vec3_t csqc_viewanglesfromengine;
        matrix4x4_t csqc_viewmodelmatrixfromengine;
-       qboolean csqc_usecsqclistener;
+       qbool csqc_usecsqclistener;
        matrix4x4_t csqc_listenermatrix;
        char csqc_printtextbuf[MAX_INPUTLINE];
 
@@ -1518,7 +1203,7 @@ extern cvar_t cl_locs_enable;
 
 extern client_state_t cl;
 
-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);
+extern void CL_AllocLightFlash (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, char *cubemapname, int style, int shadowenable, vec_t corona, vec_t coronasizescale, vec_t ambientscale, vec_t diffusescale, vec_t specularscale, int flags);
 
 cl_locnode_t *CL_Locs_FindNearest(const vec3_t point);
 void CL_Locs_FindLocationName(char *buffer, size_t buffersize, vec3_t point);
@@ -1529,12 +1214,16 @@ void CL_Locs_FindLocationName(char *buffer, size_t buffersize, vec3_t point);
 // cl_main
 //
 
+double CL_Frame(double time);
+
 void CL_Shutdown (void);
 void CL_Init (void);
 
+void CL_StartVideo(void);
+
 void CL_EstablishConnection(const char *host, int firstarg);
 
-void CL_Disconnect (void);
+void CL_Disconnect (qbool kicked, const char *reason, ... );
 void CL_Disconnect_f(cmd_state_t *cmd);
 
 void CL_UpdateRenderEntity(entity_render_t *ent);
@@ -1562,7 +1251,7 @@ 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, dp_model_t *m, int lightning);
+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_ClientMovement_Replay(void);
@@ -1570,12 +1259,12 @@ void CL_ClientMovement_Replay(void);
 void CL_ClearTempEntities (void);
 entity_render_t *CL_NewTempEntity (double shadertime);
 
-void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float framerate);
+void CL_Effect(vec3_t org, model_t *model, int startframe, int framecount, float framerate);
 
 void CL_ClearState (void);
 void CL_ExpandEntities(int num);
 void CL_ExpandCSQCRenderEntities(int num);
-void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet);
+void CL_SetInfo(const char *key, const char *value, qbool send, qbool allowstarkey, qbool allowmodel, qbool quiet);
 
 
 void CL_UpdateWorld (void);
@@ -1585,8 +1274,20 @@ extern int cl_ignoremousemoves;
 
 
 float CL_KeyState (kbutton_t *key);
-const char *Key_KeynumToString (int keynum, char *buf, size_t buflength);
-int Key_StringToKeynum (const char *str);
+
+//
+// cl_cmd.c
+//
+/// adds the string as a clc_stringcmd to the client message.
+/// (used when there is no reason to generate a local command to do it)
+void CL_ForwardToServer (const char *s);
+
+/// adds the current command line as a clc_stringcmd to the client message.
+/// things like godmode, noclip, etc, are commands directed to the server,
+/// so when they are typed in at the console, they will need to be forwarded.
+void CL_ForwardToServer_f (cmd_state_t *cmd);
+void CL_InitCommands(void);
+
 
 //
 // cl_demo.c
@@ -1598,378 +1299,19 @@ void CL_WriteDemoMessage(sizebuf_t *mesage);
 void CL_CutDemo(unsigned char **buf, fs_offset_t *filesize);
 void CL_PasteDemo(unsigned char **buf, fs_offset_t *filesize);
 
+void CL_PlayDemo(const char *demo);
 void CL_NextDemo(void);
 void CL_Stop_f(cmd_state_t *cmd);
 void CL_Record_f(cmd_state_t *cmd);
 void CL_PlayDemo_f(cmd_state_t *cmd);
 void CL_TimeDemo_f(cmd_state_t *cmd);
 
-//
-// cl_parse.c
-//
-void CL_Parse_Init(void);
-void CL_Parse_Shutdown(void);
-void CL_ParseServerMessage(void);
-void CL_Parse_DumpPacket(void);
-void CL_Parse_ErrorCleanUp(void);
-void QW_CL_StartUpload(unsigned char *data, int size);
-extern cvar_t qport;
-void CL_KeepaliveMessage(qboolean readmessages); // call this during loading of large content
-
-//
-// view
-//
-void V_StartPitchDrift_f(cmd_state_t *cmd);
-void V_StopPitchDrift (void);
+void CL_Demo_Init(void);
 
-void V_Init (void);
-float V_CalcRoll (const vec3_t angles, const vec3_t velocity);
-void V_UpdateBlends (void);
-void V_ParseDamage (void);
-
-//
-// cl_part
-//
-
-extern cvar_t cl_particles;
-extern cvar_t cl_particles_quality;
-extern cvar_t cl_particles_size;
-extern cvar_t cl_particles_quake;
-extern cvar_t cl_particles_blood;
-extern cvar_t cl_particles_blood_alpha;
-extern cvar_t cl_particles_blood_decal_alpha;
-extern cvar_t cl_particles_blood_decal_scalemin;
-extern cvar_t cl_particles_blood_decal_scalemax;
-extern cvar_t cl_particles_blood_bloodhack;
-extern cvar_t cl_particles_bulletimpacts;
-extern cvar_t cl_particles_explosions_sparks;
-extern cvar_t cl_particles_explosions_shell;
-extern cvar_t cl_particles_rain;
-extern cvar_t cl_particles_snow;
-extern cvar_t cl_particles_smoke;
-extern cvar_t cl_particles_smoke_alpha;
-extern cvar_t cl_particles_smoke_alphafade;
-extern cvar_t cl_particles_sparks;
-extern cvar_t cl_particles_bubbles;
-extern cvar_t cl_decals;
-extern cvar_t cl_decals_time;
-extern cvar_t cl_decals_fadetime;
-
-void CL_Particles_Clear(void);
-void CL_Particles_Init(void);
-void CL_Particles_Shutdown(void);
-particle_t *CL_NewParticle(const vec3_t sortorigin, unsigned short ptypeindex, int pcolor1, int pcolor2, int ptex, float psize, float psizeincrease, float palpha, float palphafade, float pgravity, float pbounce, float px, float py, float pz, float pvx, float pvy, float pvz, float pairfriction, float pliquidfriction, float originjitter, float velocityjitter, qboolean pqualityreduction, float lifetime, float stretch, pblend_t blendmode, porientation_t orientation, int staincolor1, int staincolor2, int staintex, float stainalpha, float stainsize, float angle, float spin, float tint[4]);
-
-typedef enum effectnameindex_s
-{
-       EFFECT_NONE,
-       EFFECT_TE_GUNSHOT,
-       EFFECT_TE_GUNSHOTQUAD,
-       EFFECT_TE_SPIKE,
-       EFFECT_TE_SPIKEQUAD,
-       EFFECT_TE_SUPERSPIKE,
-       EFFECT_TE_SUPERSPIKEQUAD,
-       EFFECT_TE_WIZSPIKE,
-       EFFECT_TE_KNIGHTSPIKE,
-       EFFECT_TE_EXPLOSION,
-       EFFECT_TE_EXPLOSIONQUAD,
-       EFFECT_TE_TAREXPLOSION,
-       EFFECT_TE_TELEPORT,
-       EFFECT_TE_LAVASPLASH,
-       EFFECT_TE_SMALLFLASH,
-       EFFECT_TE_FLAMEJET,
-       EFFECT_EF_FLAME,
-       EFFECT_TE_BLOOD,
-       EFFECT_TE_SPARK,
-       EFFECT_TE_PLASMABURN,
-       EFFECT_TE_TEI_G3,
-       EFFECT_TE_TEI_SMOKE,
-       EFFECT_TE_TEI_BIGEXPLOSION,
-       EFFECT_TE_TEI_PLASMAHIT,
-       EFFECT_EF_STARDUST,
-       EFFECT_TR_ROCKET,
-       EFFECT_TR_GRENADE,
-       EFFECT_TR_BLOOD,
-       EFFECT_TR_WIZSPIKE,
-       EFFECT_TR_SLIGHTBLOOD,
-       EFFECT_TR_KNIGHTSPIKE,
-       EFFECT_TR_VORESPIKE,
-       EFFECT_TR_NEHAHRASMOKE,
-       EFFECT_TR_NEXUIZPLASMA,
-       EFFECT_TR_GLOWTRAIL,
-       EFFECT_SVC_PARTICLE,
-       EFFECT_TOTAL
-}
-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, float tintmins[4], float tintmaxs[4], float fade);
-void CL_ParticleBox(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, float tintmins[4], float tintmaxs[4], float fade);
-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);
-void CL_EntityParticles (const entity_t *ent);
-void CL_ParticleExplosion (const vec3_t org);
-void CL_ParticleExplosion2 (const vec3_t org, int colorStart, int colorLength);
-void R_NewExplosion(const vec3_t org);
 
 #include "cl_screen.h"
 
-extern qboolean sb_showscores;
-
-float RSurf_FogVertex(const vec3_t p);
-float RSurf_FogPoint(const vec3_t p);
-
-typedef enum r_viewport_type_e
-{
-       R_VIEWPORTTYPE_ORTHO,
-       R_VIEWPORTTYPE_PERSPECTIVE,
-       R_VIEWPORTTYPE_PERSPECTIVE_INFINITEFARCLIP,
-       R_VIEWPORTTYPE_PERSPECTIVECUBESIDE,
-       R_VIEWPORTTYPE_TOTAL
-}
-r_viewport_type_t;
-
-typedef struct r_viewport_s
-{
-       matrix4x4_t cameramatrix; // from entity (transforms from camera entity to world)
-       matrix4x4_t viewmatrix; // actual matrix for rendering (transforms to viewspace)
-       matrix4x4_t projectmatrix; // actual projection matrix (transforms from viewspace to screen)
-       int x;
-       int y;
-       int z;
-       int width;
-       int height;
-       int depth;
-       r_viewport_type_t type;
-       float screentodepth[2]; // used by deferred renderer to calculate linear depth from device depth coordinates
-}
-r_viewport_t;
-
-typedef struct r_refdef_view_s
-{
-       // view information (changes multiple times per frame)
-       // if any of these variables change then r_refdef.viewcache must be regenerated
-       // by calling R_View_Update
-       // (which also updates viewport, scissor, colormask)
-
-       // it is safe and expected to copy this into a structure on the stack and
-       // call the renderer recursively, then restore from the stack afterward
-       // (as long as R_View_Update is called)
-
-       // eye position information
-       matrix4x4_t matrix, inverse_matrix;
-       vec3_t origin;
-       vec3_t forward;
-       vec3_t left;
-       vec3_t right;
-       vec3_t up;
-       int numfrustumplanes;
-       mplane_t frustum[6];
-       qboolean useclipplane;
-       qboolean usecustompvs; // uses r_refdef.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;
-       // allows visibility culling based on the view origin (e.g. pvs and R_CanSeeBox)
-       // this is turned off by:
-       // r_trippy
-       // !r_refdef.view.useperspective
-       // (sometimes) r_refdef.view.useclipplane
-       int usevieworiginculling;
-       float ortho_x, ortho_y;
-
-       // screen area to render in
-       int x;
-       int y;
-       int z;
-       int width;
-       int height;
-       int depth;
-       r_viewport_t viewport; // note: if r_viewscale is used, the viewport.width and viewport.height may be less than width and height
-
-       // which color components to allow (for anaglyph glasses)
-       int colormask[4];
-
-       // global RGB color multiplier for rendering
-       float colorscale;
-
-       // whether to call R_ClearScreen before rendering stuff
-       qboolean clear;
-       // if true, don't clear or do any post process effects (bloom, etc)
-       qboolean isoverlay;
-       // if true, this is the MAIN view (which is, after CSQC, copied into the scene for use e.g. by r_speeds 1, showtex, prydon cursor)
-       qboolean ismain;
-
-       // whether to draw r_showtris and such, this is only true for the main
-       // view render, all secondary renders (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;
-
-       // render quality (0 to 1) - affects r_drawparticles_drawdistance and others
-       float quality;
-}
-r_refdef_view_t;
-
-typedef struct r_refdef_viewcache_s
-{
-       // updated by gl_main_newmap()
-       int maxentities;
-       int world_numclusters;
-       int world_numclusterbytes;
-       int world_numleafs;
-       int world_numsurfaces;
-
-       // these properties are generated by R_View_Update()
-
-       // which entities are currently visible for this viewpoint
-       // (the used range is 0...r_refdef.scene.numentities)
-       unsigned char *entityvisible;
-
-       // flag arrays used for visibility checking on world model
-       // (all other entities have no per-surface/per-leaf visibility checks)
-       unsigned char *world_pvsbits;
-       unsigned char *world_leafvisible;
-       unsigned char *world_surfacevisible;
-       // if true, the view is currently in a leaf without pvs data
-       qboolean world_novis;
-}
-r_refdef_viewcache_t;
-
-// TODO: really think about which fields should go into scene and which one should stay in refdef [1/7/2008 Black]
-// maybe also refactor some of the functions to support different setting sources (ie. fogenabled, etc.) for different scenes
-typedef struct r_refdef_scene_s {
-       // whether to call S_ExtraUpdate during render to reduce sound chop
-       qboolean extraupdate;
-
-       // (client gameworld) time for rendering time based effects
-       double time;
-
-       // the world
-       entity_render_t *worldentity;
-
-       // same as worldentity->model
-       dp_model_t *worldmodel;
-
-       // renderable entities (excluding world)
-       entity_render_t **entities;
-       int numentities;
-       int maxentities;
-
-       // field of temporary entities that is reset each (client) frame
-       entity_render_t *tempentities;
-       int numtempentities;
-       int maxtempentities;
-       qboolean expandtempentities;
-
-       // renderable dynamic lights
-       rtlight_t *lights[MAX_DLIGHTS];
-       rtlight_t templights[MAX_DLIGHTS];
-       int numlights;
-
-       // intensities for light styles right now, controls rtlights
-       float rtlightstylevalue[MAX_LIGHTSTYLES];       // float fraction of base light value
-       // 8.8bit fixed point intensities for light styles
-       // controls intensity lightmap layers
-       unsigned short lightstylevalue[MAX_LIGHTSTYLES];        // 8.8 fraction of base light value
-
-       // adds brightness to the whole scene, separate from lightmapintensity
-       // see CL_UpdateEntityShading
-       float ambientintensity;
-       // brightness of lightmap and modellight lighting on materials
-       // see CL_UpdateEntityShading
-       float lightmapintensity;
-
-       qboolean rtworld;
-       qboolean rtworldshadows;
-       qboolean rtdlight;
-       qboolean rtdlightshadows;
-} r_refdef_scene_t;
-
-typedef struct r_refdef_s
-{
-       // these fields define the basic rendering information for the world
-       // but not the view, which could change multiple times in one rendered
-       // frame (for example when rendering textures for certain effects)
-
-       // these are set for water warping before
-       // frustum_x/frustum_y are calculated
-       float frustumscale_x, frustumscale_y;
-
-       // current view settings (these get reset a few times during rendering because of water rendering, reflections, etc)
-       r_refdef_view_t view;
-       r_refdef_viewcache_t viewcache;
-
-       // minimum visible distance (pixels closer than this disappear)
-       double nearclip;
-       // maximum visible distance (pixels further than this disappear in 16bpp modes,
-       // in 32bpp an infinite-farclip matrix is used instead)
-       double farclip;
-
-       // fullscreen color blend
-       float viewblend[4];
-
-       r_refdef_scene_t scene;
-
-       float fogplane[4];
-       float fogplaneviewdist;
-       qboolean fogplaneviewabove;
-       float fogheightfade;
-       float fogcolor[3];
-       float fogrange;
-       float fograngerecip;
-       float fogmasktabledistmultiplier;
-#define FOGMASKTABLEWIDTH 1024
-       float fogmasktable[FOGMASKTABLEWIDTH];
-       float fogmasktable_start, fogmasktable_alpha, fogmasktable_range, fogmasktable_density;
-       float fog_density;
-       float fog_red;
-       float fog_green;
-       float fog_blue;
-       float fog_alpha;
-       float fog_start;
-       float fog_end;
-       float fog_height;
-       float fog_fadedepth;
-       qboolean fogenabled;
-       qboolean oldgl_fogenable;
-
-       // new flexible texture height fog (overrides normal fog)
-       char fog_height_texturename[64]; // note: must be 64 for the sscanf code
-       unsigned char *fog_height_table1d;
-       unsigned char *fog_height_table2d;
-       int fog_height_tablesize; // enable
-       float fog_height_tablescale;
-       float fog_height_texcoordscale;
-       char fogheighttexturename[64]; // detects changes to active fog height texture
-
-       int draw2dstage; // 0 = no, 1 = yes, other value = needs setting up again
-
-       // true during envmap command capture
-       qboolean envmap;
-
-       // whether to draw world lights realtime, dlights realtime, and their shadows
-       float polygonfactor;
-       float polygonoffset;
-
-       // how long R_RenderView took on the previous frame
-       double lastdrawscreentime;
-
-       // rendering stats for r_speeds display
-       // (these are incremented in many places)
-       int stats[r_stat_count];
-}
-r_refdef_t;
-
-extern r_refdef_t r_refdef;
+extern qbool sb_showscores;
 
 typedef enum waterlevel_e
 {
@@ -1991,9 +1333,9 @@ typedef struct cl_clientmovement_state_s
        vec3_t mins;
        vec3_t maxs;
        // currently on the ground
-       qboolean onground;
+       qbool onground;
        // currently crouching
-       qboolean crouched;
+       qbool crouched;
        // what kind of water (SUPERCONTENTS_LAVA for instance)
        int watertype;
        // how deep
@@ -2017,7 +1359,7 @@ typedef enum meshname_e {
        NUM_MESHENTITIES,
 } meshname_t;
 extern entity_t cl_meshentities[NUM_MESHENTITIES];
-extern dp_model_t cl_meshentitymodels[NUM_MESHENTITIES];
+extern model_t cl_meshentitymodels[NUM_MESHENTITIES];
 extern const char *cl_meshentitynames[NUM_MESHENTITIES];
 #define CL_Mesh_Scene() (&cl_meshentitymodels[MESH_SCENE])
 #define CL_Mesh_UI() (&cl_meshentitymodels[MESH_UI])
@@ -2031,20 +1373,7 @@ void CL_ParseEntityLump(char *entitystring);
 void CL_FindNonSolidLocation(const vec3_t in, vec3_t out, vec_t radius);
 void CL_RelinkLightFlashes(void);
 void CL_Beam_AddPolygons(const beam_t *b);
-void Sbar_ShowFPS(void);
-void Sbar_ShowFPS_Update(void);
-void Host_SaveConfig(void);
-void Host_LoadConfig_f(cmd_state_t *cmd);
 void CL_UpdateMoveVars(void);
-void SCR_CaptureVideo_SoundFrame(const portable_sampleframe_t *paintbuffer, size_t length);
-void V_DriftPitch(void);
-void V_FadeViewFlashs(void);
-void V_CalcViewBlend(void);
-void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission, const vec3_t clvelocity);
-void V_CalcRefdef(void);
-void V_MakeViewIsometric(void);
-void V_MakeViewIsometric(void);
-void V_StartPitchDrift(void);
 void CL_Locs_Reload_f(cmd_state_t *cmd);
 
 #endif