35 static const std::array<Vector3d, 32> directions =
38 { -1, 0, 0 }, { 0, 0, -1 },
39 { -1, 0, 1 }, { -1, 0, -1 },
40 { 1, 0, 1 }, { 1, 0, -1 },
41 { 1, 0, 0 }, { 0, 0, 1 },
43 { -0.5, 0, 0 }, { 0, 0, -0.5 },
44 { -0.5, 0, 0.5 }, { -0.5, 0, -0.5 },
45 { 0.5, 0, 0.5 }, { 0.5, 0, -0.5 },
46 { 0.5, 0, 0 }, { 0, 0, 0.5 },
48 { -1, 0.5, 0 }, { 0, 0.5, -1 },
49 { -1, 0.5, 1 }, { -1, 0.5, -1 },
50 { 1, 0.5, 1 }, { 1, 0.5, -1 },
51 { 1, 0.5, 0 }, { 0, 0.5, 1 },
53 { -0.5, 0.5, 0 }, { 0, 0.5, -0.5 },
54 { -0.5, 0.5, 0.5 }, { -0.5, 0.5, -0.5 },
55 { 0.5, 0.5, 0.5 }, { 0.5, 0.5, -0.5 },
56 { 0.5, 0.5, 0 }, { 0, 0.5, 0.5 },
60 size_t index =
static_cast<size_t>(a_Noise.
IntNoise3DInt(a_BlockPos.
x, a_BlockPos.
y + a_Seq, a_BlockPos.
z)) % directions.size();
61 return directions[index];
75 {-1, -2}, {0, -2}, {1, -2},
76 {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1},
77 {-2, 0}, {-1, 0}, {1, 0}, {2, 0},
78 {-2, 1}, {-1, 1}, {0, 1}, {1, 1}, {2, 1},
79 {-1, 2}, {0, 2}, {1, 2},
84 {-2, -3}, {-1, -3}, {0, -3}, {1, -3}, {2, -3},
85 {-3, -2}, {-2, -2}, {-1, -2}, {0, -2}, {1, -2}, {2, -2}, {3, -2},
86 {-3, -1}, {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1}, {3, -1},
87 {-3, 0}, {-2, 0}, {-1, 0}, {1, 0}, {2, 0}, {3, 0},
88 {-3, 1}, {-2, 1}, {-1, 1}, {0, 1}, {1, 1}, {2, 1}, {3, 1},
89 {-3, 2}, {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {3, 2},
90 {-2, 3}, {-1, 3}, {0, 3}, {1, 3}, {2, 3},
96 {-2, -4}, {-1, -4}, {0, -4}, {1, -4}, {2, -4},
97 {-3, -3}, {-2, -3}, {-1, -3}, {0, -3}, {1, -3}, {2, -3}, {3, -3},
98 {-4, -2}, {-3, -2}, {-2, -2}, {-1, -2}, {0, -2}, {1, -2}, {2, -2}, {3, -2}, {4, -2},
99 {-4, -1}, {-3, -1}, {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1}, {3, -1}, {4, -1},
100 {-4, 0}, {-3, 0}, {-2, 0}, {-1, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0},
101 {-4, 1}, {-3, 1}, {-2, 1}, {-1, 1}, {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1},
102 {-4, 2}, {-3, 2}, {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2},
103 {-3, 3}, {-2, 3}, {-1, 3}, {0, 3}, {1, 3}, {2, 3}, {3, 3},
104 {-2, 4}, {-1, 4}, {0, 4}, {1, 4}, {2, 4},
110 {-1, -2}, {0, -2}, {1, -2}, {2, -2},
111 {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1}, {3, -1},
112 {-3, 0}, {-2, 0}, {-1, 0}, {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0},
113 {-3, 1}, {-2, 1}, {-1, 1}, {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1},
114 {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {3, 2},
115 {-1, 3}, {0, 3}, {1, 3}, {2, 3},
122 {-2, -3}, {-1, -3}, {0, -3}, {1, -3}, {2, -3}, {3, -3},
123 {-3, -2}, {-2, -2}, {-1, -2}, {0, -2}, {1, -2}, {2, -2}, {3, -2}, {4, -2},
124 {-3, -1}, {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1}, {3, -1}, {4, -1},
125 {-4, 0}, {-3, 0}, {-2, 0}, {-1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0},
126 {-4, 1}, {-3, 1}, {-2, 1}, {-1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1},
127 {-3, 2}, {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2},
128 {-3, 3}, {-2, 3}, {-1, 3}, {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3},
129 {-2, 4}, {-1, 4}, {0, 4}, {1, 4}, {2, 4}, {3, 4},
136 {-2, -4}, {-1, -4}, {0, -4}, {1, -4}, {2, -4}, {3, -4},
137 {-3, -3}, {-2, -3}, {-1, -3}, {0, -3}, {1, -3}, {2, -3}, {3, -3}, {4, -3},
138 {-4, -2}, {-3, -2}, {-2, -2}, {-1, -2}, {0, -2}, {1, -2}, {2, -2}, {3, -2}, {4, -2}, {5, -2},
139 {-4, -1}, {-3, -1}, {-2, -1}, {-1, -1}, {0, -1}, {1, -1}, {2, -1}, {3, -1}, {4, -1}, {5, -1},
140 {-5, 0}, {-4, 0}, {-3, 0}, {-2, 0}, {-1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0},
141 {-5, 1}, {-4, 1}, {-3, 1}, {-2, 1}, {-1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1},
142 {-4, 2}, {-3, 2}, {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2},
143 {-4, 3}, {-3, 3}, {-2, 3}, {-1, 3}, {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3},
144 {-3, 4}, {-2, 4}, {-1, 4}, {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4},
145 {-2, 5}, {-1, 5}, {0, 5}, {1, 5}, {2, 5}, {3, 5},
180 for (
size_t i = 0; i < a_NumCoords; i++)
182 a_Blocks.push_back(
sSetBlock(a_BlockX + a_Coords[i].x, a_Height, a_BlockZ + a_Coords[i].z, a_BlockType, a_Meta));
192 for (
size_t i = 0; i <
ARRAYCOUNT(Corners); i++)
194 int x = a_BlockX + Corners[i].
x;
195 int z = a_BlockZ + Corners[i].
z;
196 if (a_Noise.
IntNoise3DInt(x + 64 * a_Seq, a_Height, z + 64 * a_Seq) <= a_Chance)
198 a_Blocks.push_back(
sSetBlock(x, a_Height, z, a_BlockType, a_Meta));
207 inline void PushSomeColumns(
int a_BlockX,
int a_Height,
int a_BlockZ,
int a_ColumnHeight,
int a_Seq,
cNoise & a_Noise,
int a_Chance,
sSetBlockVector & a_Blocks,
const sMetaCoords * a_Coords,
size_t a_NumCoords,
BLOCKTYPE a_BlockType)
209 for (
size_t i = 0; i < a_NumCoords; i++)
211 int x = a_BlockX + a_Coords[i].
x;
212 int z = a_BlockZ + a_Coords[i].
z;
213 if (a_Noise.
IntNoise3DInt(x + 64 * a_Seq, a_Height + static_cast<int>(i), z + 64 * a_Seq) <= a_Chance)
215 for (
int j = 0; j < a_ColumnHeight; j++)
217 a_Blocks.push_back(
sSetBlock(x, a_Height - j, z, a_BlockType, a_Coords[i].Meta));
283 bool IsLarge = a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(32 * a_Seq).addedY(32 * a_Seq)) < 0x60000000;
371 ASSERT(!
"Invalid biome type!");
409 a_LogBlocks.reserve(static_cast<size_t>(Height + 5));
413 for (
int i = 0; i < Height; i++)
417 int Hei = a_BlockPos.
y + Height;
420 for (
int i = 0; i < 2; i++)
429 if ((Random & 1) == 0)
451 for (
int i = 4; i < Height; i++)
457 int BranchLength = 2 + a_Noise.
IntNoise3DInt(a_BlockPos * a_Seq) % 3;
462 for (
auto itr : a_LogBlocks)
470 for (
int y = -1; y <= 1; y++)
479 for (
int i = 0; i < Height; i++)
493 for (
int i = 0; i < a_BranchLength; i++)
496 Direction += a_Direction;
497 Direction.
Clamp(-1.0, 1.0);
511 if ((a_Direction.
y > a_Direction.
x) && (a_Direction.
y > a_Direction.
z))
515 else if (a_Direction.
x > a_Direction.
z)
517 return a_BlockMeta + 4;
521 return a_BlockMeta + 8;
534 a_LogBlocks.reserve(static_cast<size_t>(Height));
535 a_OtherBlocks.reserve(80);
538 for (
int i = Height - 1; i >= 0; --i)
542 int h = a_BlockPos.
y + Height;
555 for (
int Row = 0; Row < 2; Row++)
570 int Height = 2 + (a_Noise.
IntNoise3DInt(a_BlockPos) / 11 % 3);
573 for (
int i = 0; i < Height; i++)
579 const Vector3i AvailableDirections[] =
581 { -1, 1, 0 }, { 0, 1, -1 },
582 { -1, 1, 1 }, { -1, 1, -1 },
583 { 1, 1, 1 }, { 1, 1, -1 },
584 { 1, 1, 0 }, { 0, 1, 1 },
591 int BranchHeight = a_Noise.
IntNoise3DInt(a_BlockPos) % 3 + 1;
601 bool TwoTop = (a_Noise.
IntNoise3D(a_BlockPos) < 0 ?
true :
false);
608 BranchDirection =
Vector3d(-BranchDirection.
x, 1, -BranchDirection.
z);
611 BranchHeight = a_Noise.
IntNoise3DInt(a_BlockPos * a_Seq) % 3 + 1;
628 int Height = 5 + (a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(32 * a_Seq).addedZ(32 * a_Seq)) / 11) % 4;
631 for (
int i = 0; i < Height; i++)
640 for (
int i = 1; i < 5; i++)
649 for (
int i = 0; i < 3; i++)
651 int x = (a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(32 * a_Seq).addedZ(32 * a_Seq).addedY(i * a_Seq)) % 3) - 1;
652 int z = (a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(-32 * a_Seq).addedZ(-32 * a_Seq).addedY(i * a_Seq)) % 3) - 1;
655 if ((x >= a_BlockPos.
x) && (x <= a_BlockPos.
x + 1) && (z >= a_BlockPos.
z) && (z <= a_BlockPos.
z + 1))
660 x = a_BlockPos.
x + ((Val1 < -0.5) ? -1 : 3);
664 z = a_BlockPos.
z + ((Val1 < 0.5) ? -1 : 3);
668 int y = Height - (a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(x).addedZ(z).addedY(i * a_Seq)) % (Height - (Height / 4)));
670 for (
int Y = y; Y < Height; Y++)
676 int hei = a_BlockPos.
y + Height - 2;
679 for (
int i = 0; i < 2; i++)
701 a_LogBlocks.reserve(static_cast<size_t>(Height));
702 a_OtherBlocks.reserve(80);
705 for (
int i = Height - 1; i >= 0; --i)
709 int h = a_BlockPos.
y + Height;
722 for (
int Row = 0; Row < 2; Row++)
759 int MyRandom = a_Noise.
IntNoise3DInt(a_BlockPos.
addedX(32 * a_Seq).addedY(32 * a_Seq)) / 8;
761 static const HEIGHTTYPE sHeights[] = {1, 2, 2, 3};
766 a_LogBlocks.reserve(static_cast<size_t>(Height));
767 a_OtherBlocks.reserve(180);
770 for (
int i = 0; i < Height; i++)
774 Height += a_BlockPos.
y;
777 if ((MyRandom & 1) == 0)
786 static const int sNumSections[] = {1, 2, 2, 3};
787 int NumSections = sNumSections[MyRandom & 3];
789 for (
int i = 0; i < NumSections; i++)
791 switch (MyRandom & 3)
827 if ((MyRandom & 1) == 0)
854 int TrunkHeight = 8 + (MyRandom % 3);
855 int SameSizeMax = ((MyRandom & 8) == 0) ? 1 : 0;
857 int NumLeavesLayers = 2 + (MyRandom % 3);
858 if (NumLeavesLayers == 2)
864 a_LogBlocks.reserve(static_cast<size_t>(TrunkHeight));
865 a_OtherBlocks.reserve(static_cast<size_t>(NumLeavesLayers * 25));
868 for (
int i = TrunkHeight; i >= 0; --i)
872 int h = a_BlockPos.
y + TrunkHeight + 2;
883 for (
int i = 0; i < NumLeavesLayers; ++i)
885 int LayerSize = std::min(i, NumLeavesLayers - i + SameSizeMax - 1);
906 {-2, -4, 1}, {-1, -4, 1}, {0, -4, 1}, {1, -4, 1}, {2, -4, 1},
907 {-2, 4, 4}, {-1, 4, 4}, {0, 4, 4}, {1, 4, 4}, {2, 4, 4},
908 {4, -2, 2}, {4, -1, 2}, {4, 0, 2}, {4, 1, 2}, {4, 2, 2},
909 {-4, -2, 8}, {-4, -1, 8}, {-4, 0, 8}, {-4, 1, 8}, {-4, 2, 8},
914 a_LogBlocks.reserve(static_cast<size_t>(Height));
917 for (
int i = 0; i < Height; i++)
921 int hei = a_BlockPos.
y + Height - 2;
924 PushSomeColumns(a_BlockPos.
x, hei, a_BlockPos.
z, Height, a_Seq, a_Noise, 0x3fffffff, a_OtherBlocks, Vines,
ARRAYCOUNT(Vines),
E_BLOCK_VINES);
927 for (
int i = 0; i < 2; i++)
935 for (
int i = 0; i < 2; i++)
952 int hei = a_BlockPos.
y;
988 {0, -1, 1}, {1, -1, 1},
989 {0, 2, 4}, {1, 2, 4},
990 {-1, 1, 8}, {-1, 0, 8},
991 {2, 1, 2}, {2, 0, 2},
994 int Height = 20 + (a_Noise.
IntNoise3DInt(a_BlockPos.
addedXZ(32 * a_Seq, 32 * a_Seq)) / 11) % 12;
996 a_LogBlocks.reserve(static_cast<size_t>(Height) * 4);
999 for (
int i = 0; i < Height; i++)
1007 for (
size_t j = 0; j <
ARRAYCOUNT(VinesTrunk); j++)
1016 int hei = a_BlockPos.
y + Height - 2;
1019 for (
int i = 1; i < 5; i++)
1027 int numBranches = (a_Noise.
IntNoise2DInt(a_BlockPos.
x * a_Seq, a_BlockPos.
z * a_Seq) / 11) % 3 + 1;
1028 int branchStartHeight = 8 + Height % 11;
1029 int branchInterval = (Height - branchStartHeight) / numBranches;
1030 for (
int i = branchStartHeight; i < (Height - 6); i += branchInterval)
1036 int BranchLength = 2 + a_Noise.
IntNoise3DInt(a_BlockPos * a_Seq) % 2;
1044 for (
size_t i = 0; i <
ARRAYCOUNT(BigOJungleLayers); i++)
1059 {-2, -4, 1}, {-1, -4, 1}, {0, -4, 1}, {1, -4, 1}, {2, -4, 1},
1060 {-2, 4, 4}, {-1, 4, 4}, {0, 4, 4}, {1, 4, 4}, {2, 4, 4},
1061 {4, -2, 2}, {4, -1, 2}, {4, 0, 2}, {4, 1, 2}, {4, 2, 2},
1062 {-4, -2, 8}, {-4, -1, 8}, {-4, 0, 8}, {-4, 1, 8},
1068 a_LogBlocks.reserve(static_cast<size_t>(Height));
1069 a_OtherBlocks.reserve(
1073 static_cast<size_t>(Height) *
ARRAYCOUNT(Vines) +
1077 for (
int i = 0; i < Height; i++)
1081 int hei = a_BlockPos.
y + Height - 3;
1084 PushSomeColumns(a_BlockPos.
x, hei, a_BlockPos.
z, Height, a_Seq, a_Noise, 0x3fffffff, a_OtherBlocks, Vines,
ARRAYCOUNT(Vines),
E_BLOCK_VINES);
1087 for (
int i = 0; i < 2; i++)
1095 for (
int i = 0; i < 1; i++)
void GetLargeAppleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a large (branchi...
void PushCornerBlocks(int a_BlockX, int a_Height, int a_BlockZ, int a_Seq, cNoise &a_Noise, int a_Chance, sSetBlockVector &a_Blocks, int a_CornersDist, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta)
void GetBirchTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random birch t...
Vector3d GetTreeBranch(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, Vector3i a_BlockPos, int a_BranchLength, Vector3d a_StartDirection, Vector3d a_Direction, sSetBlockVector &a_LogBlocks)
Fills a_LogBlocks with the logs of a tree branch of the provided log type.
Vector3< int > Floor(void) const
Returns a new Vector3i with coords set to std::floor() of this vector's coords.
void PushSomeColumns(int a_BlockX, int a_Height, int a_BlockZ, int a_ColumnHeight, int a_Seq, cNoise &a_Noise, int a_Chance, sSetBlockVector &a_Blocks, const sMetaCoords *a_Coords, size_t a_NumCoords, BLOCKTYPE a_BlockType)
int IntNoise2DInt(int a_X, int a_Y) const
unsigned char BLOCKTYPE
The datatype used by blockdata.
void GetSwampTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random swampla...
Vector3< T > addedXZ(T a_AddX, T a_AddZ) const
Returns a copy of this vector moved by the specified amount on the X and Z axes.
static const sCoords BigO2[]
static const sCoords BigO3[]
int IntNoise3DInt(int a_X, int a_Y, int a_Z) const
static const Vector3d & pickBranchDirection(const cNoise a_Noise, Vector3i a_BlockPos, int a_Seq)
Chooses a direction for a branch to go to based on the start position (a_BlockPos) and a_Seq...
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
void GetSpruceTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random spruce ...
EMCSBiome
Biome IDs The first batch corresponds to the clientside biomes, used by MineCraft.
void GetAppleBushImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random apple b...
unsigned char HEIGHTTYPE
The type used by the heightmap.
void GetSmallJungleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a small jungle t...
void GetLargeJungleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a large jungle t...
static const sCoords Corners[]
Vector3< T > addedY(T a_AddY) const
Returns a copy of this vector moved by the specified amount on the y axis.
Vector3< T > addedX(T a_AddX) const
Returns a copy of this vector moved by the specified amount on the X axis.
void GetConiferTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random conifer...
void Clamp(T a_Min, T a_Max)
Clamps each coord into the specified range.
void GetTreeImageByBiome(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, EMCSBiome a_Biome, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a tree at the sp...
void GetTallBirchTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random large b...
void PushCoordBlocks(int a_BlockX, int a_Height, int a_BlockZ, sSetBlockVector &a_Blocks, const sCoords *a_Coords, size_t a_NumCoords, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta)
Pushes a specified layer of blocks of the same type around (x, h, z) into a_Blocks.
Vector3< double > Vector3d
NOISE_DATATYPE IntNoise3D(int a_X, int a_Y, int a_Z) const
static const sCoords BigO5Jungle[]
float NOISE_DATATYPE
The datatype used by all the noise generators.
NIBBLETYPE GetLogMetaFromDirection(NIBBLETYPE a_BlockMeta, Vector3d a_Direction)
Returns the meta for a log from the given direction.
static const sCoords BigO3Jungle[]
void GetSmallAppleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a small (nonbran...
void GetJungleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks, bool a_Large)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random jungle ...
void GetAcaciaTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random acacia ...
void GetAppleTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random apple t...
static const sCoords BigO4Jungle[]
static const sCoordsArr BigOJungleLayers[]
static const sCoords BigO1[]
void GetPineTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random pine (t...
void Abs()
Updates each coord to its absolute value.
void GetDarkoakTreeImage(Vector3i a_BlockPos, cNoise &a_Noise, int a_Seq, sSetBlockVector &a_LogBlocks, sSetBlockVector &a_OtherBlocks)
Fills a_LogBlocks and a_OtherBlocks (dirt & leaves) with the blocks required to form a random darkoak...
NOISE_DATATYPE IntNoise2D(int a_X, int a_Y) const
#define ARRAYCOUNT(X)
Evaluates to the number of elements in an array (compile-time!)
std::vector< sSetBlock > sSetBlockVector
static const sCoords BigO4[]
static const sCoordsArr BigOLayers[]