完善钻石宝箱王相关逻辑,细节待优化
This commit is contained in:
parent
6749aca860
commit
645b53bab7
|
@ -3,6 +3,13 @@
|
|||
actors.mobs.bosses.diamondknight.name=宝箱之王
|
||||
actors.mobs.bosses.diamondknight.desc=拟态的最终结果就是无限接近人类。\n原本作用拟形的钻石宝箱外壳化作盔甲,包裹住如王般的内在。\n衪是所有拟形怪的王——至少衪是这么认为的。\n王会战斗到最后一刻,直到粉身碎骨。
|
||||
|
||||
actors.mobs.bosses.diamondknight.notice=你杀了我很多的子嗣,你理应用你的命来赎罪!
|
||||
actors.mobs.bosses.diamondknight.now_go=真是有趣的家伙,本王带你看看我的宝藏迷宫吧。
|
||||
actors.mobs.bosses.diamondknight.war_go=很久没有这么热血沸腾了!挑战者,或许你真的是这里唯一的光芒
|
||||
actors.mobs.bosses.diamondknight.iswar_go=最大的敌人往往就是你自己,准备好和自己决一死战了吗?
|
||||
actors.mobs.bosses.diamondknight.ok_go=好吧,让我们以最纯朴的战斗结束这次的较量吧。
|
||||
actors.mobs.bosses.diamondknight.defeated=真是一场有趣的战斗,挑战者,这次就算你赢了!
|
||||
|
||||
actors.mobs.salamander.name=深蓝蝾螈
|
||||
actors.mobs.salamander.desc=来自森林的小生物,由于下方的邪恶力量侵蚀,它们已经由温顺变得凶猛。\n它们锋利的尾巴能穿透敌人,它们十分的聪明,且极其灵活,必须趁其不备将之杀掉。
|
||||
|
||||
|
|
Binary file not shown.
|
@ -49,6 +49,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
|
||||
|
@ -78,6 +79,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MIME;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfFlameCursed;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||
|
@ -216,7 +218,8 @@ public enum HeroClass {
|
|||
new PotionOfLiquidFlameX().quantity(100).identify().collect();
|
||||
new YellowSunBooks().quantity(1).identify().collect();
|
||||
new BrokenBooks().quantity(44).identify().collect();
|
||||
|
||||
new ScrollOfFlameCursed().quantity(44).identify().collect();
|
||||
new KingsCrown().quantity(1).identify().collect();
|
||||
new MIME.GOLD_ONE().quantity(1).identify().collect();
|
||||
new MIME.GOLD_TWO().quantity(1).identify().collect();
|
||||
new MIME.GOLD_THREE().quantity(1).identify().collect();
|
||||
|
|
|
@ -21,10 +21,13 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Boss;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
|
@ -32,13 +35,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
@ -49,10 +49,10 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class DiamondKnight extends Boss {
|
||||
public int armTier;
|
||||
private static final float TIME_TO_ZAP = 3f;
|
||||
{
|
||||
initProperty();
|
||||
|
@ -60,6 +60,7 @@ public class DiamondKnight extends Boss {
|
|||
initStatus(80);
|
||||
EXP = 10;
|
||||
defenseSkill = 8;
|
||||
|
||||
spriteClass = DimandKingSprite.class;
|
||||
|
||||
properties.add(Property.BOSS);
|
||||
|
@ -68,14 +69,19 @@ public class DiamondKnight extends Boss {
|
|||
}
|
||||
|
||||
private int pumpedUp = 0;
|
||||
private int phase;
|
||||
public int phase;
|
||||
private int healInc = 1;
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
int min = 1;
|
||||
int max = (HP*2 <= HT) ? 12 : 8;
|
||||
if (pumpedUp > 0) {
|
||||
|
||||
//模仿玩家的伤害
|
||||
ColdChestBossLevel.State level = ((ColdChestBossLevel)Dungeon.level).pro();
|
||||
if (level == ColdChestBossLevel.State.VSYOU_START){
|
||||
return hero.damageRoll();
|
||||
} else if (pumpedUp > 0) {
|
||||
pumpedUp = 0;
|
||||
return Random.NormalIntRange( min*3, max*3 );
|
||||
} else {
|
||||
|
@ -91,10 +97,10 @@ public class DiamondKnight extends Boss {
|
|||
return attack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerable(Class effect) {
|
||||
return this.HP==360;
|
||||
}
|
||||
// @Override
|
||||
// public boolean isInvulnerable(Class effect) {
|
||||
// return this.HP==360;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public int defenseSkill(Char enemy) {
|
||||
|
@ -103,36 +109,11 @@ public class DiamondKnight extends Boss {
|
|||
|
||||
@Override
|
||||
public int drRoll() {
|
||||
return Random.NormalIntRange(0, 2);
|
||||
return Random.NormalIntRange(5,9);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
|
||||
if (Dungeon.level.water[pos] && HP < HT) {
|
||||
HP += healInc;
|
||||
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.removeTime(healInc*2);
|
||||
|
||||
if (Dungeon.level.heroFOV[pos] ){
|
||||
sprite.emitter().burst( Speck.factory( Speck.HEALING ), healInc );
|
||||
}
|
||||
if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES) && healInc < 3) {
|
||||
healInc++;
|
||||
}
|
||||
if (HP*2 > HT) {
|
||||
BossHealthBar.bleed(false);
|
||||
HP = Math.min(HP, HT);
|
||||
}
|
||||
} else {
|
||||
healInc = 1;
|
||||
}
|
||||
|
||||
if (state != SLEEPING){
|
||||
Dungeon.level.seal();
|
||||
}
|
||||
|
||||
return super.act();
|
||||
}
|
||||
|
||||
|
@ -152,10 +133,10 @@ public class DiamondKnight extends Boss {
|
|||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if (Random.Int( 3 ) == 0) {
|
||||
Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
|
||||
enemy.sprite.burst( 0x000000, 5 );
|
||||
}
|
||||
// if (Random.Int( 3 ) == 0) {
|
||||
// Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
|
||||
// enemy.sprite.burst( 0x000000, 5 );
|
||||
// }
|
||||
|
||||
if (pumpedUp > 0) {
|
||||
Camera.main.shake( 3, 0.2f );
|
||||
|
@ -187,19 +168,46 @@ public class DiamondKnight extends Boss {
|
|||
Dungeon.level.seal();
|
||||
}
|
||||
|
||||
|
||||
|
||||
super.damage(dmg, src);
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
LockedFloor lock = hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.addTime(dmg*2);
|
||||
|
||||
ColdChestBossLevel.State level = ((ColdChestBossLevel)Dungeon.level).pro();
|
||||
//血量低于360后追加phase并加载楼层的进度方法
|
||||
if (level == ColdChestBossLevel.State.START && this.HP < 360 && phase == 0) {
|
||||
GLog.n("让这场游戏变得更加有趣吧");
|
||||
//血量低于360后追加phase并加载楼层的进度方法,加载迷宫
|
||||
if (level == ColdChestBossLevel.State.START && this.HP <= 360 && phase == 0) {
|
||||
GLog.n(Messages.get(DiamondKnight.class,"now_go"));
|
||||
GameScene.flash(0x808080);
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
phase++;
|
||||
} else if(level == ColdChestBossLevel.State.MAZE_START && this.HP < 360 && phase == 1) {
|
||||
GLog.n("让这场游戏变得更加有d趣吧");
|
||||
//血量低于300加载第三场景
|
||||
} else if(level == ColdChestBossLevel.State.MAZE_START && this.HP <= 300 && phase == 1) {
|
||||
GLog.n(Messages.get(DiamondKnight.class,"war_go"));
|
||||
GameScene.flash(0x808080);
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
phase++;
|
||||
} else if (level == ColdChestBossLevel.State.VSBOSS_START && this.HP <= 240 && phase == 2) {
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
phase++;
|
||||
//血量低于200后变成玩家的样子,伤害和防御数值与玩家一致
|
||||
} else if (level == ColdChestBossLevel.State.VSLINK_START && this.HP <= 200 && phase == 3) {
|
||||
GLog.n(Messages.get(DiamondKnight.class,"iswar_go"));
|
||||
GameScene.flash(0x808080);
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
spriteClass=DimandKingSprite.PrismaticSprite.class;
|
||||
ShatteredPixelDungeon.resetScene();
|
||||
GameScene.flash(0x888888);
|
||||
phase++;
|
||||
//血量低于100后变回来,基础伤害二连击
|
||||
} else if (level == ColdChestBossLevel.State.VSYOU_START && this.HP <= 100 && phase == 4) {
|
||||
GLog.n(Messages.get(DiamondKnight.class,"ok_go"));
|
||||
GameScene.flash(0x808080);
|
||||
spriteClass=DimandKingSprite.class;
|
||||
ShatteredPixelDungeon.resetScene();
|
||||
GameScene.flash(0x888888);
|
||||
((ColdChestBossLevel)Dungeon.level).progress();
|
||||
phase++;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -209,29 +217,22 @@ public class DiamondKnight extends Boss {
|
|||
|
||||
super.die( cause );
|
||||
|
||||
if(Dungeon.depth!=28){
|
||||
Dungeon.level.unseal();
|
||||
Dungeon.level.unseal();
|
||||
|
||||
GetBossLoot();
|
||||
phase++;
|
||||
|
||||
GameScene.bossSlain();
|
||||
Dungeon.level.drop( new SkeletonKey( Dungeon.depth ), pos ).sprite.drop();
|
||||
GameScene.bossSlain();
|
||||
|
||||
//60% chance of 2 blobs, 30% chance of 3, 10% chance for 4. Average of 2.5
|
||||
int blobs = Random.chances(new float[]{0, 0, 6, 3, 1});
|
||||
for (int i = 0; i < blobs; i++){
|
||||
int ofs;
|
||||
do {
|
||||
ofs = PathFinder.NEIGHBOURS8[Random.Int(8)];
|
||||
} while (!Dungeon.level.passable[pos + ofs]);
|
||||
Dungeon.level.drop( new GooBlob(), pos + ofs ).sprite.drop( pos );
|
||||
}
|
||||
//入口
|
||||
set( 647, Terrain.EXIT );
|
||||
GameScene.updateMap( 647 );
|
||||
|
||||
Badges.validateBossSlain();
|
||||
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
//出口
|
||||
set( 52, Terrain.ENTRANCE );
|
||||
GameScene.updateMap( 52 );
|
||||
|
||||
Badges.validateBossSlain();
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -254,16 +255,21 @@ public class DiamondKnight extends Boss {
|
|||
private static final String PHASE ="dimandphase";
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
|
||||
super.storeInBundle( bundle );
|
||||
phase = bundle.getInt(PHASE);
|
||||
bundle.put( PUMPEDUP , pumpedUp );
|
||||
bundle.put( HEALINC, healInc );
|
||||
|
||||
if(phase == 5) {
|
||||
spriteClass=DimandKingSprite.PrismaticSprite.class;
|
||||
} else {
|
||||
spriteClass=DimandKingSprite.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
|
||||
super.restoreFromBundle( bundle );
|
||||
bundle.put(PHASE,phase);
|
||||
pumpedUp = bundle.getInt( PUMPEDUP );
|
||||
|
@ -273,6 +279,12 @@ public class DiamondKnight extends Boss {
|
|||
//if check is for pre-0.9.3 saves
|
||||
healInc = bundle.getInt(HEALINC);
|
||||
|
||||
if(phase == 5) {
|
||||
spriteClass=DimandKingSprite.PrismaticSprite.class;
|
||||
} else {
|
||||
spriteClass=DimandKingSprite.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void zap() {
|
||||
|
@ -280,7 +292,7 @@ public class DiamondKnight extends Boss {
|
|||
|
||||
if (hit( this, enemy, true )) {
|
||||
//TODO would be nice for this to work on ghost/statues too
|
||||
if (enemy == Dungeon.hero && Random.Int( 2 ) == 0) {
|
||||
if (enemy == hero && Random.Int( 2 ) == 0) {
|
||||
Buff.prolong( enemy, Blindness.class, Degrade.DURATION );
|
||||
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
|
||||
}
|
||||
|
@ -288,7 +300,7 @@ public class DiamondKnight extends Boss {
|
|||
int dmg = Random.NormalIntRange( 10, 12 );
|
||||
enemy.damage( dmg, new ColdMagicRat.DarkBolt() );
|
||||
|
||||
if (enemy == Dungeon.hero && !enemy.isAlive()) {
|
||||
if (enemy == hero && !enemy.isAlive()) {
|
||||
Dungeon.fail( getClass() );
|
||||
GLog.n( Messages.get(this, "frost_kill") );
|
||||
}
|
||||
|
|
|
@ -4,6 +4,10 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.GO_START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.MAZE_START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.VSBOSS_START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.VSLINK_START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.VSYOU_START;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel.State.WIN;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
|
@ -43,9 +47,9 @@ public class ColdChestBossLevel extends Level {
|
|||
GO_START,
|
||||
START,
|
||||
MAZE_START,
|
||||
MAZECOMPLE,
|
||||
VSBOSS_START,
|
||||
FIND_START,
|
||||
VSLINK_START,
|
||||
VSYOU_START,
|
||||
WIN
|
||||
}
|
||||
|
||||
|
@ -90,8 +94,8 @@ public class ColdChestBossLevel extends Level {
|
|||
W,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,W,P,W,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,P,E,W,W,W,W,E,E,E,E,W,P,W,E,E,E,E,W,W,W,W,E,P,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,E,E,W,K,K,W,W,W,W,W,W,D,W,W,W,W,W,W,K,K,W,E,E,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,P,E,W,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,W,E,P,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,E,E,W,K,K,K,K,K,K,K,K,O,K,K,K,K,K,K,K,K,W,E,E,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,P,E,W,K,K,K,K,K,K,K,W,K,W,K,K,K,K,K,K,K,W,E,P,E,E,E,E,E,W,
|
||||
W,E,E,E,E,E,E,E,W,K,K,K,K,K,K,K,W,O,W,K,K,K,K,K,K,K,W,E,E,E,E,E,E,E,W,
|
||||
W,W,W,W,W,W,W,W,W,K,K,K,K,K,K,K,O,O,O,K,K,K,K,K,K,K,W,W,W,W,W,W,W,W,W,
|
||||
W,B,B,B,B,B,B,B,W,K,K,K,K,K,K,O,O,O,O,O,K,K,K,K,K,K,W,B,B,B,B,B,B,B,W,
|
||||
W,B,K,K,K,K,K,B,W,K,K,K,K,K,O,O,O,K,O,O,O,K,K,K,K,K,W,B,K,K,K,K,K,B,W,
|
||||
|
@ -249,6 +253,8 @@ public class ColdChestBossLevel extends Level {
|
|||
GameScene.updateMap( getBossDoor );
|
||||
set( HOME, Terrain.EMPTY );
|
||||
GameScene.updateMap( HOME );
|
||||
set( 1102, Terrain.EMPTY );
|
||||
GameScene.updateMap( 1102 );
|
||||
Dungeon.observe();
|
||||
pro = START;
|
||||
break;
|
||||
|
@ -256,14 +262,14 @@ public class ColdChestBossLevel extends Level {
|
|||
//血量低于360后且在START枚举中
|
||||
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if(boss instanceof DiamondKnight) {
|
||||
//如果楼层为开始且boss血量小于360 二阶段
|
||||
if (pro == START && boss.HP < 360) {
|
||||
//如果楼层为开始且boss血量小于360 1阶段
|
||||
if (pro == START && boss.HP <= 360) {
|
||||
//动态修改整个房间
|
||||
changeMap(EndMap);
|
||||
changeMap(MazeRoom);
|
||||
//宝箱王移动到看戏位
|
||||
// ScrollOfTeleportation.appear(boss, MDX);
|
||||
// //玩家移动到初始位
|
||||
// ScrollOfTeleportation.appear(hero, STARTPOS);
|
||||
ScrollOfTeleportation.appear(boss, MDX);
|
||||
//玩家移动到初始位
|
||||
ScrollOfTeleportation.appear(hero, STARTPOS);
|
||||
boss.HP = 360;
|
||||
pro = MAZE_START;
|
||||
}
|
||||
|
@ -271,7 +277,56 @@ public class ColdChestBossLevel extends Level {
|
|||
}
|
||||
break;
|
||||
case MAZE_START:
|
||||
|
||||
//血量低于300后且在MAZE_START枚举中
|
||||
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if(boss instanceof DiamondKnight) {
|
||||
//如果楼层为开始且boss血量小于300 2阶段
|
||||
if (pro == MAZE_START && boss.HP <= 300) {
|
||||
//动态修改整个房间 宝藏迷宫
|
||||
changeMap(EndMap);
|
||||
ScrollOfTeleportation.appear(boss,647);
|
||||
//玩家移动到初始位
|
||||
ScrollOfTeleportation.appear(hero, 962);
|
||||
boss.HP = 300;
|
||||
pro = VSBOSS_START;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VSBOSS_START:
|
||||
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if(boss instanceof DiamondKnight) {
|
||||
//如果楼层为开始且boss血量小于240 3阶段
|
||||
if (pro == VSBOSS_START && boss.HP <= 240) {
|
||||
boss.HP = 240;
|
||||
pro = VSLINK_START;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VSLINK_START:
|
||||
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if(boss instanceof DiamondKnight) {
|
||||
//如果楼层为开始且boss血量小于200 4阶段
|
||||
if (pro == VSLINK_START && boss.HP <= 200) {
|
||||
pro = VSYOU_START;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VSYOU_START:
|
||||
//血量低于300后且在MAZE_START枚举中
|
||||
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if(boss instanceof DiamondKnight) {
|
||||
//如果楼层为开始且boss血量小于100 判定WIN
|
||||
if (pro == VSYOU_START && boss.HP <= 100) {
|
||||
pro = WIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WIN:
|
||||
//
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -280,6 +335,9 @@ public class ColdChestBossLevel extends Level {
|
|||
protected void createMobs() {
|
||||
|
||||
}
|
||||
//keep track of removed items as the level is changed. Dump them back into the level at the end.
|
||||
|
||||
|
||||
|
||||
private static final int getBossDoor = WIDTH*11+17;
|
||||
private static final int LDBossDoor = WIDTH*12+17;
|
||||
|
|
|
@ -103,6 +103,9 @@ import java.util.HashSet;
|
|||
|
||||
public abstract class Level implements Bundlable {
|
||||
|
||||
|
||||
|
||||
|
||||
//静态地图改变的轮子调用
|
||||
public void changeMap(int[] map){
|
||||
//构建全新地图,通过MAPCSV构建,并清理当前地块
|
||||
|
@ -110,6 +113,11 @@ public abstract class Level implements Bundlable {
|
|||
buildFlagMaps();
|
||||
cleanWalls();
|
||||
|
||||
//清理掉落物
|
||||
for (Heap heap : heaps.valueList()){
|
||||
heap.destroy();
|
||||
}
|
||||
|
||||
//自动获取出入口
|
||||
exit = entrance = 0;
|
||||
for (int i = 0; i < length(); i ++)
|
||||
|
@ -133,7 +141,8 @@ public abstract class Level implements Bundlable {
|
|||
GameScene.resetMap();
|
||||
Dungeon.observe();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static enum Feeling {
|
||||
NONE,
|
||||
CHASM,
|
||||
|
|
|
@ -72,7 +72,7 @@ public class InterlevelScene extends PixelScene {
|
|||
private static float fadeTime;
|
||||
|
||||
public enum Mode {
|
||||
DESCEND, ASCEND, CONTINUE, RESURRECT, RETURN, FALL, RESET, NONE,EXBOSS,GOBACK,FRGIRLBOSS,
|
||||
DESCEND, ASCEND, CONTINUE, RESURRECT, RETURN, FALL, RESET, NONE,EXBOSS,GOBACK,FRGIRLBOSS,DR,
|
||||
}
|
||||
public static Mode mode;
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.sprites;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.DiamondKnight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.TextureFilm;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
|
@ -47,6 +49,7 @@ public class DimandKingSprite extends MobSprite {
|
|||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
if (teleParticles != null){
|
||||
teleParticles.pos( this );
|
||||
teleParticles.visible = visible;
|
||||
|
@ -62,10 +65,6 @@ public class DimandKingSprite extends MobSprite {
|
|||
}
|
||||
}
|
||||
|
||||
public void teleParticles(boolean value){
|
||||
if (teleParticles != null) teleParticles.on = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void play(Animation anim, boolean force) {
|
||||
if (teleParticles != null) teleParticles.on = false;
|
||||
|
@ -108,5 +107,56 @@ public class DimandKingSprite extends MobSprite {
|
|||
}
|
||||
super.onComplete( anim );
|
||||
}
|
||||
|
||||
public static class PrismaticSprite extends MobSprite {
|
||||
|
||||
private static final int FRAME_WIDTH = 12;
|
||||
private static final int FRAME_HEIGHT = 15;
|
||||
|
||||
public PrismaticSprite() {
|
||||
super();
|
||||
|
||||
texture( Dungeon.hero.heroClass.spritesheet() );
|
||||
updateArmor( 0 );
|
||||
idle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void link( Char ch ) {
|
||||
super.link( ch );
|
||||
updateArmor( ((DiamondKnight)ch).armTier );
|
||||
}
|
||||
|
||||
public void updateArmor( int tier ) {
|
||||
TextureFilm film = new TextureFilm( HeroSprite.tiers(), tier, FRAME_WIDTH, FRAME_HEIGHT );
|
||||
|
||||
idle = new Animation( 1, true );
|
||||
idle.frames( film, 0, 0, 0, 1, 0, 0, 1, 1 );
|
||||
|
||||
run = new Animation( 20, true );
|
||||
run.frames( film, 2, 3, 4, 5, 6, 7 );
|
||||
|
||||
die = new Animation( 20, false );
|
||||
die.frames( film, 0 );
|
||||
|
||||
attack = new Animation( 15, false );
|
||||
attack.frames( film, 13, 14, 15, 0 );
|
||||
|
||||
idle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
if (flashTime <= 0) {
|
||||
float interval = (Game.timeTotal % 9) / 3f;
|
||||
tint(0,
|
||||
interval > 1 ? Math.max(0.9f, 1 - interval) : interval,
|
||||
interval < 1 ? Math.min(153 + interval * 72, 255) : Math.max(153 - (interval - 1) * 72, 128),
|
||||
0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user