X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=fractalnoise.c;h=c161f12b7c4eaf87387272beea954ee3ff2233e9;hb=ba5b126f297cae174828ed124f7c5ad9a69aba4e;hp=ad9d91ed4a0ab1b0a4bf7a396483c3047f8bc987;hpb=ff5947f97081e10c4ce112d4d51c2d1fa14ebba8;p=xonotic%2Fdarkplaces.git diff --git a/fractalnoise.c b/fractalnoise.c index ad9d91ed..c161f12b 100644 --- a/fractalnoise.c +++ b/fractalnoise.c @@ -1,7 +1,7 @@ #include "quakedef.h" -void fractalnoise(byte *noise, int size, int startgrid) +void fractalnoise(unsigned char *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++ = (unsigned char) (((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(unsigned char *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) = (unsigned char) (((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) = (unsigned char) (((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) = (unsigned char) (((int) n(x,y) + (int) n(x,y+g2) + (int) n(x-g,y+g) + (int) n(x+g,y+g)) >> 2); } } } #undef n } +