Update 2023-3-18 p3 beta4.6
Add wheels, deploy bosses, and get ready to build
This commit is contained in:
parent
ac39650036
commit
69016037a5
|
@ -329,7 +329,7 @@ public class SlimeKing extends Mob {
|
|||
Badges.validateBossSlain();
|
||||
// Badges.KILLSLIMKING();
|
||||
yell( Messages.get(this, "defeated") );
|
||||
for (Mob mob : (Iterable<Mob>)Dungeon.level.mobs.clone()) {
|
||||
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if ( mob instanceof Swarm||
|
||||
mob instanceof Crab||
|
||||
mob instanceof Rat||
|
||||
|
|
|
@ -32,13 +32,10 @@ public class DiamondKnight extends Boss {
|
|||
|
||||
{
|
||||
spriteClass = DimandKingSprite.class;
|
||||
|
||||
HP = HT = 240;
|
||||
defenseSkill = 12;
|
||||
|
||||
initProperty();
|
||||
initBaseStatus(14, 23, 33, 22, 200, 5, 12);
|
||||
initStatus(50);
|
||||
initBaseStatus(14, 23, 33, 22, 420, 5, 12);
|
||||
initStatus(80);
|
||||
|
||||
maxLvl = 30;
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ public enum Catalog {
|
|||
SCROLLS,
|
||||
BOOKS,
|
||||
PLAYBOOKS;
|
||||
|
||||
|
||||
private LinkedHashMap<Class<? extends Item>, Boolean> seen = new LinkedHashMap<>();
|
||||
|
||||
public Collection<Class<? extends Item>> items(){
|
||||
|
@ -201,11 +201,11 @@ public enum Catalog {
|
|||
WEAPONS.seen.put( Greataxe.class, false);
|
||||
WEAPONS.seen.put( Greatshield.class, false);
|
||||
WEAPONS.seen.put( Gauntlet.class, false);
|
||||
//WEAPONS.seen.put( GreenSword.class, false);
|
||||
|
||||
WEAPONS.seen.put( LockSword.class, false);
|
||||
WEAPONS.seen.put( SkyShield.class, false);
|
||||
WEAPONS.seen.put( Dairikyan.class, false);
|
||||
//WEAPONS.seen.put( BlackDog.class, false);
|
||||
|
||||
WEAPONS.seen.put( IceFishSword.class, false);
|
||||
WEAPONS.seen.put( FireFishSword.class, false);
|
||||
|
||||
|
|
|
@ -1,19 +1,39 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.START;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.DiamondKnight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
//宝藏迷宫 10层
|
||||
public class ColdChestBossLevel extends Level {
|
||||
|
||||
private State pro;
|
||||
|
||||
private DiamondKnight diamond;
|
||||
|
||||
public State pro(){
|
||||
return pro;
|
||||
}
|
||||
private static final String PRO = "pro";
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
super.restoreFromBundle(bundle);
|
||||
pro = bundle.getEnum(PRO, State.class);
|
||||
}
|
||||
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(PRO, pro);
|
||||
}
|
||||
|
||||
//地图状态
|
||||
public enum State {
|
||||
|
@ -33,7 +53,7 @@ public class ColdChestBossLevel extends Level {
|
|||
this.entrance = 0;
|
||||
this.exit = 0;
|
||||
//首次构建地图
|
||||
pro = State.START;
|
||||
pro = START;
|
||||
setMapStart();
|
||||
|
||||
return true;
|
||||
|
@ -47,6 +67,7 @@ public class ColdChestBossLevel extends Level {
|
|||
private static final short P = Terrain.EMPTY_SP;
|
||||
private static final short B = Terrain.EMPTY_SP;
|
||||
private static final short K = Terrain.EMPTY;
|
||||
private static final short L = Terrain.EMPTY;
|
||||
private static final short D = Terrain.DOOR;
|
||||
private static final short T = Terrain.PEDESTAL;
|
||||
|
||||
|
@ -89,17 +110,121 @@ public class ColdChestBossLevel extends Level {
|
|||
|
||||
};
|
||||
|
||||
private static final int[] MazeRoom = {
|
||||
W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,
|
||||
W,J,L,L,L,L,W,L,W,L,W,W,W,W,W,L,L,L,W,W,W,W,W,W,L,L,L,L,W,L,W,W,W,L,W,
|
||||
W,W,W,W,W,L,W,L,W,L,W,W,W,W,W,L,W,W,W,W,W,W,W,W,L,W,L,L,W,L,W,W,W,L,W,
|
||||
W,W,W,L,L,L,W,L,L,L,W,L,L,L,W,L,L,L,W,L,L,L,L,L,L,W,L,L,W,L,W,W,W,L,W,
|
||||
W,W,W,L,W,W,W,L,W,W,W,L,W,L,L,L,L,L,W,L,L,L,L,W,W,W,L,L,L,L,L,L,W,L,W,
|
||||
W,L,L,L,W,L,L,L,L,L,L,L,W,L,W,L,W,L,W,W,W,L,L,W,L,L,L,L,L,L,W,L,W,L,W,
|
||||
W,L,W,L,W,L,W,W,W,W,W,W,W,W,W,L,W,L,W,L,L,L,L,W,L,L,W,W,W,W,W,L,W,L,W,
|
||||
W,W,W,L,L,L,L,L,L,W,L,W,L,L,W,L,W,W,W,L,L,W,W,W,L,L,L,L,L,L,W,W,W,L,W,
|
||||
W,W,W,L,W,W,W,W,W,W,L,W,L,L,W,L,W,L,L,L,L,W,L,W,L,L,W,W,W,L,W,L,L,L,W,
|
||||
W,W,W,L,L,W,L,W,L,L,L,L,L,L,W,L,W,W,W,W,W,W,L,W,L,L,L,L,W,L,W,L,L,L,W,
|
||||
W,W,W,L,L,W,L,W,L,W,W,W,W,W,W,L,W,L,W,L,L,W,L,W,L,L,W,L,W,L,L,L,W,L,W,
|
||||
W,W,W,L,L,L,L,W,L,L,W,L,L,L,W,L,L,L,W,L,L,W,L,W,L,L,W,L,W,L,W,W,W,L,W,
|
||||
W,W,W,W,W,W,L,L,L,L,W,L,L,L,W,L,W,W,W,L,L,L,L,L,L,L,W,L,L,L,L,L,W,L,W,
|
||||
W,W,W,L,L,L,L,L,L,L,W,L,L,L,L,L,W,W,W,L,L,W,L,W,L,L,W,W,W,W,L,W,W,L,W,
|
||||
W,W,W,W,W,L,L,W,L,L,L,L,L,L,L,L,W,W,W,L,L,W,L,W,L,L,L,L,L,L,L,L,W,L,W,
|
||||
W,W,W,L,L,L,W,W,L,W,W,W,L,W,L,L,L,L,W,L,W,W,W,W,W,L,L,L,L,L,L,L,W,L,W,
|
||||
W,W,W,L,L,L,L,W,L,W,W,W,L,W,L,L,L,L,W,L,L,W,L,L,L,L,L,W,W,W,W,W,W,L,W,
|
||||
W,W,W,L,L,L,L,W,L,W,W,W,L,W,L,L,W,L,L,L,L,W,L,W,L,L,L,L,L,L,L,L,L,L,W,
|
||||
W,W,W,L,W,W,W,W,L,L,L,L,L,L,L,L,W,L,L,L,L,W,L,W,W,W,L,L,W,L,L,L,L,W,W,
|
||||
W,W,W,L,L,L,L,W,L,L,L,L,L,L,L,L,W,W,W,W,L,L,L,W,L,W,W,L,W,W,W,W,W,W,W,
|
||||
W,W,W,L,L,L,L,W,L,L,L,L,W,W,W,L,W,L,L,L,L,L,L,W,L,L,L,L,L,L,L,L,L,W,W,
|
||||
W,L,L,L,L,L,L,L,L,L,L,L,W,L,L,L,W,L,W,W,W,W,L,W,L,W,W,W,W,W,W,W,L,W,W,
|
||||
W,L,W,L,L,W,W,W,W,L,W,W,W,W,W,W,W,L,L,L,L,W,L,L,L,L,L,L,L,L,L,W,L,L,W,
|
||||
W,L,W,L,L,L,L,L,W,L,L,L,L,L,W,L,W,W,W,W,L,W,L,L,L,L,L,L,W,L,L,W,L,L,W,
|
||||
W,L,W,W,W,W,L,L,W,L,L,W,W,W,W,L,L,W,L,W,L,W,L,L,W,W,W,L,W,L,L,L,L,L,W,
|
||||
W,W,W,L,L,L,L,L,W,L,L,L,L,L,W,L,L,W,L,L,L,W,L,L,L,L,W,L,W,W,W,W,W,W,W,
|
||||
W,W,W,L,W,L,W,W,W,L,L,L,W,L,W,L,L,W,W,W,L,W,W,W,W,W,W,L,W,L,L,L,L,L,W,
|
||||
W,W,W,L,W,L,L,L,W,L,L,L,W,L,W,L,L,W,L,L,L,L,L,L,L,L,W,L,L,L,W,W,W,L,W,
|
||||
W,W,W,L,W,L,L,W,W,L,W,L,W,L,L,L,L,W,L,W,W,W,L,W,L,L,W,L,W,L,W,L,W,L,W,
|
||||
W,W,W,W,W,L,L,W,W,L,W,L,W,L,W,W,W,W,L,L,W,L,L,W,L,L,L,L,W,L,W,W,W,L,W,
|
||||
W,W,W,L,L,L,W,W,W,L,W,L,W,L,L,W,L,L,L,L,L,L,L,W,L,L,L,L,W,L,L,L,L,L,W,
|
||||
W,W,W,L,W,L,L,L,W,L,W,L,W,L,L,W,L,W,W,W,W,W,L,W,W,W,W,W,W,W,W,W,W,W,W,
|
||||
W,W,W,L,W,L,W,L,W,W,W,W,W,L,W,W,L,L,L,L,W,L,L,L,W,L,L,L,W,L,L,L,W,L,W,
|
||||
W,L,L,L,W,L,W,L,L,L,L,L,L,L,L,W,W,W,W,W,W,L,W,L,L,L,W,L,L,L,W,L,L,X,W,
|
||||
W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,
|
||||
};
|
||||
|
||||
|
||||
private void setMapStart() {
|
||||
entrance = HOME;
|
||||
map = WorldRoomShort.clone();
|
||||
}
|
||||
|
||||
private void setMazeStart() {
|
||||
entrance = HOME;
|
||||
map = MazeRoom.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void occupyCell(Char ch) {
|
||||
super.occupyCell(ch);
|
||||
|
||||
if (ch == Dungeon.hero){
|
||||
switch (pro){
|
||||
case START:
|
||||
if (map[getBossDoor] == Terrain.DOOR && ch.pos == LDBossDoor) {
|
||||
progress();
|
||||
}
|
||||
break;
|
||||
case MAZE_START:
|
||||
changeMap(MazeRoom);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if(mob instanceof DiamondKnight && mob.HP >400){
|
||||
GLog.n("ColdChestBoss");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void cleanMapState(){
|
||||
buildFlagMaps();
|
||||
cleanWalls();
|
||||
|
||||
BArray.setFalse(visited);
|
||||
BArray.setFalse(mapped);
|
||||
|
||||
for (Blob blob: blobs.values()){
|
||||
blob.fullyClear();
|
||||
}
|
||||
addVisuals(); //this also resets existing visuals
|
||||
traps.clear();
|
||||
|
||||
GameScene.resetMap();
|
||||
Dungeon.observe();
|
||||
}
|
||||
|
||||
public void progress(){
|
||||
switch (pro) {
|
||||
case START:
|
||||
//如果有生物来到BossDoor的下一个坐标,且生物是玩家,那么触发seal().
|
||||
seal();
|
||||
DiamondKnight boss = new DiamondKnight();
|
||||
boss.state = boss.WANDERING;
|
||||
boss.pos = WIDTH*19+17;
|
||||
GameScene.add( boss );
|
||||
set( getBossDoor, Terrain.LOCKED_DOOR );
|
||||
GameScene.updateMap( getBossDoor );
|
||||
set( HOME, Terrain.EMPTY );
|
||||
GameScene.updateMap( HOME );
|
||||
Dungeon.observe();
|
||||
break;
|
||||
case MAZE_START:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void createMobs() {
|
||||
|
||||
|
@ -109,32 +234,6 @@ public class ColdChestBossLevel extends Level {
|
|||
private static final int LDBossDoor = WIDTH*12+17;
|
||||
private static final int HOME = WIDTH*2+17;
|
||||
|
||||
@Override
|
||||
public void seal() {
|
||||
super.seal();
|
||||
|
||||
DiamondKnight boss = new DiamondKnight();
|
||||
boss.state = boss.WANDERING;
|
||||
boss.pos = WIDTH*19+17;
|
||||
GameScene.add( boss );
|
||||
set( getBossDoor, Terrain.LOCKED_DOOR );
|
||||
GameScene.updateMap( getBossDoor );
|
||||
set( HOME, Terrain.EMPTY );
|
||||
GameScene.updateMap( HOME );
|
||||
Dungeon.observe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void occupyCell( Char ch ) {
|
||||
|
||||
super.occupyCell( ch );
|
||||
|
||||
//如果有生物来到BossDoor的下一个坐标,且生物是玩家,那么触发seal().
|
||||
if (map[getBossDoor] == Terrain.DOOR && ch.pos == LDBossDoor && ch == Dungeon.hero) {
|
||||
seal();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createItems() {
|
||||
|
||||
|
|
|
@ -101,6 +101,37 @@ import java.util.HashMap;
|
|||
import java.util.HashSet;
|
||||
|
||||
public abstract class Level implements Bundlable {
|
||||
|
||||
//静态地图改变的轮子调用
|
||||
public void changeMap(int[] map){
|
||||
//构建全新地图,通过MAPCSV构建,并清理当前地块
|
||||
this.map = map.clone();
|
||||
buildFlagMaps();
|
||||
cleanWalls();
|
||||
|
||||
//自动获取出入口
|
||||
exit = entrance = 0;
|
||||
for (int i = 0; i < length(); i ++)
|
||||
if (map[i] == Terrain.ENTRANCE)
|
||||
entrance = i;
|
||||
else if (map[i] == Terrain.EXIT)
|
||||
exit = i;
|
||||
|
||||
//可见性和地图被完全重置
|
||||
BArray.setFalse(visited);
|
||||
BArray.setFalse(mapped);
|
||||
|
||||
//清除全部Blob
|
||||
for (Blob blob: blobs.values()){
|
||||
blob.fullyClear();
|
||||
}
|
||||
//重置地图的视觉
|
||||
addVisuals();
|
||||
|
||||
//重新渲染地图
|
||||
GameScene.resetMap();
|
||||
Dungeon.observe();
|
||||
}
|
||||
|
||||
public static enum Feeling {
|
||||
NONE,
|
||||
|
|
Loading…
Reference in New Issue
Block a user