]> git.lizzy.rs Git - minetest.git/blobdiff - src/dungeongen.cpp
Mapgen: Don't spread light of nodes outside the desired area
[minetest.git] / src / dungeongen.cpp
index 9c6e24a603efe3f164ac944b8e2cc9bb244a42bb..ce92319e642040f0cf074d284aa0bbd1bb9dbcf6 100644 (file)
@@ -65,6 +65,11 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams)
                dp.np_wetness = nparams_dungeon_wetness;
                dp.np_density = nparams_dungeon_density;
        }
+
+       // For mapgens using river water
+       dp.c_river_water = mg->ndef->getId("mapgen_river_water_source");
+       if (dp.c_river_water == CONTENT_IGNORE)
+               dp.c_river_water = mg->ndef->getId("mapgen_water_source");
 }
 
 
@@ -87,7 +92,7 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax)
                        u32 i = vm->m_area.index(nmin.X, y, z);
                        for (s16 x = nmin.X; x <= nmax.X; x++) {
                                content_t c = vm->m_data[i].getContent();
-                               if (c == CONTENT_AIR || c == dp.c_water)
+                               if (c == CONTENT_AIR || c == dp.c_water || c == dp.c_river_water)
                                        vm->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE;
                                i++;
                        }
@@ -389,7 +394,8 @@ void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir,
                if (partcount != 0)
                        p.Y += make_stairs;
 
-               if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) {
+               if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0)) &&
+                               vm->m_area.contains(v3s16(p.X - dir.X, p.Y - 1, p.Z - dir.Z))) {
                        if (make_stairs) {
                                makeFill(p + v3s16(-1, -1, -1),
                                        dp.holesize + v3s16(2, 3, 2),