]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
added DP_SV_MODELFLAGS_AS_EFFECTS extension, this adds EF_ROCKET and
[xonotic/darkplaces.git] / client.h
index 297b5d6b8b3152f72f6f467b524aa575ee836a8d..8578e8d2a2af4eef8fe1c41b992b1435f96bc381 100644 (file)
--- a/client.h
+++ b/client.h
@@ -69,6 +69,8 @@ typedef struct rtlight_s
        // note that the world to light matrices are inversely scaled (divided) by lightradius
 
        // core properties
+       // matrix for transforming light filter coordinates to world coordinates
+       matrix4x4_t matrix_lighttoworld;
        // matrix for transforming world coordinates to light filter coordinates
        matrix4x4_t matrix_worldtolight;
        // typically 1 1 1, can be lower (dim) or higher (overbright)
@@ -126,6 +128,19 @@ typedef struct rtlight_s
        // surfaces seen by light
        int static_numsurfaces;
        int *static_surfacelist;
+       // flag bits indicating which triangles of the world model should cast
+       // shadows, and which ones should be lit
+       //
+       // this avoids redundantly scanning the triangles in each surface twice
+       // for whether they should cast shadows, once in culling and once in the
+       // actual shadowmarklist production.
+       int static_numshadowtrispvsbytes;
+       unsigned char *static_shadowtrispvs;
+       // this allows the lighting batch code to skip backfaces andother culled
+       // triangles not relevant for lighting
+       // (important on big surfaces such as terrain)
+       int static_numlighttrispvsbytes;
+       unsigned char *static_lighttrispvs;
 }
 rtlight_t;
 
@@ -237,6 +252,8 @@ typedef struct entity_render_s
        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
@@ -269,6 +286,9 @@ typedef struct entity_render_s
        vec3_t modellight_ambient;
        vec3_t modellight_diffuse; // q3bsp
        vec3_t modellight_lightdir; // q3bsp
+
+       // last time visible during trace culling
+       double last_trace_visibility;
 }
 entity_render_t;
 
@@ -509,6 +529,10 @@ typedef struct client_static_s
        // (note: qw_download variables are also used)
        cl_downloadack_t dp_downloadack[CL_MAX_DOWNLOADACKS];
 
+       // input sequence numbers are not reset on level change, only connect
+       int movesequence;
+       int servermovesequence;
+
        // quakeworld stuff below
 
        // value of "qport" cvar at time of connection
@@ -631,6 +655,14 @@ typedef enum cl_parsingtextmode_e
 }
 cl_parsingtextmode_t;
 
+typedef struct cl_locnode_s
+{
+       struct cl_locnode_s *next;
+       char *name;
+       vec3_t mins, maxs;
+}
+cl_locnode_t;
+
 //
 // the client_state_t structure is wiped completely at every
 // server signon
@@ -662,7 +694,8 @@ typedef struct client_state_s
        // use pain anim frame if cl.time < this
        float faceanimtime;
        // for stair smoothing
-       float stairoffset;
+       float stairsmoothz;
+       double stairsmoothtime;
 
        // color shifts for damage, powerups
        cshift_t cshifts[NUM_CSHIFTS];
@@ -696,6 +729,8 @@ typedef struct client_state_s
        // 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;
+       // if true the CL_ClientMovement_Replay function will update origin, etc
+       qboolean movement_replay;
        // this is set true by svc_time parsing and causes a new movement to be
        // queued for prediction purposes
        qboolean movement_needupdate;
@@ -708,8 +743,6 @@ typedef struct client_state_s
        // queue of proposed moves
        int movement_numqueue;
        client_movementqueue_t movement_queue[256];
-       int movesequence;
-       int servermovesequence;
        // whether the replay should allow a jump at the first sequence
        qboolean movement_replay_canjump;
 
@@ -792,6 +825,8 @@ typedef struct client_state_s
        sfx_t *sfx_ric2;
        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;
 
 // refresh related state
 
@@ -877,6 +912,7 @@ typedef struct client_state_s
        int downloadsound_current;
        int loadsound_total;
        qboolean downloadcsqc;
+       qboolean loadbegun;
        qboolean loadfinished;
 
        // quakeworld stuff
@@ -932,6 +968,12 @@ typedef struct client_state_s
 
        // collision culling data
        world_t world;
+
+       // loc file stuff (points and boxes describing locations in the level)
+       cl_locnode_t *locnodes;
+       // 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;
 }
 client_state_t;
 
@@ -964,7 +1006,9 @@ extern cvar_t cl_autofire;
 
 extern cvar_t cl_shownet;
 extern cvar_t cl_nolerp;
-extern cvar_t cl_nettimesyncmode;
+extern cvar_t cl_nettimesyncfactor;
+extern cvar_t cl_nettimesyncboundmode;
+extern cvar_t cl_nettimesyncboundtolerance;
 
 extern cvar_t cl_pitchdriftspeed;
 extern cvar_t lookspring;
@@ -993,10 +1037,15 @@ extern cvar_t cl_stainmaps_clearonload;
 
 extern cvar_t cl_prydoncursor;
 
+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);
 
+cl_locnode_t *CL_Locs_FindNearest(const vec3_t point);
+void CL_Locs_FindLocationName(char *buffer, size_t buffersize, vec3_t point);
+
 //=============================================================================
 
 //
@@ -1012,7 +1061,7 @@ void CL_Disconnect (void);
 void CL_Disconnect_f (void);
 
 void CL_UpdateRenderEntity(entity_render_t *ent);
-void CL_UpdateEntities(void);
+void CL_UpdateViewEntities(void);
 
 //
 // cl_input
@@ -1038,6 +1087,7 @@ void CL_ParseTEnt (void);
 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);
 
 void CL_ClearTempEntities (void);
 entity_t *CL_NewTempEntity (void);
@@ -1049,7 +1099,7 @@ void CL_ExpandEntities(int num);
 void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet);
 
 
-int  CL_ReadFromServer (void);
+void CL_UpdateWorld (void);
 void CL_WriteToServer (void);
 void CL_Input (void);
 extern qboolean cl_ignoremousemove;
@@ -1064,7 +1114,7 @@ int Key_StringToKeynum (const char *str);
 //
 void CL_StopPlayback(void);
 void CL_ReadDemoMessage(void);
-void CL_WriteDemoMessage(void);
+void CL_WriteDemoMessage(sizebuf_t *mesage);
 
 void CL_NextDemo(void);
 void CL_Stop_f(void);
@@ -1106,10 +1156,11 @@ 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_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;
@@ -1190,9 +1241,8 @@ extern qboolean sb_showscores;
 #define NUMCROSSHAIRS 32
 extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1];
 
-#define FOGTABLEWIDTH 1024
-extern int fogtableindex;
-#define VERTEXFOGTABLE(dist) (fogtableindex = (int)((dist) * r_refdef.fogtabledistmultiplier), r_refdef.fogtable[bound(0, fogtableindex, FOGTABLEWIDTH - 1)])
+float FogPoint_World(const vec3_t p);
+float FogPoint_Model(const vec3_t p);
 
 typedef struct r_refdef_stats_s
 {
@@ -1263,8 +1313,9 @@ typedef struct r_refdef_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;
@@ -1316,6 +1367,7 @@ typedef struct r_view_s
        vec3_t up;
        mplane_t frustum[5];
        float frustum_x, frustum_y;
+       vec3_t frustumcorner[4];
 
        // screen area to render in
        int x;