diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 2ffed6c39..16b8c495f 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -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它们锋利的尾巴能穿透敌人,它们十分的聪明,且极其灵活,必须趁其不备将之杀掉。 diff --git a/core/src/main/assets/music/Boss2.ogg b/core/src/main/assets/music/Boss2.ogg index 64bf3a390..dd548a5fb 100644 Binary files a/core/src/main/assets/music/Boss2.ogg and b/core/src/main/assets/music/Boss2.ogg differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index c0b240364..d1362a6ec 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -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(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java index b22f8a22f..5d65dd1d4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java @@ -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") ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java index 21d194db6..eb38d6777 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java @@ -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; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index 376030492..25c8b31bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -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, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java index f5c95362a..21496e360 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java @@ -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; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java index c9dc899b0..97d4c13c8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java @@ -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); + } + } + + } }