76 int x,
y,
g, g2, amplitude, size1 =
size - 1, sizepower, gridpower;
77#define n(x,y) noise[((y)&size1)*size+((x)&size1)]
79 for (sizepower = 0;(1 << sizepower) <
size;sizepower++);
80 if (
size != (1 << sizepower))
82 Con_Printf(
"fractalnoise: size must be power of 2\n");
86 for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
87 if (startgrid != (1 << gridpower))
89 Con_Printf(
"fractalnoise: grid must be power of 2\n");
98 for (g2 = startgrid;g2;g2 >>= 1)
104 n(
x,
y) += (rand()&litude);
113 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);
118 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);
119 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);
154 noisetable[
i] = (rand() / (
double)RAND_MAX) * 2 - 1;
164 for (
i = 0;
i < 4;
i++)
165 frac[
i][0] = 1 - frac[
i][1];
166 for (
i = 0;
i < 4;
i++)
174 return frac[3][0] * (frac[2][0] *
v[0] + frac[2][1] *
v[1]) + frac[3][1] * (frac[2][0] *
v[2] + frac[2][1] *
v[3]);
193 v[16] = frac[0][0] *
v[ 0] + frac[0][1] *
v[ 1];
194 v[17] = frac[0][0] *
v[ 2] + frac[0][1] *
v[ 3];
195 v[18] = frac[0][0] *
v[ 4] + frac[0][1] *
v[ 5];
196 v[19] = frac[0][0] *
v[ 6] + frac[0][1] *
v[ 7];
197 v[20] = frac[0][0] *
v[ 8] + frac[0][1] *
v[ 9];
198 v[21] = frac[0][0] *
v[10] + frac[0][1] *
v[11];
199 v[22] = frac[0][0] *
v[12] + frac[0][1] *
v[13];
200 v[23] = frac[0][0] *
v[14] + frac[0][1] *
v[15];
201 v[24] = frac[1][0] *
v[16] + frac[1][1] *
v[17];
202 v[25] = frac[1][0] *
v[18] + frac[1][1] *
v[19];
203 v[26] = frac[1][0] *
v[20] + frac[1][1] *
v[21];
204 v[27] = frac[1][0] *
v[22] + frac[1][1] *
v[23];
205 v[28] = frac[2][0] *
v[24] + frac[2][1] *
v[25];
206 v[29] = frac[2][0] *
v[26] + frac[2][1] *
v[27];
207 return frac[3][0] *
v[28] + frac[3][1] *
v[29];
210 for (l = 0;l < 2;l++)
212 for (k = 0;k < 2;k++)
214 for (j = 0;j < 2;j++)
216 for (
i = 0;
i < 2;
i++)
218 v[l][k][j][2] = frac[0][0] *
v[l][k][j][0] + frac[0][1] *
v[l][k][j][1];
220 v[l][k][2][2] = frac[1][0] *
v[l][k][0][2] + frac[1][1] *
v[l][k][1][2];
222 v[l][2][2][2] = frac[2][0] *
v[l][0][2][2] + frac[2][1] *
v[l][1][2][2];
224 v[2][2][2][2] = frac[3][0] *
v[0][2][2][2] + frac[3][1] *
v[1][2][2][2];