From 792f681c88a6bde1a1cfb0490d84f5aa7a0841c1 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 17 Apr 2024 16:47:08 -0400 Subject: [PATCH] v2.4.0: improved merging behavior for hallway rooms --- .../levels/painters/RegularPainter.java | 8 ++++---- .../shatteredpixeldungeon/levels/rooms/Room.java | 2 +- .../levels/rooms/connection/BridgeRoom.java | 2 +- .../levels/rooms/connection/RingBridgeRoom.java | 2 +- .../levels/rooms/connection/WalkwayRoom.java | 2 +- .../levels/rooms/sewerboss/GooBossRoom.java | 3 ++- .../levels/rooms/standard/BurnedRoom.java | 3 ++- .../levels/rooms/standard/CavesFissureRoom.java | 3 ++- .../levels/rooms/standard/HallwayRoom.java | 11 +++++++++-- .../levels/rooms/standard/MinefieldRoom.java | 3 ++- .../levels/rooms/standard/RuinsRoom.java | 3 ++- .../levels/rooms/standard/SewerPipeRoom.java | 2 +- .../levels/rooms/standard/StandardRoom.java | 2 +- .../levels/rooms/standard/entrance/EntranceRoom.java | 4 ++-- 14 files changed, 31 insertions(+), 19 deletions(-) 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 71844708f..d0e4b8c88 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 @@ -310,12 +310,12 @@ public abstract class RegularPainter extends Painter { merge.top = merge.bottom = start != null ? start.y : intersect.center().y; Point p = new Point(merge.left, merge.top); - while(merge.top > intersect.top && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { + while(merge.top > intersect.top && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) { merge.top--; p.y--; } p.y = merge.bottom; - while(merge.bottom < intersect.bottom && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { + while(merge.bottom < intersect.bottom && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) { merge.bottom++; p.y++; } @@ -334,12 +334,12 @@ public abstract class RegularPainter extends Painter { merge.top = merge.bottom = intersect.top; Point p = new Point(merge.left, merge.top); - while(merge.left > intersect.left && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { + while(merge.left > intersect.left && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) { merge.left--; p.x--; } p.x = merge.right; - while(merge.right < intersect.right && n.canMerge(l, p, mergeTerrain) && r.canMerge(l, p, mergeTerrain)) { + while(merge.right < intersect.right && n.canMerge(l, r, p, mergeTerrain) && r.canMerge(l, n, p, mergeTerrain)) { merge.right++; p.x++; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/Room.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/Room.java index adb30bbe7..3d1fea211 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/Room.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/Room.java @@ -239,7 +239,7 @@ public abstract class Room extends Rect implements Graph.Node, Bundlable { return false; } - public boolean canMerge(Level l, Point p, int mergeTerrain){ + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain){ return false; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/BridgeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/BridgeRoom.java index 51198f2dd..608eb042c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/BridgeRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/BridgeRoom.java @@ -55,7 +55,7 @@ public class BridgeRoom extends TunnelRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return mergeTerrain == Terrain.CHASM; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/RingBridgeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/RingBridgeRoom.java index 126245b25..1ee8b4363 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/RingBridgeRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/RingBridgeRoom.java @@ -52,7 +52,7 @@ public class RingBridgeRoom extends RingTunnelRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return mergeTerrain == Terrain.CHASM; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/WalkwayRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/WalkwayRoom.java index bf3848d39..3082a2ce6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/WalkwayRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/WalkwayRoom.java @@ -55,7 +55,7 @@ public class WalkwayRoom extends PerimeterRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return mergeTerrain == Terrain.CHASM; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/GooBossRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/GooBossRoom.java index 3955bbe4b..7f2401ec5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/GooBossRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/GooBossRoom.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.sewerboss; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; import com.watabou.noosa.Image; @@ -38,7 +39,7 @@ public abstract class GooBossRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return false; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java index a84acfa6b..e534eab5b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BurningTrap; import com.watabou.utils.Point; import com.watabou.utils.Random; @@ -36,7 +37,7 @@ public class BurnedRoom extends PatchRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { int cell = l.pointToCell(pointInside(p, 1)); return l.map[cell] == Terrain.EMPTY; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CavesFissureRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CavesFissureRoom.java index 006fec853..e52cc2e60 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CavesFissureRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/CavesFissureRoom.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.watabou.utils.PathFinder; import com.watabou.utils.Point; import com.watabou.utils.PointF; @@ -49,7 +50,7 @@ public class CavesFissureRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { if (mergeTerrain == Terrain.CHASM) { return true; } else { 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 2641ce61a..7339b94d6 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 @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.watabou.utils.GameMath; import com.watabou.utils.Point; import com.watabou.utils.PointF; @@ -43,8 +44,14 @@ public class HallwayRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { - return false; + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { + return other instanceof HallwayRoom && super.canMerge(l, other, p, mergeTerrain); + } + + @Override + public void merge(Level l, Room other, Rect merge, int mergeTerrain) { + super.merge(l, other, merge, mergeTerrain); + Painter.set(l, connected.get(other), Terrain.EMPTY_SP); } //FIXME lots of copy-pasta from tunnel rooms here diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java index 92a79b11b..513480573 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ExplosiveTrap; import com.watabou.utils.PathFinder; import com.watabou.utils.Point; @@ -37,7 +38,7 @@ public class MinefieldRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { int cell = l.pointToCell(pointInside(p, 1)); return l.map[cell] == Terrain.EMPTY; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/RuinsRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/RuinsRoom.java index 84f03f027..b62b7da06 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/RuinsRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/RuinsRoom.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.watabou.utils.Point; public class RuinsRoom extends PatchRoom { @@ -34,7 +35,7 @@ public class RuinsRoom extends PatchRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return true; } 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 21926b814..d6565b46f 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 @@ -52,7 +52,7 @@ public class SewerPipeRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { return false; } 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 9b61ae678..4f469dbe9 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 @@ -112,7 +112,7 @@ public abstract class StandardRoom extends Room { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { int cell = l.pointToCell(pointInside(p, 1)); return (Terrain.flags[l.map[cell]] & Terrain.SOLID) == 0; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/entrance/EntranceRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/entrance/EntranceRoom.java index 06d429b82..dbd1b4f99 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/entrance/EntranceRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/entrance/EntranceRoom.java @@ -53,11 +53,11 @@ public class EntranceRoom extends StandardRoom { } @Override - public boolean canMerge(Level l, Point p, int mergeTerrain) { + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { if (Dungeon.depth <= 2) { return false; } else { - return super.canMerge(l, p, mergeTerrain); + return super.canMerge(l, other, p, mergeTerrain); } }