Footsteps: Fix offset footstep and shallow water sound bugs
[oweals/minetest.git] / src / dungeongen.cpp
index 5dc87f8b01e3e2b65714ea29db0e795405441145..7825e9e2ce53013639bdc44400b9e36e0a2d738f 100644 (file)
@@ -415,8 +415,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)) &&
-                               vm->m_area.contains(v3s16(p.X - dir.X, p.Y - 1, p.Z - dir.Z))) {
+               // Check segment of minimum size corridor is in voxelmanip
+               if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) {
                        if (make_stairs) {
                                makeFill(p + v3s16(-1, -1, -1),
                                        dp.holesize + v3s16(2, 3, 2),
@@ -444,11 +444,13 @@ void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir,
 
                                        for (u16 st = 0; st < stair_width; st++) {
                                                u32 vi = vm->m_area.index(ps.X - dir.X, ps.Y - 1, ps.Z - dir.Z);
-                                               if (vm->m_data[vi].getContent() == dp.c_wall)
+                                               if (vm->m_area.contains(ps + v3s16(-dir.X, -1, -dir.Z)) &&
+                                                               vm->m_data[vi].getContent() == dp.c_wall)
                                                        vm->m_data[vi] = MapNode(dp.c_stair, 0, facedir);
 
                                                vi = vm->m_area.index(ps.X, ps.Y, ps.Z);
-                                               if (vm->m_data[vi].getContent() == dp.c_wall)
+                                               if (vm->m_area.contains(ps) &&
+                                                               vm->m_data[vi].getContent() == dp.c_wall)
                                                        vm->m_data[vi] = MapNode(dp.c_stair, 0, facedir);
 
                                                ps += swv;
@@ -620,7 +622,7 @@ v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs)
                        dir.Z = random.next() % 3 - 1;
                        dir.Y = 0;
                        dir.X = random.next() % 3 - 1;
-               } while ((dir.X == 0 && dir.Z == 0) && trycount < 10);
+               } while ((dir.X == 0 || dir.Z == 0) && trycount < 10);
 
                return dir;
        } else {