v0.9.3: Various levelgen tweaks:

- Entrance and Exit rooms can no longer be connected
- Tunnel room frequency down 25%
- room count variance pulled in a bit
- standard room count reduced by roughly 10%/20%/15%/15%/5% per region
- removed chance for enemies to clump on floor 1
- level contents (items, enemies, etc) unchanged
This commit is contained in:
Evan Debenham 2021-05-16 17:47:53 -04:00
parent f6ed111b3e
commit b0c54f636f
10 changed files with 46 additions and 32 deletions

View File

@ -63,16 +63,16 @@ public class CavesLevel extends RegularLevel {
@Override @Override
protected int standardRooms(boolean forceMax) { protected int standardRooms(boolean forceMax) {
if (forceMax) return 9; if (forceMax) return 7;
//6 to 9, average 7.333 //6 to 7, average 6.333
return 6+Random.chances(new float[]{2, 3, 3, 1}); return 6+Random.chances(new float[]{2, 1});
} }
@Override @Override
protected int specialRooms(boolean forceMax) { protected int specialRooms(boolean forceMax) {
if (forceMax) return 3; if (forceMax) return 3;
//1 to 3, average 2.2 //2 to 3, average 2.2
return 1+Random.chances(new float[]{2, 4, 4}); return 2+Random.chances(new float[]{4, 1});
} }
@Override @Override

View File

@ -58,9 +58,9 @@ public class CityLevel extends RegularLevel {
@Override @Override
protected int standardRooms(boolean forceMax) { protected int standardRooms(boolean forceMax) {
if (forceMax) return 10; if (forceMax) return 8;
//7 to 10, average 8.0 //6 to 8, average 7
return 7+Random.chances(new float[]{4, 3, 2, 1}); return 6+Random.chances(new float[]{1, 3, 1});
} }
@Override @Override

View File

@ -82,9 +82,9 @@ public class HallsLevel extends RegularLevel {
@Override @Override
protected int standardRooms(boolean forceMax) { protected int standardRooms(boolean forceMax) {
if (forceMax) return 10; if (forceMax) return 9;
//8 to 10, average 8.67 //8 to 9, average 8.33
return 8+Random.chances(new float[]{3, 2, 1}); return 8+Random.chances(new float[]{2, 1});
} }
@Override @Override

View File

@ -64,16 +64,16 @@ public class PrisonLevel extends RegularLevel {
@Override @Override
protected int standardRooms(boolean forceMax) { protected int standardRooms(boolean forceMax) {
if (forceMax) return 8; if (forceMax) return 6;
//6 to 8, average 6.75 //5 to 6, average 5.5
return 6+Random.chances(new float[]{4, 2, 2}); return 5+Random.chances(new float[]{1, 1});
} }
@Override @Override
protected int specialRooms(boolean forceMax) { protected int specialRooms(boolean forceMax) {
if (forceMax) return 3; if (forceMax) return 3;
//1 to 3, average 2.0 //1 to 3, average 2.0
return 1+Random.chances(new float[]{3, 4, 3}); return 1+Random.chances(new float[]{1, 3, 1});
} }
@Override @Override

View File

@ -223,8 +223,8 @@ public abstract class RegularLevel extends Level {
mobsToSpawn--; mobsToSpawn--;
mobs.add(mob); mobs.add(mob);
//add a second mob to this room //chance to add a second mob to this room, except on floor 1
if (mobsToSpawn > 0 && Random.Int(4) == 0){ if (Dungeon.depth > 1 && mobsToSpawn > 0 && Random.Int(4) == 0){
mob = createMob(); mob = createMob();
tries = 30; tries = 30;

View File

@ -57,16 +57,16 @@ public class SewerLevel extends RegularLevel {
@Override @Override
protected int standardRooms(boolean forceMax) { protected int standardRooms(boolean forceMax) {
if (forceMax) return 7; if (forceMax) return 6;
//5 to 7, average 5.57 //4 to 6, average 5
return 5+Random.chances(new float[]{4, 2, 1}); return 4+Random.chances(new float[]{1, 3, 1});
} }
@Override @Override
protected int specialRooms(boolean forceMax) { protected int specialRooms(boolean forceMax) {
if (forceMax) return 3; if (forceMax) return 2;
//1 to 3, average 1.8 //1 to 2, average 1.8
return 1+Random.chances(new float[]{4, 4, 2}); return 1+Random.chances(new float[]{1, 4});
} }
@Override @Override

View File

@ -60,8 +60,8 @@ public abstract class RegularBuilder extends Builder {
return this; return this;
} }
protected float[] pathTunnelChances = new float[]{1, 3, 1}; protected float[] pathTunnelChances = new float[]{2, 2, 1};
protected float[] branchTunnelChances = new float[]{2, 2, 1}; protected float[] branchTunnelChances = new float[]{1, 1, 0};
public RegularBuilder setTunnelLength( float[] path, float[] branch){ public RegularBuilder setTunnelLength( float[] path, float[] branch){
pathTunnelChances = path; pathTunnelChances = path;

View File

@ -94,5 +94,12 @@ public class EntranceRoom extends StandardRoom {
Random.popGenerator(); Random.popGenerator();
} }
@Override
public boolean connect(Room room) {
//cannot connect to exit, otherwise works normally
if (room instanceof ExitRoom) return false;
else return super.connect(room);
}
} }

View File

@ -56,4 +56,11 @@ public class ExitRoom extends StandardRoom {
public boolean canPlaceCharacter(Point p, Level l) { public boolean canPlaceCharacter(Point p, Level l) {
return super.canPlaceCharacter(p, l) && l.pointToCell(p) != l.exit; return super.canPlaceCharacter(p, l) && l.pointToCell(p) != l.exit;
} }
@Override
public boolean connect(Room room) {
//cannot connect to entrance, otherwise works normally
if (room instanceof EntranceRoom) return false;
else return super.connect(room);
}
} }

View File

@ -148,21 +148,21 @@ public abstract class StandardRoom extends Room {
private static float[][] chances = new float[27][]; private static float[][] chances = new float[27][];
static { static {
chances[1] = new float[]{15, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,0,1,0,1,0,1,1,0,0}; chances[1] = new float[]{10, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,0,1,0,1,0,1,1,0,0};
chances[2] = new float[]{15, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1}; chances[2] = new float[]{10, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1};
chances[4] = chances[3] = chances[2]; chances[4] = chances[3] = chances[2];
chances[5] = new float[]{15, 10,10,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0,0,0,0,0,0,0,0}; chances[5] = new float[]{10, 10,10,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0,0,0,0,0,0,0,0};
chances[6] = new float[]{15, 0,0,0, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1}; chances[6] = new float[]{10, 0,0,0, 10,10,5, 0,0,0, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1};
chances[10] = chances[9] = chances[8] = chances[7] = chances[6]; chances[10] = chances[9] = chances[8] = chances[7] = chances[6];
chances[11] = new float[]{20, 0,0,0, 0,0,0, 10,10,5, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1}; chances[11] = new float[]{10, 0,0,0, 0,0,0, 10,10,5, 0,0,0, 0,0,0, 1,1,1,1,1,1,1,1,1,1};
chances[15] = chances[14] = chances[13] = chances[12] = chances[11]; chances[15] = chances[14] = chances[13] = chances[12] = chances[11];
chances[16] = new float[]{15, 0,0,0, 0,0,0, 0,0,0, 10,10,5, 0,0,0, 1,1,1,1,1,1,1,1,1,1}; chances[16] = new float[]{10, 0,0,0, 0,0,0, 0,0,0, 10,10,5, 0,0,0, 1,1,1,1,1,1,1,1,1,1};
chances[20] = chances[19] = chances[18] = chances[17] = chances[16]; chances[20] = chances[19] = chances[18] = chances[17] = chances[16];
chances[21] = new float[]{15, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 10,10,5, 1,1,1,1,1,1,1,1,1,1}; chances[21] = new float[]{10, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 10,10,5, 1,1,1,1,1,1,1,1,1,1};
chances[26] = chances[25] = chances[24] = chances[23] = chances[22] = chances[21]; chances[26] = chances[25] = chances[24] = chances[23] = chances[22] = chances[21];
} }