v3.1.0: small levelgen sewers tweaks:

- fixed tutorial not working with new entrances
- improved internal layout in ring rooms a bit
This commit is contained in:
Evan Debenham
2025-05-01 16:02:47 -04:00
parent 1c135bc16b
commit 4f93e9d8c9
4 changed files with 33 additions and 9 deletions
@@ -57,10 +57,24 @@ public class RingRoom extends StandardRoom {
Painter.fill(level, this, passageWidth+2, centerDecoTiles());
Point center = center();
int xDir = 0, yDir = 0;
//prefer to make the door further away if possible
if (Random.Int(2) == 0) {
xDir = Random.Int(2) == 0 ? 1 : -1;
if (center.x < (left+right)/2f){
xDir = 1;
} else if (center.x > (left+right)/2f){
xDir = -1;
} else {
xDir = Random.Int(2) == 0 ? 1 : -1;
}
} else {
yDir = Random.Int(2) == 0 ? 1 : -1;
if (center.y < (top+bottom)/2f){
yDir = 1;
} else if (center.y > (top+bottom)/2f){
yDir = -1;
} else {
yDir = Random.Int(2) == 0 ? 1 : -1;
}
}
Painter.set(level, center, Terrain.EMPTY_SP);
@@ -95,6 +95,11 @@ public class EntranceRoom extends StandardRoom {
level.transitions.add(new LevelTransition(level, entrance, LevelTransition.Type.REGULAR_ENTRANCE));
}
placeEarlyGuidePages(level, this);
}
public static void placeEarlyGuidePages(Level level, Room r){
//use a separate generator here so meta progression doesn't affect levelgen
Random.pushGenerator();
@@ -104,9 +109,9 @@ public class EntranceRoom extends StandardRoom {
int pos;
do {
//can't be on bottom row of tiles
pos = level.pointToCell(new Point( Random.IntRange( left + 1, right - 1 ),
Random.IntRange( top + 1, bottom - 2 )));
} while (pos == level.entrance() || level.findMob(level.entrance()) != null);
pos = level.pointToCell(new Point( Random.IntRange( r.left + 1, r.right - 1 ),
Random.IntRange( r.top + 1, r.bottom - 2 )));
} while (pos == level.entrance() || level.map[pos] == Terrain.REGION_DECO);
level.drop( new Guidebook(), pos );
Document.ADVENTURERS_GUIDE.deletePage(Document.GUIDE_INTRO);
}
@@ -116,16 +121,15 @@ public class EntranceRoom extends StandardRoom {
int pos;
do {
//can't be on bottom row of tiles
pos = level.pointToCell(new Point( Random.IntRange( left + 1, right - 1 ),
Random.IntRange( top + 1, bottom - 2 )));
} while (pos == level.entrance() || level.findMob(level.entrance()) != null);
pos = level.pointToCell(new Point( Random.IntRange( r.left + 1, r.right - 1 ),
Random.IntRange( r.top + 1, r.bottom - 2 )));
} while (pos == level.entrance() || level.map[pos] == Terrain.REGION_DECO);
GuidePage p = new GuidePage();
p.page(Document.GUIDE_SEARCHING);
level.drop( p, pos );
}
Random.popGenerator();
}
private static ArrayList<Class<?extends StandardRoom>> rooms = new ArrayList<>();
@@ -100,6 +100,9 @@ public class RegionDecoPatchEntranceRoom extends RegionDecoPatchRoom {
} else {
level.transitions.add(new LevelTransition(level, entrance, LevelTransition.Type.REGULAR_ENTRANCE));
}
EntranceRoom.placeEarlyGuidePages(level, this);
}
}
@@ -86,5 +86,8 @@ public class WaterBridgeEntranceRoom extends WaterBridgeRoom {
} else {
level.transitions.add(new LevelTransition(level, entrance, LevelTransition.Type.REGULAR_ENTRANCE));
}
EntranceRoom.placeEarlyGuidePages(level, this);
}
}