diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/exit/CaveExitRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/exit/CaveExitRoom.java index 0601633a5..18a605d67 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/exit/CaveExitRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/exit/CaveExitRoom.java @@ -57,10 +57,24 @@ public class CaveExitRoom extends CaveRoom { super.paint(level); int exit; + int tries = 30; + boolean valid; do { exit = level.pointToCell(random(2)); - } while (level.map[exit] == Terrain.WALL || level.findMob(exit) != null); + //need extra logic here as these rooms can spawn small and cramped in very rare cases + if (tries-- > 0){ + valid = level.map[exit] != Terrain.WALL && level.findMob(exit) == null; + } else { + valid = false; + for (int i : PathFinder.NEIGHBOURS4){ + if (level.map[exit+i] != Terrain.WALL){ + valid = true; + } + } + valid = valid && level.findMob(exit) == null; + } + } while (!valid); Painter.set( level, exit, Terrain.EXIT ); for (int i : PathFinder.NEIGHBOURS8){