Update 2023-3-18 p3 beta4.6

Add wheels, deploy bosses, and get ready to build
This commit is contained in:
LingASDJ 2023-03-18 00:30:03 +08:00
parent ac39650036
commit 69016037a5
5 changed files with 163 additions and 36 deletions

View File

@ -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||

View File

@ -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;

View File

@ -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);

View File

@ -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() {

View File

@ -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,