10 #include "../IniFile.h"
11 #include "../LinearUpscale.h"
23 for (
size_t i = 0; i <
ARRAYCOUNT(a_BiomeMap); i++)
39 case dimNether: defaultBiome =
"Nether";
break;
40 case dimEnd: defaultBiome =
"End";
break;
41 case dimNotSet: defaultBiome =
"Swampland";
break;
47 LOGWARN(
"[Generator]::ConstantBiome value \"%s\" not recognized, using \"Plains\".", Biome.c_str());
60 m_BioGenToCache(a_BioGenToCache),
61 m_CacheSize(a_CacheSize),
96 for (
size_t j = i; j > 0; j--)
103 memcpy(a_BiomeMap,
m_CacheData[Idx].m_BiomeMap,
sizeof(a_BiomeMap));
121 memcpy(
m_CacheData[Idx].m_BiomeMap, a_BiomeMap,
sizeof(a_BiomeMap));
142 m_NumSubCaches(a_NumSubCaches),
143 m_Underlying(
std::move(a_BioGenToCache))
146 for (
size_t i = 0; i < a_NumSubCaches; i++)
158 const size_t coefficient = 3;
159 const size_t cacheIdx = (
static_cast<size_t>(a_ChunkCoords.
m_ChunkX) + coefficient *
static_cast<size_t>(a_ChunkCoords.
m_ChunkZ)) %
m_NumSubCaches;
161 m_Caches[cacheIdx]->GenBiomes(a_ChunkCoords, a_BiomeMap);
172 itr->InitializeBiomeGen(a_IniFile);
188 for (AStringVector::const_iterator itr = Split.begin(); itr != Split.end(); ++itr)
191 if (Split2.size() < 1)
196 if (Split2.size() >= 2)
200 LOGWARNING(
"Cannot decode biome count: \"%s\"; using 1.", Split2[1].c_str());
207 for (
int i = 0; i < Count; i++)
214 LOGWARNING(
"Cannot decode biome name: \"%s\"; skipping", Split2[0].c_str());
249 for (
size_t i = 0; i <
ARRAYCOUNT(Biomes); i++)
303 int AbsoluteZ = BaseZ + z;
319 int CellSize = a_IniFile.
GetValueSetI(
"Generator",
"VoronoiCellSize", 128);
320 int JitterSize = a_IniFile.
GetValueSetI(
"Generator",
"VoronoiJitterSize", CellSize);
321 int OddRowOffset = a_IniFile.
GetValueSetI(
"Generator",
"VoronoiOddRowOffset", 0);
343 for (
int x = 0; x <= 4; x++)
for (
int z = 0; z <= 4; z++)
345 Distort(BaseX + x * 4, BaseZ + z * 4, DistortX[4 * x][4 * z], DistortZ[4 * x][4 * z]);
348 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortX[0][0]);
349 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortZ[0][0]);
386 a_DistortedX = a_BlockX +
static_cast<int>(
m_CellSize * 0.5 * NoiseX);
387 a_DistortedZ = a_BlockZ +
static_cast<int>(
m_CellSize * 0.5 * NoiseZ);
398 m_Noise1(a_Seed + 1000),
399 m_Noise2(a_Seed + 2000),
400 m_Noise3(a_Seed + 3000),
401 m_Noise4(a_Seed + 4000),
402 m_Noise5(a_Seed + 5000),
403 m_Noise6(a_Seed + 6000),
405 m_OceanCellSize(384),
406 m_MushroomIslandSize(64),
407 m_RiverCellSize(384),
408 m_RiverWidthThreshold(0.125),
409 m_LandBiomesSize(1024)
451 for (
int x = 0; x <= 4; x++)
for (
int z = 0; z <= 4; z++)
453 Distort(BaseX + x * 4, BaseZ + z * 4, DistortX[4 * x][4 * z], DistortZ[4 * x][4 * z], DistortSize);
455 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortX[0][0]);
456 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortZ[0][0]);
460 const int NEIGHBORHOOD_SIZE = 4;
463 int SeedX[2 * NEIGHBORHOOD_SIZE + 1][2 * NEIGHBORHOOD_SIZE + 1];
464 int SeedZ[2 * NEIGHBORHOOD_SIZE + 1][2 * NEIGHBORHOOD_SIZE + 1];
465 EMCSBiome SeedV[2 * NEIGHBORHOOD_SIZE + 1][2 * NEIGHBORHOOD_SIZE + 1];
466 for (
int xc = 0; xc < 2 * NEIGHBORHOOD_SIZE + 1; xc++)
468 int RealCellX = xc + CellX - NEIGHBORHOOD_SIZE;
470 for (
int zc = 0; zc < 2 * NEIGHBORHOOD_SIZE + 1; zc++)
472 int RealCellZ = zc + CellZ - NEIGHBORHOOD_SIZE;
476 SeedX[xc][zc] = CellBlockX + OffsetX;
477 SeedZ[xc][zc] = CellBlockZ + OffsetZ;
482 for (
int xc = 1; xc < 2 * NEIGHBORHOOD_SIZE; xc++)
for (
int zc = 1; zc < 2 * NEIGHBORHOOD_SIZE; zc++)
486 (SeedV[xc - 1][zc] ==
biOcean) &&
487 (SeedV[xc + 1][zc] ==
biOcean) &&
488 (SeedV[xc ][zc - 1] ==
biOcean) &&
489 (SeedV[xc ][zc + 1] ==
biOcean) &&
490 (SeedV[xc - 1][zc - 1] ==
biOcean) &&
491 (SeedV[xc + 1][zc - 1] ==
biOcean) &&
492 (SeedV[xc - 1][zc + 1] ==
biOcean) &&
493 (SeedV[xc + 1][zc + 1] ==
biOcean)
507 int AbsoluteZ = DistortZ[x][z];
508 int AbsoluteX = DistortX[x][z];
512 for (
int xs = 1; xs < 2 * NEIGHBORHOOD_SIZE; xs++)
for (
int zs = 1; zs < 2 * NEIGHBORHOOD_SIZE; zs++)
514 int Dist = (SeedX[xs][zs] - AbsoluteX) * (SeedX[xs][zs] - AbsoluteX) + (SeedZ[xs][zs] - AbsoluteZ) * (SeedZ[xs][zs] - AbsoluteZ);
520 Biome = SeedV[xs][zs];
524 if (Dist > MushroomOceanThreshold)
528 else if (Dist > MushroomShoreThreshold)
591 double NoiseX =
m_Noise3.
CubicNoise2D(
static_cast<float>(a_BlockX / a_CellSize),
static_cast<float>(a_BlockZ / a_CellSize));
592 NoiseX += 0.5 *
m_Noise2.
CubicNoise2D(2 *
static_cast<float>(a_BlockX / a_CellSize), 2 *
static_cast<float>(a_BlockZ / a_CellSize));
593 NoiseX += 0.1 *
m_Noise1.
CubicNoise2D(16 *
static_cast<float>(a_BlockX / a_CellSize), 16 *
static_cast<float>(a_BlockZ / a_CellSize));
594 double NoiseZ =
m_Noise6.
CubicNoise2D(
static_cast<float>(a_BlockX / a_CellSize),
static_cast<float>(a_BlockZ / a_CellSize));
595 NoiseZ += 0.5 *
m_Noise5.
CubicNoise2D(2 *
static_cast<float>(a_BlockX / a_CellSize), 2 *
static_cast<float>(a_BlockZ / a_CellSize));
596 NoiseZ += 0.1 *
m_Noise4.
CubicNoise2D(16 *
static_cast<float>(a_BlockX / a_CellSize), 16 *
static_cast<float>(a_BlockZ / a_CellSize));
598 a_DistortedX = a_BlockX +
static_cast<int>(a_CellSize * 0.5 * NoiseX);
599 a_DistortedZ = a_BlockZ +
static_cast<int>(a_CellSize * 0.5 * NoiseZ);
611 for (
int z = 0; z < 17; z += 8)
614 for (
int x = 0; x < 17; x += 8)
621 TemperatureMap[x + 17 * z] = NoiseT;
626 HumidityMap[x + 17 * z] = NoiseH;
629 LinearUpscale2DArrayInPlace<17, 17, 8, 8>(TemperatureMap);
630 LinearUpscale2DArrayInPlace<17, 17, 8, 8>(HumidityMap);
633 for (
size_t idx = 0; idx <
ARRAYCOUNT(a_TemperatureMap); idx++)
635 a_TemperatureMap[idx] =
Clamp(
static_cast<int>(128 + TemperatureMap[idx] * 128), 0, 255);
636 a_HumidityMap[idx] =
Clamp(
static_cast<int>(128 + HumidityMap[idx] * 128), 0, 255);
649 biTundra,
biTundra,
biTundra,
biTundra,
biPlains,
biPlains,
biPlains,
biPlains,
biPlains,
biPlains,
biDesert,
biDesert,
biDesert,
biDesert,
biDesert,
biDesert,
650 biTundra,
biTundra,
biTundra,
biTundra,
biPlains,
biPlains,
biPlains,
biPlains,
biPlains,
biPlains,
biDesert,
biDesert,
biDesert,
biDesert,
biDesert,
biDesert,
651 biTundra,
biTundra,
biTundra,
biTundra,
biPlains,
biExtremeHills,
biPlains,
biPlains,
biPlains,
biPlains,
biDesert,
biDesert,
biDesertHills,
biDesertHills,
biDesert,
biDesert,
652 biTundra,
biTundra,
biTundra,
biTundra,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
biPlains,
biPlains,
biDesert,
biDesert,
biDesertHills,
biDesertHills,
biDesert,
biDesert,
653 biTundra,
biTundra,
biIceMountains,
biIceMountains,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
biPlains,
biPlains,
biForestHills,
biForestHills,
biExtremeHills,
biExtremeHills,
biDesertHills,
biDesert,
654 biTundra,
biTundra,
biIceMountains,
biIceMountains,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
biPlains,
biPlains,
biForestHills,
biForestHills,
biExtremeHills,
biExtremeHills,
biDesertHills,
biDesert,
655 biTundra,
biTundra,
biIceMountains,
biIceMountains,
biForestHills,
biForestHills,
biForest,
biForest,
biForest,
biForest,
biForest,
biForestHills,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
656 biTundra,
biTundra,
biIceMountains,
biIceMountains,
biForestHills,
biForestHills,
biForest,
biForest,
biForest,
biForest,
biForest,
biForestHills,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
657 biTundra,
biTundra,
biTaiga,
biTaiga,
biForest,
biForest,
biForest,
biForest,
biForest,
biForest,
biForest,
biForestHills,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
658 biTundra,
biTundra,
biTaiga,
biTaiga,
biForest,
biForest,
biForest,
biForest,
biForest,
biForest,
biForest,
biForestHills,
biExtremeHills,
biExtremeHills,
biPlains,
biPlains,
659 biTaiga,
biTaiga,
biTaiga,
biIceMountains,
biForestHills,
biForestHills,
biForest,
biForest,
biForest,
biForest,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
660 biTaiga,
biTaiga,
biIceMountains,
biIceMountains,
biExtremeHills,
biForestHills,
biForest,
biForest,
biForest,
biForest,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
661 biTaiga,
biTaiga,
biIceMountains,
biIceMountains,
biExtremeHills,
biJungleHills,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
662 biTaiga,
biTaiga,
biTaiga,
biIceMountains,
biJungleHills,
biJungleHills,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
663 biTaiga,
biTaiga,
biTaiga,
biTaiga,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
664 biTaiga,
biTaiga,
biTaiga,
biTaiga,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biJungle,
biSwampland,
biSwampland,
biSwampland,
biSwampland,
677 int Temperature = a_TemperatureMap[idx] / 16;
678 int Humidity = a_HumidityMap[idx] / 16;
695 if (a_TemperatureMap[idx] > 4 * 16)
719 m_VoronoiLarge(a_Seed + 1000),
720 m_VoronoiSmall(a_Seed + 2000),
721 m_Noise1(a_Seed + 5001),
722 m_Noise2(a_Seed + 5002),
723 m_Noise3(a_Seed + 5003),
724 m_Noise4(a_Seed + 5004),
725 m_Noise5(a_Seed + 5005),
726 m_Noise6(a_Seed + 5006),
754 for (
int x = 0; x <= 4; x++)
for (
int z = 0; z <= 4; z++)
756 float BlockX =
static_cast<float>(BaseX + x * 4);
757 float BlockZ =
static_cast<float>(BaseZ + z * 4);
765 DistortX[4 * x][4 * z] =
static_cast<int>(BlockX + NoiseX);
766 DistortZ[4 * x][4 * z] =
static_cast<int>(BlockZ + NoiseZ);
769 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortX[0][0]);
770 LinearUpscale2DArrayInPlace<cChunkDef::Width + 1, cChunkDef::Width + 1, 4, 4>(&DistortZ[0][0]);
777 int SeedX, SeedZ, MinDist2;
779 size_t BiomeIdx =
static_cast<size_t>(
m_VoronoiSmall.
GetValueAt(DistortX[x][z], DistortZ[x][z], SeedX, SeedZ, MinDist2) / 11);
780 int MinDist1 = (DistortX[x][z] - SeedX) * (DistortX[x][z] - SeedX) + (DistortZ[x][z] - SeedZ) * (DistortZ[x][z] - SeedZ);
799 static BiomeLevels bgOceanBlocks[] =
813 static BiomeLevels bgFrozenBlocks[] =
826 static BiomeLevels bgTemperateBlocks[] =
842 static BiomeLevels bgWarmBlocks[] =
851 static BiomeLevels bgMesaBlocks[] =
861 static BiomeLevels bgConifersBlocks[] =
869 static BiomeLevels bgDenseTreesBlocks[] =
877 BiomeLevels * Biomes;
881 { bgOceanBlocks,
ARRAYCOUNT(bgOceanBlocks), },
882 { bgOceanBlocks,
ARRAYCOUNT(bgOceanBlocks), },
883 { bgFrozenBlocks,
ARRAYCOUNT(bgFrozenBlocks), },
884 { bgFrozenBlocks,
ARRAYCOUNT(bgFrozenBlocks), },
885 { bgTemperateBlocks,
ARRAYCOUNT(bgTemperateBlocks), },
886 { bgTemperateBlocks,
ARRAYCOUNT(bgTemperateBlocks), },
887 { bgConifersBlocks,
ARRAYCOUNT(bgConifersBlocks), },
888 { bgConifersBlocks,
ARRAYCOUNT(bgConifersBlocks), },
892 { bgDenseTreesBlocks,
ARRAYCOUNT(bgDenseTreesBlocks), },
894 size_t Group =
static_cast<size_t>(a_BiomeGroup) %
ARRAYCOUNT(BiomeGroups);
895 size_t Index = a_BiomeIdx % BiomeGroups[Group].Count;
896 return (a_DistLevel > 0) ? BiomeGroups[Group].Biomes[Index].InnerBiome : BiomeGroups[Group].Biomes[Index].OuterBiome;
907 m_FreqX1 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave1Freq", 0.01));
908 m_AmpX1 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave1Amp", 80));
909 m_FreqX2 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave2Freq", 0.05));
910 m_AmpX2 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave2Amp", 20));
911 m_FreqX3 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave3Freq", 0.1));
912 m_AmpX3 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortXOctave3Amp", 8));
913 m_FreqZ1 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave1Freq", 0.01));
914 m_AmpZ1 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave1Amp", 80));
915 m_FreqZ2 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave2Freq", 0.05));
916 m_AmpZ2 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave2Amp", 20));
917 m_FreqZ3 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave3Freq", 0.1));
918 m_AmpZ3 =
static_cast<float>(a_IniFile.
GetValueSetF(
"Generator",
"TwoLevelDistortZOctave3Amp", 8));
936 std::make_shared<cIntGenChoice<2, 7>>(a_Seed + 12)
938 | MakeIntGen<cIntGenSmooth<8>>(a_Seed + 6)
940 | MakeIntGen<cIntGenZoom <8>>(a_Seed + 10)
942 | MakeIntGen<cIntGenZoom <8>>(a_Seed + 9)
944 | MakeIntGen<cIntGenZoom <8>>(a_Seed + 8)
946 | MakeIntGen<cIntGenZoom <9>>(a_Seed + 4)
948 | MakeIntGen<cIntGenZoom <10>>(a_Seed + 2)
952 std::make_shared<cIntGenZoom <8>>(a_Seed,
953 std::make_shared<cIntGenLandOcean<6>>(a_Seed, 20
957 std::make_shared<cIntGenZoom <8>>(a_Seed + 1,
958 std::make_shared<cIntGenZoom <6>>(a_Seed + 2,
959 std::make_shared<cIntGenZoom <5>>(a_Seed + 1,
960 std::make_shared<cIntGenZoom <4>>(a_Seed + 2,
961 std::make_shared<cIntGenLandOcean<4>>(a_Seed + 1, 10
965 std::make_shared<cIntGenSmooth <8>> (a_Seed + 1,
966 std::make_shared<cIntGenZoom <10>>(a_Seed + 15,
967 std::make_shared<cIntGenSmooth <7>> (a_Seed + 1,
968 std::make_shared<cIntGenZoom <9>> (a_Seed + 16,
969 std::make_shared<cIntGenBeaches <6>> (
970 std::make_shared<cIntGenZoom <8>> (a_Seed + 1,
971 std::make_shared<cIntGenAddIslands <6>> (a_Seed + 2004, 10,
972 std::make_shared<cIntGenAddToOcean <6>> (a_Seed + 10, 500,
biDeepOcean,
974 std::make_shared<cIntGenMBiomes <8>> (a_Seed + 5, alteration2,
975 std::make_shared<cIntGenAlternateBiomes<8>> (a_Seed + 1, alteration,
976 std::make_shared<cIntGenBiomeEdges <8>> (a_Seed + 3,
977 std::make_shared<cIntGenZoom <10>>(a_Seed + 2,
978 std::make_shared<cIntGenZoom <7>> (a_Seed + 4,
980 std::make_shared<cIntGenZoom <5>> (a_Seed + 8,
981 std::make_shared<cIntGenAddToOcean <4>> (a_Seed + 10, 300,
biDeepOcean,
983 std::make_shared<cIntGenBiomes <8>> (a_Seed + 3000,
984 std::make_shared<cIntGenAddIslands <8>> (a_Seed + 2000, 200,
985 std::make_shared<cIntGenZoom <8>> (a_Seed + 5,
986 std::make_shared<cIntGenRareBiomeGroups<6>> (a_Seed + 5, 50,
987 std::make_shared<cIntGenBiomeGroupEdges<6>> (
988 std::make_shared<cIntGenAddIslands <8>> (a_Seed + 2000, 200,
989 std::make_shared<cIntGenZoom <8>> (a_Seed + 7,
990 std::make_shared<cIntGenSetRandomly <6>> (a_Seed + 8, 50,
bgOcean,
991 std::make_shared<cIntGenReplaceRandomly<6>> (a_Seed + 101,
bgIce,
bgTemperate, 150,
992 std::make_shared<cIntGenAddIslands <6>> (a_Seed + 2000, 200,
993 std::make_shared<cIntGenSetRandomly <6>> (a_Seed + 9, 50,
bgOcean,
994 std::make_shared<cIntGenLandOcean <5>> (a_Seed + 100, 30)
996 )))))))))))))))))))))))))))));
999 std::make_shared<cIntGenSmooth <16>>(a_Seed,
1000 std::make_shared<cIntGenZoom <18>>(a_Seed,
1001 std::make_shared<cIntGenSmooth <11>>(a_Seed,
1002 std::make_shared<cIntGenZoom <13>>(a_Seed,
1003 std::make_shared<cIntGenMixRivers<8>> (
1004 FinalBiomes, FinalRivers
1039 std::make_shared<cProtIntGenSmooth>(a_Seed + 1,
1040 std::make_shared<cProtIntGenZoom >(a_Seed + 2,
1041 std::make_shared<cProtIntGenRiver >(a_Seed + 3,
1042 std::make_shared<cProtIntGenZoom >(a_Seed + 4,
1043 std::make_shared<cProtIntGenSmooth>(a_Seed + 5,
1044 std::make_shared<cProtIntGenZoom >(a_Seed + 8,
1045 std::make_shared<cProtIntGenSmooth>(a_Seed + 5,
1046 std::make_shared<cProtIntGenZoom >(a_Seed + 9,
1047 std::make_shared<cProtIntGenSmooth>(a_Seed + 5,
1048 std::make_shared<cProtIntGenZoom >(a_Seed + 10,
1049 std::make_shared<cProtIntGenSmooth>(a_Seed + 5,
1050 std::make_shared<cProtIntGenSmooth>(a_Seed + 6,
1051 std::make_shared<cProtIntGenZoom >(a_Seed + 11,
1052 std::make_shared<cProtIntGenChoice>(a_Seed + 12, 2
1056 std::make_shared<cProtIntGenZoom >(a_Seed,
1057 std::make_shared<cProtIntGenLandOcean>(a_Seed, 20
1061 std::make_shared<cProtIntGenZoom >(a_Seed + 1,
1062 std::make_shared<cProtIntGenZoom >(a_Seed + 2,
1063 std::make_shared<cProtIntGenZoom >(a_Seed + 1,
1064 std::make_shared<cProtIntGenZoom >(a_Seed + 2,
1065 std::make_shared<cProtIntGenLandOcean>(a_Seed + 1, 10
1069 std::make_shared<cProtIntGenSmooth >(a_Seed + 1,
1070 std::make_shared<cProtIntGenZoom >(a_Seed + 15,
1071 std::make_shared<cProtIntGenSmooth >(a_Seed + 1,
1072 std::make_shared<cProtIntGenZoom >(a_Seed + 16,
1073 std::make_shared<cProtIntGenBeaches >(
1074 std::make_shared<cProtIntGenZoom >(a_Seed + 1,
1075 std::make_shared<cProtIntGenAddIslands >(a_Seed + 2004, 10,
1076 std::make_shared<cProtIntGenAddToOcean >(a_Seed + 10, 500,
biDeepOcean,
1078 std::make_shared<cProtIntGenMBiomes >(a_Seed + 5, alteration2,
1079 std::make_shared<cProtIntGenAlternateBiomes>(a_Seed + 1, alteration,
1080 std::make_shared<cProtIntGenBiomeEdges >(a_Seed + 3,
1081 std::make_shared<cProtIntGenZoom >(a_Seed + 2,
1082 std::make_shared<cProtIntGenZoom >(a_Seed + 4,
1084 std::make_shared<cProtIntGenZoom >(a_Seed + 8,
1085 std::make_shared<cProtIntGenAddToOcean >(a_Seed + 10, 300,
biDeepOcean,
1087 std::make_shared<cProtIntGenBiomes >(a_Seed + 3000,
1088 std::make_shared<cProtIntGenAddIslands >(a_Seed + 2000, 200,
1089 std::make_shared<cProtIntGenZoom >(a_Seed + 5,
1090 std::make_shared<cProtIntGenRareBiomeGroups>(a_Seed + 5, 50,
1091 std::make_shared<cProtIntGenBiomeGroupEdges>(
1092 std::make_shared<cProtIntGenAddIslands >(a_Seed + 2000, 200,
1093 std::make_shared<cProtIntGenZoom >(a_Seed + 7,
1094 std::make_shared<cProtIntGenSetRandomly >(a_Seed + 8, 50,
bgOcean,
1095 std::make_shared<cProtIntGenReplaceRandomly>(a_Seed + 101,
bgIce,
bgTemperate, 150,
1096 std::make_shared<cProtIntGenAddIslands >(a_Seed + 2000, 200,
1097 std::make_shared<cProtIntGenSetRandomly >(a_Seed + 9, 50,
bgOcean,
1098 std::make_shared<cProtIntGenZoom >(a_Seed + 10,
1099 std::make_shared<cProtIntGenLandOcean >(a_Seed + 100, 30
1100 )))))))))))))))))))))))))))))));
1103 std::make_shared<cProtIntGenSmooth >(a_Seed,
1104 std::make_shared<cProtIntGenZoom >(a_Seed,
1105 std::make_shared<cProtIntGenSmooth >(a_Seed,
1106 std::make_shared<cProtIntGenZoom >(a_Seed,
1107 std::make_shared<cProtIntGenMixRivers>(
1108 FinalBiomes, FinalRivers
1139 if (BiomeGenName.empty())
1141 LOGWARN(
"[Generator] BiomeGen value not set in world.ini, using \"Grown\".");
1142 BiomeGenName =
"Grown";
1145 std::unique_ptr<cBiomeGen> res;
1146 a_CacheOffByDefault =
false;
1149 res = std::make_unique<cBioGenConstant>();
1150 a_CacheOffByDefault =
true;
1154 res = std::make_unique<cBioGenCheckerboard>();
1155 a_CacheOffByDefault =
true;
1159 res = std::make_unique<cBioGenVoronoi>(a_Seed);
1161 else if (
NoCaseCompare(BiomeGenName,
"distortedvoronoi") == 0)
1163 res = std::make_unique<cBioGenDistortedVoronoi>(a_Seed);
1167 res = std::make_unique<cBioGenTwoLevel>(a_Seed);
1171 res = std::make_unique<cBioGenMultiStepMap>(a_Seed);
1175 res = std::make_unique<cBioGenProtGrown>(a_Seed);
1181 LOGWARNING(
"Unknown BiomeGen \"%s\", using \"Grown\" instead.", BiomeGenName.c_str());
1183 res = std::make_unique<cBioGenGrown>(a_Seed);
1185 res->InitializeBiomeGen(a_IniFile);
1202 class cBioGenPerfTest
1207 std::cout <<
"BioGen performance tests commencing, please wait..." << std::endl;
1208 TestGen(
"MultiStepMap", std::make_unique<cBioGenMultiStepMap>(1).get());
1209 TestGen(
"Grown", std::make_unique<cBioGenGrown>(1).get());
1210 TestGen(
"GrownProt", std::make_unique<cBioGenProtGrown>(1).get());
1211 std::cout <<
"BioGen performance tests complete." << std::endl;
1222 auto start = std::chrono::system_clock::now();
1223 for (
int z = 0; z < 100; z++)
1225 for (
int x = 0; x < 100; x++)
1231 auto dur = std::chrono::system_clock::now() - start;
1232 double milliseconds =
static_cast<double>((std::chrono::duration_cast<std::chrono::milliseconds>(dur)).count());
1234 std::cout << a_GenName <<
": " << 1000.0 * 100.0 * 100.0 / milliseconds <<
" chunks per second" << std::endl;