+ }
+ else
+ {
+ // begin a new frame lerp
+ e->render.frame1 = e->render.frame2;
+ e->render.frame1time = e->render.frame2time;
+ e->render.frame = e->render.frame2 = e->state_current.frame;
+ e->render.frame2time = cl.time;
+ e->render.framelerp = 0;
+ }
+
+ // set up the render matrix
+ if (matrix)
+ {
+ // attached entity, this requires a matrix multiply (concat)
+ // FIXME: e->render.scale should go away
+ Matrix4x4_CreateFromQuakeEntity(&matrix2, origin[0], origin[1], origin[2], angles[0], angles[1], angles[2], e->render.scale);
+ // concat the matrices to make the entity relative to its tag
+ Matrix4x4_Concat(&e->render.matrix, matrix, &matrix2);
+ // get the origin from the new matrix
+ Matrix4x4_OriginFromMatrix(&e->render.matrix, origin);
+ }
+ else
+ {
+ // unattached entities are faster to process
+ Matrix4x4_CreateFromQuakeEntity(&e->render.matrix, origin[0], origin[1], origin[2], angles[0], angles[1], angles[2], e->render.scale);
+ }
+
+ // make the other useful stuff
+ CL_UpdateRenderEntity(&e->render);
+
+ // 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;
+ // player model is only shown with chase_active on
+ if (e->state_current.number == cl.viewentity)
+ e->render.flags |= RENDER_EXTERIORMODEL;
+ // 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;
+ // double sided rendering mode causes backfaces to be visible
+ // (mostly useful on transparent stuff)
+ if (e->render.effects & EF_DOUBLESIDED)
+ e->render.flags |= RENDER_NOCULLFACE;
+ // 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_VIEWMODEL | RENDER_TRANSPARENT))
+ && (!(e->render.flags & RENDER_EXTERIORMODEL) || (!cl.intermission && cls.protocol != PROTOCOL_NEHAHRAMOVIE && !cl_noplayershadow.integer)))
+ e->render.flags |= RENDER_SHADOW;
+}
+
+// creates light and trails from an entity
+void CL_UpdateNetworkEntityTrail(entity_t *e)
+{
+ effectnameindex_t trailtype;
+ vec3_t origin;
+
+ // bmodels are treated specially since their origin is usually '0 0 0' and
+ // their actual geometry is far from '0 0 0'
+ if (e->render.model && e->render.model->soundfromcenter)
+ {
+ vec3_t o;
+ VectorMAM(0.5f, e->render.model->normalmins, 0.5f, e->render.model->normalmaxs, o);
+ Matrix4x4_Transform(&e->render.matrix, o, origin);
+ }
+ else
+ Matrix4x4_OriginFromMatrix(&e->render.matrix, origin);
+
+ // handle particle trails and such effects now that we know where this
+ // entity is in the world...
+ trailtype = EFFECT_NONE;
+ // LordHavoc: if the entity has no effects, don't check each
+ if (e->render.effects & (EF_BRIGHTFIELD | EF_FLAME | EF_STARDUST | EF_FLAG1QW | EF_FLAG2QW))
+ {
+ if (e->render.effects & EF_BRIGHTFIELD)