the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "FastNoise.h"
3
4FastNoise::FastNoise(int levels)
5{
6 Random random;
7 init(&random, levels);
8}
9
10FastNoise::FastNoise(Random *random, int levels)
11{
12 init(random,levels);
13}
14
15void FastNoise::init(Random *random, int levels)
16{
17 this->levels = levels;
18 noiseMaps = new byte *[levels];
19 for (int i = 0; i < levels; i++)
20 {
21 noiseMaps[i] = new byte[0x100000];
22 random->nextBytes(noiseMaps[i],0x100000);
23 }
24}
25
26FastNoise::~FastNoise()
27{
28 for( int i = 0; i < levels; i++ )
29 {
30 delete [] noiseMaps[i];
31 }
32 delete [] noiseMaps;
33}
34
35doubleArray FastNoise::getRegion(doubleArray buffer, double x, double y, double z, int xSize, int ySize, int zSize, double xScale, double yScale, double zScale)
36{
37 if (buffer.data == NULL) buffer = doubleArray(xSize * ySize * zSize);
38 else for (unsigned int i = 0; i < buffer.length; i++)
39 buffer[i] = 0;
40
41
42 double pow = 1;
43 int AA = 487211441;
44 int BB = 21771;
45 for (int i = 0; i < levels; i++)
46 {
47 byte *map = noiseMaps[i];
48 int pp = 0;
49
50 for (int zp = 0; zp < zSize; zp++)
51 {
52 double zz = (z + zp) * zScale;
53 int Z = (int) zz;
54 if (zz < Z) Z -= 1;
55 int zl = (int) ((zz - Z) * 65536);
56
57 for (int yp = 0; yp < ySize; yp++)
58 {
59 double yy = (y + yp) * yScale;
60 int Y = (int) yy;
61 if (yy < Y) Y -= 1;
62 int yl = (int) ((yy - Y) * 65536);
63
64 for (int xp = 0; xp < xSize; xp++)
65 {
66 double xx = (x + xp) * xScale;
67 int X = (int) xx;
68 if (xx < X) X -= 1;
69 int xl = (int) ((xx - X) * 65536);
70
71 int X0 = (X + 0) * AA;
72 int X1 = (X + 1) * AA;
73
74 int Y0 = (Y + 0);
75 int Y1 = (Y + 1);
76 int Z0 = (Z + 0);
77 int Z1 = (Z + 1);
78
79 int X0Y0 = (X0 + Y0) * BB;
80 int X1Y0 = (X1 + Y0) * BB;
81 int X0Y1 = (X0 + Y1) * BB;
82 int X1Y1 = (X1 + Y1) * BB;
83
84 int a = map[(X0Y0 + Z0) & 0xfffff];
85 int b = map[(X1Y0 + Z0) & 0xfffff];
86 int c = map[(X0Y1 + Z0) & 0xfffff];
87 int d = map[(X1Y1 + Z0) & 0xfffff];
88 int e = map[(X0Y0 + Z1) & 0xfffff];
89 int f = map[(X1Y0 + Z1) & 0xfffff];
90 int g = map[(X0Y1 + Z1) & 0xfffff];
91 int h = map[(X1Y1 + Z1) & 0xfffff];
92
93 int ab = a + (((b - a) * xl) >> 16);
94 int cd = c + (((d - c) * xl) >> 16);
95 int ef = e + (((f - e) * xl) >> 16);
96 int gh = g + (((h - g) * xl) >> 16);
97
98 int abcd = ab + (((cd - ab) * yl) >> 16);
99 int efgh = ef + (((gh - ef) * yl) >> 16);
100
101 int res = abcd + (((efgh - abcd) * zl) >> 16);
102
103 buffer[pp++] += res*pow;
104 }
105 }
106 }
107 pow /= 2;
108 xScale*=2;
109 yScale*=2;
110 zScale*=2;
111 }
112
113 return buffer;
114}