From 003ff37de5dc3d6fa1ea7c6c89803c7760a68113 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Fri, 29 Jul 2022 10:19:15 +0800 Subject: [PATCH] Update 0.6.0.0-Beta16 Fixed Bug And Commit --- .../assets/messages/actors/actors.properties | 6 +- .../assets/messages/items/items.properties | 11 + .../assets/messages/levels/levels.properties | 10 +- .../src/main/assets/messages/ui/ui.properties | 4 +- .../ShatteredPixelDungeon.java | 6 +- .../actors/mobs/BloodBat.java | 50 +- .../actors/mobs/DimandKing.java | 2 + .../actors/mobs/Elemental.java | 22 +- .../items/Generator.java | 11 +- .../items/food/Blandfruit.java | 14 +- .../items/weapon/melee/IceFishSword.java | 6 +- .../weapon/missiles/darts/TippedDart.java | 4 + .../levels/CityBossLevel.java | 654 ------------------ .../sprites/BlueBatSprite.java | 2 + .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 21 + .../windows/WndChallenges.java | 2 + .../windows/WndHero.java | 3 +- .../windows/WndRanking.java | 2 +- 18 files changed, 108 insertions(+), 722 deletions(-) delete mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index d125de096..1014a8a98 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -11,11 +11,13 @@ text.textchallenges.hint = 不输入即为随机种子 text.textchallenges.delete_seed_input = 清除 actors.mobs.bloodbat$bloodbatrecharge.name=血影充能 -actors.mobs.bloodbat$bloodbatrecharge.desc=小血影正在充能,等待下一次和主人并肩作战的时候! +actors.mobs.bloodbat$bloodbatrecharge.desc=小血影正在充能,等待下一次和主人并肩作战的时候!\n\n剩余充能时长:%s回合. actors.mobs.bloodbat.name=血影蝙蝠 actors.mobs.bloodbat.desc=极影铃虹的随身伙伴,为了主人的安全将会让一切试图伤害主人的家伙万劫不复。\n\n它的能力和主人紧密相连,主人的成长也会让小血影成长! +actors.mobs.dimandking$sacrificesubjectlistener.rankings_desc=被钻石宝箱王说教至死 + actors.buffs.halomethaneburning.name=磷火缠身 actors.buffs.halomethaneburning.heromsg=磷火像恶魔一样缠在了你的身上! actors.buffs.halomethaneburning.burnsup=%s被烧的渣都不剩了! @@ -25,7 +27,6 @@ actors.buffs.halomethaneburning.desc=没什么比被磷火缠身更痛苦了。 actors.buffs.halofireimblue.name=磷火审判 actors.buffs.halofireimblue.desc=你被灌注了磷火的力量!\n\n所有物理攻击都可以使敌人磷火缠身。与此同时你对磷火,火焰完全免疫。\n\n剩余磷火审判效果时长:%s回合 - actors.mobs.slimeprincess.name=史莱姆公主 actors.mobs.slimeprincess.notice=站住!入侵者! actors.mobs.slimeprincess.defeated=你的行为会被世人铭记! @@ -175,6 +176,7 @@ actors.mobs.dimandking.teleport_1=立刻,驱赶此人! actors.mobs.dimandking.teleport_2=立即,拖住此人! actors.mobs.dimandking.buff_all=立刻解决此人! actors.mobs.dimandking.sacrifice=光荣的自爆吧! +actors.mobs.dimandking.waring=钻石宝箱王正在使怪物激素上升,他们随时可能自爆,离他们远点! actors.mobs.dimandking.death_rattle=伙伴们,守住这里! actors.mobs.dimandking.more_summon=伙伴们,一起上! actors.mobs.dimandking.wave_1=伙伴们,想想你们的价值! diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index f7ec6a3b8..a3bc01a2b 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -2,6 +2,16 @@ items.scrolls.exotic.scrollofpolymorph.name=羊化秘卷 items.scrolls.exotic.scrollofpolymorph.desc=这张秘卷富含强大的转换能力。当使用时,所有在使用者视野范围内的单位都将变形成一只魔法绵羊!\n\n这种变形过程是不可逆的,但不是所有敌人都会被影响。强大的敌人将抵抗这种魔法。同时变形后目标敌人身上的物品将会消失。 +items.food.lightfood.name=闪电饭团 +items.food.lightfood.eat_msg=这个食物的味道棒极了! +items.food.lightfood.desc=闪电饭团是冻肉和闪电种子加上口粮的综合产物。不仅可以使英雄获得治疗,还能立刻回满饥饿值,同时还能获得饭团的雷霆祝福。 + +items.weapon.missiles.darts.halodart.name=磷焰飞镖 +items.weapon.missiles.darts.halodart.desc=这些飞镖上涂着一种由磷焰花制成的药物,命中后会燃起磷焰。 + +items.weapon.missiles.darts.lightdart.name=辉耀飞镖 +items.weapon.missiles.darts.lightdart.desc=这些飞镖上涂着一种由闪电花制成的药物,命中目标后会激发目标的潜能。 + items.stones.stoneofdeepenedsleep.name=沉睡符石 items.stones.stoneofdeepenedsleep.desc=这颗符石被扔出后会对附近睡眠中的敌人施加魔法睡眠。陷入魔法睡眠的敌人会永远沉睡下去,除非受到外界打扰。 @@ -30,6 +40,7 @@ items.potions.elixirs.elixirofdragonking.desc=饮用后,这瓶秘药会使饮 items.potions.potionofliquidflamex.name=磷火药剂 items.potions.potionofliquidflamex.desc=该药瓶里装着一种超级不稳定的化合物,一旦暴露在空气中就会猛烈地燃烧起来。\n\n_相比于一般的液火药剂,这个更加危险且更加致命! items.food.blandfruit.halofruit=磷火果 +items.food.blandfruit.lightfruit=闪电果 items.potions.potionoflightningshiledx.name=闪电药剂 items.potions.potionoflightningshiledx.desc=该药剂融合了闪电花和电的综合化学效应,能在一段时间内。为玩家完全免疫电击伤害。 diff --git a/core/src/main/assets/messages/levels/levels.properties b/core/src/main/assets/messages/levels/levels.properties index c571df2bc..3bfc3bfdc 100644 --- a/core/src/main/assets/messages/levels/levels.properties +++ b/core/src/main/assets/messages/levels/levels.properties @@ -6,7 +6,8 @@ levels.features.chasm.jump=你确定要跳入洞口中?从这么高的地方 levels.features.chasm.ondeath=你落地过猛摔死了…… levels.features.chasm.rankings_desc=死于撞击 - +levels.prisonlevel.statue=树 +levels.prisonlevel.statue_desc=地牢里面怎么会有树的存在?这令人匪夷所思! ###rooms levels.rooms.special.magicalfireroom$eternalfire.desc=这里树立着一面致密的魔法火墙。它是如此炽热,会点燃任何过于靠近的物体,你无法穿过它。它没有任何会自然熄灭的迹象,你只能另想办法来熄灭它。 @@ -225,9 +226,12 @@ levels.level.alchemy_desc=这口炼金釜中充满了魔力之水。物品可以 levels.level.empty_well_desc=这座井已经枯竭了。 levels.prisonlevel.water_name=黯冷水潭 +levels.prisonlevel.water_desc=进入水潭中可熄灭身上的火焰。\n显然,这里危机四伏,但好在仍_有人在保护我们_。\n但是在一些魔力聚焦的地方无法影响到你。 levels.prisonlevel.empty_deco_desc=其上仍残留着干涸的血迹。 levels.prisonlevel.bookshelf_desc=这个书架可能是监狱图书馆的残留物。烧掉怎么样? -levels.sewerlevel.water_name=浑浊水潭 -levels.sewerlevel.empty_deco_desc=潮湿且发黄的苔藓覆盖其上。 +levels.sewerlevel.water_name=圣境水池 +levels.sewerlevel.water_desc=进入水潭中可熄灭身上的火焰。\n显然,这里的邪恶魔力十分微弱,你踩在水上面甚至有_圣境的力量_保护你前行。\n但是在一些魔力聚焦的地方无法影响到你。 + +levels.sewerlevel.empty_deco_desc=幽蓝且神秘的菌菇长在了这里。 levels.sewerlevel.bookshelf_desc=这个书架塞满了没用的成功学书籍。烧掉怎么样? diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index d04864a8b..c3529c989 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -450,6 +450,8 @@ ui.changelist.mlpd.vm0_5_x_changes.frlogs=尚待调查…… ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x20=-1.支离破碎bug已修复\n2.部分符石文本缺失已修复\n3.0层饱食度问题已修复\n4.炼金移植有问题已修复\n5.药水文本缺失已修复\n6.钥匙材质有问题已修复\n7.怨灵血量异常已修复\n8.种子显示问题已修复\n9.快捷栏优化问题已修复\n10.初始升级卷轴,以及初始物品已修复\n12.奈亚子初始奖励异常已修复\n13.由于V1.2.3楼层名字导致部分BOSS超类闪退已修复\n14.精英强敌鬼磷文本缺失已修复\n15.炼金合成表已移植\n16.风行水上部分buff已经重做\n17.部分原始Java类已合并\n18.英雄类逻辑楼层应该为0已修复\n19.光Buff有问题已修复\n20.恶魔层贴图有问题已修复\n21.部分buff尚未定义在破碎123英雄类里面已修复\n22.尚方宝剑属性问题已修复 -ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x21=-1.修复了矮人国王的闪退问题\n-2.游戏性能优化\n-3.修复了钻石宝箱王的错误刷怪\n-去除了重生十字架的金色光环。 +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x21=-1.修复了矮人国王的闪退问题,但旧存档无法同步\n-2.游戏性能优化\n-3.修复了钻石宝箱王的错误刷怪\n-去除了重生十字架的金色光环。 + +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x22=-1.修复了两个种子缺失飞镖的问题\n-2.修复了小血影的闪退问题\n-3.修复了嬗变卷轴的崩溃问题\n-4.修复了新植物未刷新的问题 //ui.changelist.mlpd.vm0_5_x_changes.xxx// \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index b87e5675b..8ed678484 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -119,13 +119,13 @@ public class ShatteredPixelDungeon extends Game { com.shatteredpixel.shatteredpixeldungeon.levels.CavesBossLevel.EntranceOverhang.class, "com.shatteredpixel.shatteredpixeldungeon.levels.NewCavesBossLevel$EntranceOverhang" ); com.watabou.utils.Bundle.addAlias( - com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.class, + com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.class, "com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel" ); com.watabou.utils.Bundle.addAlias( - com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.CustomGroundVisuals.class, + com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.CustomGroundVisuals.class, "com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel$CustomGroundVisuals" ); com.watabou.utils.Bundle.addAlias( - com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.CustomWallVisuals.class, + com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.CustomWallVisuals.class, "com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel$CustomWallVisuals" ); com.watabou.utils.Bundle.addAlias( com.shatteredpixel.shatteredpixeldungeon.levels.HallsBossLevel.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java index 9a12a8275..9a08d7cce 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java @@ -10,6 +10,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Marked; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; @@ -39,6 +41,15 @@ public class BloodBat extends Mob implements Callback { next(); } + @Override + protected boolean canAttack( Char enemy ) { + if(level >= 10) { + return new Ballistica(pos, enemy.pos, MagicMissile.WARD).collisionPos == enemy.pos; + } else { + return super.canAttack(enemy); + } + } + @Override public void call() { next(); @@ -57,7 +68,7 @@ public class BloodBat extends Mob implements Callback { Sample.INSTANCE.play( Assets.Sounds.DEBUFF ); } - int dmg = Random.NormalIntRange( 2, 4 ); + int dmg = Random.NormalIntRange( (4+level)*Dungeon.depth/5, (5+level)*Dungeon.depth/5 ); enemy.damage( dmg, new BloodBat.DarkBolt() ); if (enemy == Dungeon.hero && !enemy.isAlive()) { @@ -79,12 +90,7 @@ public class BloodBat extends Mob implements Callback { @Override public int damageRoll() { - if (Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN)){ - int i = Random.NormalIntRange(0, level * 2); - if (enemy.buff(Marked.class) != null) i *= enemy.buff(Marked.class).bonusDamage(); - return i; - } - return Random.NormalIntRange( level, 1 + level * 2 ); + return Random.NormalIntRange( (4+level)*Dungeon.depth/5, (5+level)*Dungeon.depth/5 ); } @Override @@ -93,47 +99,25 @@ public class BloodBat extends Mob implements Callback { } @Override - public int attackSkill(Char target) { + public int attackSkill(Char targetd) { return 4 + level * 2; } + @Override public int attackProc(Char enemy, int damage) { - if(level >= 2){ zap(); - } else { if (Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN)) Buff.affect(enemy, Marked.class).stack++; - } - - return super.attackProc(enemy, damage); } - @Override - protected Char chooseEnemy() { - Char enemy = super.chooseEnemy(); - - int targetPos = Dungeon.hero.pos; - int distance = Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN) ? 99999 : 8; - - //will never attack something far from their target - if (enemy != null - && Dungeon.level.mobs.contains(enemy) - && (Dungeon.level.distance(enemy.pos, targetPos) <= distance)){ - ((Mob)enemy).aggro(this); - return enemy; - } - - return null; - } - public static void updateHP(){ level += 1; if (Dungeon.level != null) { for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) { if (mob instanceof BloodBat) { - mob.HP = mob.HT = 18 + level * 2; - ((BloodBat) mob).defenseSkill = 3 + level * 2; + mob.HP = mob.HT = 18 + level * 4; + ((BloodBat) mob).defenseSkill = 3 + level * 4; } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java index f6e47e20c..4980049bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java @@ -45,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.particles.Emitter; import com.watabou.utils.Bundle; @@ -812,6 +813,7 @@ public class DimandKing extends Boss { charge = target.sprite.emitter(); charge.autoKill = false; charge.pour( HalomethaneFlameParticle.FACTORY, 0.06f ); + GLog.n(Messages.get(DimandKing.class,"waring")); //charge.on = false; }else{ if(charge != null) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java index a8ac60796..6f6c9a491 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java @@ -21,6 +21,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level; + import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -29,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill; import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost; @@ -196,32 +197,29 @@ public abstract class Elemental extends Mob { setSummonedALly(); } } - + public static class FireElemental extends Elemental { - + { spriteClass = ElementalSprite.Fire.class; - + loot = new PotionOfLiquidFlame(); lootChance = 1/8f; - + properties.add( Property.FIERY ); - - harmfulBuffs.add( com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost.class ); - harmfulBuffs.add( Chill.class ); } - + @Override protected void meleeProc( Char enemy, int damage ) { - if (Random.Int( 2 ) == 0 && !Dungeon.level.water[enemy.pos]) { + if (Random.Int( 2 ) == 0 && !level.water[enemy.pos]) { Buff.affect( enemy, Burning.class ).reignite( enemy ); if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5); } } - + @Override protected void rangedProc( Char enemy ) { - if (!Dungeon.level.water[enemy.pos]) { + if (!level.water[enemy.pos]) { Buff.affect( enemy, Burning.class ).reignite( enemy, 4f ); } if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index da505fbb3..36b5b315e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -128,6 +128,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatshield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.GreenSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.HandAxe; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceDewVialSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LockSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword; @@ -288,7 +289,7 @@ public class Generator { Dreamfoil.Seed.class, Starflower.Seed.class, AikeLaier.Seed.class,}; - SEED.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,1 }; + SEED.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,3}; SEED.probs = SEED.defaultProbs.clone(); SCROLL.classes = new Class[]{ @@ -399,9 +400,10 @@ public class Generator { WEP_T5.probs = new float[]{ 6, 5, 5, 4, 4, 4 }; WEP_T6.classes = new Class[]{ - IceFishSword.class + IceFishSword.class, + IceDewVialSword.class }; - WEP_T6.probs = new float[]{ 1 }; + WEP_T6.probs = new float[]{ 1,0 }; //see Generator.randomArmor ARMOR.classes = new Class[]{ @@ -584,7 +586,8 @@ public class Generator { Category.WEP_T2, Category.WEP_T3, Category.WEP_T4, - Category.WEP_T5 + Category.WEP_T5, + Category.WEP_T6 }; public static MeleeWeapon randomWeapon(){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java index 9bdee99ee..b112b279c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java @@ -21,7 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon.items.food; -import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -34,7 +33,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHaste; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLightningShiledX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlameX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; @@ -43,7 +44,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant.Seed; -import com.shatteredpixel.shatteredpixeldungeon.plants.Sungrass; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -123,6 +123,8 @@ public class Blandfruit extends Food { if (potionAttrib instanceof PotionOfPurity) return Messages.get(this, "dreamfruit"); if (potionAttrib instanceof PotionOfExperience) return Messages.get(this, "starfruit"); if (potionAttrib instanceof PotionOfHaste) return Messages.get(this, "swiftfruit"); + if (potionAttrib instanceof PotionOfLiquidFlameX) return Messages.get(this, "halofruit"); + if (potionAttrib instanceof PotionOfLightningShiledX) return Messages.get(this, "lightfruit"); return super.name(); } @@ -135,7 +137,8 @@ public class Blandfruit extends Food { if (potionAttrib instanceof PotionOfFrost || potionAttrib instanceof PotionOfLiquidFlame || potionAttrib instanceof PotionOfToxicGas - || potionAttrib instanceof PotionOfParalyticGas) { + || potionAttrib instanceof PotionOfParalyticGas + ||potionAttrib instanceof PotionOfLiquidFlameX) { desc += Messages.get(this, "desc_throw"); } else { desc += Messages.get(this, "desc_eat"); @@ -172,6 +175,8 @@ public class Blandfruit extends Food { if (potionAttrib instanceof PotionOfPurity) potionGlow = new ItemSprite.Glowing( 0xC152AA ); if (potionAttrib instanceof PotionOfExperience) potionGlow = new ItemSprite.Glowing( 0x404040 ); if (potionAttrib instanceof PotionOfHaste) potionGlow = new ItemSprite.Glowing( 0xCCBB00 ); + if (potionAttrib instanceof PotionOfLiquidFlameX) potionGlow = new ItemSprite.Glowing( 0x00ffff ); + if (potionAttrib instanceof PotionOfLightningShiledX) potionGlow = new ItemSprite.Glowing( 0xFF4500 ); potionAttrib.setAction(); defaultAction = potionAttrib.defaultAction; @@ -194,7 +199,8 @@ public class Blandfruit extends Food { potionAttrib instanceof PotionOfParalyticGas || potionAttrib instanceof PotionOfFrost || potionAttrib instanceof PotionOfLevitation || - potionAttrib instanceof PotionOfPurity) { + potionAttrib instanceof PotionOfPurity + ||potionAttrib instanceof PotionOfLiquidFlameX) { potionAttrib.shatter( cell ); Dungeon.level.drop(new Chunks(), cell).sprite.drop(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java index 13a79efbf..6570bf748 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java @@ -127,13 +127,13 @@ public class IceFishSword extends Weapon { @Override public int min(int lvl) { - return 4*(Dungeon.depth/5+tier+1) + //8 base, down from 10 + return 2*(Dungeon.depth/5+tier+1) + //8 base, down from 10 lvl*(Dungeon.depth/5+tier+1); //scaling unchanged } @Override public int max(int lvl) { - return 6*(Dungeon.depth/5+tier+1) + //8 base, down from 10 + return 3*(Dungeon.depth/5+tier+1) + //8 base, down from 10 lvl*(Dungeon.depth/5+tier+1); //scaling unchanged } @@ -149,6 +149,6 @@ public class IceFishSword extends Weapon { @Override public int STRReq(int lvl) { - return Dungeon.depth/5+18; + return Dungeon.depth/5+16; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java index 9b9efc673..d2547d6e6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java @@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.plants.AikeLaier; import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed; import com.shatteredpixel.shatteredpixeldungeon.plants.Dreamfoil; import com.shatteredpixel.shatteredpixeldungeon.plants.Earthroot; @@ -39,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.plants.Firebloom; import com.shatteredpixel.shatteredpixeldungeon.plants.Icecap; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.plants.Rotberry; +import com.shatteredpixel.shatteredpixeldungeon.plants.SkyBlueFireBloom; import com.shatteredpixel.shatteredpixeldungeon.plants.Sorrowmoss; import com.shatteredpixel.shatteredpixeldungeon.plants.Starflower; import com.shatteredpixel.shatteredpixeldungeon.plants.Stormvine; @@ -184,6 +186,8 @@ public abstract class TippedDart extends Dart { types.put(Stormvine.Seed.class, ShockingDart.class); types.put(Sungrass.Seed.class, HealingDart.class); types.put(Swiftthistle.Seed.class, AdrenalineDart.class); + types.put(SkyBlueFireBloom.Seed.class, HaloDart.class); + types.put(AikeLaier.Seed.class, LightDart.class); } public static TippedDart getTipped( Plant.Seed s, int quantity ){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java deleted file mode 100644 index 243b3cb56..000000000 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java +++ /dev/null @@ -1,654 +0,0 @@ -/* - * Pixel Dungeon - * Copyright (C) 2012-2015 Oleg Dolya - * - * Shattered Pixel Dungeon - * Copyright (C) 2014-2022 Evan Debenham - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see - */ - -package com.shatteredpixel.shatteredpixeldungeon.levels; - -import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Bones; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; -import com.shatteredpixel.shatteredpixeldungeon.actors.Char; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DwarfKing; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp; -import com.shatteredpixel.shatteredpixeldungeon.items.Heap; -import com.shatteredpixel.shatteredpixeldungeon.items.Item; -import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CityPainter; -import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; -import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoom; -import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; -import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; -import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; -import com.watabou.noosa.Game; -import com.watabou.noosa.Group; -import com.watabou.noosa.Tilemap; -import com.watabou.noosa.audio.Music; -import com.watabou.noosa.tweeners.AlphaTweener; -import com.watabou.utils.Bundle; -import com.watabou.utils.Callback; -import com.watabou.utils.PathFinder; -import com.watabou.utils.Point; -import com.watabou.utils.Random; -import com.watabou.utils.Rect; - -import java.util.ArrayList; -import java.util.HashSet; - -public class CityBossLevel extends Level { - - { - color1 = 0x4b6636; - color2 = 0xf2f2f2; - } - - private static int WIDTH = 15; - private static int HEIGHT = 48; - - private static final Rect entry = new Rect(1, 37, 14, 48); - private static final Rect arena = new Rect(1, 25, 14, 38); - private static final Rect end = new Rect(0, 0, 15, 22); - - private static final int bottomDoor = 7 + (arena.bottom-1)*15; - private static final int topDoor = 7 + arena.top*15; - - public static final int throne; - private static final int[] pedestals = new int[4]; - - static { - Point c = arena.center(); - throne = c.x + (c.y) * WIDTH; - pedestals[0] = c.x-3 + (c.y-3) * WIDTH; - pedestals[1] = c.x+3 + (c.y-3) * WIDTH; - pedestals[2] = c.x+3 + (c.y+3) * WIDTH; - pedestals[3] = c.x-3 + (c.y+3) * WIDTH; - } - - private ImpShopRoom impShop; - - @Override - public void playLevelMusic() { - if (locked){ - Music.INSTANCE.play(Assets.Music.CITY_BOSS, true); - //if top door isn't unlocked - } else if (map[topDoor] == Terrain.LOCKED_DOOR){ - Music.INSTANCE.end(); - } else { - Music.INSTANCE.playTracks( - new String[]{Assets.Music.CITY_1, Assets.Music.CITY_2, Assets.Music.CITY_2}, - new float[]{1, 1, 0.5f}, - false); - } - } - - @Override - public String tilesTex() { - return Assets.Environment.TILES_CITY; - } - - @Override - public String waterTex() { - return Assets.Environment.WATER_CITY; - } - - private static final String IMP_SHOP = "imp_shop"; - - @Override - public void storeInBundle( Bundle bundle ) { - super.storeInBundle( bundle ); - bundle.put( IMP_SHOP, impShop ); - } - - @Override - public void restoreFromBundle( Bundle bundle ) { - super.restoreFromBundle( bundle ); - impShop = (ImpShopRoom) bundle.get( IMP_SHOP ); - if (map[topDoor] != Terrain.LOCKED_DOOR && Imp.Quest.isCompleted() && !impShop.shopSpawned()){ - spawnShop(); - } - } - - @Override - protected boolean build() { - - setSize(WIDTH, HEIGHT); - - //entrance room - Painter.fill(this, entry, Terrain.WALL); - Painter.fill(this, entry, 1, Terrain.BOOKSHELF); - Painter.fill(this, entry, 2, Terrain.EMPTY); - - Painter.fill(this, entry.left+3, entry.top+3, 1, 5, Terrain.BOOKSHELF); - Painter.fill(this, entry.right-4, entry.top+3, 1, 5, Terrain.BOOKSHELF); - - Point c = entry.center(); - - Painter.fill(this, c.x-1, c.y-2, 3, 1, Terrain.STATUE); - Painter.fill(this, c.x-1, c.y, 3, 1, Terrain.STATUE); - Painter.fill(this, c.x-1, c.y+2, 3, 1, Terrain.STATUE); - Painter.fill(this, c.x, entry.top+1, 1, 6, Terrain.EMPTY_SP); - - Painter.set(this, c.x, entry.top, Terrain.DOOR); - - entrance = c.x + (c.y+2)*width(); - Painter.set(this, entrance, Terrain.ENTRANCE); - - //DK's throne room - Painter.fillDiamond(this, arena, 1, Terrain.EMPTY); - - Painter.fill(this, arena, 5, Terrain.EMPTY_SP); - Painter.fill(this, arena, 6, Terrain.SIGN); - - c = arena.center(); - Painter.set(this, c.x-3, c.y, Terrain.STATUE); - Painter.set(this, c.x-4, c.y, Terrain.STATUE); - Painter.set(this, c.x+3, c.y, Terrain.STATUE); - Painter.set(this, c.x+4, c.y, Terrain.STATUE); - - Painter.set(this, pedestals[0], Terrain.PEDESTAL); - Painter.set(this, pedestals[1], Terrain.PEDESTAL); - Painter.set(this, pedestals[2], Terrain.PEDESTAL); - Painter.set(this, pedestals[3], Terrain.PEDESTAL); - - Painter.set(this, c.x, arena.top, Terrain.LOCKED_DOOR); - - //exit hallway - Painter.fill(this, end, Terrain.CHASM); - Painter.fill(this, end.left+4, end.top+5, 7, 18, Terrain.EMPTY); - Painter.fill(this, end.left+4, end.top+5, 7, 4, Terrain.EXIT); - exit = end.left+7 + (end.top+8)*width(); - - impShop = new ImpShopRoom(); - impShop.set(end.left+3, end.top+12, end.left+11, end.top+20); - Painter.set(this, impShop.center(), Terrain.PEDESTAL); - - Painter.set(this, impShop.left+2, impShop.top, Terrain.STATUE); - Painter.set(this, impShop.left+6, impShop.top, Terrain.STATUE); - - Painter.fill(this, end.left+5, end.bottom+1, 5, 1, Terrain.EMPTY); - Painter.fill(this, end.left+6, end.bottom+2, 3, 1, Terrain.EMPTY); - - new CityPainter().paint(this, null); - - //pillars last, no deco on these - Painter.fill(this, end.left+1, end.top+2, 2, 2, Terrain.WALL); - Painter.fill(this, end.left+1, end.top+7, 2, 2, Terrain.WALL); - Painter.fill(this, end.left+1, end.top+12, 2, 2, Terrain.WALL); - Painter.fill(this, end.left+1, end.top+17, 2, 2, Terrain.WALL); - - Painter.fill(this, end.right-3, end.top+2, 2, 2, Terrain.WALL); - Painter.fill(this, end.right-3, end.top+7, 2, 2, Terrain.WALL); - Painter.fill(this, end.right-3, end.top+12, 2, 2, Terrain.WALL); - Painter.fill(this, end.right-3, end.top+17, 2, 2, Terrain.WALL); - - CustomTilemap customVisuals = new CustomGroundVisuals(); - customVisuals.setRect(0, 0, width(), height()); - customTiles.add(customVisuals); - - customVisuals = new CustomWallVisuals(); - customVisuals.setRect(0, 0, width(), height()); - customWalls.add(customVisuals); - - return true; - } - - //returns a random pedestal that doesn't already have a summon inbound on it - public int getSummoningPos(){ - Mob king = getKing(); - HashSet summons = king.buffs(DwarfKing.Summoning.class); - ArrayList positions = new ArrayList<>(); - for (int pedestal : pedestals) { - boolean clear = true; - for (DwarfKing.Summoning s : summons) { - if (s.getPos() == pedestal) { - clear = false; - break; - } - } - if (clear) { - positions.add(pedestal); - } - } - if (positions.isEmpty()){ - return -1; - } else { - return Random.element(positions); - } - } - - private Mob getKing(){ - for (Mob m : mobs){ - if (m instanceof DwarfKing) return m; - } - return null; - } - - @Override - protected void createMobs() { - } - - public Actor addRespawner() { - return null; - } - - @Override - protected void createItems() { - Item item = Bones.get(); - if (item != null) { - int pos; - do { - pos = randomRespawnCell(null); - } while (pos == entrance); - drop( item, pos ).setHauntedIfCursed().type = Heap.Type.REMAINS; - } - } - - @Override - public int randomRespawnCell( Char ch ) { - int cell; - do { - cell = entrance + PathFinder.NEIGHBOURS8[Random.Int(8)]; - } while (!passable[cell] - || (Char.hasProp(ch, Char.Property.LARGE) && !openSpace[cell]) - || Actor.findChar(cell) != null); - return cell; - } - - @Override - public void occupyCell( Char ch ) { - - super.occupyCell( ch ); - - if (map[bottomDoor] != Terrain.LOCKED_DOOR && map[topDoor] == Terrain.LOCKED_DOOR - && ch.pos < bottomDoor && ch == Dungeon.hero) { - - seal(); - - } - } - - @Override - public void seal() { - super.seal(); - - //moves intelligent allies with the hero, preferring closer pos to entrance door - int doorPos = pointToCell(new Point(arena.left + arena.width()/2, arena.bottom)); - Mob.holdAllies(this, doorPos); - Mob.restoreAllies(this, Dungeon.hero.pos, doorPos); - - DwarfKing boss = new DwarfKing(); - boss.state = boss.WANDERING; - boss.pos = pointToCell(arena.center()); - GameScene.add( boss ); - boss.beckon(Dungeon.hero.pos); - - if (heroFOV[boss.pos]) { - boss.notice(); - boss.sprite.alpha( 0 ); - boss.sprite.parent.add( new AlphaTweener( boss.sprite, 1, 0.1f ) ); - } - - set( bottomDoor, Terrain.LOCKED_DOOR ); - GameScene.updateMap( bottomDoor ); - Dungeon.observe(); - - Game.runOnRenderThread(new Callback() { - @Override - public void call() { - Music.INSTANCE.play(Assets.Music.CITY_BOSS, true); - } - }); - } - - @Override - public void unseal() { - super.unseal(); - - set( bottomDoor, Terrain.DOOR ); - GameScene.updateMap( bottomDoor ); - - set( topDoor, Terrain.DOOR ); - GameScene.updateMap( topDoor ); - - if (Imp.Quest.isCompleted()) { - spawnShop(); - } - Dungeon.observe(); - - Game.runOnRenderThread(new Callback() { - @Override - public void call() { - Music.INSTANCE.end(); - } - }); - } - - private void spawnShop(){ - while (impShop.itemCount() >= 7*(impShop.height()-2)){ - impShop.bottom++; - } - impShop.spawnShop(this); - } - - @Override - public String tileName( int tile ) { - switch (tile) { - case Terrain.WATER: - return Messages.get(CityLevel.class, "water_name"); - case Terrain.HIGH_GRASS: - return Messages.get(CityLevel.class, "high_grass_name"); - default: - return super.tileName( tile ); - } - } - - @Override - public String tileDesc(int tile) { - switch (tile) { - case Terrain.ENTRANCE: - return Messages.get(CityLevel.class, "entrance_desc"); - case Terrain.EXIT: - return Messages.get(CityLevel.class, "exit_desc"); - case Terrain.WALL_DECO: - case Terrain.EMPTY_DECO: - return Messages.get(CityLevel.class, "deco_desc"); - case Terrain.EMPTY_SP: - return Messages.get(CityLevel.class, "sp_desc"); - case Terrain.STATUE: - case Terrain.STATUE_SP: - return Messages.get(CityLevel.class, "statue_desc"); - case Terrain.BOOKSHELF: - return Messages.get(CityLevel.class, "bookshelf_desc"); - default: - return super.tileDesc( tile ); - } - } - - @Override - public Group addVisuals( ) { - super.addVisuals(); - CityLevel.addCityVisuals(this, visuals); - return visuals; - } - - public static class CustomGroundVisuals extends CustomTilemap { - - { - texture = Assets.Environment.CITY_BOSS; - tileW = 15; - tileH = 48; - } - - private static final int STAIR_ROWS = 7; - - @Override - public Tilemap create() { - Tilemap v = super.create(); - int[] data = new int[tileW*tileH]; - - int[] map = Dungeon.level.map; - - int stairsTop = -1; - - //upper part of the level, mostly demon halls tiles - for (int i = tileW; i < tileW*22; i++){ - - if (map[i] == Terrain.EXIT && stairsTop == -1){ - stairsTop = i; - } - - //pillars - if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.CHASM){ - data[i] = 13*8 + 6; - data[++i] = 13*8 + 7; - } else if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.WALL){ - data[i] = 14*8 + 6; - data[++i] = 14*8 + 7; - } else if (i > tileW && map[i] == Terrain.CHASM && map[i-tileW] == Terrain.WALL) { - data[i] = 15*8 + 6; - data[++i] = 15*8 + 7; - - //imp's pedestal - } else if (map[i] == Terrain.PEDESTAL) { - data[i] = 12*8 + 5; - - //skull piles - } else if (map[i] == Terrain.STATUE) { - data[i] = 15*8 + 5; - - //ground tiles - } else if (map[i] == Terrain.EMPTY || map[i] == Terrain.EMPTY_DECO - || map[i] == Terrain.EMBERS || map[i] == Terrain.GRASS - || map[i] == Terrain.HIGH_GRASS || map[i] == Terrain.FURROWED_GRASS){ - - //final ground stiching with city tiles - if (i/tileW == 21){ - data[i] = 11*8 + 0; - data[++i] = 11*8 + 1; - data[++i] = 11*8 + 2; - data[++i] = 11*8 + 3; - data[++i] = 11*8 + 4; - data[++i] = 11*8 + 5; - data[++i] = 11*8 + 6; - } else { - - //regular ground tiles - if (map[i - 1] == Terrain.CHASM) { - data[i] = 12 * 8 + 1; - } else if (map[i + 1] == Terrain.CHASM) { - data[i] = 12 * 8 + 3; - } else if (map[i] == Terrain.EMPTY_DECO) { - data[i] = 12 * 8 + 4; - } else { - data[i] = 12 * 8 + 2; - } - } - - //otherwise no tile here - } else { - data[i] = -1; - } - } - - //custom for stairs - for (int i = 0; i < STAIR_ROWS; i++){ - for (int j = 0; j < 7; j++){ - data[stairsTop+j] = (i+4)*8 + j; - } - stairsTop += tileW; - } - - //lower part: statues, pedestals, and carpets - for (int i = tileW*22; i < tileW * tileH; i++){ - - //pedestal spawners - if (map[i] == Terrain.PEDESTAL){ - data[i] = 13*8 + 4; - - //statues that should face left instead of right - } else if (map[i] == Terrain.STATUE && i%tileW > 7) { - data[i] = 15 * 8 + 4; - - //carpet tiles - } else if (map[i] == Terrain.EMPTY_SP) { - //top row of DK's throne - if (map[i + 1] == Terrain.EMPTY_SP && map[i + tileW] == Terrain.EMPTY_SP) { - data[i] = 13 * 8 + 1; - data[++i] = 13 * 8 + 2; - data[++i] = 13 * 8 + 3; - - //mid row of DK's throne - }else if (map[i + 1] == Terrain.SIGN) { - data[i] = 14 * 8 + 1; - data[++i] = 14 * 8 + 2; - data[++i] = 14 * 8 + 3; - - //bottom row of DK's throne - } else if (map[i+1] == Terrain.EMPTY_SP && map[i-tileW] == Terrain.EMPTY_SP){ - data[i] = 15*8 + 1; - data[++i] = 15*8 + 2; - data[++i] = 15*8 + 3; - - //otherwise entrance carpet - } else if (map[i-tileW] != Terrain.EMPTY_SP){ - data[i] = 13*8 + 0; - } else if (map[i+tileW] != Terrain.EMPTY_SP){ - data[i] = 15*8 + 0; - } else { - data[i] = 14*8 + 0; - } - - //otherwise no tile here - } else { - data[i] = -1; - } - } - - v.map( data, tileW ); - return v; - } - - @Override - public String name(int tileX, int tileY) { - int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW; - - //demon halls tiles - if (cell < Dungeon.level.width*22){ - if (Dungeon.level.map[cell] == Terrain.STATUE){ - return Messages.get(HallsLevel.class, "statue_name"); - } - - //DK arena tiles - } else { - if (Dungeon.level.map[cell] == Terrain.SIGN){ - return Messages.get(CityBossLevel.class, "throne_name"); - } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){ - return Messages.get(CityBossLevel.class, "summoning_name"); - } - } - - return super.name(tileX, tileY); - } - - @Override - public String desc(int tileX, int tileY) { - int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW; - - //demon halls tiles - if (cell < Dungeon.level.width*22){ - if (Dungeon.level.map[cell] == Terrain.EXIT){ - return Messages.get(HallsLevel.class, "exit_desc"); - } else if (Dungeon.level.map[cell] == Terrain.STATUE){ - return Messages.get(HallsLevel.class, "statue_desc"); - } else if (Dungeon.level.map[cell] == Terrain.EMPTY_DECO){ - return ""; - } - - //DK arena tiles - } else { - if (Dungeon.level.map[cell] == Terrain.SIGN){ - return Messages.get(CityBossLevel.class, "throne_desc"); - } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){ - return Messages.get(CityBossLevel.class, "summoning_desc"); - } - } - - return super.desc(tileX, tileY); - } - } - - public static class CustomWallVisuals extends CustomTilemap { - { - texture = Assets.Environment.CITY_BOSS; - tileW = 15; - tileH = 48; - } - - @Override - public Tilemap create() { - Tilemap v = super.create(); - int[] data = new int[tileW*tileH]; - - int[] map = Dungeon.level.map; - - int shadowTop = -1; - - //upper part of the level, mostly demon halls tiles - for (int i = tileW; i < tileW*21; i++) { - - if (map[i] == Terrain.EXIT && shadowTop == -1){ - shadowTop = i - tileW*4; - } - - //pillars - if (map[i] == Terrain.CHASM && map[i+tileW] == Terrain.WALL) { - data[i] = 12*8 + 6; - data[++i] = 12*8 + 7; - } else if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.CHASM) { - data[i] = 13 * 8 + 6; - data[++i] = 13 * 8 + 7; - - //skull tops - } else if (map[i+tileW] == Terrain.STATUE) { - data[i] = 14*8 + 5; - - //otherwise no tile here - } else { - data[i] = -1; - } - } - - //custom shadow for stairs - for (int i = 0; i < 8; i++){ - if (i < 4){ - data[shadowTop] = i*8 + 0; - data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] = - data[shadowTop+5] = data[shadowTop+6] = i*8 + 1; - data[shadowTop+7] = i*8 + 2; - } else { - int j = i - 4; - data[shadowTop] = j*8 + 3; - data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] = - data[shadowTop+5] = data[shadowTop+6] = j*8 + 4; - data[shadowTop+7] = j*8 + 5; - } - - shadowTop += tileW; - } - - //lower part. Statues and DK's throne - for (int i = tileW*21; i < tileW * tileH; i++){ - - //Statues that need to face left instead of right - if (map[i] == Terrain.STATUE && i%tileW > 7){ - data[i-tileW] = 14*8 + 4; - } else if (map[i] == Terrain.SIGN){ - data[i-tileW] = 13*8 + 5; - } - - //always no tile here (as the above statements are modifying previous tiles) - data[i] = -1; - } - - v.map( data, tileW ); - return v; - } - } -} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java index a1d8bf68f..9dd3a2b99 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java @@ -67,6 +67,8 @@ public class BlueBatSprite extends MobSprite { die = new Animation( 12, false ); die.frames( frames, 4, 5, 6 ); + zap = attack.clone(); + play( idle ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 8b4a92b75..a9e07ddee 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -18,10 +18,31 @@ import java.util.ArrayList; public class vM0_6_7_X_Changes { public static void addAllChanges(ArrayList changeInfos) { + add_v0_6_2_Changes(changeInfos); add_v0_6_1_Changes(changeInfos); add_v0_6_0_Changes(changeInfos); } + public static void add_v0_6_2_Changes( ArrayList changeInfos ) { + ChangeInfo changes = new ChangeInfo("v0.6.0.0-BetaXVII", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.SKYBULE_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), (Messages.get(ChangesScene.class, "bugfixes")), + Messages.get(vM0_6_7_X_Changes.class, "bug_06X22"))); + + changes = new ChangeInfo("调整", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new BlueBatSprite(), ("小血影初始改动"), + ("小血影10级后将会开启远程攻击"))); + } + public static void add_v0_6_1_Changes( ArrayList changeInfos ) { ChangeInfo changes = new ChangeInfo("v0.6.0.0-BetaXV", true, ""); changes.hardlight(Window.TITLE_COLOR); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java index 3331069e2..e91e97091 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java @@ -203,6 +203,8 @@ public class WndChallenges extends Window { pane.scrollTo(0, 0); } + + @Override public void onBackPressed() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java index 72de4ee15..3e803f2ea 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java @@ -188,8 +188,7 @@ public class WndHero extends WndTabbed { statSlot( Messages.get(this, "gold"), Statistics.goldCollected ); statSlot( Messages.get(this, "depth"), Statistics.deepestFloor ); - statSlot( M.L(HeroStat.class,"seed_dungeon"), M.L(HeroStat.class, Statistics.isCustomSeed ?"seed_custom_yes":"seed_custom_no") - + "-" + DungeonSeed.convertToCode(Dungeon.seed).toUpperCase()); + statSlot( M.L(HeroStat.class,"seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed).toUpperCase()); pos += GAP; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java index f609d8039..92a193443 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesGrid; import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesList; +import com.shatteredpixel.shatteredpixeldungeon.ui.Button; import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; @@ -47,7 +48,6 @@ import com.watabou.noosa.Game; import com.watabou.noosa.Group; import com.watabou.noosa.Image; import com.watabou.noosa.audio.Sample; -import com.shatteredpixel.shatteredpixeldungeon.ui.Button; import com.watabou.noosa.ui.Component; import java.util.Locale;