]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
optimized handling of decals, which increased timedemo bigass1.dem from 185fps to...
[xonotic/darkplaces.git] / client.h
index cbe86f44819a71a6a842c97f188d826e31187adf..260bfc0f2492b815eaa22a35927ae7713e2f9603 100644 (file)
--- a/client.h
+++ b/client.h
@@ -26,10 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 // LordHavoc: 256 dynamic lights
 #define MAX_DLIGHTS 256
-// LordHavoc: this affects the lighting scale of the whole game
-#define LIGHTOFFSET 1024.0f
-// max lights shining on one entity
-#define MAXENTLIGHTS 128
 
 // flags for rtlight rendering
 #define LIGHTFLAG_NORMALMODE 1
@@ -117,16 +113,6 @@ typedef struct rtlight_s
        // this is R_Shadow_Cubemap(rtlight->cubemapname)
        rtexture_t *currentcubemap;
 
-       // lightmap renderer stuff (remove someday!)
-       // the size of the light
-       vec_t lightmap_cullradius;
-       // the size of the light, squared
-       vec_t lightmap_cullradius2;
-       // the brightness of the light
-       vec3_t lightmap_light;
-       // to avoid sudden brightness change at cullradius, subtract this
-       vec_t lightmap_subtract;
-
        // static light info
        // true if this light should be compiled as a static light
        int isstatic;
@@ -280,12 +266,10 @@ typedef struct entity_render_s
        // 4 frame numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use frame instead
        frameblend_t frameblend[4];
 
-       // caching results of static light traces (this is semi-persistent)
-       double entlightstime;
-       vec3_t entlightsorigin;
-       int entlightsframe;
-       int numentlights;
-       unsigned short entlights[MAXENTLIGHTS];
+       // current lighting from map
+       vec3_t modellight_ambient;
+       vec3_t modellight_diffuse; // q3bsp
+       vec3_t modellight_lightdir; // q3bsp
 }
 entity_render_t;
 
@@ -382,8 +366,8 @@ typedef struct scoreboard_s
 
 typedef struct cshift_s
 {
-       int             destcolor[3];
-       int             percent;                // 0-256
+       float   destcolor[3];
+       float   percent;                // 0-256
 } cshift_t;
 
 #define        CSHIFT_CONTENTS 0
@@ -440,8 +424,9 @@ typedef struct client_static_s
 {
        cactive_t state;
 
-       // all client memory allocations go in this pool
-       mempool_t *mempool;
+       // all client memory allocations go in these pools
+       mempool_t *levelmempool;
+       mempool_t *permanentmempool;
 
 // demo loop control
        // -1 = don't play demos
@@ -598,12 +583,14 @@ typedef struct particle_s
        vec3_t          org;
        vec3_t          vel; // velocity of particle, or orientation of decal, or end point of beam
        float           size;
+       float           sizeincrease; // rate of size change per second
        float           alpha; // 0-255
        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           friction; // how much air friction affects this object (objects with a low mass/size ratio tend to get more air friction)
+       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
        model_t         *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
@@ -714,7 +701,7 @@ typedef struct client_state_s
        // don't change view angle, full screen, etc
        int intermission;
        // latched at intermission start
-       int completed_time;
+       double completed_time;
 
        // the timestamp of the last two messages
        double mtime[2];
@@ -722,7 +709,10 @@ typedef struct client_state_s
        // clients view of time, time should be between mtime[0] and mtime[1] to
        // generate a lerp point for other data, oldtime is the previous frame's
        // value of time, frametime is the difference between time and oldtime
-       double time, oldtime, frametime;
+       double time, oldtime;
+       // 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;
 
        // copy of realtime from last recieved message, for net trouble icon
        float last_received_message;
@@ -927,6 +917,9 @@ extern cvar_t m_yaw;
 extern cvar_t m_forward;
 extern cvar_t m_side;
 
+extern cvar_t cl_autodemo;
+extern cvar_t cl_autodemo_nameformat;
+
 extern cvar_t r_draweffects;
 
 extern cvar_t cl_explosions_alpha_start;
@@ -1048,7 +1041,6 @@ 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_bloodshowers;
 extern cvar_t cl_particles_blood;
 extern cvar_t cl_particles_blood_alpha;
 extern cvar_t cl_particles_blood_bloodhack;
@@ -1070,32 +1062,61 @@ void CL_Particles_Clear(void);
 void CL_Particles_Init(void);
 void CL_Particles_Shutdown(void);
 
+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_VORESPIKE,
+       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_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, int color, entity_t *ent);
-void CL_SparkShower (vec3_t org, vec3_t dir, int count, vec_t gravityscale, vec_t radius);
-void CL_Smoke (vec3_t org, vec3_t dir, int count, vec_t radius);
-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);
-void CL_FlameCube (vec3_t mins, vec3_t maxs, int count);
-void CL_Flames (vec3_t org, vec3_t vel, int count);
-void CL_BloodShower (vec3_t mins, vec3_t maxs, float velspeed, int count);
-void CL_ParticleCube (vec3_t mins, vec3_t maxs, vec3_t dir, int count, int colorbase, int gravity, int randomvel);
-void CL_ParticleRain (vec3_t mins, vec3_t maxs, vec3_t dir, int count, int colorbase, int type);
-void CL_EntityParticles (entity_t *ent);
-void CL_BlobExplosion (vec3_t org);
-void CL_ParticleExplosion (vec3_t org);
-void CL_ParticleExplosion2 (vec3_t org, int colorStart, int colorLength);
-void CL_LavaSplash (vec3_t org);
-void CL_TeleportSplash (vec3_t org);
-void CL_BeamParticle (const vec3_t start, const vec3_t end, vec_t radius, float red, float green, float blue, float alpha, float lifetime);
-void CL_Tei_Smoke(const vec3_t pos, const vec3_t dir, int count);
-void CL_Tei_PlasmaHit(const vec3_t pos, const vec3_t dir, int count);
+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 CL_MoveParticles(void);
 void R_MoveExplosions(void);
-void R_NewExplosion(vec3_t org);
+void R_NewExplosion(const vec3_t org);
 
 #include "cl_screen.h"
 
@@ -1146,11 +1167,7 @@ typedef struct refdef_s
        // controls intensity of dynamic lights and lightmap layers
        unsigned short  lightstylevalue[256];   // 8.8 fraction of base light value
 
-       // 2D art drawing queue
-       // TODO: get rid of this
-       unsigned char *drawqueue;
-       int drawqueuesize;
-       int maxdrawqueuesize;
+       qboolean draw2dstage;
 }
 refdef_t;