EnrichedString: Fix substr segfault caused by non-formatted text
[oweals/minetest.git] / src / mapgen / mapgen_v5.cpp
index c5be727b97b1ba70d814e4097fcc81a9acfb7451..c003c27d66ba1895e3817751c9c881cf60bbdb01 100644 (file)
@@ -45,18 +45,22 @@ FlagDesc flagdesc_mapgen_v5[] = {
 };
 
 
-MapgenV5::MapgenV5(int mapgenid, MapgenV5Params *params, EmergeManager *emerge)
-       : MapgenBasic(mapgenid, params, emerge)
+MapgenV5::MapgenV5(MapgenV5Params *params, EmergeManager *emerge)
+       : MapgenBasic(MAPGEN_V5, params, emerge)
 {
-       spflags          = params->spflags;
-       cave_width       = params->cave_width;
-       large_cave_depth = params->large_cave_depth;
-       lava_depth       = params->lava_depth;
-       cavern_limit     = params->cavern_limit;
-       cavern_taper     = params->cavern_taper;
-       cavern_threshold = params->cavern_threshold;
-       dungeon_ymin     = params->dungeon_ymin;
-       dungeon_ymax     = params->dungeon_ymax;
+       spflags            = params->spflags;
+       cave_width         = params->cave_width;
+       large_cave_depth   = params->large_cave_depth;
+       small_cave_num_min = params->small_cave_num_min;
+       small_cave_num_max = params->small_cave_num_max;
+       large_cave_num_min = params->large_cave_num_min;
+       large_cave_num_max = params->large_cave_num_max;
+       large_cave_flooded = params->large_cave_flooded;
+       cavern_limit       = params->cavern_limit;
+       cavern_taper       = params->cavern_taper;
+       cavern_threshold   = params->cavern_threshold;
+       dungeon_ymin       = params->dungeon_ymin;
+       dungeon_ymax       = params->dungeon_ymax;
 
        // Terrain noise
        noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -67,9 +71,10 @@ MapgenV5::MapgenV5(int mapgenid, MapgenV5Params *params, EmergeManager *emerge)
        // 1-up 1-down overgeneration
        noise_ground = new Noise(&params->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
        // 1 down overgeneration
-       MapgenBasic::np_cave1  = params->np_cave1;
-       MapgenBasic::np_cave2  = params->np_cave2;
-       MapgenBasic::np_cavern = params->np_cavern;
+       MapgenBasic::np_cave1    = params->np_cave1;
+       MapgenBasic::np_cave2    = params->np_cave2;
+       MapgenBasic::np_cavern   = params->np_cavern;
+       MapgenBasic::np_dungeons = params->np_dungeons;
 }
 
 
@@ -83,28 +88,33 @@ MapgenV5::~MapgenV5()
 
 
 MapgenV5Params::MapgenV5Params():
-       np_filler_depth (0, 1,  v3f(150, 150, 150), 261,    4, 0.7,  2.0),
-       np_factor       (0, 1,  v3f(250, 250, 250), 920381, 3, 0.45, 2.0),
-       np_height       (0, 10, v3f(250, 250, 250), 84174,  4, 0.5,  2.0),
-       np_ground       (0, 40, v3f(80,  80,  80),  983240, 4, 0.55, 2.0, NOISE_FLAG_EASED),
-       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_cavern       (0, 1,  v3f(384, 128, 384), 723,    5, 0.63, 2.0)
+       np_filler_depth (0,   1,   v3f(150, 150, 150), 261,    4, 0.7,  2.0),
+       np_factor       (0,   1,   v3f(250, 250, 250), 920381, 3, 0.45, 2.0),
+       np_height       (0,   10,  v3f(250, 250, 250), 84174,  4, 0.5,  2.0),
+       np_ground       (0,   40,  v3f(80,  80,  80),  983240, 4, 0.55, 2.0, NOISE_FLAG_EASED),
+       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_cavern       (0,   1,   v3f(384, 128, 384), 723,    5, 0.63, 2.0),
+       np_dungeons     (0.9, 0.5, v3f(500, 500, 500), 0,      2, 0.8,  2.0)
 {
 }
 
 
 void MapgenV5Params::readParams(const Settings *settings)
 {
-       settings->getFlagStrNoEx("mgv5_spflags",        spflags, flagdesc_mapgen_v5);
-       settings->getFloatNoEx("mgv5_cave_width",       cave_width);
-       settings->getS16NoEx("mgv5_large_cave_depth",   large_cave_depth);
-       settings->getS16NoEx("mgv5_lava_depth",         lava_depth);
-       settings->getS16NoEx("mgv5_cavern_limit",       cavern_limit);
-       settings->getS16NoEx("mgv5_cavern_taper",       cavern_taper);
-       settings->getFloatNoEx("mgv5_cavern_threshold", cavern_threshold);
-       settings->getS16NoEx("mgv5_dungeon_ymin",       dungeon_ymin);
-       settings->getS16NoEx("mgv5_dungeon_ymax",       dungeon_ymax);
+       settings->getFlagStrNoEx("mgv5_spflags", spflags, flagdesc_mapgen_v5);
+       settings->getFloatNoEx("mgv5_cave_width",         cave_width);
+       settings->getS16NoEx("mgv5_large_cave_depth",     large_cave_depth);
+       settings->getU16NoEx("mgv5_small_cave_num_min",   small_cave_num_min);
+       settings->getU16NoEx("mgv5_small_cave_num_max",   small_cave_num_max);
+       settings->getU16NoEx("mgv5_large_cave_num_min",   large_cave_num_min);
+       settings->getU16NoEx("mgv5_large_cave_num_max",   large_cave_num_max);
+       settings->getFloatNoEx("mgv5_large_cave_flooded", large_cave_flooded);
+       settings->getS16NoEx("mgv5_cavern_limit",         cavern_limit);
+       settings->getS16NoEx("mgv5_cavern_taper",         cavern_taper);
+       settings->getFloatNoEx("mgv5_cavern_threshold",   cavern_threshold);
+       settings->getS16NoEx("mgv5_dungeon_ymin",         dungeon_ymin);
+       settings->getS16NoEx("mgv5_dungeon_ymax",         dungeon_ymax);
 
        settings->getNoiseParams("mgv5_np_filler_depth", np_filler_depth);
        settings->getNoiseParams("mgv5_np_factor",       np_factor);
@@ -113,20 +123,25 @@ void MapgenV5Params::readParams(const Settings *settings)
        settings->getNoiseParams("mgv5_np_cave1",        np_cave1);
        settings->getNoiseParams("mgv5_np_cave2",        np_cave2);
        settings->getNoiseParams("mgv5_np_cavern",       np_cavern);
+       settings->getNoiseParams("mgv5_np_dungeons",     np_dungeons);
 }
 
 
 void MapgenV5Params::writeParams(Settings *settings) const
 {
-       settings->setFlagStr("mgv5_spflags",        spflags, flagdesc_mapgen_v5, U32_MAX);
-       settings->setFloat("mgv5_cave_width",       cave_width);
-       settings->setS16("mgv5_large_cave_depth",   large_cave_depth);
-       settings->setS16("mgv5_lava_depth",         lava_depth);
-       settings->setS16("mgv5_cavern_limit",       cavern_limit);
-       settings->setS16("mgv5_cavern_taper",       cavern_taper);
-       settings->setFloat("mgv5_cavern_threshold", cavern_threshold);
-       settings->setS16("mgv5_dungeon_ymin",       dungeon_ymin);
-       settings->setS16("mgv5_dungeon_ymax",       dungeon_ymax);
+       settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX);
+       settings->setFloat("mgv5_cave_width",         cave_width);
+       settings->setS16("mgv5_large_cave_depth",     large_cave_depth);
+       settings->setU16("mgv5_small_cave_num_min",   small_cave_num_min);
+       settings->setU16("mgv5_small_cave_num_max",   small_cave_num_max);
+       settings->setU16("mgv5_large_cave_num_min",   large_cave_num_min);
+       settings->setU16("mgv5_large_cave_num_max",   large_cave_num_max);
+       settings->setFloat("mgv5_large_cave_flooded", large_cave_flooded);
+       settings->setS16("mgv5_cavern_limit",         cavern_limit);
+       settings->setS16("mgv5_cavern_taper",         cavern_taper);
+       settings->setFloat("mgv5_cavern_threshold",   cavern_threshold);
+       settings->setS16("mgv5_dungeon_ymin",         dungeon_ymin);
+       settings->setS16("mgv5_dungeon_ymax",         dungeon_ymax);
 
        settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth);
        settings->setNoiseParams("mgv5_np_factor",       np_factor);
@@ -135,6 +150,7 @@ void MapgenV5Params::writeParams(Settings *settings) const
        settings->setNoiseParams("mgv5_np_cave1",        np_cave1);
        settings->setNoiseParams("mgv5_np_cave2",        np_cave2);
        settings->setNoiseParams("mgv5_np_cavern",       np_cavern);
+       settings->setNoiseParams("mgv5_np_dungeons",     np_dungeons);
 }
 
 
@@ -236,8 +252,7 @@ void MapgenV5::makeChunk(BlockMakeData *data)
        m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
 
        // Generate dungeons and desert temples
-       if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
-                       full_node_max.Y <= dungeon_ymax)
+       if (flags & MG_DUNGEONS)
                generateDungeons(stone_surface_max_y);
 
        // Generate the registered decorations