Modernize client code (#6250)
[oweals/minetest.git] / src / mapgen_v7.cpp
index 4b74825fdcd9fbd8edc20ca00b8d1023a06cb886..3ce22dbb18214a924e2851842ed7c1c5b801e8b0 100644 (file)
@@ -238,20 +238,21 @@ int MapgenV7::getSpawnLevelAtPoint(v2s16 p)
        // If mountains are disabled, terrain level is base terrain level.
        // Avoids mid-air spawn where mountain terrain would have been.
        if (!(spflags & MGV7_MOUNTAINS)) {
-               if (y <= water_level || y > max_spawn_y)
+               if (y < water_level || y > max_spawn_y)
                        return MAX_MAP_GENERATION_LIMIT;  // Unsuitable spawn point
                else
-                       // + 1 to not be half-buried in a potential node-deep biome 'dust'
-                       return y + 1;
+                       // y + 2 because y is surface level and due to biome 'dust'
+                       return y + 2;
        }
 
        // Search upwards for first node without mountain terrain
        int iters = 256;
        while (iters > 0 && y <= max_spawn_y) {
-               if (!getMountainTerrainAtPoint(p.X, y + 1, p.Y)) {  // If air above
+               if (!getMountainTerrainAtPoint(p.X, y + 1, p.Y)) {
                        if (y <= water_level || y > max_spawn_y)
                                return MAX_MAP_GENERATION_LIMIT;  // Unsuitable spawn point
                        else
+                               // y + 1 due to biome 'dust'
                                return y + 1;
                }
                y++;
@@ -308,7 +309,10 @@ void MapgenV7::makeChunk(BlockMakeData *data)
 
        // Init biome generator, place biome-specific nodes, and build biomemap
        biomegen->calcBiomeNoise(node_min);
-       MgStoneType stone_type = generateBiomes(biome_zero_level);
+
+       MgStoneType mgstone_type;
+       content_t biome_stone;
+       generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
 
        // Generate caverns, tunnels and classic caves
        if (flags & MG_CAVES) {
@@ -328,7 +332,7 @@ void MapgenV7::makeChunk(BlockMakeData *data)
 
        // Generate dungeons
        if (flags & MG_DUNGEONS)
-               generateDungeons(stone_surface_max_y, stone_type);
+               generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
 
        // Generate the registered decorations
        if (flags & MG_DECORATIONS)
@@ -489,7 +493,7 @@ int MapgenV7::generateTerrain()
        }
 
        //// Place nodes
-       v3s16 em = vm->m_area.getExtent();
+       const v3s16 &em = vm->m_area.getExtent();
        s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
        u32 index2d = 0;