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<>();
|
ArrayList<Room> initRooms = new ArrayList<>();
|
||||||
initRooms.add ( roomEntrance = new MineEntrance());
|
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;
|
StandardRoom s;
|
||||||
s = new MineGiantRoom();
|
s = new MineGiantRoom();
|
||||||
s.setSizeCat();
|
s.setSizeCat();
|
||||||
initRooms.add(s);
|
initRooms.add(s);
|
||||||
|
|
||||||
int rooms = Random.NormalIntRange(3, 4);
|
int rooms = 3;
|
||||||
for (int i = 0; i < rooms; i++){
|
for (int i = 0; i < rooms; i++){
|
||||||
s = new MineLargeRoom();
|
s = new MineLargeRoom();
|
||||||
s.setSizeCat();
|
s.setSizeCat();
|
||||||
initRooms.add(s);
|
initRooms.add(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
rooms = Random.NormalIntRange(8, 10);
|
rooms = Random.NormalIntRange(6, 8);
|
||||||
for (int i = 0; i < rooms; i++){
|
for (int i = 0; i < rooms; i++){
|
||||||
s = new MineSmallRoom();
|
s = new MineSmallRoom();
|
||||||
s.setSizeCat();
|
s.setSizeCat();
|
||||||
|
|||||||
+1
-1
@@ -78,7 +78,7 @@ public class MineEntrance extends EntranceRoom {
|
|||||||
LevelTransition.Type.BRANCH_EXIT));
|
LevelTransition.Type.BRANCH_EXIT));
|
||||||
|
|
||||||
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
|
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);
|
Point r = random(1);
|
||||||
if (level.distance(level.pointToCell(r), entrance) > 1) {
|
if (level.distance(level.pointToCell(r), entrance) > 1) {
|
||||||
Painter.set(level, r, Terrain.MINE_CRYSTAL);
|
Painter.set(level, r, Terrain.MINE_CRYSTAL);
|
||||||
|
|||||||
+8
-4
@@ -46,10 +46,14 @@ public class MineGiantRoom extends CaveRoom {
|
|||||||
super.paint(level);
|
super.paint(level);
|
||||||
|
|
||||||
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
|
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);
|
Painter.fillEllipse(level, this, 5, Terrain.EMPTY);
|
||||||
for (int i = 0; i < (width()-8)*(height()-8)/3; i ++){
|
|
||||||
Painter.set(level, random(4), Terrain.MINE_CRYSTAL);
|
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();
|
Point p = center();
|
||||||
|
|||||||
+42
-4
@@ -27,8 +27,11 @@ 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;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.CaveRoom;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.CaveRoom;
|
||||||
|
import com.watabou.utils.PathFinder;
|
||||||
import com.watabou.utils.Point;
|
import com.watabou.utils.Point;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class MineLargeRoom extends CaveRoom {
|
public class MineLargeRoom extends CaveRoom {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -36,6 +39,16 @@ public class MineLargeRoom extends CaveRoom {
|
|||||||
return new float[]{0, 1, 0};
|
return new float[]{0, 1, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int minHeight() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int minWidth() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float fill() {
|
protected float fill() {
|
||||||
return 0.55f;
|
return 0.55f;
|
||||||
@@ -46,14 +59,30 @@ public class MineLargeRoom extends CaveRoom {
|
|||||||
super.paint(level);
|
super.paint(level);
|
||||||
|
|
||||||
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
|
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);
|
Painter.fillEllipse(level, this, 4, Terrain.EMPTY);
|
||||||
|
|
||||||
for (int i = 0; i < (width()-8)*(height()-8)/5; i ++){
|
Point p = random(5);
|
||||||
Painter.set(level, random(4), Terrain.MINE_CRYSTAL);
|
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();
|
CrystalGuardian m = new CrystalGuardian();
|
||||||
m.pos = level.pointToCell(p);
|
m.pos = level.pointToCell(p);
|
||||||
level.mobs.add(m);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -51,7 +51,7 @@ public class MineSmallRoom extends CaveRoom {
|
|||||||
super.paint(level);
|
super.paint(level);
|
||||||
|
|
||||||
if (Blacksmith.Quest.Type() == Blacksmith.Quest.CRYSTAL){
|
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);
|
Point r = random(1);
|
||||||
if (level.map[level.pointToCell(r)] != Terrain.WALL) {
|
if (level.map[level.pointToCell(r)] != Terrain.WALL) {
|
||||||
Painter.set(level, r, Terrain.MINE_CRYSTAL);
|
Painter.set(level, r, Terrain.MINE_CRYSTAL);
|
||||||
|
|||||||
+6
@@ -61,6 +61,12 @@ public abstract class CrystalGuardianSprite extends MobSprite {
|
|||||||
play(crumple);
|
play(crumple);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void endCrumple(){
|
||||||
|
if (curAnim == crumple){
|
||||||
|
idle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void link(Char ch) {
|
public void link(Char ch) {
|
||||||
super.link(ch);
|
super.link(ch);
|
||||||
|
|||||||
Reference in New Issue
Block a user