]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
fix typo
[xonotic/darkplaces.git] / cl_main.c
index ef74fd14384a76ef2c834d7f9e0495e0b7acac30..189eddadfac9f410d69d358ac73dfdd44f723568 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -88,6 +88,8 @@ cvar_t cl_deathnoviewmodel = {0, "cl_deathnoviewmodel", "1", "hides gun model wh
 cvar_t cl_locs_enable = {CVAR_SAVE, "locs_enable", "1", "enables replacement of certain % codes in chat messages: %l (location), %d (last death location), %h (health), %a (armor), %x (rockets), %c (cells), %r (rocket launcher status), %p (powerup status), %w (weapon status), %t (current time in level)"};
 cvar_t cl_locs_show = {0, "locs_show", "0", "shows defined locations for editing purposes"};
 
+extern cvar_t r_equalize_entities_fullbright;
+
 client_static_t        cls;
 client_state_t cl;
 
@@ -188,6 +190,7 @@ void CL_ClearState(void)
        ent->render.alpha = 1;
        ent->render.flags = RENDER_SHADOW | RENDER_LIGHT;
        Matrix4x4_CreateFromQuakeEntity(&ent->render.matrix, 0, 0, 0, 0, 0, 0, 1);
+       ent->render.allowdecals = true;
        CL_UpdateRenderEntity(&ent->render);
 
        // noclip is turned off at start
@@ -764,6 +767,14 @@ void CL_RelinkLightFlashes(void)
                        r_refdef.scene.lightstylevalue[j] = 256;
                        continue;
                }
+               // static lightstyle "=value"
+               if (cl.lightstyle[j].map[0] == '=')
+               {
+                       r_refdef.scene.rtlightstylevalue[j] = atof(cl.lightstyle[j].map + 1);
+                       if ( r_lerplightstyles.integer || ((int)f - f) < 0.01)
+                               r_refdef.scene.lightstylevalue[j] = r_refdef.scene.rtlightstylevalue[j];
+                       continue;
+               }
                k = i % cl.lightstyle[j].length;
                l = (i-1) % cl.lightstyle[j].length;
                k = cl.lightstyle[j].map[k] - 'a';
@@ -863,10 +874,9 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
 {
        const matrix4x4_t *matrix;
        matrix4x4_t blendmatrix, tempmatrix, matrix2;
-       int j, k, l, frame;
-       float origin[3], angles[3], lerp, d;
+       int frame;
+       float origin[3], angles[3], lerp;
        entity_t *t;
-       dp_model_t *model;
        //entity_persistent_t *p = &e->persistent;
        //entity_render_t *r = &e->render;
        // skip inactive entities and world
@@ -909,23 +919,15 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
                e->render.flags |= t->render.flags & (RENDER_EXTERIORMODEL | RENDER_VIEWMODEL);
                // if a valid tagindex is used, make it relative to that tag instead
                // FIXME: use a model function to get tag info (need to handle skeletal)
-               if (e->state_current.tagentity && e->state_current.tagindex >= 1 && (model = t->render.model))
+               if (e->state_current.tagentity && e->state_current.tagindex >= 1 && t->render.model)
                {
-                       // blend the matrices
-                       memset(&blendmatrix, 0, sizeof(blendmatrix));
-                       for (j = 0;j < MAX_FRAMEBLENDS && t->render.frameblend[j].lerp > 0;j++)
+                       if(!CL_BlendTagMatrix(&t->render, e->state_current.tagindex - 1, &blendmatrix)) // i.e. no error
                        {
-                               matrix4x4_t tagmatrix;
-                               Mod_Alias_GetTagMatrix(model, t->render.frameblend[j].subframe, e->state_current.tagindex - 1, &tagmatrix);
-                               d = t->render.frameblend[j].lerp;
-                               for (l = 0;l < 4;l++)
-                                       for (k = 0;k < 4;k++)
-                                               blendmatrix.m[l][k] += d * tagmatrix.m[l][k];
+                               // concat the tag matrices onto the entity matrix
+                               Matrix4x4_Concat(&tempmatrix, &t->render.matrix, &blendmatrix);
+                               // use the constructed tag matrix
+                               matrix = &tempmatrix;
                        }
-                       // concat the tag matrices onto the entity matrix
-                       Matrix4x4_Concat(&tempmatrix, &t->render.matrix, &blendmatrix);
-                       // use the constructed tag matrix
-                       matrix = &tempmatrix;
                }
        }
        else if (e->render.flags & RENDER_VIEWMODEL)
@@ -1067,13 +1069,18 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
 
        // tenebrae's sprites are all additive mode (weird)
        if (gamemode == GAME_TENEBRAE && e->render.model && e->render.model->type == mod_sprite)
-               e->render.effects |= EF_ADDITIVE;
+               e->render.flags |= RENDER_ADDITIVE;
        // player model is only shown with chase_active on
        if (e->state_current.number == cl.viewentity)
                e->render.flags |= RENDER_EXTERIORMODEL;
        // either fullbright or lit
-       if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
-               e->render.flags |= RENDER_LIGHT;
+       if(!r_fullbright.integer)
+       {
+               if (!(e->render.effects & EF_FULLBRIGHT))
+                       e->render.flags |= RENDER_LIGHT;
+               else if(r_equalize_entities_fullbright.integer)
+                       e->render.flags |= RENDER_LIGHT | RENDER_EQUALIZE;
+       }
        // hide player shadow during intermission or nehahra movie
        if (!(e->render.effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST))
         && (e->render.alpha >= 1)
@@ -1084,8 +1091,15 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
                e->render.flags |= RENDER_NOSELFSHADOW;
        if (e->render.effects & EF_NOSELFSHADOW)
                e->render.flags |= RENDER_NOSELFSHADOW;
+       if (e->render.effects & EF_NODEPTHTEST)
+               e->render.flags |= RENDER_NODEPTHTEST;
+       if (e->render.effects & EF_ADDITIVE)
+               e->render.flags |= RENDER_ADDITIVE;
+       if (e->render.effects & EF_DOUBLESIDED)
+               e->render.flags |= RENDER_DOUBLESIDED;
 
        // make the other useful stuff
+       e->render.allowdecals = true;
        CL_UpdateRenderEntity(&e->render);
 }
 
@@ -1224,6 +1238,8 @@ void CL_UpdateNetworkCollisionEntities(void)
        }
 }
 
+extern void R_DecalSystem_Reset(decalsystem_t *decalsystem);
+
 /*
 ===============
 CL_UpdateNetworkEntities
@@ -1248,7 +1264,10 @@ void CL_UpdateNetworkEntities(void)
                                        CL_UpdateNetworkEntityTrail(ent);
                        }
                        else
+                       {
+                               R_DecalSystem_Reset(&ent->render.decalsystem);
                                cl.entities_active[i] = false;
+                       }
                }
        }
 }
@@ -1467,6 +1486,7 @@ void CL_RelinkWorld(void)
                ent->render.flags |= RENDER_LIGHT;
        VectorSet(ent->render.colormod, 1, 1, 1);
        VectorSet(ent->render.glowmod, 1, 1, 1);
+       ent->render.allowdecals = true;
        CL_UpdateRenderEntity(&ent->render);
        r_refdef.scene.worldentity = &ent->render;
        r_refdef.scene.worldmodel = cl.worldmodel;
@@ -1483,14 +1503,20 @@ static void CL_RelinkStaticEntities(void)
                // need to re-fetch the model pointer
                e->render.model = cl.model_precache[e->state_baseline.modelindex];
                // either fullbright or lit
-               if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
-                       e->render.flags |= RENDER_LIGHT;
+               if(!r_fullbright.integer)
+               {
+                       if (!(e->render.effects & EF_FULLBRIGHT))
+                               e->render.flags |= RENDER_LIGHT;
+                       else if(r_equalize_entities_fullbright.integer)
+                               e->render.flags |= RENDER_LIGHT | RENDER_EQUALIZE;
+               }
                // hide player shadow during intermission or nehahra movie
                if (!(e->render.effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST)) && (e->render.alpha >= 1))
                        e->render.flags |= RENDER_SHADOW;
                VectorSet(e->render.colormod, 1, 1, 1);
                VectorSet(e->render.glowmod, 1, 1, 1);
                R_LerpAnimation(&e->render);
+               e->render.allowdecals = true;
                CL_UpdateRenderEntity(&e->render);
                r_refdef.scene.entities[r_refdef.scene.numentities++] = &e->render;
        }
@@ -1852,12 +1878,10 @@ static void CL_Fog_f (void)
 {
        if (Cmd_Argc () == 1)
        {
-               Con_Printf("\"fog\" is \"%f %f %f %f %f %f %f\"\n", r_refdef.fog_density, r_refdef.fog_red, r_refdef.fog_green, r_refdef.fog_blue, r_refdef.fog_alpha, r_refdef.fog_start, r_refdef.fog_end);
+               Con_Printf("\"fog\" is \"%f %f %f %f %f %f %f %f %f\"\n", r_refdef.fog_density, r_refdef.fog_red, r_refdef.fog_green, r_refdef.fog_blue, r_refdef.fog_alpha, r_refdef.fog_start, r_refdef.fog_end, r_refdef.fog_height, r_refdef.fog_fadedepth);
                return;
        }
-       r_refdef.fog_start = 0;
-       r_refdef.fog_end = 16384;
-       r_refdef.fog_alpha = 1;
+       FOG_clear(); // so missing values get good defaults
        if(Cmd_Argc() > 1)
                r_refdef.fog_density = atof(Cmd_Argv(1));
        if(Cmd_Argc() > 2)
@@ -1872,6 +1896,10 @@ static void CL_Fog_f (void)
                r_refdef.fog_start = atof(Cmd_Argv(6));
        if(Cmd_Argc() > 7)
                r_refdef.fog_end = atof(Cmd_Argv(7));
+       if(Cmd_Argc() > 8)
+               r_refdef.fog_height = atof(Cmd_Argv(8));
+       if(Cmd_Argc() > 9)
+               r_refdef.fog_fadedepth = atof(Cmd_Argv(9));
 }
 
 /*