]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
323
[xonotic/darkplaces.git] / cl_main.c
index 307851cada0756de918c4cd199616808132a9ef2..59f7437d61fffef3c868b4090fb68f9d65cd3410 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -534,7 +534,7 @@ void CL_LinkNetworkEntity(entity_t *e)
                        if (e == &cl.viewent && cl.viewentity >= 0 && cl.viewentity < MAX_EDICTS && cl_entities[cl.viewentity].state_current.active)
                        {
                                e->state_current.alpha = cl_entities[cl.viewentity].state_current.alpha;
-                               e->state_current.effects = EF_NOSHADOW | (cl_entities[cl.viewentity].state_current.effects & (EF_ADDITIVE | EF_REFLECTIVE | EF_FULLBRIGHT));
+                               e->state_current.effects = EF_NOSHADOW | (cl_entities[cl.viewentity].state_current.effects & (EF_ADDITIVE | EF_REFLECTIVE | EF_FULLBRIGHT | EF_NODEPTHTEST));
                        }
                }
                else
@@ -853,7 +853,7 @@ void CL_LinkNetworkEntity(entity_t *e)
                if (e - cl_entities == cl.viewentity)
                        e->render.flags |= RENDER_EXTERIORMODEL;
                // transparent stuff can't be lit during the opaque stage
-               if (e->render.effects & (EF_ADDITIVE) || e->render.alpha < 1)
+               if (e->render.effects & (EF_ADDITIVE | EF_NODEPTHTEST) || e->render.alpha < 1)
                        e->render.flags |= RENDER_TRANSPARENT;
                // either fullbright or lit
                if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
@@ -897,10 +897,21 @@ void CL_RelinkWorld(void)
 static void CL_RelinkStaticEntities(void)
 {
        int i;
-       for (i = 0;i < cl_num_static_entities && r_refdef.numentities < r_refdef.maxentities;i++)
+       entity_t *e;
+       for (i = 0, e = cl_static_entities;i < cl_num_static_entities && r_refdef.numentities < r_refdef.maxentities;i++, e++)
        {
-               Mod_CheckLoaded(cl_static_entities[i].render.model);
-               r_refdef.entities[r_refdef.numentities++] = &cl_static_entities[i].render;
+               Mod_CheckLoaded(e->render.model);
+               e->render.flags = 0;
+               // transparent stuff can't be lit during the opaque stage
+               if (e->render.effects & (EF_ADDITIVE | EF_NODEPTHTEST) || e->render.alpha < 1)
+                       e->render.flags |= RENDER_TRANSPARENT;
+               // either fullbright or lit
+               if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
+                       e->render.flags |= RENDER_LIGHT;
+               // hide player shadow during intermission or nehahra movie
+               if (!(e->render.effects & EF_NOSHADOW) && !(e->render.flags & RENDER_TRANSPARENT))
+                       e->render.flags |= RENDER_SHADOW;
+               r_refdef.entities[r_refdef.numentities++] = &e->render;
        }
 }