From 039f374d62012ca8a92ff1e9148a83efed4f5619 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 7 Oct 2025 19:56:56 -0400 Subject: [PATCH] v3.3.0: slightly improved the shape varying logic in TunnelRoom --- .../levels/rooms/connection/TunnelRoom.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/TunnelRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/TunnelRoom.java index 6ffcfdf96..d55018766 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/TunnelRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/TunnelRoom.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.watabou.utils.GameMath; +import com.watabou.utils.PathFinder; import com.watabou.utils.Point; import com.watabou.utils.PointF; import com.watabou.utils.Random; @@ -79,13 +80,14 @@ public class TunnelRoom extends ConnectionRoom { //fill in an extra diagonal tile at center randomly if we're a larger room with many connections //this makes the shape a bit more varied in these cases if (width() >= 7 && height() >= 7 && connected.size() >= 4 && c.square() == 0){ - Point p = new Point(c.left, c.top); - p.x += Random.Int(2) == 0 ? 1 : -1; - p.y += Random.Int(2) == 0 ? 1 : -1; - //also prevent filling a tile outside the room in rare cases - p.x = (int)GameMath.gate(left+1, p.x, right-1); - p.y = (int)GameMath.gate(top+1, p.y, bottom-1); - Painter.set(level, p, floor); + int cell = level.pointToCell(new Point(c.left, c.top)); + int ofs = 2*Random.Int(4); + + //check that it doesn't create and extra tile of tunnel before doing so + if (level.map[cell + PathFinder.CIRCLE8[(ofs+7)%8]] == floor + && level.map[cell + PathFinder.CIRCLE8[(ofs+1)%8]] == floor){ + Painter.set(level, cell + PathFinder.CIRCLE8[ofs], floor); + } } for (Door door : connected.values()) {