Added new biomes to old height generators.
Now Biomal and DistortedHeight generators will work with new biomes.master
parent
41175b5549
commit
95ab73e4ed
|
@ -21,7 +21,7 @@ Usually you'd want to keep both numbers the same.
|
|||
The numbers are "relative", not absolute maximum; overhangs of a slightly larger size are possible
|
||||
due to the way that noise is calculated.
|
||||
*/
|
||||
const cDistortedHeightmap::sGenParam cDistortedHeightmap::m_GenParam[biNumBiomes] =
|
||||
const cDistortedHeightmap::sGenParam cDistortedHeightmap::m_GenParam[256] =
|
||||
{
|
||||
/* Biome | AmpX | AmpZ */
|
||||
/* biOcean */ { 1.5f, 1.5f},
|
||||
|
@ -46,8 +46,70 @@ const cDistortedHeightmap::sGenParam cDistortedHeightmap::m_GenParam[biNumBiomes
|
|||
/* biForestHills */ { 6.0f, 6.0f},
|
||||
/* biTaigaHills */ { 8.0f, 8.0f},
|
||||
/* biExtremeHillsEdge */ { 7.0f, 7.0f},
|
||||
/* biJungle */ { 0.0f, 0.0f},
|
||||
/* biJungle */ { 4.0f, 4.0f},
|
||||
/* biJungleHills */ { 8.0f, 8.0f},
|
||||
/* biJungleEdge */ { 3.0f, 3.0f}, // 23
|
||||
/* biDeepOcean */ { 1.0f, 1.0f}, // 24
|
||||
/* biStoneBeach */ { 1.0f, 1.0f}, // 25
|
||||
/* biColdBeach */ { 1.0f, 1.0f}, // 26
|
||||
/* biBirchForest */ { 3.0f, 3.0f}, // 27
|
||||
/* biBirchForestHills */ { 6.0f, 6.0f}, // 28
|
||||
/* biRoofedForest */ { 3.0f, 3.0f}, // 29
|
||||
/* biColdTaiga */ { 0.5f, 0.5f}, // 30
|
||||
/* biColdTaigaHills */ { 4.0f, 4.0f}, // 31
|
||||
/* biMegaTaiga */ { 1.0f, 1.0f}, // 32
|
||||
/* biMegaTaigaHills */ { 4.0f, 4.0f}, // 33
|
||||
/* biExtremeHillsPlus */ {32.0f, 32.0f}, // 34 - anyone say extreme plus? Make it extreme plus, then :)
|
||||
/* biSavanna */ { 2.0f, 2.0f}, // 35
|
||||
/* biSavannaPlateau */ { 3.0f, 3.0f}, // 36
|
||||
/* biMesa */ { 3.0f, 3.0f}, // 37
|
||||
/* biMesaPlateauF */ { 3.0f, 3.0f}, // 38
|
||||
/* biMesaPlateau */ { 3.0f, 3.0f}, // 39
|
||||
|
||||
// biomes 40 .. 128 are unused, 89 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 40 .. 49
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 50 .. 59
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 60 .. 69
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 70 .. 79
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 80 .. 89
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 90 .. 99
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 100 .. 109
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 110 .. 119
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, // 120 .. 128
|
||||
|
||||
// Release 1.7 /* biome variants:
|
||||
/* biSunflowerPlains */ { 1.0f, 1.0f}, // 129
|
||||
/* biDesertM */ { 1.0f, 1.0f}, // 130
|
||||
/* biExtremeHillsM */ {16.0f, 16.0f}, // 131
|
||||
/* biFlowerForest */ { 4.0f, 4.0f}, // 132
|
||||
/* biTaigaM */ { 3.0f, 3.0f}, // 133
|
||||
/* biSwamplandM */ { 0.0f, 0.0f}, // 134
|
||||
|
||||
// Biomes 135 .. 139 unused, 5 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, // 135 .. 139
|
||||
|
||||
/* biIcePlainsSpikes */ { 1.0f, 1.0f}, // 140
|
||||
|
||||
// Biomes 141 .. 148 unused, 8 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, // 141 .. 148
|
||||
|
||||
/* biJungleM */ { 4.0f, 4.0f}, // 149
|
||||
{}, // 150
|
||||
/* biJungleEdgeM */ { 3.0f, 3.0f}, // 151
|
||||
{}, {}, {}, // 152 .. 154
|
||||
/* biBirchForestM */ { 3.0f, 3.0f}, // 155
|
||||
/* biBirchForestHillsM */ { 5.0f, 5.0f}, // 156
|
||||
/* biRoofedForestM */ { 2.0f, 2.0f}, // 157
|
||||
/* biColdTaigaM */ { 1.0f, 1.0f}, // 158
|
||||
{}, // 159
|
||||
/* biMegaSpruceTaiga */ { 3.0f, 3.0f}, // 160
|
||||
/* biMegaSpruceTaigaHills */ { 3.0f, 3.0f}, // 161
|
||||
/* biExtremeHillsPlusM */ {32.0f, 32.0f}, // 162
|
||||
/* biSavannaM */ { 2.0f, 2.0f}, // 163
|
||||
/* biSavannaPlateauM */ { 3.0f, 3.0f}, // 164
|
||||
/* biMesaBryce */ { 0.5f, 0.5f}, // 165
|
||||
/* biMesaPlateauFM */ { 3.0f, 3.0f}, // 166
|
||||
/* biMesaPlateauM */ { 3.0f, 3.0f}, // 167
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -60,7 +122,8 @@ cDistortedHeightmap::cDistortedHeightmap(int a_Seed, cBiomeGen & a_BiomeGen) :
|
|||
m_OceanFloorSelect(a_Seed + 3000),
|
||||
m_BiomeGen(a_BiomeGen),
|
||||
m_UnderlyingHeiGen(a_Seed, a_BiomeGen),
|
||||
m_HeightGen(m_UnderlyingHeiGen, 64)
|
||||
m_HeightGen(m_UnderlyingHeiGen, 64),
|
||||
m_IsInitialized(false)
|
||||
{
|
||||
m_NoiseDistortX.AddOctave((NOISE_DATATYPE)1, (NOISE_DATATYPE)0.5);
|
||||
m_NoiseDistortX.AddOctave((NOISE_DATATYPE)0.5, (NOISE_DATATYPE)1);
|
||||
|
@ -394,7 +457,7 @@ void cDistortedHeightmap::UpdateDistortAmps(void)
|
|||
void cDistortedHeightmap::GetDistortAmpsAt(BiomeNeighbors & a_Neighbors, int a_RelX, int a_RelZ, NOISE_DATATYPE & a_DistortAmpX, NOISE_DATATYPE & a_DistortAmpZ)
|
||||
{
|
||||
// Sum up how many biomes of each type there are in the neighborhood:
|
||||
int BiomeCounts[biNumBiomes];
|
||||
int BiomeCounts[256];
|
||||
memset(BiomeCounts, 0, sizeof(BiomeCounts));
|
||||
int Sum = 0;
|
||||
for (int z = -8; z <= 8; z++)
|
||||
|
@ -409,10 +472,6 @@ void cDistortedHeightmap::GetDistortAmpsAt(BiomeNeighbors & a_Neighbors, int a_R
|
|||
int IdxX = FinalX / cChunkDef::Width;
|
||||
int ModX = FinalX % cChunkDef::Width;
|
||||
EMCSBiome Biome = cChunkDef::GetBiome(a_Neighbors[IdxX][IdxZ], ModX, ModZ);
|
||||
if ((Biome < 0) || (Biome >= ARRAYCOUNT(BiomeCounts)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int WeightX = 9 - abs(x);
|
||||
BiomeCounts[Biome] += WeightX + WeightZ;
|
||||
Sum += WeightX + WeightZ;
|
||||
|
@ -432,6 +491,19 @@ void cDistortedHeightmap::GetDistortAmpsAt(BiomeNeighbors & a_Neighbors, int a_R
|
|||
NOISE_DATATYPE AmpZ = 0;
|
||||
for (unsigned int i = 0; i < ARRAYCOUNT(BiomeCounts); i++)
|
||||
{
|
||||
if (BiomeCounts[i] <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
// Sanity checks for biome parameters, enable them to check the biome param table in runtime (slow):
|
||||
ASSERT(m_GenParam[i].m_DistortAmpX >= 0);
|
||||
ASSERT(m_GenParam[i].m_DistortAmpX < 100);
|
||||
ASSERT(m_GenParam[i].m_DistortAmpX >= 0);
|
||||
ASSERT(m_GenParam[i].m_DistortAmpX < 100);
|
||||
*/
|
||||
|
||||
AmpX += BiomeCounts[i] * m_GenParam[i].m_DistortAmpX;
|
||||
AmpZ += BiomeCounts[i] * m_GenParam[i].m_DistortAmpZ;
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ protected:
|
|||
NOISE_DATATYPE m_DistortAmpX;
|
||||
NOISE_DATATYPE m_DistortAmpZ;
|
||||
} ;
|
||||
static const sGenParam m_GenParam[biNumBiomes];
|
||||
static const sGenParam m_GenParam[256];
|
||||
|
||||
// Distortion amplitudes for each direction, before linear upscaling
|
||||
NOISE_DATATYPE m_DistortAmpX[DIM_X * DIM_Z];
|
||||
|
|
|
@ -229,11 +229,11 @@ void cHeiGenClassic::InitializeHeightGen(cIniFile & a_IniFile)
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// cHeiGenBiomal:
|
||||
|
||||
const cHeiGenBiomal::sGenParam cHeiGenBiomal::m_GenParam[biNumBiomes] =
|
||||
const cHeiGenBiomal::sGenParam cHeiGenBiomal::m_GenParam[256] =
|
||||
{
|
||||
/* Fast-changing | Middle-changing | Slow-changing |*/
|
||||
/* Biome | Freq1 | Amp1 | Freq2 | Amp2 | Freq3 | Amp3 | BaseHeight */
|
||||
/* biOcean */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40},
|
||||
/* biOcean */ { 0.1f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 50},
|
||||
/* biPlains */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 68},
|
||||
/* biDesert */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 68},
|
||||
/* biExtremeHills */ { 0.2f, 4.0f, 0.05f, 20.0f, 0.01f, 16.0f, 100},
|
||||
|
@ -256,6 +256,67 @@ const cHeiGenBiomal::sGenParam cHeiGenBiomal::m_GenParam[biNumBiomes] =
|
|||
/* biExtremeHillsEdge */ { 0.2f, 3.0f, 0.05f, 16.0f, 0.01f, 12.0f, 80},
|
||||
/* biJungle */ { 0.1f, 3.0f, 0.05f, 6.0f, 0.01f, 6.0f, 70},
|
||||
/* biJungleHills */ { 0.2f, 3.0f, 0.05f, 12.0f, 0.01f, 10.0f, 80},
|
||||
/* biJungleEdge */ { 0.1f, 3.0f, 0.05f, 6.0f, 0.01f, 6.0f, 70},
|
||||
/* biDeepOcean */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40},
|
||||
/* biStoneBeach */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40},
|
||||
/* biColdBeach */ { 0.1f, 0.5f, 0.05f, 1.0f, 0.01f, 1.0f, 64},
|
||||
/* biBirchForest */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70},
|
||||
/* biBirchForestHills */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80},
|
||||
/* biRoofedForest */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70},
|
||||
/* biColdTaiga */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70},
|
||||
/* biColdTaigaHills */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80},
|
||||
/* biMegaTaiga */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70},
|
||||
/* biMegaTaigaHills */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80},
|
||||
/* biExtremeHillsPlus */ { 0.2f, 4.0f, 0.05f, 20.0f, 0.01f, 16.0f, 120},
|
||||
/* biSavanna */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 68},
|
||||
/* biSavannaPlateau */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80},
|
||||
/* biMesa */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80},
|
||||
/* biMesaPlateauF */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80},
|
||||
/* biMesaPlateau */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80},
|
||||
|
||||
// biomes 40 .. 128 are unused, 89 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 40 .. 49
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 50 .. 59
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 60 .. 69
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 70 .. 79
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 80 .. 89
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 90 .. 99
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 100 .. 109
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, // 110 .. 119
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, {}, // 120 .. 128
|
||||
|
||||
/* biSunflowerPlains */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 129
|
||||
/* biDesertM */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 130
|
||||
/* biExtremeHillsM */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 131
|
||||
/* biFlowerForest */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 132
|
||||
/* biTaigaM */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 133
|
||||
/* biSwamplandM */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 134
|
||||
|
||||
// Biomes 135 .. 139 unused, 5 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, // 135 .. 139
|
||||
|
||||
/* biIcePlainsSpikes */ { 0.1f, 2.0f, 0.05f, 12.0f, 0.01f, 10.0f, 40}, // 140
|
||||
|
||||
// Biomes 141 .. 148 unused, 8 empty placeholders here:
|
||||
{}, {}, {}, {}, {}, {}, {}, {}, // 141 .. 148
|
||||
|
||||
/* biJungleM */ { 0.1f, 3.0f, 0.05f, 6.0f, 0.01f, 6.0f, 70}, // 149
|
||||
{}, // 150
|
||||
/* biJungleEdgeM */ { 0.1f, 3.0f, 0.05f, 6.0f, 0.01f, 6.0f, 70}, // 151
|
||||
{}, {}, {}, // 152 .. 154
|
||||
/* biBirchForestM */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70}, // 155
|
||||
/* biBirchForestHillsM */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80}, // 156
|
||||
/* biRoofedForestM */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70}, // 157
|
||||
/* biColdTaigaM */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70}, // 158
|
||||
{}, // 159
|
||||
/* biMegaSpruceTaiga */ { 0.1f, 1.0f, 0.05f, 2.0f, 0.01f, 4.0f, 70}, // 160
|
||||
/* biMegaSpruceTaigaHills */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80}, // 161
|
||||
/* biExtremeHillsPlusM */ { 0.2f, 4.0f, 0.05f, 20.0f, 0.01f, 16.0f, 120}, // 162
|
||||
/* biSavannaM */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 68}, // 163
|
||||
/* biSavannaPlateauM */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80}, // 164
|
||||
/* biMesaBryce */ { 0.2f, 2.0f, 0.05f, 10.0f, 0.01f, 8.0f, 80}, // 165
|
||||
/* biMesaPlateauFM */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80}, // 166
|
||||
/* biMesaPlateauM */ { 0.1f, 1.0f, 0.05f, 1.5f, 0.01f, 4.0f, 80}, // 167
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -333,7 +394,7 @@ void cHeiGenBiomal::InitializeHeightGen(cIniFile & a_IniFile)
|
|||
NOISE_DATATYPE cHeiGenBiomal::GetHeightAt(int a_RelX, int a_RelZ, int a_ChunkX, int a_ChunkZ, const cHeiGenBiomal::BiomeNeighbors & a_BiomeNeighbors)
|
||||
{
|
||||
// Sum up how many biomes of each type there are in the neighborhood:
|
||||
int BiomeCounts[biNumBiomes];
|
||||
int BiomeCounts[256];
|
||||
memset(BiomeCounts, 0, sizeof(BiomeCounts));
|
||||
int Sum = 0;
|
||||
for (int z = -8; z <= 8; z++)
|
||||
|
@ -348,10 +409,6 @@ NOISE_DATATYPE cHeiGenBiomal::GetHeightAt(int a_RelX, int a_RelZ, int a_ChunkX,
|
|||
int IdxX = FinalX / cChunkDef::Width;
|
||||
int ModX = FinalX % cChunkDef::Width;
|
||||
EMCSBiome Biome = cChunkDef::GetBiome(a_BiomeNeighbors[IdxX][IdxZ], ModX, ModZ);
|
||||
if ((Biome < 0) || (Biome >= ARRAYCOUNT(BiomeCounts)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int WeightX = 9 - abs(x);
|
||||
BiomeCounts[Biome] += WeightX + WeightZ;
|
||||
Sum += WeightX + WeightZ;
|
||||
|
@ -370,6 +427,17 @@ NOISE_DATATYPE cHeiGenBiomal::GetHeightAt(int a_RelX, int a_RelZ, int a_ChunkX,
|
|||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
// Sanity checks for biome parameters, enable them to check the biome param table in runtime (slow):
|
||||
ASSERT(m_GenParam[i].m_HeightFreq1 >= 0);
|
||||
ASSERT(m_GenParam[i].m_HeightFreq1 < 1000);
|
||||
ASSERT(m_GenParam[i].m_HeightFreq2 >= 0);
|
||||
ASSERT(m_GenParam[i].m_HeightFreq2 < 1000);
|
||||
ASSERT(m_GenParam[i].m_HeightFreq3 >= 0);
|
||||
ASSERT(m_GenParam[i].m_HeightFreq3 < 1000);
|
||||
*/
|
||||
|
||||
NOISE_DATATYPE oct1 = m_Noise.CubicNoise2D(BlockX * m_GenParam[i].m_HeightFreq1, BlockZ * m_GenParam[i].m_HeightFreq1) * m_GenParam[i].m_HeightAmp1;
|
||||
NOISE_DATATYPE oct2 = m_Noise.CubicNoise2D(BlockX * m_GenParam[i].m_HeightFreq2, BlockZ * m_GenParam[i].m_HeightFreq2) * m_GenParam[i].m_HeightAmp2;
|
||||
NOISE_DATATYPE oct3 = m_Noise.CubicNoise2D(BlockX * m_GenParam[i].m_HeightFreq3, BlockZ * m_GenParam[i].m_HeightFreq3) * m_GenParam[i].m_HeightAmp3;
|
||||
|
|
|
@ -131,7 +131,7 @@ protected:
|
|||
float m_HeightFreq3, m_HeightAmp3;
|
||||
float m_BaseHeight;
|
||||
} ;
|
||||
static const sGenParam m_GenParam[biNumBiomes];
|
||||
static const sGenParam m_GenParam[256];
|
||||
|
||||
// cTerrainHeightGen overrides:
|
||||
virtual void GenHeightMap(int a_ChunkX, int a_ChunkZ, cChunkDef::HeightMap & a_HeightMap) override;
|
||||
|
|
Loading…
Reference in New Issue