v2.2.0: numerous improvements to mining/crystal quest cave generation

This commit is contained in:
Evan Debenham
2023-09-21 15:24:55 -04:00
parent 02bcd23378
commit 6dcb16f70a
6 changed files with 61 additions and 13 deletions

View File

@@ -74,20 +74,20 @@ public class MiningLevel extends CavesLevel {
ArrayList<Room> initRooms = new ArrayList<>();
initRooms.add ( roomEntrance = new MineEntrance());
//spawns 1 giant, 3-4 large, and 5-8 regular cave rooms
//spawns 1 giant, 3 large, 6-8 small, and 1-2 secret cave rooms
StandardRoom s;
s = new MineGiantRoom();
s.setSizeCat();
initRooms.add(s);
int rooms = Random.NormalIntRange(3, 4);
int rooms = 3;
for (int i = 0; i < rooms; i++){
s = new MineLargeRoom();
s.setSizeCat();
initRooms.add(s);
}
rooms = Random.NormalIntRange(8, 10);
rooms = Random.NormalIntRange(6, 8);
for (int i = 0; i < rooms; i++){
s = new MineSmallRoom();
s.setSizeCat();

View File

@@ -78,7 +78,7 @@ public class MineEntrance extends EntranceRoom {
LevelTransition.Type.BRANCH_EXIT));
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
for (int i = 0; i < width()*height()/3; i ++){
for (int i = 0; i < width()*height()/2; i ++){
Point r = random(1);
if (level.distance(level.pointToCell(r), entrance) > 1) {
Painter.set(level, r, Terrain.MINE_CRYSTAL);

View File

@@ -46,10 +46,14 @@ public class MineGiantRoom extends CaveRoom {
super.paint(level);
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
Painter.fillEllipse(level, this, 2, Terrain.MINE_CRYSTAL);
Painter.fillEllipse(level, this, 4, Terrain.EMPTY);
for (int i = 0; i < (width()-8)*(height()-8)/3; i ++){
Painter.set(level, random(4), Terrain.MINE_CRYSTAL);
Painter.fillEllipse(level, this, 3, Terrain.MINE_CRYSTAL);
Painter.fillEllipse(level, this, 5, Terrain.EMPTY);
for (int i = 0; i < width()*height()/4; i ++){
Point r = random(1);
if (level.map[level.pointToCell(r)] != Terrain.WALL) {
Painter.set(level, r, Terrain.MINE_CRYSTAL);
}
}
Point p = center();

View File

@@ -27,8 +27,11 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.CaveRoom;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Point;
import java.util.ArrayList;
public class MineLargeRoom extends CaveRoom {
@Override
@@ -36,6 +39,16 @@ public class MineLargeRoom extends CaveRoom {
return new float[]{0, 1, 0};
}
@Override
public int minHeight() {
return 11;
}
@Override
public int minWidth() {
return 11;
}
@Override
protected float fill() {
return 0.55f;
@@ -46,14 +59,30 @@ public class MineLargeRoom extends CaveRoom {
super.paint(level);
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
Painter.fillEllipse(level, this, 2, Terrain.MINE_CRYSTAL);
Painter.fillEllipse(level, this, 3, Terrain.MINE_CRYSTAL);
Painter.fillEllipse(level, this, 4, Terrain.EMPTY);
for (int i = 0; i < (width()-8)*(height()-8)/5; i ++){
Painter.set(level, random(4), Terrain.MINE_CRYSTAL);
Point p = random(5);
ArrayList<Integer> internalcells = new ArrayList<>();
findInternalCells(level, level.pointToCell(p), internalcells);
//we want to ensure that every internal cell has no way out, even diagonally
for (int i : internalcells){
for (int j : PathFinder.CIRCLE8){
if (!internalcells.contains(i+j) && level.map[i+j] != Terrain.MINE_CRYSTAL){
level.map[i] = Terrain.MINE_CRYSTAL;
break;
}
}
}
for (int i = 0; i < width()*height()/4; i ++){
Point r = random(1);
if (level.map[level.pointToCell(r)] != Terrain.WALL) {
Painter.set(level, r, Terrain.MINE_CRYSTAL);
}
}
Point p = random(5);
CrystalGuardian m = new CrystalGuardian();
m.pos = level.pointToCell(p);
level.mobs.add(m);
@@ -65,4 +94,13 @@ public class MineLargeRoom extends CaveRoom {
}
private void findInternalCells(Level level, int cell, ArrayList<Integer> internalCells){
for (int i : PathFinder.NEIGHBOURS4){
if (!internalCells.contains(cell+i) && level.map[cell+i] != Terrain.MINE_CRYSTAL){
internalCells.add(cell+i);
findInternalCells(level, cell+i, internalCells);
}
}
}
}

View File

@@ -51,7 +51,7 @@ public class MineSmallRoom extends CaveRoom {
super.paint(level);
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
for (int i = 0; i < width()*height()/5; i ++){
for (int i = 0; i < width()*height()/3; i ++){
Point r = random(1);
if (level.map[level.pointToCell(r)] != Terrain.WALL) {
Painter.set(level, r, Terrain.MINE_CRYSTAL);

View File

@@ -61,6 +61,12 @@ public abstract class CrystalGuardianSprite extends MobSprite {
play(crumple);
}
public void endCrumple(){
if (curAnim == crumple){
idle();
}
}
@Override
public void link(Char ch) {
super.link(ch);