summaryrefslogtreecommitdiff
path: root/src/mapgen/mapgen_flat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapgen/mapgen_flat.cpp')
-rw-r--r--src/mapgen/mapgen_flat.cpp51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp
index 11b27f85c..773b7b10f 100644
--- a/src/mapgen/mapgen_flat.cpp
+++ b/src/mapgen/mapgen_flat.cpp
@@ -48,8 +48,8 @@ FlagDesc flagdesc_mapgen_flat[] = {
///////////////////////////////////////////////////////////////////////////////////////
-MapgenFlat::MapgenFlat(int mapgenid, MapgenFlatParams *params, EmergeManager *emerge)
- : MapgenBasic(mapgenid, params, emerge)
+MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge)
+ : MapgenBasic(MAPGEN_FLAT, params, emerge)
{
spflags = params->spflags;
ground_level = params->ground_level;
@@ -69,8 +69,9 @@ MapgenFlat::MapgenFlat(int mapgenid, MapgenFlatParams *params, EmergeManager *em
if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
noise_terrain = new Noise(&params->np_terrain, seed, csize.X, csize.Z);
// 3D noise
- MapgenBasic::np_cave1 = params->np_cave1;
- MapgenBasic::np_cave2 = params->np_cave2;
+ MapgenBasic::np_cave1 = params->np_cave1;
+ MapgenBasic::np_cave2 = params->np_cave2;
+ MapgenBasic::np_dungeons = params->np_dungeons;
}
@@ -84,10 +85,11 @@ MapgenFlat::~MapgenFlat()
MapgenFlatParams::MapgenFlatParams():
- np_terrain (0, 1, v3f(600, 600, 600), 7244, 5, 0.6, 2.0),
- np_filler_depth (0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0),
- np_cave1 (0, 12, v3f(61, 61, 61), 52534, 3, 0.5, 2.0),
- np_cave2 (0, 12, v3f(67, 67, 67), 10325, 3, 0.5, 2.0)
+ np_terrain (0, 1, v3f(600, 600, 600), 7244, 5, 0.6, 2.0),
+ np_filler_depth (0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0),
+ np_cave1 (0, 12, v3f(61, 61, 61), 52534, 3, 0.5, 2.0),
+ np_cave2 (0, 12, v3f(67, 67, 67), 10325, 3, 0.5, 2.0),
+ np_dungeons (0.9, 0.5, v3f(500, 500, 500), 0, 2, 0.8, 2.0)
{
}
@@ -110,6 +112,7 @@ void MapgenFlatParams::readParams(const Settings *settings)
settings->getNoiseParams("mgflat_np_filler_depth", np_filler_depth);
settings->getNoiseParams("mgflat_np_cave1", np_cave1);
settings->getNoiseParams("mgflat_np_cave2", np_cave2);
+ settings->getNoiseParams("mgflat_np_dungeons", np_dungeons);
}
@@ -131,6 +134,7 @@ void MapgenFlatParams::writeParams(Settings *settings) const
settings->setNoiseParams("mgflat_np_filler_depth", np_filler_depth);
settings->setNoiseParams("mgflat_np_cave1", np_cave1);
settings->setNoiseParams("mgflat_np_cave2", np_cave2);
+ settings->setNoiseParams("mgflat_np_dungeons", np_dungeons);
}
@@ -139,26 +143,31 @@ void MapgenFlatParams::writeParams(Settings *settings) const
int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
{
- s16 level_at_point = ground_level;
- float n_terrain = 0.0f;
- if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
- n_terrain = NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed);
+ s16 stone_level = ground_level;
+ float n_terrain =
+ ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) ?
+ NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed) :
+ 0.0f;
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
- level_at_point = ground_level -
- (lake_threshold - n_terrain) * lake_steepness;
+ s16 depress = (lake_threshold - n_terrain) * lake_steepness;
+ stone_level = ground_level - depress;
} else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
- level_at_point = ground_level +
- (n_terrain - hill_threshold) * hill_steepness;
+ s16 rise = (n_terrain - hill_threshold) * hill_steepness;
+ stone_level = ground_level + rise;
}
- if (ground_level < water_level) // Ocean world, allow spawn in water
- return MYMAX(level_at_point, water_level);
+ if (ground_level < water_level)
+ // Ocean world, may not have islands so allow spawn in water
+ return MYMAX(stone_level + 2, water_level);
- if (level_at_point > water_level)
- return level_at_point; // Spawn on land
+ if (stone_level >= water_level)
+ // Spawn on land
+ // + 2 not + 1, to spawn above biome 'dust' nodes
+ return stone_level + 2;
- return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ // Unsuitable spawn point
+ return MAX_MAP_GENERATION_LIMIT;
}