v1.2.0: adjusted the secrets level feeling, prevents isolated rooms

This commit is contained in:
Evan Debenham 2022-03-07 23:14:11 -05:00
parent 3c8e5c48dd
commit f34c6f3471

View File

@ -28,6 +28,7 @@ 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.connection.ConnectionRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
@ -204,6 +205,38 @@ public abstract class RegularPainter extends Painter {
if (d.type == Room.Door.Type.REGULAR){
if (Random.Float() < hiddenDoorChance) {
d.type = Room.Door.Type.HIDDEN;
//all standard rooms must have an unbroken path to all other standard rooms
if (l.feeling != Level.Feeling.SECRETS){
Graph.buildDistanceMap(rooms, r);
if (n.distance == Integer.MAX_VALUE){
d.type = Room.Door.Type.UNLOCKED;
}
//on a secrets level, rooms just have to not be totally isolated
} else {
int roomsInGraph = 0;
Graph.buildDistanceMap(rooms, r);
for (Room rDest : rooms){
if (rDest.distance != Integer.MAX_VALUE
&& !(rDest instanceof ConnectionRoom)){
roomsInGraph++;
}
}
if (roomsInGraph < 2){
d.type = Room.Door.Type.UNLOCKED;
} else {
roomsInGraph = 0;
Graph.buildDistanceMap(rooms, n);
for (Room nDest : rooms){
if (nDest.distance != Integer.MAX_VALUE
&& !(nDest instanceof ConnectionRoom)){
roomsInGraph++;
}
}
if (roomsInGraph < 2){
d.type = Room.Door.Type.UNLOCKED;
}
}
}
Graph.buildDistanceMap(rooms, r);
//don't hide if it would make this room only accessible by hidden doors
//unless we're on a secrets depth