39 151, 160, 137, 91, 90, 15,
40 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23,
41 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
42 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166,
43 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244,
44 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196,
45 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123,
46 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42,
47 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
48 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228,
49 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107,
50 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254,
51 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,
58 {0, 1, 2, 3}, {0, 1, 3, 2}, {0, 0, 0, 0}, {0, 2, 3, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {1, 2, 3, 0},
59 {0, 2, 1, 3}, {0, 0, 0, 0}, {0, 3, 1, 2}, {0, 3, 2, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {1, 3, 2, 0},
60 {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},
61 {1, 2, 0, 3}, {0, 0, 0, 0}, {1, 3, 0, 2}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {2, 3, 0, 1}, {2, 3, 1, 0},
62 {1, 0, 2, 3}, {1, 0, 3, 2}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {2, 0, 3, 1}, {0, 0, 0, 0}, {2, 1, 3, 0},
63 {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},
64 {2, 0, 1, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {3, 0, 1, 2}, {3, 0, 2, 1}, {0, 0, 0, 0}, {3, 1, 2, 0},
65 {2, 1, 0, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {3, 1, 0, 2}, {0, 0, 0, 0}, {3, 2, 0, 1}, {3, 2, 1, 0},
194 const uint64_t F3 = 1431655764;
195 const uint64_t G3 = 715827884;
198 uint32_t s = (((uint64_t)
x + (uint64_t)
y + (uint64_t)
z) * F3) >> 32;
199 uint32_t i = ((
x>>1) + (s>>1)) >> 11;
200 uint32_t j = ((
y>>1) + (s>>1)) >> 11;
201 uint32_t k = ((
z>>1) + (s>>1)) >> 11;
203 uint64_t t = ((uint64_t)i + (uint64_t)j + (uint64_t)k) * G3;
204 uint64_t X0 = ((uint64_t)i<<32) - t;
205 uint64_t Y0 = ((uint64_t)j<<32) - t;
206 uint64_t Z0 = ((uint64_t)k<<32) - t;
207 int32_t x0 = ((uint64_t)
x<<2) - (X0>>18);
208 int32_t y0 = ((uint64_t)
y<<2) - (Y0>>18);
209 int32_t z0 = ((uint64_t)
z<<2) - (Z0>>18);
225 }
else if (x0 >= z0) {
248 }
else if (x0 < z0) {
270 int32_t x1 = x0 - ((int32_t)i1<<14) + ((int32_t)(G3>>18));
271 int32_t y1 = y0 - ((int32_t)j1<<14) + ((int32_t)(G3>>18));
272 int32_t z1 = z0 - ((int32_t)k1<<14) + ((int32_t)(G3>>18));
273 int32_t x2 = x0 - ((int32_t)i2<<14) + ((int32_t)(2*G3)>>18);
274 int32_t y2 = y0 - ((int32_t)j2<<14) + ((int32_t)(2*G3)>>18);
275 int32_t z2 = z0 - ((int32_t)k2<<14) + ((int32_t)(2*G3)>>18);
276 int32_t x3 = x0 - (1 << 14) + (int32_t)((3*G3)>>18);
277 int32_t y3 = y0 - (1 << 14) + (int32_t)((3*G3)>>18);
278 int32_t z3 = z0 - (1 << 14) + (int32_t)((3*G3)>>18);
281 int32_t n0 = 0, n1 = 0, n2 = 0, n3 = 0;
282 const int32_t fix0_6 = 161061274;
284 int32_t t0 = (fix0_6 - x0*x0 - y0*y0 - z0*z0) >> 12;
286 t0 = (t0 * t0) >> 16;
287 t0 = (t0 * t0) >> 16;
289 n0 = t0 *
grad(
P((i+(uint32_t)
P((j+(uint32_t)
P(k&0xff))&0xff))&0xff), x0, y0, z0);
292 int32_t t1 = (fix0_6 - x1*x1 - y1*y1 - z1*z1) >> 12;
294 t1 = (t1 * t1) >> 16;
295 t1 = (t1 * t1) >> 16;
297 n1 = t1 *
grad(
P((i+i1+(uint32_t)
P((j+j1+(uint32_t)
P((k+k1)&0xff))&0xff))&0xff), x1, y1, z1);
300 int32_t t2 = (fix0_6 - x2*x2 - y2*y2 - z2*z2) >> 12;
302 t2 = (t2 * t2) >> 16;
303 t2 = (t2 * t2) >> 16;
305 n2 = t2 *
grad(
P((i+i2+(uint32_t)
P((j+j2+(uint32_t)
P((k+k2)&0xff))&0xff))&0xff), x2, y2, z2);
308 int32_t t3 = (fix0_6 - x3*x3 - y3*y3 - z3*z3) >> 12;
310 t3 = (t3 * t3) >> 16;
311 t3 = (t3 * t3) >> 16;
313 n3 = t3 *
grad(
P((i+1+(uint32_t)
P((j+1+(uint32_t)
P((k+1)&0xff))&0xff))&0xff), x3, y3, z3);
318 int32_t n = n0 + n1 + n2 + n3;
319 n = ((n >> 8) * 16748) >> 16 ;
320 return (uint16_t)n + 0x8000;
324uint16_t
snoise16(uint32_t
x, uint32_t
y, uint32_t
z, uint32_t w) {
326 const uint64_t F4 = 331804471;
327 const uint64_t G4 = 593549882;
331 uint32_t s = (((uint64_t)
x + (uint64_t)
y + (uint64_t)
z + (uint64_t)w) * F4) >> 32;
332 uint32_t i = ((
x>>2) + s) >> 10;
333 uint32_t j = ((
y>>2) + s) >> 10;
334 uint32_t k = ((
z>>2) + s) >> 10;
335 uint32_t l = ((w>>2) + s) >> 10;
337 uint64_t t = (((uint64_t)i + (uint64_t)j + (uint64_t)k + (uint64_t)l) * G4) >> 18;
338 uint64_t X0 = ((uint64_t)i<<14) - t;
339 uint64_t Y0 = ((uint64_t)j<<14) - t;
340 uint64_t Z0 = ((uint64_t)k<<14) - t;
341 uint64_t
W0 = ((uint64_t)l<<14) - t;
342 int32_t x0 = ((uint64_t)
x<<2) - X0;
343 int32_t y0 = ((uint64_t)
y<<2) - Y0;
344 int32_t z0 = ((uint64_t)
z<<2) - Z0;
345 int32_t w0 = ((uint64_t)w<<2) -
W0;
381 uint32_t i1 =
simplex[c][0] >= 3 ? 1 : 0;
382 uint32_t j1 =
simplex[c][1] >= 3 ? 1 : 0;
383 uint32_t k1 =
simplex[c][2] >= 3 ? 1 : 0;
384 uint32_t l1 =
simplex[c][3] >= 3 ? 1 : 0;
387 uint32_t i2 =
simplex[c][0] >= 2 ? 1 : 0;
388 uint32_t j2 =
simplex[c][1] >= 2 ? 1 : 0;
389 uint32_t k2 =
simplex[c][2] >= 2 ? 1 : 0;
390 uint32_t l2 =
simplex[c][3] >= 2 ? 1 : 0;
393 uint32_t i3 =
simplex[c][0] >= 1 ? 1 : 0;
394 uint32_t j3 =
simplex[c][1] >= 1 ? 1 : 0;
395 uint32_t k3 =
simplex[c][2] >= 1 ? 1 : 0;
396 uint32_t l3 =
simplex[c][3] >= 1 ? 1 : 0;
399 int32_t x1 = x0 - ((int32_t)i1<<14) + (int32_t)(G4>>18);
400 int32_t y1 = y0 - ((int32_t)j1<<14) + (int32_t)(G4>>18);
401 int32_t z1 = z0 - ((int32_t)k1<<14) + (int32_t)(G4>>18);
402 int32_t w1 = w0 - ((int32_t)l1<<14) + (int32_t)(G4>>18);
403 int32_t x2 = x0 - ((int32_t)i2<<14) + (int32_t)(2*G4>>18);
404 int32_t y2 = y0 - ((int32_t)j2<<14) + (int32_t)(2*G4>>18);
405 int32_t z2 = z0 - ((int32_t)k2<<14) + (int32_t)(2*G4>>18);
406 int32_t w2 = w0 - ((int32_t)l2<<14) + (int32_t)(2*G4>>18);
407 int32_t x3 = x0 - ((int32_t)i3<<14) + (int32_t)(3*G4>>18);
408 int32_t y3 = y0 - ((int32_t)j3<<14) + (int32_t)(3*G4>>18);
409 int32_t z3 = z0 - ((int32_t)k3<<14) + (int32_t)(3*G4>>18);
410 int32_t w3 = w0 - ((int32_t)l3<<14) + (int32_t)(3*G4>>18);
411 int32_t x4 = x0 - (1 << 14) + (int32_t)(4*G4>>18);
412 int32_t y4 = y0 - (1 << 14) + (int32_t)(4*G4>>18);
413 int32_t z4 = z0 - (1 << 14) + (int32_t)(4*G4>>18);
414 int32_t w4 = w0 - (1 << 14) + (int32_t)(4*G4>>18);
416 int32_t n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0;
417 const int32_t fix0_6 = 161061274;
420 int32_t t0 = (fix0_6 - x0*x0 - y0*y0 - z0*z0 - w0*w0) >> 12;
422 t0 = (t0 * t0) >> 16;
423 t0 = (t0 * t0) >> 16;
425 n0 = t0 *
grad(
P((i+(uint32_t)(
P((j+(uint32_t)(
P((k+(uint32_t)(
P(l&0xff)))&0xff)))&0xff)))&0xff), x0, y0, z0, w0);
428 int32_t t1 = (fix0_6 - x1*x1 - y1*y1 - z1*z1 - w1*w1) >> 12;
430 t1 = (t1 * t1) >> 16;
431 t1 = (t1 * t1) >> 16;
433 n1 = t1 *
grad(
P((i+i1+(uint32_t)(
P((j+j1+(uint32_t)(
P((k+k1+(uint32_t)(
P((l+l1)&0xff)))&0xff)))&0xff)))&0xff), x1, y1, z1, w1);
436 int32_t t2 = (fix0_6 - x2*x2 - y2*y2 - z2*z2 - w2*w2) >> 12;
438 t2 = (t2 * t2) >> 16;
439 t2 = (t2 * t2) >> 16;
441 n2 = t2 *
grad(
P((i+i2+(uint32_t)(
P((j+j2+(uint32_t)(
P((k+k2+(uint32_t)(
P((l+l2)&0xff)))&0xff)))&0xff)))&0xff), x2, y2, z2, w2);
444 int32_t t3 = (fix0_6 - x3*x3 - y3*y3 - z3*z3 - w3*w3) >> 12;
446 t3 = (t3 * t3) >> 16;
447 t3 = (t3 * t3) >> 16;
449 n3 = t3 *
grad(
P((i+i3+(uint32_t)(
P((j+j3+(uint32_t)(
P((k+k3+(uint32_t)(
P((l+l3)&0xff)))&0xff)))&0xff)))&0xff), x3, y3, z3, w3);
452 int32_t t4 = (fix0_6 - x4*x4 - y4*y4 - z4*z4 - w4*w4) >> 12;
454 t4 = (t4 * t4) >> 16;
455 t4 = (t4 * t4) >> 16;
457 n4 = t4 *
grad(
P((i+1+(uint32_t)(
P((j+1+(uint32_t)(
P((k+1+(uint32_t)(
P((l+1)&0xff)))&0xff)))&0xff)))&0xff), x4, y4, z4, w4);
460 int32_t n = n0 + n1 + n2 + n3 + n4;
461 n = ((n >> 8) * 13832) >> 16;
462 return uint16_t(n) + 0x8000;