diff --git a/build.gradle b/build.gradle index 256676a80..874888787 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =901600 - appVersionName = '0.6.4.0-Beta7' + appVersionCode =903000 + appVersionName = '0.6.4.0-Beta9' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index dfc824dc7..423bcf835 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -340,6 +340,7 @@ text.herostat.real_time = 总时间 text.herostat.seed_dungeon = 种子序列号 text.herostat.seed_custom_no = text.textchallenges.seed_custom_title = 种子 +text.herostat.seed_type = 种子类型 text.textchallenges.hint = text.textchallenges.delete_seed_input = 清除 @@ -1770,6 +1771,8 @@ actors.hero.talent.ratforcements.desc=_+1:_以自身为目标使用鼠化术 actors.mobs.npcs.blacksmith.name=巨魔铁匠 actors.mobs.npcs.blacksmith.gold_1=嘿,人类!不想当个没用的废物,对吗?拿着那个镐子然后给我挖点_暗金矿,15块_就够了。什么?要我如何报答你?真贪心...\n好吧,好吧,我没钱付给你,但我可以给你打打铁。想想你运气有多好吧,我可是这附近唯一的铁匠。 actors.mobs.npcs.blacksmith.blood_1=嘿,人类!不想当个没用的废物,对吗?拿着那个镐子然后用它_杀只蝙蝠_,我需要镐头上沾着的血。什么?要我如何报答你?真贪心...\n\n好吧,好吧,我没钱付给你,但我可以给你打打铁。想想你运气有多好吧,我可是这附近唯一的铁匠。 +actors.mobs.npcs.blacksmith.blood_a=嘿,人类!不想当个没用的废物,对吗?拿着那个镐子然后用它_杀只蝙蝠_,我需要镐头上沾着的血。什么?要我如何报答你?真贪心...\n\n好吧,好吧,我没钱付给你,但我可以给你打打铁。想想你运气有多好吧,我可是这附近唯一的铁匠。\n\n顺带一提,近期由于神秘魔力的感染,蝙蝠变得更加危险,小心别被蝙蝠杀死了……,不然我可不会来给你收尸。 + actors.mobs.npcs.blacksmith.lost_pick=你在逗我?我的镐子呢?! actors.mobs.npcs.blacksmith.gold_2=_暗金矿_。15块。说真的,有那么难? actors.mobs.npcs.blacksmith.blood_2=我说了我需要镐子沾上蝙蝠血。赶紧! diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 9a16b90e7..4c28eb57d 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -580,6 +580,14 @@ items.armor.warriorarmor.name=英雄铠甲 items.armor.warriorarmor.desc=这套铠甲看起来很有份量,但战士能借助它施展一项绝技。 +### custom armor +items.armor.custom.ancityarmor.name=板鲎甲 +items.armor.custom.ancityarmor.desc=从巨大底栖顶级掠食者的身上剥离的铠甲,看着非常厚重,实际上非常轻盈\n\n_这件护甲擅长闪避_,这件武器属于特殊护甲,无法被皇冠改造。 +items.armor.custom.ancityarmor.ac_custom=毒雾释放 +items.armor.glyphs.alowglyph.ancitystone.name=远古印记 +items.armor.glyphs.alowglyph.ancitystone.desc=这个强大的独有印记能够让使用它的人免疫毒雾,酸蚀,中毒效果。\n\n印记是一种强大的祝福刻印,可与刻印共存。 +items.armor.glyphs.alowglyph.ancitystone.alowglyph=印记 +items.armor.custom.ancityarmor.no_charge=护甲没有足够的能量释放战技! ###artifacts items.artifacts.alchemiststoolkit.name=炼金工具箱 @@ -899,7 +907,7 @@ items.artifacts.unstablespellbook.desc_empowered=被你放进书中的卷轴闪 items.artifacts.unstablespellbook.read_empowered=被你放入魔典的卷轴都充满了魔法能量。你可以自主选择导引出该卷轴的正常或秘卷能力。\n\n如果选择释放秘卷能力,则会消耗2点魔典充能。 items.artifacts.wraithamulet.name=暗金宝石护符 -items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候,你还可以对敌人实行一次暗夜突袭,对目标造成{真实即死{伤害,并立刻瞬移到指定目标位置。\n\n如果是首领,则受到_最大生命值的10%伤害_。护符能量将会随着时间自动恢复,所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符,自从她在地牢中失踪后,这个护符就一直被遗弃在这里…… +items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候,你还可以对敌人实行一次暗夜突袭,对目标造成{真实即死{伤害,并立刻瞬移到指定目标位置。\n\n如果是首领,则受到_最大生命值的25%伤害_。护符能量将会随着时间自动恢复,所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符,自从她在地牢中失踪后,这个护符就一直被遗弃在这里…… items.artifacts.wraithamulet.ghost=你遁入了虚无,你的身体变得透明了。 items.artifacts.wraithamulet.cooddown=你的护符能量正在冷却,你暂时无法使用任何能力。 items.artifacts.wraithamulet.nochareup=你的护符能量不足,你无法使用任何能力。 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index c39ca9cd3..c3c86d034 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -290,7 +290,7 @@ badges$badge.reset_day.desc=携带神秘生物的遗物离开地牢,完成它 challenges.no_food=缩餐节食 challenges.no_food_desc=食物本就稀缺,但你还需要注意节食!\n\n・使用各类食物与丰饶之角的饱腹效果为原本的三分之一。\n・其他恢复饥饿的机制不受影响。 challenges.no_armor=无甲之身 -challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。\n\n_地牢环境已发生改变,请小心应对。(种子物品有生成变动)_ +challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有常规护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。\n\n_地牢环境已发生改变,请小心应对。(种子物品有生成变动)_ challenges.no_healing=恐药异症 challenges.no_healing_desc=治疗药水真是种好东西,可惜你对它过敏!\n\n・治疗药水以及使用治疗药水炼制的道具将无法治愈英雄,反而会使英雄中毒。\n・炼金催化剂不会随机到治愈英雄或使英雄中毒的效果。\n・这些道具对其他角色依然发挥正常效果。 challenges.no_herbalism=荒芜之地 diff --git a/core/src/main/assets/messages/scenes/scenes.properties b/core/src/main/assets/messages/scenes/scenes.properties index 73a137e42..8337dbe51 100644 --- a/core/src/main/assets/messages/scenes/scenes.properties +++ b/core/src/main/assets/messages/scenes/scenes.properties @@ -204,6 +204,9 @@ scenes.gamenewsscene$articlebutton.force_download=点我下载正版并关闭游 scenes.gamenewsscene$articlebutton.okay=继续游玩 scenes.gamenewsscene$newsinfo.metered_network=当连接到一个流量计费的网络,比如移动数据时,为了保证你的话费,我们不会发送更新数据给你。\n\n请连接WIFI后再次尝试,现在可以点击下方继续游玩继续游戏。 +scenes.gamenewsscene.not_inter=无网络连接 +scenes.gamenewsscene.not_desc=无法连接到更新服务器,遇到这种情况可能是服务器节点维护或者是你尚未开启网络。\n\n您仍可继续游玩游戏,但若想要检查最新版本,你需要开启网络后重启程序以获取服务器数据。 + scenes.rankingsscene.title=最高纪录 scenes.rankingsscene.total=游戏次数: scenes.rankingsscene.no_games=目前为止还没有已经结束的游戏。 diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index 9701403e6..44cdf8b58 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -550,6 +550,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x80=1.修复灯火值不扣减的错 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x81=1.优化灯火体验\n其他错误修复。 -ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题\n6.修复部分成就无法获得的问题\n7.改善部分房间不会在1层生成为隐藏层\n7.修复商人的一些错误\n8.修复部分怪物掉落问题 +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题\n6.修复部分成就无法获得的问题\n7.改善部分房间不会在1层生成为隐藏层\n7.修复商人的一些错误\n8.修复部分怪物掉落问题\n8.修复部分错误 //ui.changelist.mlpd.vm0_5_x_changes.xxx// \ No newline at end of file diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index 4fe7b5f23..576995bb9 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -137,7 +137,7 @@ windows.wndblacksmith.select=选择要重铸的物品 windows.wndblacksmith.reforge=重铸物品 windows.wndsettings$extendtab.title=额外设置 -windows.wndsettings$extendtab.dark_ui=经典界面 +windows.wndsettings$extendtab.dark_ui=魔绫主题 windows.wndsettings$extendtab.pc_ui=实验功能(应用PC端界面) windows.pagewindows$pagewindowstab.title=左侧快捷栏设置 @@ -204,7 +204,7 @@ windows.wndgameinprogress.gamegold=游戏金币: windows.wndgameinprogress.gamenayzi=奈亚大亨: windows.wndgameinprogress.gamenayzis=\n一局游戏内购买7次终端的物品,即可永久让奈亚入驻0层。 windows.wndgameinprogress.gamemimic=拟态猎杀: -windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n-_B类_为开启_独挡一面_挑战后的种子。 +windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n_B类_为开启_独挡一面_挑战后的种子。\n_C类_:支离破碎&基因突变\n_D类_:BossRush\n\n(种子判定优先级:D>B>C>A) windows.wndgameinprogress.title=%1$d级%2$s windows.wndgameinprogress.challenges=挑战 diff --git a/core/src/main/assets/sprites/boss/DiedElement.png b/core/src/main/assets/sprites/boss/DiedElement.png new file mode 100644 index 000000000..2c6ad1aee Binary files /dev/null and b/core/src/main/assets/sprites/boss/DiedElement.png differ diff --git a/core/src/main/assets/sprites/huntress.png b/core/src/main/assets/sprites/huntress.png index 1ad205ad9..889c8084d 100644 Binary files a/core/src/main/assets/sprites/huntress.png and b/core/src/main/assets/sprites/huntress.png differ diff --git a/core/src/main/assets/sprites/items/items.png b/core/src/main/assets/sprites/items/items.png index 150ad824c..3a1a2a403 100644 Binary files a/core/src/main/assets/sprites/items/items.png and b/core/src/main/assets/sprites/items/items.png differ diff --git a/core/src/main/assets/sprites/mage.png b/core/src/main/assets/sprites/mage.png index a1fc0d5b9..8ec1c3430 100644 Binary files a/core/src/main/assets/sprites/mage.png and b/core/src/main/assets/sprites/mage.png differ diff --git a/core/src/main/assets/sprites/rogue.png b/core/src/main/assets/sprites/rogue.png index 3b371fc46..242fbc011 100644 Binary files a/core/src/main/assets/sprites/rogue.png and b/core/src/main/assets/sprites/rogue.png differ diff --git a/core/src/main/assets/sprites/warrior.png b/core/src/main/assets/sprites/warrior.png index ec0908a17..57d54f64c 100644 Binary files a/core/src/main/assets/sprites/warrior.png and b/core/src/main/assets/sprites/warrior.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 884a8d17b..1ef568561 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -84,7 +84,7 @@ public class Assets { public static final String CITY_BOSS = "environment/custom_tiles/city_boss.png"; public static final String HALLS_SP = "environment/custom_tiles/halls_special.png"; - public static final String TILES_COLD = "environment/tiles_fire.png"; + public static final String TILES_COLD = "environment/Reload.png"; public static final String TILES_DIED = "environment/tiles_died.png"; public static final String TILES_GOLD = "environment/tiles_gold.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 3192a47de..122789c1e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -24,11 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.amuletObtained; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.chalMultiplier; -import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.A_SCORE; -import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.B_SCORE; -import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SSSP_SCORE; -import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SSS_SCORE; -import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SS_SCORE; + +import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.*; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java index e5dc03fcf..8775d081a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java @@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty; import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -97,7 +98,7 @@ public class Challenges { } if (Dungeon.isChallenged(NO_ARMOR)) { - if (item instanceof Armor && !(item instanceof ClothArmor || item instanceof ClassArmor)) { + if (item instanceof Armor && !(item instanceof ClothArmor || item instanceof ClassArmor|| item instanceof CustomArmor)) { //GLog.n("这片大地吃布甲之外的护甲从不挑食,侦查到作弊行为,已移除"+item); GLog.n(Messages.get(Challenges.class, "no_armorx"), item); return true; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Chrome.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Chrome.java index 704c37d58..a2e30ef95 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Chrome.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Chrome.java @@ -45,9 +45,9 @@ public class Chrome { public static NinePatch get( Type type ) { String Asset; if (SPDSettings.ClassUI()) { - Asset = Assets.Interfaces.CHROME_DARK; - } else { Asset = Assets.Interfaces.CHROME; + } else { + Asset = Assets.Interfaces.CHROME_DARK; } switch (type) { case WINDOW: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 08124df25..dcb3cae41 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AdrenalineSurge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AnkhInvulnerability; @@ -65,6 +66,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.DeadSoul; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; @@ -91,6 +93,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Nyctophobia; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Regeneration; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SnipersMark; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo; @@ -119,6 +122,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph.AncityStone; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Brimstone; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity; @@ -2315,6 +2319,20 @@ public class Hero extends Char { if (effect == HalomethaneBurning.class && belongings.armor() != null && belongings.armor().hasGlyph(Brimstone.class, this)){ return true; } + + //远古免疫 + if (effect == ToxicGas.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class, + this)){ + return true; + } + if (effect == Corrosion.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class, this)){ + return true; + } + if (effect == Poison.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class, + this)){ + return true; + } + return super.isImmune(effect); } 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 8468a0f0a..a70928042 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 @@ -54,6 +54,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.LamellarArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.MailArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; @@ -90,7 +94,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMysticalEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; -import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAnmy; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning; @@ -162,11 +165,12 @@ public enum HeroClass { new LockSword().quantity(1).identify().collect(); new IceFishSword().quantity(1).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect(); - //new Amulet().quantity(1).identify().collect(); + //new CommRelay().quantity(1).identify().collect(); + new AncityArmor().quantity(1).identify().collect(); new TengusMask().quantity(1).identify().collect(); new RingOfWealth().quantity(1).identify().collect(); new TimekeepersHourglass().quantity(1).identify().collect(); - new WandOfAnmy().quantity(1).identify().collect(); + //new WandOfAnmy().quantity(1).identify().collect(); Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f); new WraithAmulet().quantity(1).identify().collect(); new BloodthirstyThorn().quantity(1).identify().collect(); @@ -175,6 +179,7 @@ public enum HeroClass { new WashCrime().quantity(1).identify().collect(); new MagicTorch().quantity(1).identify().collect(); new LamellarArmor().quantity(1).identify().collect(); + new MobPlacer().quantity(1).identify().collect(); new CrivusFruitsFlake().quantity(50).identify().collect(); new PotionOfHealing().quantity(50).identify().collect(); @@ -218,7 +223,10 @@ public enum HeroClass { new IceCityBooks().quantity(12).identify().collect(); new ScrollOfFlameCursed().quantity(44).identify().collect(); + new MailArmor().quantity(1).identify().collect(); new LeatherArmor().quantity(1).identify().collect(); + new ScaleArmor().quantity(1).identify().collect(); + new PlateArmor().quantity(1).identify().collect(); Dungeon.gold = 600000000; hero.STR = 27; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM200.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM200.java index d15c7a74c..bef61f22c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM200.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM200.java @@ -67,7 +67,7 @@ public class DM200 extends Mob { @Override public int drRoll() { - return Random.NormalIntRange(0, 8); + return super.drRoll() + Random.NormalIntRange(0, 8); } @Override @@ -81,7 +81,7 @@ public class DM200 extends Mob { Dungeon.LimitedDrops.DM200_EQUIP.count++; //uses probability tables for dwarf city if (loot == Generator.Category.WEAPON){ - return Generator.randomWeapon(4); + return Generator.randomWeapon(4, true); } else { return Generator.randomArmor(4); } @@ -127,7 +127,7 @@ public class DM200 extends Mob { } - private boolean canVent(int target){ + protected boolean canVent(int target){ if (ventCooldown > 0) return false; PathFinder.buildDistanceMap(target, BArray.not(Dungeon.level.solid, null), Dungeon.level.distance(pos, target)+1); //vent can go around blocking terrain, but not through it @@ -180,4 +180,4 @@ public class DM200 extends Mob { } } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java index 5ffa19946..8976b51c4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java @@ -81,16 +81,6 @@ public class FlameB01 extends Mob { this.die(Burning.class); return true; } - if(buff(Burning.class) != null){ - new Bomb().explode(this.pos); - this.die(Burning.class); - return true; - } - if(buff(Burning.class) != null) { - new Bomb().explode(this.pos); - this.die(Burning.class); - return true; - } return super.act(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index 4b964a774..7e470f2f6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -22,6 +22,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing; import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.RainbowParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; import com.shatteredpixel.shatteredpixeldungeon.items.food.SakaMeat; import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul; @@ -263,7 +264,7 @@ public class SakaFishBoss extends Boss { GameScene.bossSlain(); Dungeon.level.drop( new CrystalKey( Dungeon.depth ), pos ).sprite.drop(); - + Dungeon.level.drop( new AncityArmor(), pos ).sprite.drop(); //60% chance of 2 blobs, 30% chance of 3, 10% chance for 4. Average of 2.5 int meets = Random.chances(new float[]{0, 0, 6, 3, 1}); for (int i = 0; i < meets; i++){ @@ -622,7 +623,7 @@ public class SakaFishBoss extends Boss { ray.path.get(ray.dist), null ); - if( Dungeon.level.water[ray.path.get(ray.dist)] || Random.Int(10)==0){ + if( Dungeon.level.water[pos] || Random.Int(10)==0){ GameScene.add(Blob.seed(ray.path.get(ray.dist), 30, FrostFire.class)); Level.set(ray.path.get(ray.dist), Terrain.EMPTY); GameScene.updateMap( ray.path.get(ray.dist) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Blacksmith.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Blacksmith.java index 85033e010..114c826a7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Blacksmith.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Blacksmith.java @@ -21,12 +21,18 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal; import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem; import com.shatteredpixel.shatteredpixeldungeon.items.Item; @@ -73,7 +79,7 @@ public class Blacksmith extends NPC { sprite.turnTo( pos, c.pos ); - if (c != Dungeon.hero){ + if (c != hero){ return true; } @@ -83,7 +89,9 @@ public class Blacksmith extends NPC { @Override public void call() { GameScene.show( new WndQuest( Blacksmith.this, - Quest.alternative ? Messages.get(Blacksmith.this, "blood_1") : Messages.get(Blacksmith.this, "gold_1") ) { + Quest.alternative ? Messages.get(Blacksmith.this, Dungeon.isChallenged(RLPT)?"blood_a": + "blood_1") : + Messages.get(Blacksmith.this, "gold_1") ) { @Override public void onBackPressed() { @@ -94,10 +102,40 @@ public class Blacksmith extends NPC { Notes.add( Notes.Landmark.TROLL ); Pickaxe pick = new Pickaxe(); - if (pick.doPickUp( Dungeon.hero )) { - GLog.i( Messages.get(Dungeon.hero, "you_now_have", pick.name() )); + if (pick.doPickUp( hero )) { + GLog.i( Messages.get(hero, "you_now_have", pick.name() )); + if(Dungeon.isChallenged(RLPT)){ + Mob questBoss; + questBoss = new Bat(); + Class buffCls; + + + switch (Random.NormalIntRange(0,6)){ + case 0: default: + buffCls = ChampionEnemy.Small.class; + break; + case 1: + buffCls = ChampionEnemy.Bomber.class; + break; + case 2: + buffCls = ChampionEnemy.Middle.class; + break; + case 3: + buffCls = ChampionEnemy.Big.class; + break; + case 4: + buffCls = ChampionEnemy.Sider.class; + break; + case 5: + buffCls = ChampionEnemy.LongSider.class; + break; + } + Buff.affect( questBoss, buffCls); + questBoss.pos = Dungeon.level.randomRespawnCell(questBoss); + GameScene.add(questBoss); + } } else { - Dungeon.level.drop( pick, Dungeon.hero.pos ).sprite.drop(); + Dungeon.level.drop( pick, hero.pos ).sprite.drop(); } } } ); @@ -107,16 +145,16 @@ public class Blacksmith extends NPC { } else if (!Quest.completed) { if (Quest.alternative) { - Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class ); + Pickaxe pick = hero.belongings.getItem( Pickaxe.class ); if (pick == null) { tell( Messages.get(this, "lost_pick") ); } else if (!pick.bloodStained) { tell( Messages.get(this, "blood_2") ); } else { - if (pick.isEquipped( Dungeon.hero )) { - pick.doUnequip( Dungeon.hero, false ); + if (pick.isEquipped( hero )) { + pick.doUnequip( hero, false ); } - pick.detach( Dungeon.hero.belongings.backpack ); + pick.detach( hero.belongings.backpack ); tell( Messages.get(this, "completed") ); Statistics.questScores[2] += 3000; Quest.completed = true; @@ -125,18 +163,18 @@ public class Blacksmith extends NPC { } else { - Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class ); - DarkGold gold = Dungeon.hero.belongings.getItem( DarkGold.class ); + Pickaxe pick = hero.belongings.getItem( Pickaxe.class ); + DarkGold gold = hero.belongings.getItem( DarkGold.class ); if (pick == null) { tell( Messages.get(this, "lost_pick") ); } else if (gold == null || gold.quantity() < 15) { tell( Messages.get(this, "gold_2") ); } else { - if (pick.isEquipped( Dungeon.hero )) { - pick.doUnequip( Dungeon.hero, false ); + if (pick.isEquipped( hero )) { + pick.doUnequip( hero, false ); } - pick.detach( Dungeon.hero.belongings.backpack ); - gold.detachAll( Dungeon.hero.belongings.backpack ); + pick.detach( hero.belongings.backpack ); + gold.detachAll( hero.belongings.backpack ); tell( Messages.get(this, "completed") ); Statistics.questScores[2] += 3000; Quest.completed = true; @@ -149,7 +187,7 @@ public class Blacksmith extends NPC { Game.runOnRenderThread(new Callback() { @Override public void call() { - GameScene.show( new WndBlacksmith( Blacksmith.this, Dungeon.hero ) ); + GameScene.show( new WndBlacksmith( Blacksmith.this, hero ) ); } }); @@ -216,18 +254,18 @@ public class Blacksmith extends NPC { } Sample.INSTANCE.play( Assets.Sounds.EVOKE ); - ScrollOfUpgrade.upgrade( Dungeon.hero ); - Item.evoke( Dungeon.hero ); + ScrollOfUpgrade.upgrade( hero ); + Item.evoke( hero ); - if (second.isEquipped( Dungeon.hero )) { - ((EquipableItem)second).doUnequip( Dungeon.hero, false ); + if (second.isEquipped( hero )) { + ((EquipableItem)second).doUnequip( hero, false ); } - second.detach( Dungeon.hero.belongings.backpack ); + second.detach( hero.belongings.backpack ); if (second instanceof Armor){ BrokenSeal seal = ((Armor) second).checkSeal(); if (seal != null){ - Dungeon.level.drop( seal, Dungeon.hero.pos ); + Dungeon.level.drop( seal, hero.pos ); } } @@ -239,7 +277,7 @@ public class Blacksmith extends NPC { } else { first.upgrade(); } - Dungeon.hero.spendAndNext( 2f ); + hero.spendAndNext( 2f ); Badges.validateItemLevelAquired( first ); Item.updateQuickslot(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index c81d7399d..4c433ce3d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -1,6 +1,7 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.dict; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; @@ -152,6 +153,8 @@ public class DictSpriteSheet { return new Image(Assets.Sprites.DM200, 0, 18, 21, 18); case PYLON: return new Image(Assets.Sprites.PYLON, 10, 0, 10, 20); + case BRT: + return new BruteBotSprite(); case GHOUL: return new Image(Assets.Sprites.GHOUL, 0, 0, 12, 14); @@ -312,6 +315,8 @@ public class DictSpriteSheet { public static final int DM201 = 406 + 10000; public static final int PYLON = 407 + 10000; + public static final int BRT = 2007 + 10000; + public static final int GHOUL = 500 + 10000; public static final int ELEMENTAL_FIRE = 501 + 10000; public static final int ELEMENTAL_FROST = 502 + 10000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java index a25b02d0e..b4d7b44fd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java @@ -14,6 +14,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bandit; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BlackHost; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Brute; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BruteBot; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CausticSlime; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab; @@ -184,7 +185,9 @@ public class MobPlacer extends TestItem{ case 3: return DataPack.DM201.ordinal() - DataPack.NEW_FIRE_ELE.ordinal() - 1; case 4: return DataPack.ELE_CHAOS.ordinal() - DataPack.DM201.ordinal() - 1; case 5: return DataPack.ACIDIC.ordinal() - DataPack.ELE_CHAOS.ordinal() - 1; - case 6: default: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1; + case 6: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1; + case 7: return DataPack.ZSLS.ordinal() - DataPack.NQHZ.ordinal() - 1; + case 8: default: return DataPack.SLXJ.ordinal() - DataPack.IAS.ordinal() - 1; } } private int dataThreshold(int tier){ @@ -201,6 +204,10 @@ public class MobPlacer extends TestItem{ return DataPack.ELE_CHAOS.ordinal()+1; case 6: return DataPack.ACIDIC.ordinal()+1; + case 7: + return DataPack.ZSLS.ordinal()+1; + case 8: + return DataPack.SLXJ.ordinal()+1; } } @@ -329,7 +336,7 @@ public class MobPlacer extends TestItem{ private void updateSelectedMob(){ int selected = mobTier; StringBuilder sb = new StringBuilder(); - for(int i=1;i<=6;++i){ + for(int i=1;i<=8;++i){ sb.append((i==selected? "* ":"- ")); } selectedPage.text(sb.toString()); @@ -481,6 +488,7 @@ public class MobPlacer extends TestItem{ IAX(Ice_Scorpio.class, DictSpriteSheet.IAX), FAX(Fire_Scorpio.class, DictSpriteSheet.FAX), CAX(SRPDICLR.class, DictSpriteSheet.CAX), + BRT(BruteBot.class, DictSpriteSheet.BRT), IAS(IceGolem.class, DictSpriteSheet.IAS); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/KingsCrown.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/KingsCrown.java index 612d2da90..535241577 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/KingsCrown.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/KingsCrown.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; @@ -55,7 +56,10 @@ public class KingsCrown extends Item { @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); - actions.add( AC_WEAR ); + if(!(hero.belongings.armor instanceof CustomArmor)){ + actions.add( AC_WEAR ); + } + return actions; } @@ -104,13 +108,10 @@ public class KingsCrown extends Item { ClassArmor classArmor = ClassArmor.upgrade(hero, armor); if (hero.belongings.armor == armor) { - hero.belongings.armor = classArmor; ((HeroSprite) hero.sprite).updateArmor(); classArmor.activate(hero); - } else { - armor.detach(hero.belongings.backpack); classArmor.collect(hero.belongings.backpack); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java index 42a50211d..8b21803d8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java @@ -23,11 +23,13 @@ package com.shatteredpixel.shatteredpixeldungeon.items; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -56,6 +58,11 @@ public class Torch extends Item { actions.add( AC_LIGHT ); return actions; } + + public void Refill(OilLantern torch) { + torch.plingks++; + detach(Dungeon.hero.belongings.backpack); + } @Override public void execute( Hero hero, String action ) { @@ -64,7 +71,11 @@ public class Torch extends Item { if (action.equals( AC_LIGHT )) { - if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) { + if(Statistics.lanterfireactive){ + OilLantern lantern = Dungeon.hero.belongings.getItem(OilLantern.class); + Refill(lantern); + GLog.p("在提灯的照耀下,你的火把被提灯汲取,你可以通过装填添加由火把提供的20%的燃料。"); + } else if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) { GLog.n("你已有其他光芒效果,在这些效果取消或主动失效前,暂时无法使用火把。"); } else { hero.spend( TIME_TO_LIGHT ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java index 8dda48890..840c62e4e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java @@ -21,6 +21,8 @@ package com.shatteredpixel.shatteredpixeldungeon.items.armor; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -43,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Metabolism; import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Multiplicity; import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Overgrowth; import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Stench; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Affection; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Brimstone; @@ -101,6 +104,9 @@ public class Armor extends EquipableItem { public Augment augment = Augment.NONE; public Glyph glyph; + + public AlowGlyph alowglyph; + public boolean curseInfusionBonus = false; public boolean masteryPotionBonus = false; @@ -244,8 +250,8 @@ public class Armor extends EquipableItem { if (seal.getGlyph() != null){ inscribe(seal.getGlyph()); } - if (isEquipped(Dungeon.hero)){ - Buff.affect(Dungeon.hero, BrokenSeal.WarriorShield.class).setArmor(this); + if (isEquipped(hero)){ + Buff.affect(hero, BrokenSeal.WarriorShield.class).setArmor(this); } } @@ -385,7 +391,7 @@ public class Armor extends EquipableItem { //other things can equip these, for now we assume only the hero can be affected by levelling debuffs @Override public int buffedLvl() { - if (isEquipped( Dungeon.hero ) || Dungeon.hero.belongings.contains( this )){ + if (isEquipped( hero ) || hero.belongings.contains( this )){ return super.buffedLvl(); } else { return level(); @@ -425,8 +431,8 @@ public class Armor extends EquipableItem { damage = glyph.proc( this, attacker, defender, damage ); } - if (!levelKnown && defender == Dungeon.hero) { - float uses = Math.min( availableUsesToID, Talent.itemIDSpeedFactor(Dungeon.hero, this) ); + if (!levelKnown && defender == hero) { + float uses = Math.min( availableUsesToID, Talent.itemIDSpeedFactor(hero, this) ); availableUsesToID -= uses; usesLeftToID -= uses; if (usesLeftToID <= 0) { @@ -450,7 +456,12 @@ public class Armor extends EquipableItem { @Override public String name() { - return glyph != null && (cursedKnown || !glyph.curse()) ? glyph.name( super.name() ) : super.name(); + if(hero.belongings.armor instanceof CustomArmor){ + return super.name(); + } else { + return glyph != null && (cursedKnown || !glyph.curse()) ? glyph.name( super.name() ) : super.name(); + } + } @Override @@ -460,13 +471,13 @@ public class Armor extends EquipableItem { if (levelKnown) { info += "\n\n" + Messages.get(Armor.class, "curr_absorb", DRMin(), DRMax(), STRReq()); - if (STRReq() > Dungeon.hero.STR()) { + if (STRReq() > hero.STR()) { info += " " + Messages.get(Armor.class, "too_heavy"); } } else { info += "\n\n" + Messages.get(Armor.class, "avg_absorb", DRMin(0), DRMax(0), STRReq(0)); - if (STRReq(0) > Dungeon.hero.STR()) { + if (STRReq(0) > hero.STR()) { info += " " + Messages.get(Armor.class, "probably_too_heavy"); } } @@ -485,8 +496,13 @@ public class Armor extends EquipableItem { info += "\n\n" + Messages.get(Armor.class, "inscribed", glyph.name()); info += " " + glyph.desc(); } + + if (alowglyph != null && (cursedKnown || !alowglyph.curse())) { + info += "\n\n" + Messages.get(Armor.class, "inscribed", alowglyph.name()); + info += " " + alowglyph.desc(); + } - if (cursed && isEquipped( Dungeon.hero )) { + if (cursed && isEquipped( hero )) { info += "\n\n" + Messages.get(Armor.class, "cursed_worn"); } else if (cursedKnown && cursed) { info += "\n\n" + Messages.get(Armor.class, "cursed"); @@ -599,6 +615,10 @@ public class Armor extends EquipableItem { return glyph != null && glyph.getClass() == type && owner.buff(MagicImmune.class) == null; } + public boolean hasAlowGlyph(Class type, Char owner) { + return alowglyph != null && alowglyph.getClass() == type && owner.buff(MagicImmune.class) == null; + } + //these are not used to process specific glyph effects, so magic immune doesn't affect them public boolean hasGoodGlyph(){ return glyph != null && !glyph.curse(); @@ -724,4 +744,39 @@ public class Armor extends EquipableItem { } } + + public static abstract class AlowGlyph implements Bundlable { + + public abstract int proc( Armor armor, Char attacker, Char defender, int damage ); + + public String name() { + if (!curse()) + return name( Messages.get(this, "alowglyph") ); + else + return name( Messages.get(Item.class, "curse")); + } + + public String name( String armorName ) { + return Messages.get(this, "name", armorName); + } + + public String desc() { + return Messages.get(this, "desc"); + } + + public boolean curse() { + return false; + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + } + + @Override + public void storeInBundle( Bundle bundle ) { + } + + //public abstract ItemSprite.Glowing glowing(); + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java index 05709aa93..baf1f2389 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java @@ -49,13 +49,11 @@ abstract public class ClassArmor extends Armor { bones = false; } - private int armorTier; - private Charger charger; public float charge = 0; public ClassArmor() { - super( 6 ); + super( 7 ); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LamellarArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LamellarArmor.java index f924c432e..7f343cffb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LamellarArmor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LamellarArmor.java @@ -12,4 +12,33 @@ public class LamellarArmor extends Armor { super( 6 ); } +// @Override +// public boolean doEquip( Hero hero ) { +// +// detach(hero.belongings.backpack); +// +// if (hero.belongings.armor == null || hero.belongings.armor.doUnequip( hero, true, false )) { +// +// hero.belongings.armor = this; +// +// cursedKnown = true; +// if (cursed) { +// equipCursed( hero ); +// GLog.n( Messages.get(Armor.class, "equip_cursed") ); +// } +// +// ((HeroSprite)hero.sprite).updateArmor(); +// activate(hero); +// Talent.onItemEquipped(hero, this); +// hero.spendAndNext( time2equip( hero ) ); +// return true; +// +// } else { +// +// collect( hero.belongings.backpack ); +// return false; +// +// } +// } + } \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LeatherArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LeatherArmor.java index 36dff82a6..18600a823 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LeatherArmor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/LeatherArmor.java @@ -28,7 +28,6 @@ public class LeatherArmor extends Armor { { image = ItemSpriteSheet.ARMOR_LEATHER; } - public LeatherArmor() { super( 2 ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/AncityArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/AncityArmor.java new file mode 100644 index 000000000..e8e6ef719 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/AncityArmor.java @@ -0,0 +1,208 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.armor.custom; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph.AncityStone; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Stone; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Callback; +import com.watabou.utils.Random; + +public class AncityArmor extends CustomArmor{ + + { + image = ItemSpriteSheet.ARMOR_ANCITY; + tier = 8; + alowglyph = new AncityStone(); + icon = ItemSpriteSheet.Icons.POTION_PARAGAS; + charge = 50; + } + + + @Override + public int STRReq(int lvl){ + return STRReq(4, lvl)-1; + } + + @Override + public void execute( Hero hero, String action ) { + + super.execute( hero, action ); + + if (action.equals( AC_CUSTOM )) { + if(charge>39){ + curUser = hero; + curItem = this; + GameScene.selectCell( zapper ); + } else { + GLog.w(Messages.get(AncityArmor.class,"no_charge")); + } + + } + } + + public void fxs(Ballistica beam, Callback callback) { + MagicMissile.boltFromChar( curUser.sprite.parent, + MagicMissile.TOXIC_VENT, + curUser.sprite, + beam.collisionPos, + callback); + Sample.INSTANCE.play( Assets.Sounds.ZAP ); + //buildBeams(beam); + callback.call(); + } + + protected int collisionProperties = Ballistica.MAGIC_BOLT; + + public int collisionProperties(int target){ + return collisionProperties; + } + + + public void wandUsed() { + curUser.spendAndNext( 1f ); + } + + protected static CellSelector.Listener zapper = new CellSelector.Listener() { + + @Override + public void onSelect( Integer target ) { + + if (target != null) { + + final AncityArmor curWand; + + if (curItem instanceof AncityArmor) { + curWand = (AncityArmor) AncityArmor.curItem; + } else { + return; + } + final Ballistica shot = new Ballistica( curUser.pos, target, curWand.collisionProperties(target)); + int cell = shot.collisionPos; + if (target == curUser.pos || cell == curUser.pos) { + GLog.i( Messages.get(Wand.class, "self_target") ); + return; + } + curUser.sprite.zap(cell); + + if (curWand.tryToZap(curUser)) { + + curUser.busy(); + curWand.fxs(shot, new Callback() { + public void call() { + curWand.onZap(shot); + curWand.wandUsed(); + } + }); + curWand.cursedKnown = true; + + } + } + } + + @Override + public String prompt() { + return Messages.get(Wand.class, "prompt"); + } + }; + + public boolean tryToZap( Hero owner ){ + + if (owner.buff(MagicImmune.class) != null){ + GLog.w( Messages.get(Wand.class, "no_magic") ); + return false; + } + + return true; + } + + + public void onZap( Ballistica beam ) { + Char ch = Actor.findChar(beam.collisionPos); + + if (ch != null){ + + if (!(ch instanceof Mob)){ + return; + } + + Mob enemy = (Mob) ch; + GameScene.add(Blob.seed(enemy.pos, 200, ToxicGas.class)); + GameScene.add(Blob.seed(enemy.pos, 200, CorrosiveGas.class)); + charge -= 40; + Sample.INSTANCE.play( Assets.Sounds.GAS, 1, 0.8f * Random.Float(0.87f, 1.15f) ); + } + } + + @Override + public float evasionFactor(Char owner, float evasion ){ + + if (hasGlyph(Stone.class, owner) && !((Stone)glyph).testingEvasion()){ + return 0; + } + + if (owner instanceof Hero){ + int aEnc = STRReq() - ((Hero) owner).STR(); + if (aEnc > 0) evasion /= Math.pow(2.5, aEnc); + + Momentum momentum = owner.buff(Momentum.class); + if (momentum != null){ + evasion += momentum.evasionBonus(((Hero) owner).lvl, Math.max(0, -aEnc)); + } + } + + return evasion*1.35f + augment.evasionFactor(buffedLvl()); + } + + @Override + public int DRMin(int lvl){ + if (Dungeon.isChallenged(Challenges.NO_ARMOR)){ + return 0; + } + + int max = DRMax(lvl); + if (lvl >= max){ + return (lvl - max); + } else { + return lvl*2; + } + } + + @Override + public int DRMax(int lvl){ + int max = 3 * (2 + lvl ) + (lvl > 0 ? 1 : 0 ) + augment.defenseFactor(lvl); + + if (Dungeon.isChallenged(Challenges.NO_ARMOR)){ + return 3 + augment.defenseFactor(lvl); + } + + + if (lvl > max){ + return ((lvl - max)+1)/2; + } else { + return max; + } + + } + + + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/CustomArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/CustomArmor.java new file mode 100644 index 000000000..6b9106483 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/custom/CustomArmor.java @@ -0,0 +1,93 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.armor.custom; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +import java.util.ArrayList; + +/**自定义护甲是除开地牢之外的独立护甲, + * 但同时拥有自己的能力,无法使用皇冠的能力 + * 为此使用抽象类作为模板 */ +public abstract class CustomArmor extends Armor { + private Charger charger; + public float charge = 0; + + public class Charger extends Buff { + @Override + public boolean act() { + LockedFloor lock = target.buff(LockedFloor.class); + if (lock == null || lock.regenOn()) { + charge += 100 / 500f; //500 turns to full charge + updateQuickslot(); + if (charge > 100) { + charge = 100; + } + } + spend(TICK); + return true; + } + } + + @Override + public boolean doUnequip( Hero hero, boolean collect, boolean single ) { + if (super.doUnequip( hero, collect, single )) { + if (charger != null){ + charger.detach(); + charger = null; + } + return true; + + } else { + return false; + + } + } + + protected static final String AC_CUSTOM = "CUSTOM"; + + { + image = ItemSpriteSheet.ARMOR_ANCITY; + } + + //自定义护甲从8开始计算 + public CustomArmor() { + super( 0 ); + } + + @Override + public String status() { + return Messages.format( "%.0f%%", Math.floor(charge) ); + } + + @Override + public void activate(Char ch) { + super.activate(ch); + charger = new Charger(); + charger.attachTo(ch); + } + + /**默认情况下,需要武器等级大于等于2级才能被使用*/ + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + if(this.level()>=2){ + actions.add(AC_CUSTOM); + } + return actions; + } + + /**通过检测图像,在大于目标等级后添加快捷按钮,使玩家快捷使用自定义护甲特殊战技*/ + @Override + public int image() { + super.image(); + if (level() >= 2) { + defaultAction = AC_CUSTOM; + } + return image; + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AlowGlyph/AncityStone.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AlowGlyph/AncityStone.java new file mode 100644 index 000000000..f0bd3f92a --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AlowGlyph/AncityStone.java @@ -0,0 +1,15 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; + +public class AncityStone extends Armor.AlowGlyph { + + @Override + public int proc(Armor armor, Char attacker, Char defender, int damage) { + //no proc effect, see Hero.isImmune and GhostHero.isImmune and ArmoredStatue.isImmune + return damage; + } + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CommRelay.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CommRelay.java new file mode 100644 index 000000000..021408889 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/CommRelay.java @@ -0,0 +1,202 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage; +import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Heap; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.PathFinder; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class CommRelay extends Artifact { + { + + image = ItemSpriteSheet.DG25; + level = 0; + levelCap = 5; + + defaultAction=AC_MERC; + } + + private static final int NIMAGES = 1; + //private static final String AC_SUPP = "SUPPORT PACKAGE"; + //private static final String AC_MERC = "HIRE MERCENARY"; + //private static final String TXT_MERC = "A mercenary teleports adjacent to you!"; + //private static final String TXT_BOSS = "Strong magic aura of this place prevents the guilds from teleporting + // you supplies!"; + private static final String AC_SUPP = "补给物"; + private static final String AC_MERC = "呼唤雇佣兵"; + private static final String TXT_MERC = "雇佣兵传送到你附近!"; + private static final String TXT_BOSS = "这里强大的魔力流阻止了地牢国际安全委员公会预传送给你的东西!"; + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + + if (isEquipped(hero)) + actions.add(AC_MERC); + actions.add(AC_SUPP); + + return actions; + } + + @Override + protected ArtifactBuff passiveBuff() { + return new Collection(); + } + + protected boolean useable(){ + return true; + } + + @Override + public void execute(Hero hero, String action) { + super.execute(hero, action); + if (action.equals(AC_MERC)) { + if(!cursed){ + if (!isEquipped(hero)) + GLog.i("你需要先装备神器才能使用!"); + else if(!useable()) + GLog.i("你想做什么?"); + else if (!(Dungeon.gold >= 3500))//TODO adjust the gold cost based on current level. + GLog.w("你穷困潦倒,不能使用神器的该技能!"); + else { + ArrayList respawnPoints = new ArrayList(); + + for (int i = 0; i < PathFinder.NEIGHBOURS8.length; i++) { + int p = curUser.pos + PathFinder.NEIGHBOURS8[i]; + if (Actor.findChar(p) == null) { + respawnPoints.add(p); + } + } + + int nImages = NIMAGES; + while (nImages > 0 && respawnPoints.size() > 0) { + int index = Random.index(respawnPoints); + + MirrorImage mob = new MirrorImage(); + mob.duplicate( hero ); + GameScene.add(mob); + ScrollOfTeleportation.appear(mob, respawnPoints.get(index)); + + respawnPoints.remove(index); + nImages--; + } + + Sample.INSTANCE.play(Assets.Sounds.READ); + Invisibility.dispel(); + Dungeon.gold -= 3500; + GLog.p(TXT_MERC); + } + } else { + GLog.i("我们不会服从你!"); + //GLog.i("The item will not obey you!"); + } + } else if (action.equals(AC_SUPP)) { + if (!(Dungeon.gold >= 5000)){//TODO adjust the gold cost based on current level. + GLog.w("你穷困潦倒,不能使用神器的该技能!"); + } else if(Dungeon.bossLevel()){ + GLog.i(TXT_BOSS); + } else{ + GameScene.selectCell(listener); + } + } + } + + @Override + public String desc() { + String desc = "你惊讶的在地牢里发现了一个正在工作的通讯中继器!这还有一份说明书,"; + + desc += "加上一点阅读时的相互参照,你搞明白了它的功能。\n\n" + + "似乎它连接着雇佣兵协会的数据库。你很确定你可以和协会做个交易,当然是以一些金钱作为交换。"; + + if(isEquipped(Dungeon.hero)){ + desc += "\n\n"; + if(cursed){ + desc += "中继器在你背包里自己打开了,并发出了一道响亮的静电在地牢中回荡。"; + } else if(level < 2){ + desc += "你用无线电联系上了一个雇佣兵协会,他们很乐意给你提供一些帮助,只要你花一些钱来启动他们的物质传送器,"; + } else if (level < 10){ + desc += "有人远程在你的通讯中继器上添加了一个大大的红色按钮,上面写着“补给包:5000金币 和 雇佣兵:3500金币“,你当然知道这会花你一大笔钱,但你不禁对它的用处浮想联翩。"; + } else { + desc += "你和电台上的协会很熟了,他们愿意为你提供跟好的服务,并收取更低费用。"; + } + } + + return desc; + } + protected static CellSelector.Listener listener = new CellSelector.Listener() { + + @Override + public void onSelect(Integer pos) { + if (pos != null) { + Dungeon.level.drop(Generator.random(Generator.Category.FOOD), pos).type = Heap.Type.CHEST; + int loot = Random.Int(3); + if (loot == 0) { + Dungeon.level.drop(Generator.random(Generator.Category.RING), pos); + } else if (loot == 1) { + Dungeon.level.drop(Generator.random(Generator.Category.WAND), pos); + } else { + Dungeon.level.drop(Generator.random(Random.oneOf(Generator.Category.WEAPON, + Generator.Category.ARMOR)), pos); + } + Dungeon.level.drop(new Ankh(), pos); + Dungeon.level.drop(Generator.random(Generator.Category.POTION), pos); + Dungeon.level.drop(Generator.random(Generator.Category.SCROLL), pos); + Dungeon.gold -= 5000; + Sample.INSTANCE.play(Assets.Sounds.TELEPORT); + GameScene.updateMap(pos); + Dungeon.observe(); + GLog.p("地牢国际安全委员公会为你带来了补给箱!\n祝冒险愉快--地牢国际安全委员公会"); + } else { + GLog.n("你已经取消补给包发送申请!!!"); + } + } + + @Override + public String prompt() { + return "选择补给物的位置"; + } + }; + + + public class Collection extends ArtifactBuff{ + + public void collectGold(int gold){ + exp += gold / 4; + } + + @Override + public boolean act(){ + if(isCursed()&& level < levelCap){ + exp -= (500 * level); + upgrade(); + } + spend(TICK); + + if(exp >= (500 * level) && level < levelCap){ + exp -= (500 * level); + upgrade(); + } + updateQuickslot(); + return true; + } + public void checkUpgrade(){ + while (exp >= 1000 && level < levelCap){ + exp -= 1000; + upgrade(); + } + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java index f5ef1108c..e530bc043 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java @@ -64,7 +64,7 @@ public class WraithAmulet extends Artifact { @Override public int visiblyUpgraded() { - return levelKnown ? Math.round((level()*8)/(float)levelCap): 0; + return levelKnown ? Math.round((level()*10)/(float)levelCap): 0; } @@ -77,10 +77,10 @@ public class WraithAmulet extends Artifact { } else if(useableBasic()) { if(this.isEquipped(Dungeon.hero)){ if(this.charge > 0) { - exp += 5; + exp += level()>5 ? 20 : 40; Buff.affect(Dungeon.hero, Invisibility.class, Invisibility.DURATION/2); GLog.p(Messages.get(this,"ghost")); - cooldown = 30 - (level / 2); + cooldown = 20 - (level); charge--; } else { GLog.i(Messages.get(this,"nochareup")); @@ -211,10 +211,10 @@ public class WraithAmulet extends Artifact { if (hero.rooted || Dungeon.level.distance(hero.pos, target) < 3) { if(enemy != null && !(enemy instanceof NPC)){ final WraithAmulet amulet = (WraithAmulet) Item.curItem; - amulet.exp += 10; + amulet.exp += 40; hero.pos = target; if (enemy.properties().contains(Char.Property.BOSS)) { - enemy.damage(enemy.HT/10, WraithAmulet.class); + enemy.damage(enemy.HT/4, WraithAmulet.class); GLog.i(Messages.get(this, "killboss")); enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this,"koss")); } else { @@ -225,7 +225,7 @@ public class WraithAmulet extends Artifact { ScrollOfTeleportation.appear(hero, target); Dungeon.observe(); hero.sprite.emitter().start(ShadowParticle.UP, 0.05f, 10); - amulet.cooldown = 300; + amulet.cooldown = 150 / (amulet.level() / 2); amulet.charge -= 6; } else { GLog.w(Messages.get(this, "notnpc")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java index 03e2fc0ca..49fea8753 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java @@ -34,6 +34,7 @@ public class OilLantern extends Item { private static final String FLASKS = "flasks"; private static final int MAX_CHARGE = 60; + private static final int MIX_CHARGE = 20; private static final float TIME_TO_USE = 2.0f; private static final String TXT_STATUS = "%d%%"; @@ -41,6 +42,8 @@ public class OilLantern extends Item { private int charge = 100+Challenges.activeChallenges()/5*50; public int flasks = 0; + public int plingks = 0; + public OilLantern() { this.image = ItemSpriteSheet.LANTERNA; this.unique = true; @@ -94,30 +97,40 @@ public class OilLantern extends Item { } public void execute(Hero hero, String action) { - if (action.equals(AC_LIGHT)) { - if (hero.buff(LostInventory.class) == null) { - if (this.charge > 0) { - activate(hero, true); - } else if (this.flasks > 0) { - GLog.w(Messages.get(OilLantern.class, "lanterneedsxs")); + switch (action) { + case AC_LIGHT: + if (hero.buff(LostInventory.class) == null) { + if (this.charge > 0) { + activate(hero, true); + } else if (this.flasks > 0) { + GLog.w(Messages.get(OilLantern.class, "lanterneedsxs")); + } else { + GLog.w(Messages.get(OilLantern.class, "lanterneedsx")); + } } else { - GLog.w(Messages.get(OilLantern.class, "lanterneedsx")); + GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯"); } - } else { - GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯"); - } - } else if (action.equals(AC_REFILL)) { - if (this.flasks > 0) { - refill(hero); - } else { - GLog.w(Messages.get(OilLantern.class, "lanterneed")); - } - } else if (action.equals(AC_SNUFF)) { - if (isActivated()) { - deactivate(hero, true); - } - } else { - GLog.w(Messages.get(OilLantern.class, "lanterneeds")); + break; + case AC_REFILL: + if (this.flasks > 0) { + refill(hero); + } else { + GLog.w(Messages.get(OilLantern.class, "lanterneed")); + } + + if (this.plingks > 0) { + refills(hero); + } + + break; + case AC_SNUFF: + if (isActivated()) { + deactivate(hero, true); + } + break; + default: + GLog.w(Messages.get(OilLantern.class, "lanterneeds")); + break; } } @@ -132,6 +145,17 @@ public class OilLantern extends Item { updateQuickslot(); } + public void refills(Hero hero) { + this.flasks--; + this.charge += Math.min(MIX_CHARGE,100); + hero.spend(TIME_TO_USE); + hero.busy(); + Sample.INSTANCE.play(Assets.Sounds.DRINK, TIME_TO_USE, TIME_TO_USE, 1.2f); + hero.sprite.operate(hero.pos); + GLog.i(Messages.get(OilLantern.class, "lanterreload")); + updateQuickslot(); + } + public void activate(Hero hero, boolean voluntary) { if (voluntary) { if (Dungeon.hero.buff(Light.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) { @@ -152,23 +176,6 @@ public class OilLantern extends Item { } -// if (voluntary && hero.lanterfire > 0) { -// hero.spend(TIME_TO_USE); -// hero.busy(); -// GLog.i(Messages.get(OilLantern.class, "lanteron")); -// hero.sprite.operate(hero.pos); -// this.active = true; -// updateSprite(); -// Buff.affect(hero, LighS.class); -// hero.search(false); -// Sample.INSTANCE.play("sounds/snd_click.mp3"); -// updateQuickslot(); -// Dungeon.observe(); -// } else { -// GameScene.flash(0x880000); -// GLog.n(Messages.get(OilLantern.class, "black")); -// } - } public void deactivate(Hero hero, boolean voluntary) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Whip.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Whip.java index 2c6478ca8..bb50556b7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Whip.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Whip.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Blazing; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.HaloBlazing; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.Random; @@ -47,14 +50,17 @@ public class Whip extends MeleeWeapon { @Override public int proc(Char attacker, Char defender, int damage ) { - switch (Random.Int(2)) { - case 0: - default: - return Random.NormalIntRange( 1, 6 ); - case 1: - Buff.prolong(defender, Chill.class, Chill.DURATION); - return super.proc(attacker, defender, damage); + if (Random.Int(2) == 1) { + //如果寻找到鬼磷/烈焰附魔 则换为2级流血,概率20% + if (Random.Int(10) == 2) { + if (enchantment instanceof HaloBlazing || enchantment instanceof Blazing) { + Buff.affect(defender, Bleeding.class).set(2); + } else { + Buff.prolong(defender, Chill.class, Chill.DURATION); + } + } } + return super.proc(attacker, defender, damage); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java index c362683e7..d48655272 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.RogueArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.WarriorArmor; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; @@ -227,6 +228,7 @@ public enum Catalog { ARMOR.seen.put( ScaleArmor.class, false); ARMOR.seen.put( PlateArmor.class, false); ARMOR.seen.put( LamellarArmor.class, false); + ARMOR.seen.put( AncityArmor.class, false); ARMOR.seen.put( WarriorArmor.class, false); ARMOR.seen.put( MageArmor.class, false); ARMOR.seen.put( RogueArmor.class, false); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/AncientMysteryCityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/AncientMysteryCityBossLevel.java index 7124ec387..83c089a2d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/AncientMysteryCityBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/AncientMysteryCityBossLevel.java @@ -161,8 +161,8 @@ public class AncientMysteryCityBossLevel extends Level{ L,R,R,W,W,R,W,W,W,R,R,R,R,R,R,R,R,R,W,W,W,R,W,W,R,R,L, L,R,R,R,W,R,R,W,R,R,R,R,R,R,R,R,R,R,R,W,R,R,W,R,R,R,L, L,L,L,L,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,K,D,W,L,L,L,L, - L,R,R,L,L,W,E,C,R,R,R,R,R,R,R,R,R,R,R,C,E,W,L,L,R,R,L, - L,R,R,R,L,W,W,D,R,R,R,R,R,A,R,R,R,R,R,D,W,W,L,R,R,R,L, + L,R,R,L,L,W,E,C,R,R,R,R,W,W,W,R,R,R,R,C,E,W,L,L,R,R,L, + L,R,R,R,L,W,W,D,R,R,R,R,W,A,W,R,R,R,R,D,W,W,L,R,R,R,L, L,R,L,R,L,W,W,W,W,W,W,W,W,G,W,W,W,W,W,W,W,W,L,R,L,R,L, L,R,R,R,L,R,R,W,L,R,R,R,E,L,E,R,R,R,R,W,R,R,L,R,R,R,L, L,L,R,L,L,R,W,W,W,L,R,S,S,L,S,S,R,L,W,W,W,R,L,L,R,L,L, @@ -231,7 +231,7 @@ public class AncientMysteryCityBossLevel extends Level{ progress(); } - if(ch == hero){ + if(ch == hero && Dungeon.level.locked){ //指定区域 if(MAIN_PORTAL.containsKey(ch.pos)) { ScrollOfTeleportation.appear(ch, IF_MAIN_PORTAL.get(ch.pos)); @@ -254,6 +254,10 @@ public class AncientMysteryCityBossLevel extends Level{ GameScene.updateMap( getBossDoor ); set( 688, Terrain.LOCKED_DOOR ); GameScene.updateMap( 688 ); + + set( 634, Terrain.WATER ); + GameScene.updateMap( 634 ); + Dungeon.observe(); for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){ if (mob instanceof SakaFishBoss){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/DwarfMasterBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/DwarfMasterBossLevel.java index 409466e7b..576aceb88 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/DwarfMasterBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/DwarfMasterBossLevel.java @@ -148,7 +148,7 @@ public class DwarfMasterBossLevel extends Level { } private static final String IMP_SHOP = "imp_shop"; private void spawnShop(){ - while (impShop.itemCount() >= 10*(impShop.height()-2)){ + while (impShop.itemCount() >= 8*(impShop.height()-2)){ impShop.bottom++; } impShop.spawnShop(this); 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 e40ea7f0e..7aceb831c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -278,9 +278,10 @@ public abstract class Level implements Bundlable { addItemToSpawn( new PotionOfStrength() ); Dungeon.LimitedDrops.STRENGTH_POTIONS.count++; } - if (Dungeon.souNeeded()) { + if (Dungeon.souNeeded() && Dungeon.depth>0) { addItemToSpawn( new ScrollOfUpgrade() ); Dungeon.LimitedDrops.UPGRADE_SCROLLS.count++; + //GLog.i("好好好"); } if (Dungeon.asNeeded()) { addItemToSpawn( new Stylus() ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index b6d370722..36dbd7047 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -361,6 +361,8 @@ public class ItemSpriteSheet { public static final int ARMOR_MAGE = ARMOR+7; public static final int ARMOR_ROGUE = ARMOR+8; public static final int ARMOR_HUNTRESS = ARMOR+9; + + public static final int ARMOR_ANCITY = ARMOR+10; static{ assignItemRect(ARMOR_CLOTH, 14, 14); assignItemRect(ARMOR_LEATHER, 15, 15); @@ -372,6 +374,7 @@ public class ItemSpriteSheet { assignItemRect(ARMOR_MAGE, 13, 13); assignItemRect(ARMOR_ROGUE, 11, 13); assignItemRect(ARMOR_HUNTRESS, 13, 13); + assignItemRect(ARMOR_ANCITY, 15,14); } //16 free slots diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java index 3335dc67b..5f7e460eb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -391,9 +391,9 @@ public class StatusPane extends Component { int max = Dungeon.hero.HT; if (SPDSettings.ClassUI()) { - bg.texture = TextureCache.get(Assets.Interfaces.STATUS_DARK); - } else { bg.texture = TextureCache.get(Assets.Interfaces.STATUS); + } else { + bg.texture = TextureCache.get(Assets.Interfaces.STATUS_DARK); } if(SPDSettings.TimeLimit()) { @@ -444,6 +444,7 @@ public class StatusPane extends Component { Date date = new Date(); String strDateFormat = "yyyy-MM-dd HH:mm"; SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat, Locale.getDefault()); + Calendar cal=Calendar.getInstance(); int s=cal.get(Calendar.SECOND); if(s<20) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java index 86cb97863..e29115bc3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java @@ -85,9 +85,9 @@ public class TalentButton extends Button { add(fill); if (SPDSettings.ClassUI()) { - bg = new Image(Assets.Interfaces.TALENT_BUTTON_DARK); - } else { bg = new Image(Assets.Interfaces.TALENT_BUTTON); + } else { + bg = new Image(Assets.Interfaces.TALENT_BUTTON_DARK); } add(bg); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java index 1748040fb..f49e66c1c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java @@ -417,9 +417,9 @@ public class Toolbar extends Component { public void update() { super.update(); if (SPDSettings.ClassUI()) { - base.texture = TextureCache.get(Assets.Interfaces.TOOLBARDRAK); - } else { base.texture = TextureCache.get(Assets.Interfaces.TOOLBAR); + } else { + base.texture = TextureCache.get(Assets.Interfaces.TOOLBARDRAK); } } 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 3ad767c9a..d8907674c 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 @@ -143,7 +143,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_55_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-7", true, ""); + ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-9", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -165,6 +165,12 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ALCH_PAGE), ("炼金界面优化"), ("炼金指南进行优化。"))); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.TORCH), ("火把调整"), + ("现在火把会在灯火中成为燃料。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARMOR_ANCITY), ("板鳖甲"), + ("来自远古的护甲,你是想现在使用,亦或者是收入囊中等待合适的时机?"))); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.RING_DIAMOND), ("财富之戒"), ("财富戒指同步为破碎。"))); @@ -189,6 +195,12 @@ public class vM0_6_7_X_Changes { changes.hardlight(Window.CYELLOW); changeInfos.add(changes); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WRALIPS), ("暗金宝石护符"), + ("现在最高上限+10,并调整优化了一些问题"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SCROLL_ODAL), ("升级卷轴"), + ("现在修复升级卷轴可能丢失的问题,并且采用平衡算法。例如,你在1区摸到了4个升级,在监狱只有两个。总量不变。"))); + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_KCX), ("再生法杖"), ("修复一些问题,并且可以持续使用。"))); @@ -196,7 +208,7 @@ public class vM0_6_7_X_Changes { ("在高挑中,提灯的容量更多,商店售卖更多灯油,但灯火的每次减少可能会加剧!"))); changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("支离破碎"), - ("支离破碎进行了一些怪组优化"))); + ("支离破碎进行了一些怪组优化,并且调整了巨魔铁匠任务"))); changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项修改"), ("添加Boss专武保底机制,连续三局未获得,下次必定获得"))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java index 1d295153d..1d70c4000 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java @@ -20,7 +20,7 @@ public class LevelChecker { boolean amuletObtained = Statistics.amuletObtained; String level; - if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 5)) { + if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 1.5 : 5)) { level = "_SSS+_"; } else if (totalScore >= SSS_SCORE * chalMultiplier/2 * (amuletObtained ? 1 : 4)) { level = "SSS"; 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 eab421dce..e1c29dffa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java @@ -21,11 +21,15 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.NO_ARMOR; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; @@ -212,7 +216,11 @@ public class WndHero extends WndTabbed { statSlot( Messages.get(this, "gold"), Statistics.goldCollected ); statSlot( Messages.get(this, "depth"), Statistics.deepestFloor ); - statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed) ); + statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed)); + + + statSlot(Messages.get(HeroStat.class, "seed_type"), seedType()); + if(lanterfireactive){ RestatSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 ); @@ -280,6 +288,20 @@ public class WndHero extends WndTabbed { pos += GAP + txt.height(); } + private String seedType(){ + String seed; + if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { + seed = "BossRush"; + }else if(Dungeon.isChallenged(NO_ARMOR)){ + seed = "B"; + } else if (Dungeon.isChallenged(RLPT)&&Dungeon.isChallenged(SBSG)) { + seed = "C"; + } else { + seed = "A"; + } + return seed; + } + private void IcestatSlot( String label, String value ) { RenderedTextBlock txt = PixelScene.renderTextBlock( label, 7 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java index c0e2a3bda..3098b7e02 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java @@ -287,7 +287,7 @@ public class WndInfoMob extends WndTitledMessage { public void createChildren() { super.createChildren(); - colorBlock = new ColorBlock(1,1, SPDSettings.ClassUI() ? 0xFF555555 : 0xFF462d00); + colorBlock = new ColorBlock(1,1, SPDSettings.ClassUI() ? 0xFF462d00 : 0xFF555555); add(colorBlock); image1 = new BuffIcon(68, false);