diff options
Diffstat (limited to 'src/mapgen/mapgen_flat.cpp')
-rw-r--r-- | src/mapgen/mapgen_flat.cpp | 51 |
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(¶ms->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; } |