X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdungeongen.cpp;h=7825e9e2ce53013639bdc44400b9e36e0a2d738f;hb=984e063374c032ed17764931fd00c19afb92ebb9;hp=5dc87f8b01e3e2b65714ea29db0e795405441145;hpb=d413dfe87c326385be4259afc2830e3e1638bf3c;p=oweals%2Fminetest.git diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp index 5dc87f8b0..7825e9e2c 100644 --- a/src/dungeongen.cpp +++ b/src/dungeongen.cpp @@ -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 {