Change mapgen order to ores > dungeons > decorations (#7656)
authorParamat <paramat@users.noreply.github.com>
Mon, 20 Aug 2018 17:24:53 +0000 (18:24 +0100)
committerGitHub <noreply@github.com>
Mon, 20 Aug 2018 17:24:53 +0000 (18:24 +0100)
Previously dungeons > decorations > ores.
Decorations depend on the node they are placed on, and ore types are
increasingly able to place large continuous volumes of nodes, such as
strata. Decorations are increasingly being used underground.

The new order avoids a node being changed by ore generation after a
decoration has been placed on it.
The new order also avoids ores appearing in the walls of a dungeon if
the wall nodes match the local stone node.

src/mapgen/mapgen_carpathian.cpp
src/mapgen/mapgen_flat.cpp
src/mapgen/mapgen_fractal.cpp
src/mapgen/mapgen_v5.cpp
src/mapgen/mapgen_v7.cpp
src/mapgen/mapgen_valleys.cpp

index c1e07030ce4d5ec2f7de5a1bb49615924f714a46..f7daef7081c8ed27da9479370ff0bbc134fe0480 100644 (file)
@@ -273,6 +273,9 @@ void MapgenCarpathian::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)
@@ -282,9 +285,6 @@ void MapgenCarpathian::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
        if (flags & MG_BIOMES)
                dustTopNodes();
index e2bc42918f198dd67def3afeaaa5fdbee4b9993d..11b27f85ce9f0d92c04ec9d4ba04c7aac4d7e589 100644 (file)
@@ -207,6 +207,9 @@ void MapgenFlat::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);
+
        if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
                        full_node_max.Y <= dungeon_ymax)
                generateDungeons(stone_surface_max_y);
@@ -215,9 +218,6 @@ void MapgenFlat::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
        if (flags & MG_BIOMES)
                dustTopNodes();
index b915cd8f92716a6a68b46b8e92ca156dcf5f645e..68a66bba9937933a31892adea5472cb9a7a8e551 100644 (file)
@@ -218,6 +218,9 @@ void MapgenFractal::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);
+
        if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
                        full_node_max.Y <= dungeon_ymax)
                generateDungeons(stone_surface_max_y);
@@ -226,9 +229,6 @@ void MapgenFractal::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
        if (flags & MG_BIOMES)
                dustTopNodes();
index 3e8f42acf3b2c26af1cf302477d4e7b16174f900..c5be727b97b1ba70d814e4097fcc81a9acfb7451 100644 (file)
@@ -232,6 +232,9 @@ void MapgenV5::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 and desert temples
        if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
                        full_node_max.Y <= dungeon_ymax)
@@ -241,9 +244,6 @@ void MapgenV5::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
        if (flags & MG_BIOMES)
                dustTopNodes();
index e266e29c8da5469146492aa6e94a3a00ac844f44..1354bf25664a391f628e7b43226e3b0c7cef8dd4 100644 (file)
@@ -352,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)
@@ -361,9 +364,6 @@ 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
        if (flags & MG_BIOMES)
                dustTopNodes();
index 0a0f93a75f054c11d643495db8c11d314ffb4d52..404ec585a8c193f5b06f844342156d95c9ca53a4 100644 (file)
@@ -253,6 +253,9 @@ void MapgenValleys::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);
+
        // Dungeon creation
        if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
                        full_node_max.Y <= dungeon_ymax)
@@ -262,9 +265,6 @@ void MapgenValleys::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
        if (flags & MG_BIOMES)
                dustTopNodes();