made darkplaces compile successfully with g++ to test for errors C doesn't care about...
[xonotic/darkplaces.git] / fractalnoise.c
index ad9d91e..eabe7ea 100644 (file)
@@ -1,7 +1,7 @@
 
 #include "quakedef.h"
 
-void fractalnoise(byte *noise, int size, int startgrid)
+void fractalnoise(qbyte *noise, int size, int startgrid)
 {
        int x, y, g, g2, amplitude, min, max, size1 = size - 1, sizepower, gridpower;
        int *noisebuf;
@@ -9,16 +9,22 @@ void fractalnoise(byte *noise, int size, int startgrid)
 
        for (sizepower = 0;(1 << sizepower) < size;sizepower++);
        if (size != (1 << sizepower))
-               Sys_Error("fractalnoise: size must be power of 2\n");
+       {
+               Con_Printf("fractalnoise: size must be power of 2\n");
+               return;
+       }
 
        for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
        if (startgrid != (1 << gridpower))
-               Sys_Error("fractalnoise: grid must be power of 2\n");
+       {
+               Con_Printf("fractalnoise: grid must be power of 2\n");
+               return;
+       }
 
        startgrid = bound(0, startgrid, size);
 
        amplitude = 0xFFFF; // this gets halved before use
-       noisebuf = Mem_Alloc(tempmempool, size*size*sizeof(int));
+       noisebuf = (int *)Mem_Alloc(tempmempool, size*size*sizeof(int));
        memset(noisebuf, 0, size*size*sizeof(int));
 
        for (g2 = startgrid;g2;g2 >>= 1)
@@ -32,7 +38,7 @@ void fractalnoise(byte *noise, int size, int startgrid)
                g = g2 >> 1;
                if (g)
                {
-                       // subdivide, diamond-square algorythm (really this has little to do with squares)
+                       // subdivide, diamond-square algorithm (really this has little to do with squares)
                        // diamond
                        for (y = 0;y < size;y += g2)
                                for (x = 0;x < size;x += g2)
@@ -59,24 +65,30 @@ void fractalnoise(byte *noise, int size, int startgrid)
        // normalize noise and copy to output
        for (y = 0;y < size;y++)
                for (x = 0;x < size;x++)
-                       *noise++ = (byte) (((n(x,y) - min) * 256) / max);
+                       *noise++ = (qbyte) (((n(x,y) - min) * 256) / max);
        Mem_Free(noisebuf);
 #undef n
 }
 
 // unnormalized, used for explosions mainly, does not allocate/free memory (hence the name quick)
-void fractalnoisequick(byte *noise, int size, int startgrid)
+void fractalnoisequick(qbyte *noise, int size, int startgrid)
 {
        int x, y, g, g2, amplitude, size1 = size - 1, sizepower, gridpower;
 #define n(x,y) noise[((y)&size1)*size+((x)&size1)]
 
        for (sizepower = 0;(1 << sizepower) < size;sizepower++);
        if (size != (1 << sizepower))
-               Sys_Error("fractalnoise: size must be power of 2\n");
+       {
+               Con_Printf("fractalnoise: size must be power of 2\n");
+               return;
+       }
 
        for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
        if (startgrid != (1 << gridpower))
-               Sys_Error("fractalnoise: grid must be power of 2\n");
+       {
+               Con_Printf("fractalnoise: grid must be power of 2\n");
+               return;
+       }
 
        startgrid = bound(0, startgrid, size);
 
@@ -94,19 +106,20 @@ void fractalnoisequick(byte *noise, int size, int startgrid)
                g = g2 >> 1;
                if (g)
                {
-                       // subdivide, diamond-square algorythm (really this has little to do with squares)
+                       // subdivide, diamond-square algorithm (really this has little to do with squares)
                        // diamond
                        for (y = 0;y < size;y += g2)
                                for (x = 0;x < size;x += g2)
-                                       n(x+g,y+g) = (byte) (((int) n(x,y) + (int) n(x+g2,y) + (int) n(x,y+g2) + (int) n(x+g2,y+g2)) >> 2);
+                                       n(x+g,y+g) = (qbyte) (((int) n(x,y) + (int) n(x+g2,y) + (int) n(x,y+g2) + (int) n(x+g2,y+g2)) >> 2);
                        // square
                        for (y = 0;y < size;y += g2)
                                for (x = 0;x < size;x += g2)
                                {
-                                       n(x+g,y) = (byte) (((int) n(x,y) + (int) n(x+g2,y) + (int) n(x+g,y-g) + (int) n(x+g,y+g)) >> 2);
-                                       n(x,y+g) = (byte) (((int) n(x,y) + (int) n(x,y+g2) + (int) n(x-g,y+g) + (int) n(x+g,y+g)) >> 2);
+                                       n(x+g,y) = (qbyte) (((int) n(x,y) + (int) n(x+g2,y) + (int) n(x+g,y-g) + (int) n(x+g,y+g)) >> 2);
+                                       n(x,y+g) = (qbyte) (((int) n(x,y) + (int) n(x,y+g2) + (int) n(x-g,y+g) + (int) n(x+g,y+g)) >> 2);
                                }
                }
        }
 #undef n
 }
+