v2.2.0: numerous improvements to mining/crystal quest cave generation
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user