From 268b804ac6d76620bd596921c83df1710cb71801 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 6 Nov 2023 17:07:27 -0500 Subject: [PATCH] v2.3.0: code refactoring and improved enemy spawn spread in caves quest --- .../levels/RegularLevel.java | 4 ++-- .../levels/builders/RegularBuilder.java | 6 +++--- .../levels/rooms/quest/MineGiantRoom.java | 7 +++++++ .../levels/rooms/quest/MineLargeRoom.java | 7 +++++++ .../rooms/standard/CavesFissureRoom.java | 4 ++-- .../levels/rooms/standard/StandardRoom.java | 18 ++++++++++++++---- 6 files changed, 35 insertions(+), 11 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 497b335da..b919fae24 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -125,7 +125,7 @@ public abstract class RegularLevel extends Level { do { s = StandardRoom.createRoom(); } while (!s.setSizeCat( standards-i )); - i += s.sizeCat.roomValue-1; + i += s.sizeFactor()-1; initRooms.add(s); } @@ -213,7 +213,7 @@ public abstract class RegularLevel extends Level { ArrayList stdRooms = new ArrayList<>(); for (Room room : rooms) { if (room instanceof StandardRoom && room != roomEntrance) { - for (int i = 0; i < ((StandardRoom) room).sizeCat.roomValue; i++) { + for (int i = 0; i < ((StandardRoom) room).mobSpawnWeight(); i++) { stdRooms.add(room); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/RegularBuilder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/RegularBuilder.java index d872ebe1f..d8f46d591 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/RegularBuilder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/RegularBuilder.java @@ -123,7 +123,7 @@ public abstract class RegularBuilder extends Builder { while (roomsOnMainPath > 0 && !multiConnections.isEmpty()){ Room r = multiConnections.remove(0); if (r instanceof StandardRoom){ - roomsOnMainPath -= ((StandardRoom) r).sizeCat.roomValue; + roomsOnMainPath -= ((StandardRoom) r).sizeFactor(); } else { roomsOnMainPath--; } @@ -136,7 +136,7 @@ public abstract class RegularBuilder extends Builder { protected void weightRooms(ArrayList rooms){ for (Room r : rooms.toArray(new Room[0])){ if (r instanceof StandardRoom){ - for (int i = 1; i < ((StandardRoom) r).sizeCat.connectionWeight(); i++) + for (int i = 1; i < ((StandardRoom) r).connectionWeight(); i++) rooms.add(r); } } @@ -228,7 +228,7 @@ public abstract class RegularBuilder extends Builder { } if (r.maxConnections(Room.ALL) > 1 && Random.Int(3) == 0) { if (r instanceof StandardRoom){ - for (int j = 0; j < ((StandardRoom) r).sizeCat.connectionWeight(); j++){ + for (int j = 0; j < ((StandardRoom) r).connectionWeight(); j++){ branchable.add(r); } } else { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java index bb9462593..943e0c6eb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java @@ -47,6 +47,13 @@ public class MineGiantRoom extends CaveRoom { return 0.70f; } + @Override + public int mobSpawnWeight() { + //This room contains the boss + // so don't amp up regular enemy spawns too + return 1; + } + @Override public void paint(Level level) { super.paint(level); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineLargeRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineLargeRoom.java index e805df871..7c404d58c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineLargeRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineLargeRoom.java @@ -61,6 +61,13 @@ public class MineLargeRoom extends CaveRoom { return 0.55f; } + @Override + public int mobSpawnWeight() { + //These rooms always spawn their own enemies + // so don't amp up regular enemy spawns too + return 1; + } + @Override public void paint(Level level) { super.paint(level); 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 8fdc89f6a..d0e65a10d 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 @@ -87,7 +87,7 @@ public class CavesFissureRoom extends StandardRoom { //generate angles for 2-4 fissure lines, they can't be too close to doors or eachother ArrayList lineAngles = new ArrayList<>(); - int numLines = 1 + sizeCat.roomValue; + int numLines = 1 + sizeFactor(); for (int i = 0; i < numLines; i++) { int tries = 100; boolean valid; @@ -190,7 +190,7 @@ public class CavesFissureRoom extends StandardRoom { buildBridge(level, Random.element(lineAngles), center, 1); } else { for (float angle : lineAngles) { - buildBridge(level, angle, center, sizeCat.roomValue); + buildBridge(level, angle, center, sizeFactor()); } } 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 7816049d3..36c45cb38 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 @@ -48,10 +48,6 @@ public abstract class StandardRoom extends Room { roomValue = val; } - public int connectionWeight(){ - return roomValue*roomValue; - } - } public SizeCategory sizeCat; @@ -101,6 +97,20 @@ public abstract class StandardRoom extends Room { public int minHeight() { return sizeCat.minDim; } public int maxHeight() { return sizeCat.maxDim; } + //larger standard rooms generally count as multiple rooms for various counting/weighting purposes + //but there can be exceptions + public int sizeFactor(){ + return sizeCat.roomValue; + } + + public int mobSpawnWeight(){ + return sizeFactor(); + } + + public int connectionWeight(){ + return sizeFactor() * sizeFactor(); + } + @Override public boolean canMerge(Level l, Point p, int mergeTerrain) { int cell = l.pointToCell(pointInside(p, 1));