]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_explosion.c
made various things take const pointers (optimizer hint), commented out and/or remove...
[xonotic/darkplaces.git] / r_explosion.c
index f46fe6482b4d9b6af5b2b72e81246489cf4d2d94..56ad69acee4da5a719d6559db6963ab1d73173f8 100644 (file)
@@ -24,10 +24,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #define EXPLOSIONGRID 8
 #define EXPLOSIONVERTS ((EXPLOSIONGRID+1)*(EXPLOSIONGRID+1))
 #define EXPLOSIONTRIS (EXPLOSIONGRID*EXPLOSIONGRID*2)
-#define EXPLOSIONSTARTVELOCITY (384.0f)
+#define EXPLOSIONSTARTVELOCITY (256.0f)
+//#define EXPLOSIONSTARTVELOCITY (384.0f)
 //#define EXPLOSIONRANDOMVELOCITY (32.0f)
 #define EXPLOSIONFADESTART (1.5f)
-#define EXPLOSIONFADERATE (4.5f)
+//#define EXPLOSIONFADERATE (4.5f)
+#define EXPLOSIONFADERATE (3.0f)
 /*
 #define MAX_EXPLOSIONGAS (MAX_EXPLOSIONS * EXPLOSIONGAS)
 #define EXPLOSIONGAS 8
@@ -170,7 +172,7 @@ void R_NewExplosion(vec3_t org)
        int i, j;
        float dist;
        qbyte noise[EXPLOSIONGRID*EXPLOSIONGRID];
-       fractalnoisequick(noise, EXPLOSIONGRID, 4);
+       fractalnoisequick(noise, EXPLOSIONGRID, 4); // adjust noise grid size according to explosion
        for (i = 0;i < MAX_EXPLOSIONS;i++)
        {
                if (explosion[i].alpha <= 0.01f)
@@ -219,7 +221,7 @@ void R_NewExplosion(vec3_t org)
 void R_DrawExplosion(explosion_t *e)
 {
        int i;
-       float c[EXPLOSIONVERTS][4], diff[3], /*fog, */ifog, alpha, dist, centerdist, size, scale;
+       float c[EXPLOSIONVERTS][4], diff[3], centerdir[3], /*fog, */ifog, alpha, dist/*, centerdist, size, scale*/;
        rmeshinfo_t m;
        memset(&m, 0, sizeof(m));
        m.transparent = true;
@@ -231,39 +233,47 @@ void R_DrawExplosion(explosion_t *e)
        m.vertex = &e->vert[0][0];
        m.vertexstep = sizeof(float[3]);
        alpha = e->alpha;
-       if (alpha > 1)
-               alpha = 1;
+       //if (alpha > 1)
+       //      alpha = 1;
        m.cr = 1;
        m.cg = 1;
        m.cb = 1;
-       m.ca = alpha;
+       m.ca = 1; //alpha;
        m.color = &c[0][0];
        m.colorstep = sizeof(float[4]);
-       centerdist = DotProduct(e->origin, vpn);
+       VectorSubtract(r_origin, e->origin, centerdir);
+       VectorNormalizeFast(centerdir);
+       /*
+       centerdist = DotProduct(e->origin, centerdir);
        size = 0;
        for (i = 0;i < EXPLOSIONVERTS;i++)
        {
-               dist = DotProduct(e->vert[i], vpn) - centerdist;
-               if (size > dist)
+               dist = DotProduct(e->vert[i], centerdir) - centerdist;
+               if (size < dist)
                        size = dist;
        }
-       scale = 1.0f / size;
+       scale = 4.0f / size;
+       */
        if (fogenabled)
        {
                for (i = 0;i < EXPLOSIONVERTS;i++)
                {
-                       dist = (DotProduct(e->vert[i], vpn) - centerdist) * scale;
+                       //dist = (DotProduct(e->vert[i], centerdir) - centerdist) * scale - 2.0f;
+                       VectorSubtract(e->vert[i], e->origin, diff);
+                       VectorNormalizeFast(diff);
+                       dist = (DotProduct(diff, centerdir) * 6.0f - 4.0f) * alpha;
                        if (dist > 0)
                        {
-                               // use inverse fog alpha as color
+                               // use inverse fog alpha
                                VectorSubtract(e->vert[i], r_origin, diff);
                                ifog = 1 - exp(fogdensity/DotProduct(diff,diff));
-                               if (ifog < 0)
-                                       ifog = 0;
-                               c[i][0] = c[i][1] = c[i][2] = dist * alpha * ifog;
+                               dist = dist * ifog;
+                               if (dist < 0)
+                                       dist = 0;
                        }
                        else
-                               c[i][0] = c[i][1] = c[i][2] = 0;
+                               dist = 0;
+                       c[i][0] = c[i][1] = c[i][2] = dist;
                        c[i][3] = 1;
                }
        }
@@ -271,11 +281,13 @@ void R_DrawExplosion(explosion_t *e)
        {
                for (i = 0;i < EXPLOSIONVERTS;i++)
                {
-                       dist = (DotProduct(e->vert[i], vpn) - centerdist) * scale;
-                       if (dist > 0)
-                               c[i][0] = c[i][1] = c[i][2] = dist * alpha;
-                       else
-                               c[i][0] = c[i][1] = c[i][2] = 0;
+                       //dist = (DotProduct(e->vert[i], centerdir) - centerdist) * scale - 2.0f;
+                       VectorSubtract(e->vert[i], e->origin, diff);
+                       VectorNormalizeFast(diff);
+                       dist = (DotProduct(diff, centerdir) * 6.0f - 4.0f) * alpha;
+                       if (dist < 0)
+                               dist = 0;
+                       c[i][0] = c[i][1] = c[i][2] = dist;
                        c[i][3] = 1;
                }
        }