]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapgen/mapgen_v5.cpp
Initialise 'seabed_height' to avoid compilation warning (#8715)
[dragonfireclient.git] / src / mapgen / mapgen_v5.cpp
index 89c65cc207cbae750b164118a79846748e496fca..bf99fd335634a94cc28e5d82fcaf7c7cac5e02fe 100644 (file)
@@ -45,8 +45,8 @@ 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;
@@ -55,6 +55,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenV5Params *params, EmergeManager *emerge)
        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);
@@ -65,9 +67,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;
 }
 
 
@@ -81,13 +84,14 @@ 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(50,  50,  50),  52534,  4, 0.5,  2.0),
-       np_cave2        (0, 12, v3f(50,  50,  50),  10325,  4, 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)
 {
 }
 
@@ -101,6 +105,8 @@ void MapgenV5Params::readParams(const Settings *settings)
        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);
@@ -109,6 +115,7 @@ 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);
 }
 
 
@@ -121,6 +128,8 @@ void MapgenV5Params::writeParams(Settings *settings) const
        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);
@@ -129,6 +138,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);
 }
 
 
@@ -200,41 +210,47 @@ void MapgenV5::makeChunk(BlockMakeData *data)
        updateHeightmap(node_min, node_max);
 
        // Init biome generator, place biome-specific nodes, and build biomemap
-       biomegen->calcBiomeNoise(node_min);
-
-       MgStoneType mgstone_type;
-       content_t biome_stone;
-       generateBiomes(&mgstone_type, &biome_stone);
+       if (flags & MG_BIOMES) {
+               biomegen->calcBiomeNoise(node_min);
+               generateBiomes();
+       }
 
-       // Generate caverns, tunnels and classic caves
+       // Generate tunnels, caverns and large randomwalk caves
        if (flags & MG_CAVES) {
-               bool near_cavern = false;
+               // Generate tunnels first as caverns confuse them
+               generateCavesNoiseIntersection(stone_surface_max_y);
+
                // Generate caverns
+               bool near_cavern = false;
                if (spflags & MGV5_CAVERNS)
-                       near_cavern = generateCaverns(stone_surface_max_y);
-               // Generate tunnels and classic caves
+                       near_cavern = generateCavernsNoise(stone_surface_max_y);
+
+               // Generate large randomwalk caves
                if (near_cavern)
-                       // Disable classic caves in this mapchunk by setting
+                       // Disable large randomwalk caves in this mapchunk by setting
                        // 'large cave depth' to world base. Avoids excessive liquid in
                        // large caverns and floating blobs of overgenerated liquid.
-                       generateCaves(stone_surface_max_y, -MAX_MAP_GENERATION_LIMIT);
+                       generateCavesRandomWalk(stone_surface_max_y,
+                               -MAX_MAP_GENERATION_LIMIT);
                else
-                       generateCaves(stone_surface_max_y, large_cave_depth);
+                       generateCavesRandomWalk(stone_surface_max_y, large_cave_depth);
        }
 
+       // Generate the registered ores
+       m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+
        // Generate dungeons and desert temples
-       if (flags & MG_DUNGEONS)
-               generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
+       if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
+                       full_node_max.Y <= dungeon_ymax)
+               generateDungeons(stone_surface_max_y);
 
        // Generate the registered decorations
        if (flags & MG_DECORATIONS)
                m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
 
-       // Generate the registered ores
-       m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
-
        // Sprinkle some dust on top after everything else was generated
-       dustTopNodes();
+       if (flags & MG_BIOMES)
+               dustTopNodes();
 
        //printf("makeChunk: %dms\n", t.stop());