From 679c2c210b848930c32347f79e782d486f613c79 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 14:17:37 -0500 Subject: [PATCH] v3.3.5: added a check to grid builder in case it can't place rooms --- .../levels/builders/GridBuilder.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java index 346836cdb..debb4cd90 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java @@ -78,7 +78,8 @@ public class GridBuilder extends Builder { //this effectively puts a limit of -99 < x < 999 and -99 < y < inf. on level sizes in rooms SparseArray gridCells = new SparseArray<>(); gridCells.put(100_100, entrance); - for (Room r : toPlace){ + while (!toPlace.isEmpty()) { + Room r = toPlace.remove(0); int cellWidth = 1; int cellHeight = 1; //TODO this works on rigid multiples atm, would be nicer to buffer rooms that don't work on that @@ -98,8 +99,14 @@ public class GridBuilder extends Builder { cellWidth = cellHeight = 2; } } + int tries = 0; do { r.neigbours.clear(); + tries++; + if (tries > 30) { + toPlace.add(r); //can't place for now, put it into the back of to place list + break; + } int[] keys = gridCells.keyArray(); int nIdx = keys[Random.Int(keys.length)]; Room n = gridCells.get(nIdx, null);