v0.9.1: made merged room logic much more permissive (too much atm!)

This commit is contained in:
Evan Debenham 2020-10-19 14:55:54 -04:00
parent 1e555ddd7f
commit 81ea918406
14 changed files with 53 additions and 32 deletions

View File

@ -28,8 +28,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Patch; import com.shatteredpixel.shatteredpixeldungeon.levels.Patch;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
import com.watabou.utils.Graph; import com.watabou.utils.Graph;
import com.watabou.utils.PathFinder; import com.watabou.utils.PathFinder;
@ -233,11 +233,12 @@ public abstract class RegularPainter extends Painter {
protected boolean joinRooms( Level l, Room r, Room n ) { protected boolean joinRooms( Level l, Room r, Room n ) {
if (!(r instanceof EmptyRoom && n instanceof EmptyRoom)) { //FIXME currently this joins rooms a bit too often! Need to think up some limitations
if (!(r instanceof StandardRoom) || !((StandardRoom) r).joinable
|| !(n instanceof StandardRoom) || !((StandardRoom) n).joinable) {
return false; return false;
} }
//TODO decide on good probabilities and dimension restrictions
Rect w = r.intersect( n ); Rect w = r.intersect( n );
if (w.left == w.right) { if (w.left == w.right) {
@ -245,17 +246,7 @@ public abstract class RegularPainter extends Painter {
return false; return false;
} }
if (w.height()+1 == Math.max( r.height(), n.height() )) { w.top++;
return false;
}
if (r.width() + n.width() > 10) {
return false;
}
w.top += 1;
w.bottom -= 0;
w.right++; w.right++;
Painter.fill( l, w.left, w.top, 1, w.height(), Terrain.EMPTY ); Painter.fill( l, w.left, w.top, 1, w.height(), Terrain.EMPTY );
@ -266,17 +257,7 @@ public abstract class RegularPainter extends Painter {
return false; return false;
} }
if (w.width()+1 == Math.max( r.width(), n.width() )) { w.left++;
return false;
}
if (r.height() + n.height() > 10) {
return false;
}
w.left += 1;
w.right -= 0;
w.bottom++; w.bottom++;
Painter.fill( l, w.left, w.top, w.width(), 1, Terrain.EMPTY ); Painter.fill( l, w.left, w.top, w.width(), 1, Terrain.EMPTY );

View File

@ -32,6 +32,10 @@ import com.watabou.utils.Random;
public class BlacksmithRoom extends StandardRoom { public class BlacksmithRoom extends StandardRoom {
{
joinable = false; //TODO maybe joinable? Could be neat in terms of layout
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(super.minWidth(), 6); return Math.max(super.minWidth(), 6);

View File

@ -27,6 +27,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
public class CaveRoom extends PatchRoom { public class CaveRoom extends PatchRoom {
{
joinable = false;
}
@Override @Override
public float[] sizeCatProbs() { public float[] sizeCatProbs() {
return new float[]{9, 3, 1}; return new float[]{9, 3, 1};

View File

@ -27,6 +27,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
public class CirclePitRoom extends StandardRoom { public class CirclePitRoom extends StandardRoom {
{
joinable = false;
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(8, super.minWidth()); return Math.max(8, super.minWidth());

View File

@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
//other rooms should only extend emptyRoom if they do not add significant terrain
public class EmptyRoom extends StandardRoom { public class EmptyRoom extends StandardRoom {
@Override @Override

View File

@ -33,6 +33,8 @@ import com.watabou.utils.Random;
public class EntranceRoom extends StandardRoom { public class EntranceRoom extends StandardRoom {
//TODO maybe not joinable? It's a little BS to spawn with enemies
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(super.minWidth(), 5); return Math.max(super.minWidth(), 5);

View File

@ -29,6 +29,8 @@ import com.watabou.utils.Point;
public class ExitRoom extends StandardRoom { public class ExitRoom extends StandardRoom {
//TODO maybe not joinable?
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(super.minWidth(), 5); return Math.max(super.minWidth(), 5);

View File

@ -30,7 +30,11 @@ import com.watabou.utils.PointF;
import com.watabou.utils.Random; import com.watabou.utils.Random;
import com.watabou.utils.Rect; import com.watabou.utils.Rect;
public class HallwayRoom extends EmptyRoom { public class HallwayRoom extends StandardRoom {
{
joinable = false;
}
//FIXME lots of copy-pasta from tunnel rooms here //FIXME lots of copy-pasta from tunnel rooms here
@Override @Override

View File

@ -30,6 +30,10 @@ import com.watabou.utils.Rect;
public class SegmentedRoom extends StandardRoom { public class SegmentedRoom extends StandardRoom {
{
joinable = false;
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(super.minWidth(), 7); return Math.max(super.minWidth(), 7);

View File

@ -35,6 +35,10 @@ import java.util.ArrayList;
public class SewerPipeRoom extends StandardRoom { public class SewerPipeRoom extends StandardRoom {
{
joinable = false;
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(7, super.minWidth()); return Math.max(7, super.minWidth());

View File

@ -27,6 +27,10 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
public class SkullsRoom extends StandardRoom { public class SkullsRoom extends StandardRoom {
{
joinable = false;
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(7, super.minWidth()); return Math.max(7, super.minWidth());

View File

@ -30,6 +30,10 @@ import java.util.ArrayList;
public abstract class StandardRoom extends Room { public abstract class StandardRoom extends Room {
//whether this room can be joined with other standard rooms
//should usually be set to false by rooms that substantially alter terrain
public boolean joinable = true;
public enum SizeCategory { public enum SizeCategory {
NORMAL(4, 10, 1), NORMAL(4, 10, 1),

View File

@ -31,6 +31,10 @@ import com.watabou.utils.Random;
public class StudyRoom extends StandardRoom { public class StudyRoom extends StandardRoom {
{
joinable = false;
}
@Override @Override
public int minWidth() { public int minWidth() {
return Math.max(super.minWidth(), 7); return Math.max(super.minWidth(), 7);

View File

@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.watabou.utils.Random; import com.watabou.utils.Random;
public class SuspiciousChestRoom extends EmptyRoom { public class SuspiciousChestRoom extends StandardRoom {
@Override @Override
public int minWidth() { public int minWidth() {
@ -44,7 +44,8 @@ public class SuspiciousChestRoom extends EmptyRoom {
@Override @Override
public void paint(Level level) { public void paint(Level level) {
super.paint(level); Painter.fill( level, this, Terrain.WALL );
Painter.fill( level, this, 1 , Terrain.EMPTY );
Item i = level.findPrizeItem(); Item i = level.findPrizeItem();