- md2frame_t *frame1, *frame2, *frame3, *frame4;
- trivertx_t *frame1verts, *frame2verts, *frame3verts, *frame4verts;
- model_t *model;
- model = currentrenderentity->model;
-
- if (model->skinscenes[currentrenderentity->skinnum].framecount > 1)
- *skinframe = &model->skinframes[model->skinscenes[currentrenderentity->skinnum].firstframe + (int) (cl.time * 10) % model->skinscenes[currentrenderentity->skinnum].framecount];
- else
- *skinframe = &model->skinframes[model->skinscenes[currentrenderentity->skinnum].firstframe];
-
- frame1 = &model->mdlmd2data_frames[currentrenderentity->frameblend[0].frame];
- frame2 = &model->mdlmd2data_frames[currentrenderentity->frameblend[1].frame];
- frame3 = &model->mdlmd2data_frames[currentrenderentity->frameblend[2].frame];
- frame4 = &model->mdlmd2data_frames[currentrenderentity->frameblend[3].frame];
- frame1verts = &model->mdlmd2data_pose[currentrenderentity->frameblend[0].frame * model->numverts];
- frame2verts = &model->mdlmd2data_pose[currentrenderentity->frameblend[1].frame * model->numverts];
- frame3verts = &model->mdlmd2data_pose[currentrenderentity->frameblend[2].frame * model->numverts];
- frame4verts = &model->mdlmd2data_pose[currentrenderentity->frameblend[3].frame * model->numverts];
- R_AliasLerpVerts(model->numverts,
- currentrenderentity->frameblend[0].lerp, frame1verts, frame1->scale, frame1->translate,
- currentrenderentity->frameblend[1].lerp, frame2verts, frame2->scale, frame2->translate,
- currentrenderentity->frameblend[2].lerp, frame3verts, frame3->scale, frame3->translate,
- currentrenderentity->frameblend[3].lerp, frame4verts, frame4->scale, frame4->translate);
- R_AliasTransformVerts(model->numverts);
-
- R_LightModel(model->numverts);
+ int meshnum;
+ aliasmesh_t *mesh;
+ aliasskin_t *skin;
+ float projectdistance;
+ if (ent->effects & EF_ADDITIVE || ent->alpha < 1)
+ return;
+ projectdistance = lightradius + ent->model->radius - sqrt(DotProduct(relativelightorigin, relativelightorigin));
+ if (projectdistance > 0.1)
+ {
+ R_Mesh_Matrix(&ent->matrix);
+ for (meshnum = 0, mesh = ent->model->alias.aliasdata_meshes;meshnum < ent->model->alias.aliasnum_meshes;meshnum++, mesh++)
+ {
+ skin = R_FetchAliasSkin(ent, mesh);
+ if (skin->flags & ALIASSKIN_TRANSPARENT)
+ continue;
+ R_Model_Alias_GetMesh_Array3f(ent, mesh, MODELARRAY_VERTEX, varray_vertex3f);
+ R_Shadow_Volume(mesh->num_vertices, mesh->num_triangles, varray_vertex3f, mesh->data_element3i, mesh->data_neighbor3i, relativelightorigin, lightradius, projectdistance);
+ }
+ }