mapgen: drop mapgen id from child mapgens.
[oweals/minetest.git] / src / mapgen / mapgen_v7.cpp
index 57646bd79bdee11777b932ed78f8e456fd416ea5..ad5220925f48341f5f8c95b68754f47a8ae9c52f 100644 (file)
@@ -52,8 +52,8 @@ FlagDesc flagdesc_mapgen_v7[] = {
 ////////////////////////////////////////////////////////////////////////////////
 
 
-MapgenV7::MapgenV7(int mapgenid, MapgenV7Params *params, EmergeManager *emerge)
-       : MapgenBasic(mapgenid, params, emerge)
+MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
+       : MapgenBasic(MAPGEN_V7, params, emerge)
 {
        spflags              = params->spflags;
        mount_zero_level     = params->mount_zero_level;
@@ -326,8 +326,10 @@ void MapgenV7::makeChunk(BlockMakeData *data)
        updateHeightmap(node_min, node_max);
 
        // Init biome generator, place biome-specific nodes, and build biomemap
-       biomegen->calcBiomeNoise(node_min);
-       generateBiomes();
+       if (flags & MG_BIOMES) {
+               biomegen->calcBiomeNoise(node_min);
+               generateBiomes();
+       }
 
        // Generate tunnels, caverns and large randomwalk caves
        if (flags & MG_CAVES) {
@@ -350,6 +352,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
                        generateCavesRandomWalk(stone_surface_max_y, large_cave_depth);
        }
 
+       // Generate the registered ores
+       m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+
        // Generate dungeons
        if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
                        full_node_max.Y <= dungeon_ymax)
@@ -359,11 +364,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
        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();
 
        // Update liquids
        updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
@@ -591,6 +594,11 @@ void MapgenV7::generateRidgeTerrain()
                        float uwatern = noise_ridge_uwater->result[index2d] * 2.0f;
                        if (std::fabs(uwatern) > width)
                                continue;
+                       // Optimises, but also avoids removing nodes placed by mods in
+                       // 'on-generated', when generating outside mapchunk.
+                       content_t c = vm->m_data[vi].getContent();
+                       if (c != c_stone)
+                               continue;
 
                        float altitude = y - water_level;
                        float height_mod = (altitude + 17.0f) / 2.5f;