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
protected int standardRooms(boolean forceMax) {
if (forceMax) return 9;
//6 to 9, average 7.333
return 6+Random.chances(new float[]{2, 3, 3, 1});
if (forceMax) return 7;
//6 to 7, average 6.333
return 6+Random.chances(new float[]{2, 1});
}
@Override
protected int specialRooms(boolean forceMax) {
if (forceMax) return 3;
//1 to 3, average 2.2
return 1+Random.chances(new float[]{2, 4, 4});
//2 to 3, average 2.2
return 2+Random.chances(new float[]{4, 1});
}
@Override

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -95,4 +95,11 @@ public class EntranceRoom extends StandardRoom {
}
@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) {
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][];
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[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[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[]{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[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[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[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[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];
}