]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
Cleaned up alot more memory leaks. (still get 720 leaks just running demo1.dem)
[xonotic/darkplaces.git] / client.h
index 469ed9b66cfeca85fe6b342ad4a784c71e0c227d..f634a223c81c292031df08293c84db613997b1be 100644 (file)
--- a/client.h
+++ b/client.h
@@ -31,6 +31,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 // max lights shining on one entity
 #define MAXENTLIGHTS 128
 
+// flags for rtlight rendering
+#define LIGHTFLAG_NORMALMODE 1
+#define LIGHTFLAG_REALTIMEMODE 2
+
 extern int cl_max_entities;
 extern int cl_max_static_entities;
 extern int cl_max_temp_entities;
@@ -90,12 +94,22 @@ typedef struct rtlight_s
        vec_t radius;
        // light filter
        char cubemapname[64];
+       // light style to monitor for brightness
+       int style;
        // whether light should render shadows
        int shadow;
        // intensity of corona to render
        vec_t corona;
-       // light style to monitor for brightness
-       int style;
+       // radius scale of corona to render (1.0 means same as light radius)
+       vec_t coronasizescale;
+       // ambient intensity to render
+       vec_t ambientscale;
+       // diffuse intensity to render
+       vec_t diffusescale;
+       // specular intensity to render
+       vec_t specularscale;
+       // LIGHTFLAG_* flags
+       int flags;
        
        // generated properties
        // used only for shadow volumes
@@ -180,6 +194,21 @@ typedef struct dlight_s
        // corona intensity
        // (worldlight: saved to .rtlights file)
        vec_t corona;
+       // radius scale of corona to render (1.0 means same as light radius)
+       // (worldlight: saved to .rtlights file)
+       vec_t coronasizescale;
+       // ambient intensity to render
+       // (worldlight: saved to .rtlights file)
+       vec_t ambientscale;
+       // diffuse intensity to render
+       // (worldlight: saved to .rtlights file)
+       vec_t diffusescale;
+       // specular intensity to render
+       // (worldlight: saved to .rtlights file)
+       vec_t specularscale;
+       // LIGHTFLAG_* flags
+       // (worldlight: saved to .rtlights file)
+       int flags;
        // linked list of world lights
        // (worldlight only)
        struct dlight_s *next;
@@ -226,6 +255,9 @@ typedef struct entity_render_s
        // render flags
        int flags;
 
+       // colormod tinting of models
+       float colormod[3];
+
        // interpolated animation
 
        // frame that the model is interpolating from
@@ -308,6 +340,14 @@ typedef struct
        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;
 } usercmd_t;
 
 typedef struct
@@ -427,16 +467,18 @@ typedef struct
        // send a clc_nop periodically until connected
        float sendnoptime;
 
-       // last command sent to the server
+       // current input to send to the server
        usercmd_t cmd;
 
 // information for local display
        // health, etc
        int stats[MAX_CL_STATS];
-       // inventory bit flags
-       int items;
+       // last known inventory bit flags, for blinking
+       int olditems;
        // cl.time of acquiring item, for blinking
        float item_gettime[32];
+       // last known STAT_ACTIVEWEAPON
+       int activeweapon;
        // cl.time of changing STAT_ACTIVEWEAPON
        float weapontime;
        // use pain anim frame if cl.time < this
@@ -474,7 +516,6 @@ typedef struct
        float driftmove;
        double laststop;
 
-       float viewheight;
        // local amount for smoothing stepups
        //float crouch;
 
@@ -540,8 +581,11 @@ typedef struct
        int protocol;
 
        // entity database stuff
-       entity_database_t entitydatabase;
-       entity_database4_t *entitydatabase4;
+       // latest received entity frame numbers
+#define LATESTFRAMENUMS 3
+       int latestframenums[LATESTFRAMENUMS];
+       entityframe_database_t *entitydatabase;
+       entityframe4_database_t *entitydatabase4;
 }
 client_state_t;
 
@@ -554,6 +598,8 @@ extern cvar_t cl_name;
 extern cvar_t cl_color;
 extern cvar_t cl_rate;
 extern cvar_t cl_pmodel;
+extern cvar_t cl_playermodel;
+extern cvar_t cl_playerskin;
 
 extern cvar_t cl_upspeed;
 extern cvar_t cl_forwardspeed;
@@ -586,13 +632,15 @@ extern cvar_t m_side;
 
 extern cvar_t r_draweffects;
 
-extern cvar_t cl_explosions;
 extern cvar_t cl_explosions_alpha_start;
 extern cvar_t cl_explosions_alpha_end;
 extern cvar_t cl_explosions_size_start;
 extern cvar_t cl_explosions_size_end;
 extern cvar_t cl_explosions_lifetime;
 extern cvar_t cl_stainmaps;
+extern cvar_t cl_stainmaps_clearonload;
+
+extern cvar_t cl_prydoncursor;
 
 // these are updated by CL_ClearState
 extern int cl_num_entities;
@@ -600,6 +648,7 @@ extern int cl_num_static_entities;
 extern int cl_num_temp_entities;
 extern int cl_num_brushmodel_entities;
 
+extern mempool_t *cl_entities_mempool;
 extern entity_t *cl_entities;
 extern qbyte *cl_entities_active;
 extern entity_t *cl_static_entities;
@@ -613,7 +662,7 @@ extern lightstyle_t *cl_lightstyle;
 
 extern client_state_t cl;
 
-extern void CL_AllocDlight (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);
+extern void CL_AllocDlight (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_DecayLights (void);
 
 //=============================================================================
@@ -622,6 +671,7 @@ extern void CL_DecayLights (void);
 // cl_main
 //
 
+void CL_Shutdown (void);
 void CL_Init (void);
 
 void CL_EstablishConnection(const char *host);
@@ -650,9 +700,11 @@ extern     kbutton_t       in_strafe;
 extern         kbutton_t       in_speed;
 
 void CL_InitInput (void);
-void CL_SendCmd (usercmd_t *cmd);
-void CL_SendMove (usercmd_t *cmd);
+void CL_SendCmd (void);
+void CL_SendMove (void);
 
+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_RelinkBeams (void);
@@ -666,12 +718,13 @@ void CL_ClearState (void);
 
 
 int  CL_ReadFromServer (void);
-void CL_WriteToServer (usercmd_t *cmd);
-void CL_BaseMove (usercmd_t *cmd);
+void CL_WriteToServer (void);
+void CL_BaseMove (void);
 
 
 float CL_KeyState (kbutton_t *key);
 const char *Key_KeynumToString (int keynum);
+int Key_StringToKeynum (const char *str);
 
 //
 // cl_demo.c
@@ -690,6 +743,7 @@ void CL_TimeDemo_f(void);
 // cl_parse.c
 //
 void CL_Parse_Init(void);
+void CL_Parse_Shutdown(void);
 void CL_ParseServerMessage(void);
 void CL_Parse_DumpPacket(void);
 
@@ -714,14 +768,37 @@ void CL_InitTEnts (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_bloodshowers;
+extern cvar_t cl_particles_blood;
+extern cvar_t cl_particles_blood_alpha;
+extern cvar_t cl_particles_blood_bloodhack;
+extern cvar_t cl_particles_bulletimpacts;
+extern cvar_t cl_particles_explosions_bubbles;
+extern cvar_t cl_particles_explosions_smoke;
+extern cvar_t cl_particles_explosions_sparks;
+extern cvar_t cl_particles_explosions_shell;
+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);
 
 void CL_ParseParticleEffect (void);
 void CL_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count);
-void CL_RocketTrail (vec3_t start, vec3_t end, int type, entity_t *ent);
-void CL_RocketTrail2 (vec3_t start, vec3_t end, int color, entity_t *ent);
-void CL_SparkShower (vec3_t org, vec3_t dir, int count);
+void CL_RocketTrail (vec3_t start, vec3_t end, int type, int color, entity_t *ent);
+void CL_SparkShower (vec3_t org, vec3_t dir, int count, vec_t gravityscale);
+void CL_Smoke (vec3_t org, vec3_t dir, int count);
+void CL_BulletMark (vec3_t org);
 void CL_PlasmaBurn (vec3_t org);
 void CL_BloodPuff (vec3_t org, vec3_t vel, int count);
 void CL_Stardust (vec3_t mins, vec3_t maxs, int count);
@@ -751,16 +828,38 @@ typedef struct
        int x, y, width, height;
        float fov_x, fov_y;
 
+       // these are set for water warping before
+       // fov_x/fov_y are calculated
+       float fovscale_x, fovscale_y;
+
        // view transform
        matrix4x4_t viewentitymatrix;
 
+       // which color components to allow (for anaglyph glasses)
+       int colormask[4];
+
        // fullscreen color blend
        float viewblend[4];
 
+       // 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
+       model_t *worldmodel;
+
+       // renderable entities (excluding world)
        entity_render_t **entities;
        int numentities;
        int maxentities;
 
+       // 2D art drawing queue
+       // TODO: get rid of this
        qbyte *drawqueue;
        int drawqueuesize;
        int maxdrawqueuesize;