]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rsurf.c
Serious-Sam style crosshair (an actual sprite in the world, with slight variation...
[xonotic/darkplaces.git] / gl_rsurf.c
index 7ae39a86bb17cf416b8751bc5aa5066a8a224619..16ab5c58575f73ca4f16842953c9a4f768234912 100644 (file)
@@ -99,9 +99,17 @@ static int R_AddDynamicLights (msurface_t *surf)
                if (dist2 >= maxdist)
                        continue;
 
-               impact[0] = local[0] - surf->plane->normal[0] * dist;
-               impact[1] = local[1] - surf->plane->normal[1] * dist;
-               impact[2] = local[2] - surf->plane->normal[2] * dist;
+               if (surf->plane->type < 3)
+               {
+                       VectorCopy(local, impact);
+                       impact[surf->plane->type] -= dist;
+               }
+               else
+               {
+                       impact[0] = local[0] - surf->plane->normal[0] * dist;
+                       impact[1] = local[1] - surf->plane->normal[1] * dist;
+                       impact[2] = local[2] - surf->plane->normal[2] * dist;
+               }
 
                impacts = DotProduct (impact, surf->texinfo->vecs[0]) + surf->texinfo->vecs[0][3] - surf->texturemins[0];
                impactt = DotProduct (impact, surf->texinfo->vecs[1]) + surf->texinfo->vecs[1][3] - surf->texturemins[1];
@@ -203,9 +211,17 @@ loc0:
        {
                maxdist3 = maxdist - dist2;
 
-               impact[0] = origin[0] - node->plane->normal[0] * ndist;
-               impact[1] = origin[1] - node->plane->normal[1] * ndist;
-               impact[2] = origin[2] - node->plane->normal[2] * ndist;
+               if (node->plane->type < 3)
+               {
+                       VectorCopy(origin, impact);
+                       impact[node->plane->type] -= ndist;
+               }
+               else
+               {
+                       impact[0] = origin[0] - node->plane->normal[0] * ndist;
+                       impact[1] = origin[1] - node->plane->normal[1] * ndist;
+                       impact[2] = origin[2] - node->plane->normal[2] * ndist;
+               }
 
                for (surf = model->surfaces + node->firstsurface, endsurf = surf + node->numsurfaces;surf < endsurf;surf++)
                {
@@ -362,7 +378,7 @@ static void R_BuildLightMap (msurface_t *surf, int dlightchanged)
        lightmap = surf->samples;
 
 // set to full bright if no light data
-       if ((currentrenderentity->effects & EF_FULLBRIGHT) || !cl.worldmodel->lightdata)
+       if ((currentrenderentity->effects & EF_FULLBRIGHT) || !currentrenderentity->model->lightdata)
        {
                bl = blocklights;
                for (i = 0;i < size3;i++)
@@ -371,7 +387,7 @@ static void R_BuildLightMap (msurface_t *surf, int dlightchanged)
        else
        {
 // clear to no light
-               j = r_ambient.value * 512.0f; // would be 256.0f logically, but using 512.0f to match winquake style
+               j = r_ambient.value * 512.0f; // would be 128.0f logically, but using 512.0f to match winquake style
                if (j)
                {
                        bl = blocklights;
@@ -1915,7 +1931,7 @@ Cshader_t *Cshaders[5] =
 
 void R_PrepareSurfaces(void)
 {
-       int i;
+       int i, entframe, texframe, framecount;
        texture_t *t;
        model_t *model;
        msurface_t *surf;
@@ -1924,6 +1940,8 @@ void R_PrepareSurfaces(void)
                Cshaders[i]->chain = NULL;
 
        model = currentrenderentity->model;
+       entframe = currentrenderentity->frame;
+       texframe = (int)(cl.time * 5.0f);
 
        for (i = 0;i < model->nummodelsurfaces;i++)
        {
@@ -1935,11 +1953,27 @@ void R_PrepareSurfaces(void)
                                surf->insertframe = r_framecount;
                                c_faces++;
                                t = surf->texinfo->texture;
-                               if (t->alternate_anims != NULL && currentrenderentity->frame)
-                                       t = t->alternate_anims;
-                               if (t->anim_total >= 2)
-                                       t = t->anim_frames[(int)(cl.time * 5.0f) % t->anim_total];
-                               surf->currenttexture = t;
+                               if (t->animated)
+                               {
+                                       if (entframe)
+                                       {
+                                               framecount = t->anim_total[1];
+                                               if (framecount >= 2)
+                                                       surf->currenttexture = t->anim_frames[1][texframe % framecount];
+                                               else
+                                                       surf->currenttexture = t->anim_frames[1][0];
+                                       }
+                                       else
+                                       {
+                                               framecount = t->anim_total[0];
+                                               if (framecount >= 2)
+                                                       surf->currenttexture = t->anim_frames[0][texframe % framecount];
+                                               else
+                                                       surf->currenttexture = t->anim_frames[0][0];
+                                       }
+                               }
+                               else
+                                       surf->currenttexture = t;
                        }
 
                        surf->chain = surf->shader->chain;