From 75e8ba7fd994a3c42cd52468cdf6fedb43f730cc Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 19 Feb 2021 18:58:25 -0500 Subject: [PATCH] v0.9.2: added checks to reduce levelgen hanging --- .../shatteredpixeldungeon/levels/RegularLevel.java | 4 +++- .../levels/rooms/standard/PatchRoom.java | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 05b7d09f2..fb67315b4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -504,7 +504,8 @@ public abstract class RegularLevel extends Level { } protected int randomDropCell( Class roomType ) { - while (true) { + int tries = 100; + while (tries-- > 0) { Room room = randomRoom( roomType ); if (room == null){ return -1; @@ -529,6 +530,7 @@ public abstract class RegularLevel extends Level { } } } + return -1; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/PatchRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/PatchRoom.java index ada608310..f2e77d068 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/PatchRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/PatchRoom.java @@ -33,7 +33,8 @@ public abstract class PatchRoom extends StandardRoom { protected boolean[] patch; protected void setupPatch(Level level, float fill, int clustering, boolean ensurePath){ - + + int attempts = 0; if (ensurePath){ PathFinder.setMapSize(width()-2, height()-2); boolean valid; @@ -69,6 +70,11 @@ public abstract class PatchRoom extends StandardRoom { break; } } + attempts++; + if (attempts > 100){ + fill -= 0.01f; + attempts = 0; + } } while (!valid); PathFinder.setMapSize(level.width(), level.height()); } else {