diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java index 29cafb1bf..fe7c38619 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java @@ -28,8 +28,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Patch; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; -import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.watabou.utils.Graph; import com.watabou.utils.PathFinder; @@ -232,12 +232,13 @@ public abstract class RegularPainter extends Painter { } protected boolean joinRooms( Level l, Room r, Room n ) { - - if (!(r instanceof EmptyRoom && n instanceof EmptyRoom)) { + + //FIXME currently this joins rooms a bit too often! Need to think up some limitations + if (!(r instanceof StandardRoom) || !((StandardRoom) r).joinable + || !(n instanceof StandardRoom) || !((StandardRoom) n).joinable) { return false; } - //TODO decide on good probabilities and dimension restrictions Rect w = r.intersect( n ); if (w.left == w.right) { @@ -245,17 +246,7 @@ public abstract class RegularPainter extends Painter { return false; } - if (w.height()+1 == Math.max( r.height(), n.height() )) { - return false; - } - - if (r.width() + n.width() > 10) { - return false; - } - - w.top += 1; - w.bottom -= 0; - + w.top++; w.right++; Painter.fill( l, w.left, w.top, 1, w.height(), Terrain.EMPTY ); @@ -266,17 +257,7 @@ public abstract class RegularPainter extends Painter { return false; } - if (w.width()+1 == Math.max( r.width(), n.width() )) { - return false; - } - - if (r.height() + n.height() > 10) { - return false; - } - - w.left += 1; - w.right -= 0; - + w.left++; w.bottom++; Painter.fill( l, w.left, w.top, w.width(), 1, Terrain.EMPTY ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java index 9dde10fd0..b3252bae0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java @@ -31,6 +31,10 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; public class BlacksmithRoom extends StandardRoom { + + { + joinable = false; //TODO maybe joinable? Could be neat in terms of layout + } @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java index 103d50dfa..33b626861 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CaveRoom.java @@ -26,7 +26,11 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; public class CaveRoom extends PatchRoom { - + + { + joinable = false; + } + @Override public float[] sizeCatProbs() { return new float[]{9, 3, 1}; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CirclePitRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CirclePitRoom.java index 7a521246f..f2a6b8b1e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CirclePitRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CirclePitRoom.java @@ -27,6 +27,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; public class CirclePitRoom extends StandardRoom { + { + joinable = false; + } + @Override public int minWidth() { return Math.max(8, super.minWidth()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EmptyRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EmptyRoom.java index fdd8da63e..bea00b205 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EmptyRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EmptyRoom.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; -//other rooms should only extend emptyRoom if they do not add significant terrain public class EmptyRoom extends StandardRoom { @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java index 44e2dd1a1..6fa625330 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java @@ -32,6 +32,8 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; public class EntranceRoom extends StandardRoom { + + //TODO maybe not joinable? It's a little BS to spawn with enemies @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java index 6326cea8b..54e475c50 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java @@ -28,6 +28,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.watabou.utils.Point; public class ExitRoom extends StandardRoom { + + //TODO maybe not joinable? @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/HallwayRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/HallwayRoom.java index fd3f1a084..1b915d2fc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/HallwayRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/HallwayRoom.java @@ -30,7 +30,11 @@ import com.watabou.utils.PointF; import com.watabou.utils.Random; import com.watabou.utils.Rect; -public class HallwayRoom extends EmptyRoom { +public class HallwayRoom extends StandardRoom { + + { + joinable = false; + } //FIXME lots of copy-pasta from tunnel rooms here @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SegmentedRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SegmentedRoom.java index 866277d2f..0daf5cda5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SegmentedRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SegmentedRoom.java @@ -29,7 +29,11 @@ import com.watabou.utils.Random; import com.watabou.utils.Rect; public class SegmentedRoom extends StandardRoom { - + + { + joinable = false; + } + @Override public int minWidth() { return Math.max(super.minWidth(), 7); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SewerPipeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SewerPipeRoom.java index 0b38a1ca6..0a1e121a1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SewerPipeRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SewerPipeRoom.java @@ -35,6 +35,10 @@ import java.util.ArrayList; public class SewerPipeRoom extends StandardRoom { + { + joinable = false; + } + @Override public int minWidth() { return Math.max(7, super.minWidth()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SkullsRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SkullsRoom.java index f33528bca..8e9a5a621 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SkullsRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SkullsRoom.java @@ -27,6 +27,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; public class SkullsRoom extends StandardRoom { + { + joinable = false; + } + @Override public int minWidth() { return Math.max(7, super.minWidth()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StandardRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StandardRoom.java index 9c1898f7f..afe5db66f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StandardRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StandardRoom.java @@ -29,6 +29,10 @@ import com.watabou.utils.Reflection; import java.util.ArrayList; public abstract class StandardRoom extends Room { + + //whether this room can be joined with other standard rooms + //should usually be set to false by rooms that substantially alter terrain + public boolean joinable = true; public enum SizeCategory { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StudyRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StudyRoom.java index 7c4987bb5..f34db5f92 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StudyRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/StudyRoom.java @@ -30,6 +30,10 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; public class StudyRoom extends StandardRoom { + + { + joinable = false; + } @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SuspiciousChestRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SuspiciousChestRoom.java index 44bda7a09..48f8baaeb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SuspiciousChestRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/SuspiciousChestRoom.java @@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.watabou.utils.Random; -public class SuspiciousChestRoom extends EmptyRoom { +public class SuspiciousChestRoom extends StandardRoom { @Override public int minWidth() { @@ -44,7 +44,8 @@ public class SuspiciousChestRoom extends EmptyRoom { @Override public void paint(Level level) { - super.paint(level); + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1 , Terrain.EMPTY ); Item i = level.findPrizeItem();