]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
added DP_ENT_GLOWMOD extension, like DP_ENT_COLORMOD but alters glow
[xonotic/darkplaces.git] / cl_main.c
index 675c3564e9fcfcdf0b4ce10d26cb4d8f999bb634..af8c3103a53c1858cfef06dfbdd2ef12ab3decab 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -72,6 +72,8 @@ cvar_t cl_beams_quakepositionhack = {CVAR_SAVE, "cl_beams_quakepositionhack", "1
 cvar_t cl_beams_instantaimhack = {CVAR_SAVE, "cl_beams_instantaimhack", "0", "makes your lightning gun aiming update instantly"};
 cvar_t cl_beams_lightatend = {CVAR_SAVE, "cl_beams_lightatend", "0", "make a light at the end of the beam"};
 
+cvar_t cl_deathfade = {CVAR_SAVE, "cl_deathfade", "0", "fade screen to dark red when dead, value = how fast the fade is"};
+
 cvar_t cl_noplayershadow = {CVAR_SAVE, "cl_noplayershadow", "0","hide player shadow"};
 
 cvar_t cl_dlights_decayradius = {CVAR_SAVE, "cl_dlights_decayradius", "1", "reduces size of light flashes over time"};
@@ -461,7 +463,7 @@ static void CL_ModelIndexList_f(void)
 
        while(cl.model_precache[i] && i != MAX_MODELS)
        { // Valid Model
-               if(cl.model_precache[i]->loaded || cl.model_precache[i]->isworldmodel)
+               if(cl.model_precache[i]->loaded || i == 1)
                        Con_Printf("%3i: %-30s %-8s %-10i\n", i, cl.model_precache[i]->name, cl.model_precache[i]->modeldatatypestring, cl.model_precache[i]->surfmesh.num_triangles);
                else
                        Con_Printf("%3i: %-30s %-30s\n", i, cl.model_precache[i]->name, "--no local model found--");
@@ -593,6 +595,7 @@ entity_render_t *CL_NewTempEntity(double shadertime)
        render->shadertime = shadertime;
        render->alpha = 1;
        VectorSet(render->colormod, 1, 1, 1);
+       VectorSet(render->glowmod, 1, 1, 1);
        return render;
 }
 
@@ -738,6 +741,16 @@ void CL_RelinkLightFlashes(void)
                }
        }
 
+       if (!cl.lightstyle)
+       {
+               for (j = 0;j < cl.max_lightstyle;j++)
+               {
+                       r_refdef.scene.rtlightstylevalue[j] = 1;
+                       r_refdef.scene.lightstylevalue[j] = 256;
+               }
+               return;
+       }
+
 // light animations
 // 'm' is normal light, 'a' is no light, 'z' is double bright
        f = cl.time * 10;
@@ -745,7 +758,7 @@ void CL_RelinkLightFlashes(void)
        frac = f - i;
        for (j = 0;j < cl.max_lightstyle;j++)
        {
-               if (!cl.lightstyle || !cl.lightstyle[j].length)
+               if (!cl.lightstyle[j].length)
                {
                        r_refdef.scene.rtlightstylevalue[j] = 1;
                        r_refdef.scene.lightstylevalue[j] = 256;
@@ -812,6 +825,7 @@ void CL_AddQWCTFFlagModel(entity_t *player, int skin)
        flagrender->skinnum = skin;
        flagrender->alpha = 1;
        VectorSet(flagrender->colormod, 1, 1, 1);
+       VectorSet(flagrender->glowmod, 1, 1, 1);
        // attach the flag to the player matrix
        Matrix4x4_CreateFromQuakeEntity(&flagmatrix, -f, -22, 0, 0, 0, -45, 1);
        Matrix4x4_Concat(&flagrender->matrix, &player->render.matrix, &flagmatrix);
@@ -865,6 +879,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
        e->render.flags = e->state_current.flags;
        e->render.effects = e->state_current.effects;
        VectorScale(e->state_current.colormod, (1.0f / 32.0f), e->render.colormod);
+       VectorScale(e->state_current.glowmod, (1.0f / 32.0f), e->render.glowmod);
        if(e >= cl.entities && e < cl.entities + cl.num_entities)
                e->render.entitynumber = e - cl.entities;
        else
@@ -978,7 +993,10 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat
                if (e->render.model->type == mod_alias)
                        angles[0] = -angles[0];
                if ((e->render.effects & EF_SELECTABLE) && cl.cmd.cursor_entitynumber == e->state_current.number)
+               {
                        VectorScale(e->render.colormod, 2, e->render.colormod);
+                       VectorScale(e->render.glowmod, 2, e->render.glowmod);
+               }
        }
        // if model is alias or this is a tenebrae-like dlight, reverse pitch direction
        else if (e->state_current.lightpflags & PFLAGS_FULLDYNAMIC)
@@ -1229,7 +1247,7 @@ void CL_UpdateViewModel(void)
        ent->state_previous = ent->state_current;
        ent->state_current = defaultstate;
        ent->state_current.time = cl.time;
-       ent->state_current.number = -1;
+       ent->state_current.number = (unsigned short)-1;
        ent->state_current.active = true;
        ent->state_current.modelindex = cl.stats[STAT_WEAPON];
        ent->state_current.frame = cl.stats[STAT_WEAPONFRAME];
@@ -1342,7 +1360,7 @@ void CL_LinkNetworkEntity(entity_t *e)
                trace_t trace;
                matrix4x4_t tempmatrix;
                Matrix4x4_Transform(&e->render.matrix, muzzleflashorigin, v2);
-               trace = CL_Move(origin, vec3_origin, vec3_origin, v2, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY, true, false, NULL, false);
+               trace = CL_TraceLine(origin, v2, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY, true, false, NULL, false);
                Matrix4x4_Normalize(&tempmatrix, &e->render.matrix);
                Matrix4x4_SetOrigin(&tempmatrix, trace.endpos[0], trace.endpos[1], trace.endpos[2]);
                Matrix4x4_Scale(&tempmatrix, 150, 1);
@@ -1435,6 +1453,7 @@ void CL_RelinkWorld(void)
        if (!r_fullbright.integer)
                ent->render.flags |= RENDER_LIGHT;
        VectorSet(ent->render.colormod, 1, 1, 1);
+       VectorSet(ent->render.glowmod, 1, 1, 1);
        CL_UpdateRenderEntity(&ent->render);
        r_refdef.scene.worldentity = &ent->render;
        r_refdef.scene.worldmodel = cl.worldmodel;
@@ -1457,6 +1476,7 @@ static void CL_RelinkStaticEntities(void)
                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);
                CL_UpdateRenderEntity(&e->render);
                r_refdef.scene.entities[r_refdef.scene.numentities++] = &e->render;
@@ -1543,6 +1563,7 @@ static void CL_RelinkEffects(void)
                                        entrender->model = cl.csqc_model_precache[-(e->modelindex+1)];
                                entrender->alpha = 1;
                                VectorSet(entrender->colormod, 1, 1, 1);
+                               VectorSet(entrender->glowmod, 1, 1, 1);
 
                                Matrix4x4_CreateFromQuakeEntity(&entrender->matrix, e->origin[0], e->origin[1], e->origin[2], 0, 0, 0, 1);
                                CL_UpdateRenderEntity(entrender);
@@ -1689,6 +1710,7 @@ static void CL_RelinkQWNails(void)
                entrender->model = cl.model_precache[cl.qw_modelindex_spike];
                entrender->alpha = 1;
                VectorSet(entrender->colormod, 1, 1, 1);
+               VectorSet(entrender->glowmod, 1, 1, 1);
 
                Matrix4x4_CreateFromQuakeEntity(&entrender->matrix, v[0], v[1], v[2], v[3], v[4], v[5], 1);
                CL_UpdateRenderEntity(entrender);
@@ -1915,9 +1937,10 @@ void CL_Locs_FreeNode(cl_locnode_t *node)
                {
                        *pointer = node->next;
                        Mem_Free(node);
+                       return;
                }
        }
-       Con_Printf("CL_Locs_FreeNode: no such node! (%p)\n", node);
+       Con_Printf("CL_Locs_FreeNode: no such node! (%p)\n", (void *)node);
 }
 
 void CL_Locs_AddNode(vec3_t mins, vec3_t maxs, const char *name)
@@ -2237,6 +2260,7 @@ void CL_Init (void)
        Cvar_RegisterVariable (&cl_anglespeedkey);
        Cvar_RegisterVariable (&cl_shownet);
        Cvar_RegisterVariable (&cl_nolerp);
+       Cvar_RegisterVariable (&cl_deathfade);
        Cvar_RegisterVariable (&lookspring);
        Cvar_RegisterVariable (&lookstrafe);
        Cvar_RegisterVariable (&sensitivity);