v2.5.0: fixed very rare cases of cave exit rooms failing to generate

This commit is contained in:
Evan Debenham
2024-09-09 11:14:35 -04:00
parent 1360053784
commit 6c849e85bb

View File

@@ -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){