]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
sv_aircontrol_power - customizing the response curve of CPMA style air control
[xonotic/darkplaces.git] / client.h
index 07945307cbe3c28d1c34f9ce26c037e94f6e9c3b..3a7b69390d0fae1c852b96de07310516e5de960d 100644 (file)
--- a/client.h
+++ b/client.h
@@ -141,7 +141,7 @@ typedef struct rtlight_s
        float corona_visibility;
        unsigned int corona_queryindex_visiblepixels;
        unsigned int corona_queryindex_allpixels;
-       /// this is R_Shadow_Cubemap(rtlight->cubemapname)
+       /// 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;
@@ -368,6 +368,11 @@ typedef struct entity_render_s
        float *animcache_normal3f;
        float *animcache_svector3f;
        float *animcache_tvector3f;
+       // interleaved arrays for rendering and dynamic vertex buffers for them
+       r_vertexposition_t *animcache_vertexposition;
+       r_meshbuffer_t *animcache_vertexpositionbuffer;
+       r_vertexmesh_t *animcache_vertexmesh;
+       r_meshbuffer_t *animcache_vertexmeshbuffer;
 
        // current lighting from map (updated ONLY by client code, not renderer)
        vec3_t modellight_ambient;
@@ -758,7 +763,7 @@ typedef struct particletype_s
 }
 particletype_t;
 
-typedef enum
+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
 }
@@ -789,33 +794,43 @@ decal_t;
 
 typedef struct particle_s
 {
-       // fields used by rendering: (40 bytes)
+       // 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;
-       pblend_t   blendmode;
-       porientation_t   orientation;
+       unsigned char   blendmode;
+       unsigned char   orientation;
        unsigned char   texnum;
-       vec3_t                  org;
-       vec3_t                  vel; // velocity of particle, or orientation of decal, or end point of beam
-       float                   size;
-       float                   alpha; // 0-255
-       unsigned char   color[3];
-       unsigned char   qualityreduction; // enables skipping of this particle according to r_refdef.view.qualityreduction
-       float           stretch; // only for sparks
-       int             staincolor;
+       unsigned char   staincolor[3];
        signed char     staintexnum;
-       float           stainsizefactor;
-
-       // fields not used by rendering:  (40 bytes)
-       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
 }
 particle_t;
 
@@ -922,6 +937,17 @@ typedef struct client_state_s
        // whether the replay should allow a jump at the first sequence
        qboolean movement_replay_canjump;
 
+       // previous gun angles (for leaning effects)
+       vec3_t gunangles_prev;
+       vec3_t gunangles_highpass;
+       vec3_t gunangles_adjustment_lowpass;
+       vec3_t gunangles_adjustment_highpass;
+       // previous gun angles (for leaning effects)
+       vec3_t gunorg_prev;
+       vec3_t gunorg_highpass;
+       vec3_t gunorg_adjustment_lowpass;
+       vec3_t gunorg_adjustment_highpass;
+
 // pitch drifting vars
        float idealpitch;
        float pitchvel;
@@ -933,6 +959,7 @@ typedef struct client_state_s
        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
        struct model_s *csqc_model_precache[MAX_MODELS];
 
        // local amount for smoothing stepups
@@ -1161,6 +1188,7 @@ typedef struct client_state_s
        float movevars_airstrafeaccelerate;
        float movevars_maxairstrafespeed;
        float movevars_aircontrol;
+       float movevars_aircontrol_power;
        float movevars_warsowbunny_airforwardaccel;
        float movevars_warsowbunny_accel;
        float movevars_warsowbunny_topspeed;
@@ -1260,6 +1288,7 @@ extern cvar_t m_side;
 
 extern cvar_t cl_autodemo;
 extern cvar_t cl_autodemo_nameformat;
+extern cvar_t cl_autodemo_delete;
 
 extern cvar_t r_draweffects;
 
@@ -1272,6 +1301,7 @@ extern cvar_t cl_stainmaps;
 extern cvar_t cl_stainmaps_clearonload;
 
 extern cvar_t cl_prydoncursor;
+extern cvar_t cl_prydoncursor_notrace;
 
 extern cvar_t cl_locs_enable;
 
@@ -1396,6 +1426,9 @@ 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;
@@ -1414,7 +1447,7 @@ 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(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);
+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);
 
 typedef enum effectnameindex_s
 {
@@ -1507,6 +1540,10 @@ typedef struct r_refdef_stats_s
        int bloom;
        int bloom_copypixels;
        int bloom_drawpixels;
+       int indexbufferuploadcount;
+       int indexbufferuploadsize;
+       int vertexbufferuploadcount;
+       int vertexbufferuploadsize;
 }
 r_refdef_stats_t;
 
@@ -1716,6 +1753,15 @@ typedef struct r_refdef_s
        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
+
        qboolean draw2dstage;
 
        // true during envmap command capture