From 0185668fcb2714504427d1abcae5bd66a94e2ab8 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Thu, 6 Oct 2022 00:23:23 +0800 Subject: [PATCH] Update Beta21.p2 There is still much to be done. --- .../src/main/assets/interfaces/LanterLing.png | Bin 0 -> 133 bytes core/src/main/assets/interfaces/badges.png | Bin 18131 -> 18380 bytes .../interfaces/status_pane-puresoul.png | Bin 1821 -> 1820 bytes .../interfaces/status_pane-puresoul_dark.png | Bin 1439 -> 1456 bytes .../main/assets/interfaces/status_pane.png | Bin 1783 -> 1731 bytes core/src/main/assets/interfaces/toolbar.png | Bin 5087 -> 4610 bytes .../main/assets/interfaces/toolbar_normal.png | Bin 5041 -> 4570 bytes .../assets/messages/actors/actors.properties | 34 ++- .../main/assets/messages/misc/misc.properties | 3 +- .../src/main/assets/messages/ui/ui.properties | 2 + .../messages/windows/windows.properties | 13 +- core/src/main/assets/sprites/items/items.png | Bin 71482 -> 72787 bytes .../shatteredpixeldungeon/Assets.java | 2 + .../shatteredpixeldungeon/Badges.java | 21 +- .../shatteredpixeldungeon/Challenges.java | 5 +- .../shatteredpixeldungeon/Statistics.java | 16 +- .../shatteredpixeldungeon/actors/Char.java | 21 +- .../actors/buffs/ChampionEnemy.java | 47 ++-- .../MagicGirlDebuff/MagicGirlSayCursed.java | 95 +++++++ .../MagicGirlDebuff/MagicGirlSayKill.java | 94 +++++++ .../MagicGirlDebuff/MagicGirlSayNoSTR.java | 94 +++++++ .../MagicGirlDebuff/MagicGirlSaySlowy.java | 95 +++++++ .../MagicGirlDebuff/MagicGirlSaySoftDied.java | 95 +++++++ .../actors/buffs/PureSoul.java | 245 +++++++++++++----- .../actors/buffs/Sanity.java | 2 - .../actors/hero/Hero.java | 93 +++++-- .../actors/hero/HeroClass.java | 15 -- .../actors/mobs/BloodBat.java | 2 +- .../actors/mobs/DimandKing.java | 2 +- .../actors/mobs/Elemental.java | 17 +- .../actors/mobs/Goo.java | 2 +- .../actors/mobs/Mob.java | 6 - .../actors/mobs/Rat.java | 14 +- .../actors/mobs/bosses/CrystalLingTower.java | 157 +++++++++++ .../actors/mobs/bosses/FireMagicDied.java | 68 +++-- .../actors/mobs/npcs/NullDiedTO.java | 1 - .../actors/mobs/npcs/Shopkeeper.java | 8 +- .../effects/BadgeBanner.java | 137 +++++----- .../items/LostBackpack.java | 9 - .../items/weapon/melee/EndingBlade.java | 18 +- .../items/weapon/melee/LockSword.java | 45 ++-- .../shatteredpixeldungeon/levels/Level.java | 6 +- .../levels/ShopBossLevel.java | 27 +- .../scenes/GameScene.java | 13 + .../scenes/InterlevelScene.java | 9 +- .../scenes/PixelScene.java | 24 +- .../ui/BuffIndicator.java | 2 +- .../ui/LanterFireCator.java | 70 +++++ .../shatteredpixeldungeon/ui/StatusPane.java | 113 ++++---- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 26 ++ .../windows/WndChallenges.java | 3 +- .../windows/WndInfoMob.java | 2 + .../windows/WndStartGame.java | 6 +- .../windows/WndTradeItem.java | 6 +- 54 files changed, 1402 insertions(+), 383 deletions(-) create mode 100644 core/src/main/assets/interfaces/LanterLing.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayCursed.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayKill.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayNoSTR.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySlowy.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySoftDied.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalLingTower.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LanterFireCator.java diff --git a/core/src/main/assets/interfaces/LanterLing.png b/core/src/main/assets/interfaces/LanterLing.png new file mode 100644 index 0000000000000000000000000000000000000000..c1622c605f77515a7b7770b010e86a0c26c6b981 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^EI{nY!3HG1rLZmpQa+w8jv*Gk$uoqG{G89oX<%qz zV36aN^1ol{01y>FVdQ&MBb@07q0Oh5!Hn literal 0 HcmV?d00001 diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index 41c0763ab607ec7fd9253a596246f2f8fba1519b..b2692464b23cd28c0046127eef68514d95cc943e 100644 GIT binary patch literal 18380 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%0AZ*)-7*JEAG%f~26F{f$za^iKC@<79Y% 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 O0000 diff --git a/core/src/main/assets/interfaces/status_pane-puresoul.png b/core/src/main/assets/interfaces/status_pane-puresoul.png index cfab04f354f8735ea233fe61061870acf36cf216..6ca01136f4d016762cb2da6d81d26d80f70936e3 100644 GIT binary patch delta 1805 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 diff --git a/core/src/main/assets/interfaces/status_pane-puresoul_dark.png b/core/src/main/assets/interfaces/status_pane-puresoul_dark.png index 26ee51dd539c7b54fa35e13d439af7a35f43c881..e5dc3b758a96d16b7f2a4f4446b03005a6651d98 100644 GIT binary patch delta 958 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 JPDHLkV1h<#D}?|6 delta 1767 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 B6~h1k diff --git a/core/src/main/assets/interfaces/toolbar_normal.png b/core/src/main/assets/interfaces/toolbar_normal.png index 8de2e542572ad9d6252b820c3826c381ddc2a7d7..2937be0cc4082e6cbc29843d698b2fc0d0f51264 100644 GIT binary patch literal 4570 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 Hu0mjfw%-HS diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index bf4d3406e..6893245a4 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -6,6 +6,27 @@ text.herostat.item_wnd_cursed = 诅咒的 text.herostat.item_basic = 常规: text.herostat.item_enter = 查看物品生成 +actors.buffs.puresoul.lanter=光芒前路 +actors.buffs.puresoul.desc_intro_lanter=你的信心就犹如你的灯火一样,光芒且明亮。\n\n当前灯火值:%s点\n\n +actors.buffs.puresoul.desc=灯火前行,光芒前路。没有什么东西可以影响到你。 + +### Magic Say debuffs +actors.buffs.magicgirldebuff.magicgirlsaynostr.name=魔女的低语-无力 +actors.buffs.magicgirldebuff.magicgirlsaynostr.desc=无力将会吞噬你自己,而幕后黑手仍然在背后暗暗发笑。\n\n本大层力量将会-3点,下一大层恢复。 + +actors.buffs.magicgirldebuff.magicgirlsaycursed.name=魔女的低语-束缚 +actors.buffs.magicgirldebuff.magicgirlsaycursed.desc=束缚只是我的一个考验,而失去信心的你。想必比我这个考验更可怕吧。\n\n本大层装备会被诅咒,下一大层失效 + +actors.buffs.magicgirldebuff.magicgirlsaykill.name=魔女的低语-审判 +actors.buffs.magicgirldebuff.magicgirlsaykill.desc=灯火摇摆不定,朦胧中你似乎看见了一个魔女向你挥起了剑。(一切是你们咎由自取)\n\n本大层怪物近战伤害提升10% + +actors.buffs.magicgirldebuff.magicgirlsayslowy.name=魔女的低语-迟钝 +actors.buffs.magicgirldebuff.magicgirlsayslowy.desc=缓慢的走向死亡吧……\n\n本大层英雄移动1回合相当于3回合 + +actors.buffs.magicgirldebuff.magicgirlsaysoftdied.name=魔女的低语-软弱 +actors.buffs.magicgirldebuff.magicgirlsaysoftdied.desc=软弱不是你的缺点,恐惧才是!\n\n本大层所有被护甲减免过的物理伤害增加5% + + ###MLPD actors.mobs.bosses.crossdiedtower.dead=控制目标已丢失,已自动摧毁…… actors.mobs.bosses.crossdiedtower.name=激光十字晶柱 @@ -27,7 +48,8 @@ actors.mobs.bosses.firemagicdied.defeated=%s,你确实是被她选中的人,现 actors.mobs.bosses.firemagicdied.life=命运轮回! actors.mobs.bosses.firemagicdied.dead=死驱影熵! actors.mobs.bosses.firemagicdied.losing=…… -actors.mobs.bosses.firemagicdied.enraged=现在,你的试炼才刚刚开始! +actors.mobs.bosses.firemagicdied.enraged=很好,我也要拿出我的全部实力了! +actors.mobs.bosses.firemagicdied.xslx=水晶的力量已经被完全激活,摧毁水晶!!! actors.mobs.bosses.firemagicdied.rankings_desc=在莲娜的试炼中不幸消逝…… actors.mobs.bosses.firemagicdied$yogscanhalf.name=??? actors.mobs.bosses.firemagicdied$yogscanhalf.rankings_desc=在莲娜的试炼中不幸消逝…… @@ -38,6 +60,7 @@ actors.mobs.bosses.firemagicdied.teleport_1=归于虚无…… actors.mobs.bosses.firemagicdied.teleport_2=……最终肃清 actors.mobs.bosses.firemagicdied.lifelink_1=生命链接 actors.mobs.bosses.firemagicdied.lifelink_2=生命之歌 +actors.mobs.bosses.firemagicdied.dixsdf=很好,你已经通过我的考验了! items.quest.backgokey.name=回溯之书 items.quest.backgokey.desc=当你做好准备后,便要与雪凛峡谷告别了…… @@ -94,9 +117,12 @@ actors.buffs.watersoulx.desc=水灵的祝福已经在你身上,现在你可以 actors.mobs.lb.blacksoul.name=暗影 actors.mobs.lb.blacksoul.desc=由于重生十字架的缘故,因此你再次重生了。但你先前的东西都被自己的暗影亡魂夺走了,杀死它,夺回自己的一切! -actors.mobs.bosses.crystaldiedtower.name=神秘结晶 +actors.mobs.bosses.crystaldiedtower.name=神秘结晶-未激活 actors.mobs.bosses.crystaldiedtower.desc=来自于雪凛峡谷商人总部的神秘结晶……,据说激活后十分危险! +actors.mobs.bosses.crystallingtower.name=元素结晶-已激活 +actors.mobs.bosses.crystallingtower.desc=神秘的元素结晶已经被魔女完全激活,正是它让魔女所向披靡!摧毁它! + text.herostat.hunger = 饥饿 text.herostat.skill = 命中/闪避 @@ -782,7 +808,7 @@ actors.buffs.championenemy$blessed.desc=天佑精英拥有 200% 额外精准与 actors.buffs.championenemy$growing.name=成长精英 actors.buffs.championenemy$growing.desc=成长精英拥有会稳步增长的额外精准、躲避、近战伤害与伤害减免。\n\n当前精准、躲避、近战伤害加成:%1$d%%\n当前伤害减免:%2$d%% actors.buffs.championenemy$halo.name=鬼磷精英 -actors.buffs.championenemy$halo.desc=鬼磷精英造成 65% 额外近战伤害,会使用更强大的磷火点燃攻击目标,免疫火焰,免疫磷火,且会在死亡时引燃周遭。 +actors.buffs.championenemy$halo.desc=鬼磷精英造成 15% 额外近战伤害,会使用更强大的磷火点燃攻击目标,免疫火焰,免疫磷火。 actors.buffs.charm.name=魅惑 actors.buffs.charm.heromsg=你被魅惑了! @@ -987,7 +1013,7 @@ actors.buffs.stamina.desc=你感受到了体内无尽的精力,让你可以以 actors.buffs.vulnerable.name=易伤 actors.buffs.vulnerable.heromsg=你感到外界的伤害愈加疼痛! -actors.buffs.vulnerable.desc=易伤魔法会使得目标受到所有被护甲减免过的物理伤害增加33%%。\n\n易伤的剩余时长:%s回合。 +actors.buffs.vulnerable.desc=易伤魔法会使得目标受到所有被护甲减免过的物理伤害增加33%。\n\n易伤的剩余时长:%s回合。 actors.buffs.terror.name=恐惧 actors.buffs.terror.desc=恐惧是使敌人陷入不可控制的恐慌的操纵性魔法。 \n\n恐惧中的角色会远离自己的敌人,试图和敌人隔开尽可能多的门或墙。然而疼痛的冲击则会减少恐惧的持续时间。\n\n剩余的恐惧效果持续时长:%s diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 164699683..14c6c8a4f 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -87,6 +87,7 @@ badges$badge.champion_5x=救世之主\n\n_开启10项以上挑战通关\n\n[不 badges$badge.unlock_mage=解锁法师 badges$badge.unlock_rogue=解锁盗贼 badges$badge.unlock_huntress=解锁女猎手 +badges$badge.kill_dm=取得钻石宝箱王的宝藏 badges$badge.rlpt=_支离破碎征服者_\n\n开启挑战并击败古神\n\n_奖励:0层随机神器(四大基座上)_ badges$badge.sbdjs=风暴袭来,未完待续\n\n你通过它成功离开,却不知,外面风暴袭来\n\n水晶之心仍然在你手中闪闪发光,或许,这事还没完! badges$badge.kill_mg=击败冰雪魔女-冬铃\n\n冰雪之地的女王\n\n_奖励:0层额外十字架(四大基座上,与DM720不叠加)_ @@ -116,7 +117,7 @@ challenges.aquaphobia_desc=你已经尝试了被水神祝福后的逍遥自在 challenges.champion_enemies=_精英战场_ challenges.champion_enemies_desc=会升级的不止你一个!\n\n・普通敌人刷出时有 1/8 \ 的机率拥有特殊的精英属性。\n・精英敌人刷出时会立即醒来。\n・精英敌人免疫腐化效果。\n\n精英敌人有七种:\n_烈焰(橙色):_ 近战伤害 \ - +25% 且带有点燃效果,免疫火焰,死亡时引燃周围。\n_索敌(紫色):_ 近战伤害 +25%,近战范围 +8。\n_敌法(绿色):_ 受到伤害 -25%,拥有魔法免疫。\n_巨型(蓝色):_ 受到伤害 -75%,近战范围 +1,无法进入门与过道。\n_祝福(黄色):_ 精准与躲避 +200%。\n_成长(红色):_ 精准、躲避、攻击伤害与有效生命值 +20%。每过 3 回合会再增长 1%。\n_鬼磷(天蓝色):_ 近战伤害 +65% 且带有磷火效果,免疫火焰与磷火,死亡时引燃周围。 + +25% 且带有点燃效果,免疫火焰,死亡时引燃周围。\n_索敌(紫色):_ 近战伤害 +25%,近战范围 +8。\n_敌法(绿色):_ 受到伤害 -25%,拥有魔法免疫。\n_巨型(蓝色):_ 受到伤害 -75%,近战范围 +1,无法进入门与过道。\n_祝福(黄色):_ 精准与躲避 +200%。\n_成长(红色):_ 精准、躲避、攻击伤害与有效生命值 +20%。每过 3 回合会再增长 1%。\n_鬼磷(天蓝色):_ 近战伤害 +15% 且带有磷火效果,免疫火焰与磷火。 challenges.stronger_bosses=Π梦魇Boss challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_粘咕:_生命值 +20%\n_-_ 水中恢复量增长,每回合恢复 3 点生命\n_-_ 爆发攻击蓄力时间由 2 回合缩短至 1 回合\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_钻石宝箱王_: 生命+20% \n_-_ 整场战斗出现额外技能\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从 actors.char.aquaphobia=你受到了来自水的伤害! diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index 0a5eacc80..ba5db1548 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -467,4 +467,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x28=-1.修复了矮人大师的问题 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x29=-1.修复了不抢劫回归地牢也能获得东西的问题\n-2.修复了从雪凛峡谷回来后复活失效的问题 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x30=-1.修复了浊焰魔女的错误崩溃\n-2.修复了终焉的错误生成\n-3.红龙之王机制改变,老存档已无法加载,请重新开启新档 + +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x31=-P1.5\n1.修复了终焉的掉率问题\n2.修复其他崩溃\n3.修复了钥匙剑的面板问题\n\nP1.4\n1.修复了徽章崩溃的问题\n-2.修复了浊焰魔女崩溃的问题\n-3.修复了终焉无法正常使用的问题 //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 4c1fe9df2..3cab2de7c 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -2,8 +2,12 @@ windows.textchallenges.seed_custom_title = 种子 windows.textchallenges.hint = 不输入即为随机种子 windows.textchallenges.delete_seed_input = 清除 +windows.wndsettings$datatab.firebase=FireBase数据提交 +windows.wndsettings$displaytab.firebase_active=FireBase数据提交 +windows.wndsettings$displaytab.firebase_desc=FireBase是一款由_Google_推出的一种开发者服务。Ling在魔绫这边添加了_FireBase崩溃日志收集报告_。\n当你尚未开启此功能时,你的_所有崩溃报告都会保存在本地Data数据区域(使用Root才能访问)_\n\n当你开启本功能后,你在魔绫游玩的所有崩溃报告将会在下次启动魔绫一并提交到程序后台以便JDSALing我维护。\n-开启此功能代表你同意提交你的崩溃数据和Δ手机的基本公开信息Δ_(手机型号,ROOT权限检测,安卓版本,运存检测,屏幕方向,手机内存)_,同时非常感谢你开启此功能以供Ling后续维护魔绫。\nΔ感谢你的支持与理解,同时感谢你的游玩Δ\n\nΞ开启此功能后重启游戏后本地崩溃数据将自动提交到魔绫控制终端Ξ + windows.wndtextinput.enter_key=输入你的QQ号 -windows.wndgame.dialog_user=为了更好的在后续崩溃维护检查遇到一些问题,请在这里Ξ输入你的QQ号Ξ,如果开发者遇到问题将可能通过你的ID联系你询问详细崩溃情况。 +windows.wndgame.dialog_user=为了更好的在后续崩溃维护检查遇到一些问题,请在这里Ξ输入你的QQ号Ξ,如果开发者遇到问题将可能通过你的ID联系你询问详细崩溃情况。\n\n输入后将跳转到主界面,然后,请尽情游玩:) windows.wndtextinput.yes=确认 windows.wndtextinput.no=稍后 @@ -28,7 +32,7 @@ windows.wndshopking.notbad=当你准备好后,我会带你前往雪凛峡谷 windows.wndsettings$extendtab.quickslots=快捷栏设置 windows.wndsettings$extendtab.wxts=温馨提示:进入游戏后才能调整快捷栏\n\n这是因为技术问题,但是这里已经提醒你了。\n\n当你进入游戏后,这里就会变成快捷栏设置区! -windows.wnddlc.mode=额外玩法请最多只选择一个\n若多选造成存档问题,概不负责 +windows.wnddlc.mode=额外玩法请最多只选择一个 windows.wndstartgame.bossrushdonot=地牢的魔力现在过于紊乱,你现在无法使用染血金币控制终端。 @@ -47,11 +51,6 @@ windows.wndgame.dialog_title=好的装备名字能让你在游戏中更有亲切 windows.wndgame.dialog_rename=重命名 windows.wndgame.dialog_revert=恢复默认 -windows.wndsettings$datatab.firebase=FireBase数据提交 -windows.wndsettings$displaytab.firebase_active=FireBase数据提交 -windows.wndsettings$displaytab.firebase_desc=FireBase是一款由_Google_推出的一种开发者服务。Ling在魔绫这边添加了_FireBase崩溃日志收集报告_。\n当你尚未开启此功能时,你的_所有崩溃报告都会保存在本地Data数据区域(使用Root才能访问)_\n\n当你开启本功能后,你在魔绫游玩的所有崩溃报告将会在下次启动魔绫一并提交到程序后台以便JDSALing我维护。\n-开启此功能代表你同意提交你的崩溃数据和Δ手机的基本公开信息Δ_(手机型号,ROOT权限检测,安卓版本,运存检测,屏幕方向,手机内存)_,同时非常感谢你开启此功能以供Ling后续维护魔绫。\nΔ感谢你的支持与理解,同时感谢你的游玩Δ\n\nΞ开启此功能后重启游戏后本地崩溃数据将自动提交到魔绫控制终端Ξ - - windows.wndinfomob.dsinfo = 闪避概率: windows.wndinfomob.maxinfo = 掉落限制LV: windows.wndinfomob.getexp = 上次伤害: diff --git a/core/src/main/assets/sprites/items/items.png b/core/src/main/assets/sprites/items/items.png index 21d91cd48c09de2248088237b15d53e27795494a..ab147768d4ba2d603bf9351b711cfbe4919365b7 100644 GIT binary patch delta 13112 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 delta 11800 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 PbG=d4P^x-m7WBUW-&*Y6 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 50c2e0b6b..48f521b12 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -94,6 +94,8 @@ public class Assets { public static final String ARCS_BG = "interfaces/arcs1.png"; public static final String ARCS_FG = "interfaces/arcs2.png"; + public static final String LANTERLING = "interfaces/LanterLing.png"; + public static final String BANNERS = "interfaces/banners.png"; public static final String BADGES = "interfaces/badges.png"; public static final String LOCKED = "interfaces/locked_badge.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 35761f191..34a5792a7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -167,6 +167,7 @@ public class Badges { CHAMPION_5X ( 116 ), NYZ_SHOP ( 117 ), DAGETO ( 118 ), + KILL_DM ( 119 ), //rudy FIREGIRL ( 128 ), @@ -277,7 +278,7 @@ public class Badges { addReplacedBadges(badges); int count = 0; - String names[] = new String[badges.size()]; + String[] names = new String[badges.size()]; for (Badge badge:badges) { names[count++] = badge.toString(); @@ -385,15 +386,15 @@ public class Badges { public static void GhostDageCollected() { Badge badge = null; - if (!local.contains( Badge.GHOSTDAGE ) && Statistics.naiyaziCollected == 1) { + + if (!local.contains( Badge.GHOSTDAGE ) && Statistics.dageCollected == 1) { badge = Badge.GHOSTDAGE; local.add( badge ); } - if (!local.contains( Badge.DAGETO ) && Statistics.naiyaziCollected >= 2) { - addGlobal(badge); + if (!local.contains( Badge.DAGETO ) && Statistics.dageCollected >= 2) { badge = Badge.DAGETO; + local.add( badge ); } - local.add(badge); displayBadge( badge ); } @@ -671,9 +672,9 @@ public class Badges { private static void validateAMZ() { if (global.contains( Badge.KILL_SLMKING ) && global.contains( Badge.KILL_DM720 ) && - global.contains( Badge.KILL_MG) && global.contains( Badge.FIREGIRL) && global.contains( Badge.DRAWF_HEAD)) { + global.contains( Badge.KILL_MG) && global.contains( Badge.FIREGIRL) && global.contains( Badge.DRAWF_HEAD)&& global.contains( Badge.KILL_DM) ) { - Badge badge = Badge.GODD_MAKE; + Badge badge = Badge.SPICEALBOSS; displayBadge( badge ); } } @@ -960,6 +961,12 @@ public class Badges { validateAMZ(); } + public static void KILL_DMK() { + displayBadge( Badge.KILL_DM ); + validateAMZ(); + } + + public static void BIGX() { displayBadge( Badge.BIG_X ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java index aab83a35f..ef868eeb8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java @@ -52,10 +52,9 @@ public class Challenges { public static final int SBSG = 1024; public static final int EXSG = 2048; public static final int STRONGER_BOSSES = 4096; - public static final int LIGHTBLACK = 8192; - public static final int PRO = 16384; + public static final int PRO = 8192; - public static final int MAX_VALUE = 32768; + public static final int MAX_VALUE = 16384; public static final String[] NAME_IDS = { "no_food", diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java index ba77fe577..3bdb024d1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java @@ -59,6 +59,9 @@ public class Statistics { public static boolean endingbald = false; + //TODO 灯火前行 + public static boolean lanterfireactive = false; + public static int dageCollected; //Directly add float time will cause accuracy lose and stop timing if time is long enough @@ -79,7 +82,7 @@ public class Statistics { itemsCrafted = 0; piranhasKilled = 0; ankhsUsed = 0; - //boss_enhance = 0; + upgradesUsed = 0; sneakAttacks = 0; thrownAssists = 0; @@ -98,9 +101,13 @@ public class Statistics { wangzheguilai = false; endingbald = false; + lanterfireactive = false; + second_elapsed = 0f; real_seconds = 0; turnsPassed = 0f; + + } @@ -135,7 +142,12 @@ public class Statistics { private static final String EXLEVEL = "Exlevel"; + //TODO 灯火前行 + private static final String LANTERACTIVE = "lanterfireactive"; + public static void storeInBundle( Bundle bundle ) { + bundle.put( LANTERACTIVE, lanterfireactive ); + bundle.put( GOLD, goldCollected ); bundle.put( DEEPEST, deepestFloor ); bundle.put( SLAIN, enemiesSlain ); @@ -198,6 +210,8 @@ public class Statistics { endingbald = bundle.getBoolean( ENBR ); + lanterfireactive = bundle.getBoolean( LANTERACTIVE ); + //SPD second_elapsed = bundle.getFloat("real_time_passed"); real_seconds = bundle.getLong("real_seconds_passed"); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java index d03682893..d29db492c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -54,6 +54,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LifeLink; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySlowy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySoftDied; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSleep; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; @@ -377,6 +380,11 @@ public abstract class Char extends Actor { if ( enemy.buff( Vulnerable.class ) != null){ effectiveDamage *= 1.33f; } + + //魔女的低语-软弱 + if ( enemy.buff( MagicGirlSaySoftDied.class ) != null){ + effectiveDamage *= 1.05f; + } effectiveDamage = attackProc( enemy, effectiveDamage ); @@ -514,17 +522,24 @@ public abstract class Char extends Actor { if ( buff(Weakness.class) != null ){ damage *= 0.67f; } + + //削弱10%伤害 + if ( buff(MagicGirlSayKill.class) != null ){ + damage *= 0.90f; + } + for (ChampionEnemy buff : buffs(ChampionEnemy.class)){ damage *= buff.meleeDamageFactor(); buff.onAttackProc( enemy ); } + for (ChampionHero buff : buffs(ChampionHero.class)){ damage *= buff.meleeDamageFactor(); buff.onAttackProc( enemy ); } return damage; } - + public int defenseProc( Char enemy, int damage ) { return damage; } @@ -532,6 +547,10 @@ public abstract class Char extends Actor { public float speed() { float speed = baseSpeed; if ( buff( Cripple.class ) != null ) speed /= 2f; + + //Todo 迟钝 3回合 + if ( buff( MagicGirlSaySlowy.class ) != null ) speed /= 3f; + if ( buff( Stamina.class ) != null) speed *= 1.5f; if ( buff( Adrenaline.class ) != null) speed *= 2f; if ( buff( Haste.class ) != null) speed *= 3f; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index b93fa8c39..bfc017299 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -21,11 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; -import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.HalomethaneFire; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -98,16 +98,21 @@ public abstract class ChampionEnemy extends Buff { Dungeon.mobsToChampion--; - if (Dungeon.mobsToChampion <= 0){ - switch (Random.Int(7)){ - case 0: default: Buff.affect(m, Blazing.class); break; - case 1: Buff.affect(m, Projecting.class); break; - case 2: Buff.affect(m, AntiMagic.class); break; - case 3: Buff.affect(m, Giant.class); break; - case 4: Buff.affect(m, Blessed.class); break; - case 5: Buff.affect(m, Growing.class); break; - case 6: Buff.affect(m, Halo.class); break; - } + //we roll for a champion enemy even if we aren't spawning one to ensure that + //mobsToChampion does not affect levelgen RNG (number of calls to Random.Int() is constant) + Class buffCls; + switch (Random.Int(7)){ + case 0: default: buffCls = Blazing.class; break; + case 1: buffCls = Projecting.class; break; + case 2: buffCls = AntiMagic.class; break; + case 3: buffCls = Giant.class; break; + case 4: buffCls = Blessed.class; break; + case 5: buffCls = Growing.class; break; + case 6: buffCls = Halo.class; break; + } + + if (Dungeon.mobsToChampion <= 0 && Dungeon.isChallenged(Challenges.CHAMPION_ENEMIES)) { + Buff.affect(m, buffCls); m.state = m.WANDERING; } } @@ -154,19 +159,19 @@ public abstract class ChampionEnemy extends Buff { Buff.affect(enemy, HalomethaneBurning.class).reignite(enemy); } - @Override - public void detach() { - for (int i : PathFinder.NEIGHBOURS9){ - if (!Dungeon.level.solid[target.pos+i]){ - GameScene.add(Blob.seed(target.pos+i, 4, HalomethaneFire.class)); - } - } - super.detach(); - } +// @Override +// public void detach() { +// for (int i : PathFinder.NEIGHBOURS9){ +// if (!Dungeon.level.solid[target.pos+i]){ +// GameScene.add(Blob.seed(target.pos+i, 4, HalomethaneFire.class)); +// } +// } +// super.detach(); +// } @Override public float meleeDamageFactor() { - return 1.65f; + return 1.15f; } { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayCursed.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayCursed.java new file mode 100644 index 000000000..1281400a7 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayCursed.java @@ -0,0 +1,95 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class MagicGirlSayCursed extends Buff { + + { + type = buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x808080); + } + + @Override + public int icon() { + return BuffIndicator.TERROR; + } + + +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayKill.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayKill.java new file mode 100644 index 000000000..521daae8e --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayKill.java @@ -0,0 +1,94 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.utils.Bundle; + +public class MagicGirlSayKill extends Buff { + + { + type = buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + +// @Override +// public void tintIcon(Image icon) { +// icon.hardlight(0x990000); +// } + + @Override + public int icon() { + return BuffIndicator.FIREDIED; + } + + +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayNoSTR.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayNoSTR.java new file mode 100644 index 000000000..038a9fbaa --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSayNoSTR.java @@ -0,0 +1,94 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class MagicGirlSayNoSTR extends Buff { + + { + type = buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0xFF0000); + } + + @Override + public int icon() { + return BuffIndicator.POISON; + } + + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySlowy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySlowy.java new file mode 100644 index 000000000..ac0abc17e --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySlowy.java @@ -0,0 +1,95 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class MagicGirlSaySlowy extends Buff { + + { + type = buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x7a7a7a); + } + + @Override + public int icon() { + return BuffIndicator.HEX; + } + + +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySoftDied.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySoftDied.java new file mode 100644 index 000000000..c0717d95f --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MagicGirlDebuff/MagicGirlSaySoftDied.java @@ -0,0 +1,95 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class MagicGirlSaySoftDied extends Buff { + + { + type = buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x6a0a6a); + } + + @Override + public int icon() { + return BuffIndicator.MAGIC_SLEEP; + } + + +} + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/PureSoul.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/PureSoul.java index 90f347446..53f0edb01 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/PureSoul.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/PureSoul.java @@ -1,101 +1,204 @@ +/* + * 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.actors.buffs; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty; +import com.shatteredpixel.shatteredpixeldungeon.items.journal.Guidebook; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfChallenge; +import com.shatteredpixel.shatteredpixeldungeon.journal.Document; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; -import com.watabou.noosa.Image; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.utils.Bundle; -public class PureSoul extends Buff { - public int soul() { - return (int)Math.ceil(soul); - } +//TODO static方法会导致存档相互影响,此Buff已经废弃!但留在这里作为教训! +public class PureSoul extends Buff implements Hero.Doom { - public static final float PURESOULBASE = 20f; - - { - type = buffType.POSITIVE; - } - public int pos; - public static int soul = 0; + private final float STEP = 10000f; private int interval = 1; - @Override - public boolean act() { - if (target.isAlive()) { - spend(interval); - if (--soul <= 0) { - detach(); - } - } - return true; - } - public void set( int value, int time ) { - if (Math.sqrt(interval)*soul <= Math.sqrt(time)*value) { - soul = value; + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; interval = time; spend(time - cooldown() - 1); } } - public static final float STARVING = 240f; - @Override - public float iconFadePercent() { - return Math.max(0, (Sanity.STARVING - soul) / Sanity.STARVING); - } + public final float HUNGRY = 300f; + public final float STARVING = 450f; + public static final float LANTERHERO = 100f; + private float level; + public float partialDamage; - @Override - public String toString() { - return Messages.get(this, "name"); - //if (soul >= 180) { - // - //} else if (sanity >= 120) { - // return Messages.get(this, "name2"); - //} else { - // return Messages.get(this, "name3"); - //} - } - - - - @Override - public String desc() { - return Messages.get(this, "normal_desc", soul, dispTurns(visualcooldown())); - //if (sanity >= 180) { - // return Messages.get(this, "normal_desc", sanity, dispTurns(visualcooldown())); - //} else if (sanity >= 120) { - // return Messages.get(this, "crazy_desc", sanity, dispTurns(visualcooldown())); - //} else { - // return Messages.get(this, "died_desc", sanity, dispTurns(visualcooldown())); - //} - } - - private static final String LEVEL = "level"; - private static final String INTERVAL = "interval"; + private static final String LEVEL = "level"; + private static final String PARTIALDAMAGE = "partialDamage"; @Override public void storeInBundle( Bundle bundle ) { super.storeInBundle(bundle); - bundle.put( LEVEL, soul ); + bundle.put( LEVEL, level ); + bundle.put( PARTIALDAMAGE, partialDamage ); } @Override public void restoreFromBundle( Bundle bundle ) { - super.restoreFromBundle(bundle); - soul = bundle.getInt(LEVEL); + super.restoreFromBundle( bundle ); + level = bundle.getFloat( LEVEL ); + partialDamage = bundle.getFloat(PARTIALDAMAGE); } + @Override + public boolean act() { + + if (Dungeon.level.locked + || target.buff(WellFed.class) != null + || target.buff(ScrollOfChallenge.ChallengeArena.class) != null|| Dungeon.depth == 0){ + spend(STEP); + return true; + } + + if (target.isAlive() && target instanceof Hero) { + + Hero hero = (Hero)target; + + if (isStarving()) { + + partialDamage += STEP * target.HT/1000f; + + if (partialDamage > 1){ + target.damage( (int)partialDamage, this); + partialDamage -= (int)partialDamage; + } + + } else { + + float newLevel = level + LANTERHERO; + if (newLevel >= STARVING) { + + GLog.n( Messages.get(this, "onstarving") ); + hero.resting = false; + hero.damage( 1, this ); + + hero.interrupt(); + + } else if (newLevel >= HUNGRY && level < HUNGRY) { + + GLog.w( Messages.get(this, "onhungry") ); + + if (!Document.ADVENTURERS_GUIDE.isPageRead(Document.GUIDE_FOOD)){ + GLog.p(Messages.get(Guidebook.class, "hint")); + GameScene.flashForDocument(Document.GUIDE_FOOD); + } + + } + level = newLevel; + + } + + spend( target.buff( Shadows.class ) == null ? STEP : STEP * 1.5f ); + + } else { + + diactivate(); + + } + + return true; + } + + public void satisfy( float energy ) { + + Artifact.ArtifactBuff buff = target.buff( HornOfPlenty.hornRecharge.class ); + if (buff != null && buff.isCursed()){ + energy *= 0.67f; + GLog.n( Messages.get(this, "cursedhorn") ); + } + + affectHunger( energy, false ); + } + + public void affectHunger(float energy, boolean overrideLimits ) { + + if (energy < 0 && target.buff(WellFed.class) != null){ + target.buff(WellFed.class).left += energy; + BuffIndicator.refreshHero(); + return; + } + + level += 0; + if (level < 0 && !overrideLimits) { + level = 0; + } else if (level > STARVING) { + float excess = level - STARVING; + level = STARVING; + partialDamage += excess * (target.HT/1000f); + } + + BuffIndicator.refreshHero(); + } + + public boolean isStarving() { + return level >= STARVING; + } + + public int hunger() { + return (int)Math.ceil(level); + } @Override - public void tintIcon(Image icon) { + public int icon() { + if (level <= 10f) { + return BuffIndicator.LIGHT; + } else if (level < STARVING) { + return BuffIndicator.HUNGER; + } else { + return BuffIndicator.STARVATION; + } + } - //if (soul >= 180) { - // icon.hardlight(0x00ff00); - //} else if (soul >= 120) { - // icon.hardlight(0xffff00); - //} else { - // icon.hardlight(0xff0000); - //} - }// + @Override + public String toString() { + return Messages.get(this, "lantern"); + } + @Override + public String desc() { + String result; + result = Messages.get(this, "desc_intro_lanter", Math.abs(level-LANTERHERO), dispTurns(visualcooldown())); + + result += Messages.get(this, "desc"); + + return result; + } + + @Override + public void onDeath() { + Dungeon.fail( getClass() ); + GLog.n( Messages.get(this, "ondeath") ); + } } - diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Sanity.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Sanity.java index c5377a432..22e844490 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Sanity.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Sanity.java @@ -32,8 +32,6 @@ import com.watabou.utils.Bundle; public class Sanity extends Buff { - - @Override public int icon() { if(sanity >= 180) { 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 1648e1d4e..2ce730a23 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 @@ -22,14 +22,16 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.AQUAPHOBIA; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Bones; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; @@ -47,12 +49,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless; 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.ChampionEnemy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.DeadSoul; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Foresight; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbueEX; @@ -64,6 +64,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HoldFast; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayNoSTR; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySlowy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSaySoftDied; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; @@ -79,7 +84,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BloodBat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Monk; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Snake; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.lb.BlackSoul; import com.shatteredpixel.shatteredpixeldungeon.custom.ch.GameTracker; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell; @@ -115,6 +119,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key; import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey; +import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern; +import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; @@ -285,7 +291,13 @@ public class Hero extends Char { strBonus += (int)Math.floor(STR * (0.03f + 0.05f*pointsInTalent(Talent.STRONGMAN))); } + //TODO 无力 本大层-3力量 + if(Dungeon.hero.buff(MagicGirlSayNoSTR.class) != null){ + strBonus -= 3; + } + return STR + strBonus; + } private static final String CLASS = "class"; @@ -298,12 +310,16 @@ public class Hero extends Char { private static final String LEVEL = "lvl"; private static final String EXPERIENCE = "exp"; private static final String HTBOOST = "htboost"; - + + private static final String LANTERFTR = "lanterfire"; + public int lanterfire; @Override public void storeInBundle( Bundle bundle ) { super.storeInBundle( bundle ); + bundle.put( LANTERFTR, lanterfire ); + bundle.put( CLASS, heroClass ); bundle.put( SUBCLASS, subClass ); bundle.put( ABILITY, armorAbility ); @@ -317,6 +333,8 @@ public class Hero extends Char { bundle.put( EXPERIENCE, exp ); bundle.put( HTBOOST, HTBoost ); + + if (!this.name.equals("")) { bundle.put("name", this.name); } @@ -330,6 +348,8 @@ public class Hero extends Char { lvl = bundle.getInt( LEVEL ); exp = bundle.getInt( EXPERIENCE ); + lanterfire = bundle.getInt(LANTERFTR); + HTBoost = bundle.getInt(HTBOOST); super.restoreFromBundle( bundle ); @@ -497,6 +517,15 @@ public class Hero extends Char { Buff.affect( this, Regeneration.class ); Buff.affect( this, Hunger.class ); +// if(lanterfireactive){ +// Buff.affect( this, PureSoul.class ); +// } + + Buff.affect(hero, MagicGirlSayNoSTR.class).set( (3), 1 ); + Buff.affect(hero, MagicGirlSayCursed.class).set( (3), 1 ); + Buff.affect(hero, MagicGirlSaySlowy.class).set( (3), 1 ); + Buff.affect(hero, MagicGirlSayKill.class).set( (3), 1 ); + Buff.affect(hero, MagicGirlSaySoftDied.class).set( (3), 1 ); if(HelpSettings()) { Buff.affect(this, GameTracker.class); @@ -864,6 +893,23 @@ public class Hero extends Char { } private boolean actMove( HeroAction.Move action ) { + MagicGirlSayNoSTR.level -= 1; + //检查 + int chCount = 0; + for (int ch : Challenges.MASKS){ + if ((Dungeon.challenges & ch) != 0) chCount++; + } + + if(chCount >= 3 && !Dungeon.isChallenged(PRO) && !lanterfireactive){ + //TODO 灯火前行 + lanterfire = 100; + new OilLantern().quantity(1).identify().collect(); + new OilPotion().quantity(100).identify().collect(); + new Ankh().quantity(1).identify().collect(); + Dungeon.gold+=10000; + lanterfireactive = true; + GLog.n("系统已经检测到你已开启困难模式,灯火会与你结伴同行,但同时,恶魔也会对你馋言欲滴。"); + } if (getCloser( action.dst )) { return true; @@ -872,6 +918,8 @@ public class Hero extends Char { ready(); return false; } + + } private boolean actInteract( HeroAction.Interact action ) { @@ -1758,17 +1806,17 @@ public class Hero extends Char { } } - if(Dungeon.isChallenged(LIGHTBLACK)) { - BlackSoul s = new BlackSoul(); - s.pos = Dungeon.hero.pos; - s.gold = Dungeon.gold; - Dungeon.gold = 0; - s.state = s.SLEEPING; - GameScene.add(s); - Buff.affect(s, ChampionEnemy.DeadSoulSX.class); - Buff.affect(s, DeadSoul.class); - GameScene.flash(0x80FF0000); - } +// if(Dungeon.isChallenged(LIGHTBLACK)) { +// BlackSoul s = new BlackSoul(); +// s.pos = Dungeon.hero.pos; +// s.gold = Dungeon.gold; +// Dungeon.gold = 0; +// s.state = s.SLEEPING; +// GameScene.add(s); +// Buff.affect(s, ChampionEnemy.DeadSoulSX.class); +// Buff.affect(s, DeadSoul.class); +// GameScene.flash(0x80FF0000); +// } if(Statistics.fireGirlnoshopping && Dungeon.depth < 0){ reallyDie( cause ); GLog.n(Messages.get(this,"died")); @@ -2258,4 +2306,17 @@ public class Hero extends Char { public static interface Doom { public void onDeath(); } + + //TODO 灯火前行逻辑 + public void damageLantern(int value){ + lanterfire -= value; + if(lanterfire <= 0){ + damage(HT,this); + } + } + + public void healLantern(int value){ + lanterfire = Math.min(lanterfire+value,100); + } + } 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 0a4569ddc..7aab53723 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 @@ -21,8 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; - import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; @@ -31,9 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PureSoul; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RandomBuff; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sanity; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.NaturesPower; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.SpectralBlades; @@ -75,8 +71,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio; import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie; import com.shatteredpixel.shatteredpixeldungeon.items.food.PotionOfLightningShiled; -import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern; -import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; @@ -277,15 +271,6 @@ public enum HeroClass { Waterskin waterskin = new Waterskin(); waterskin.collect(); - if(Dungeon.isChallenged(LIGHTBLACK)){ - Buff.affect(hero, Sanity.class).set( (240), 1 ); - Buff.affect(hero, PureSoul.class).set( 20, 20 ); - new OilLantern().quantity(1).identify().collect(); - new OilPotion().quantity(100).identify().collect(); - new Ankh().quantity(1).identify().collect(); - Dungeon.gold+=10000; - } - new ScrollOfIdentify().identify(); switch (this) { 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 c999c3f8a..db26ac30e 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 @@ -72,7 +72,7 @@ public class BloodBat extends Mob implements Callback { Sample.INSTANCE.play( Assets.Sounds.DEBUFF ); } - int dmg = Random.NormalIntRange( (4+level)*Dungeon.depth/5, (5+level)*Dungeon.depth/5 ); + int dmg = Random.NormalIntRange( (2+level)*Dungeon.depth/5, (2+level)*Dungeon.depth/5 ); enemy.damage( dmg, new BloodBat.DarkBolt() ); if (enemy == Dungeon.hero && !enemy.isAlive()) { 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 5d67d6bd0..623080b85 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 @@ -552,7 +552,7 @@ public class DimandKing extends Boss { Dungeon.level.drop(new Ankh(), dropPos).sprite.drop(pos); Dungeon.level.drop(new Gold().quantity(Random.Int(2200, 5500)), pos).sprite.drop(); Badges.validateBossSlain(); - + Badges.KILL_DMK(); Dungeon.level.unseal(); for (Mob m : getSubjects()){ 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 7d501a743..67d02844b 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 @@ -219,17 +219,22 @@ public abstract class Elemental extends Mob { if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5); } } - + private float resurrectChance = 0.01f; @Override public void die(Object cause) { - super.die(cause); - if(!Statistics.endingbald) { + //TODO 1% + if(!Statistics.endingbald && Random.Float() <= resurrectChance) { Dungeon.level.drop(new EndingBlade(), pos).sprite.drop(); - Badges.ENDDIED(); - Statistics.endingbald = true; + Badges.ENDDIED(); + Statistics.endingbald = true; + //TODO 1% + super.die(cause); + } else if(Statistics.endingbald && Random.Float() <= resurrectChance) { + Dungeon.level.drop(new Gold().quantity(Random.Int(12, 24)), pos).sprite.drop(); + super.die(cause); } else { - Dungeon.level.drop(new Gold().quantity(Random.Int(90, 120)), pos).sprite.drop(); + super.die(cause); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java index d3b61e92a..dd68210ed 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java @@ -46,7 +46,7 @@ import com.watabou.utils.PathFinder; import com.watabou.utils.Random; public class Goo extends Mob { - + { HP = HT = Dungeon.isChallenged(Challenges.STRONGER_BOSSES) ? 120 : 100; EXP = 10; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 93aa581f9..53d66b713 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -21,9 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; -import static com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PureSoul.soul; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer; @@ -742,10 +740,6 @@ public abstract class Mob extends Char { GLog.i( Messages.get(this, "died") ); } - if(Dungeon.isChallenged(LIGHTBLACK)){ - soul +=1; - } - boolean soulMarked = buff(SoulMark.class) != null; super.die( cause ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java index 74dadb25d..21d2a6c10 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Rat.java @@ -21,12 +21,12 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; -import static com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sanity.sanity; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify; import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite; import com.watabou.utils.Bundle; @@ -46,11 +46,11 @@ public class Rat extends Mob { @Override public int attackProc( Char enemy, int damage ) { damage = super.attackProc( enemy, damage ); - if(Dungeon.isChallenged(LIGHTBLACK)) { - if (Random.Int(5) == 1) { - sanity -= 1; - //扣除理智-1 - hero.sprite.showStatus( 0x808080, "1"); + if(lanterfireactive){ + + if (Random.Int(5) == 1 && enemy instanceof Hero) { + ((Hero) enemy).damageLantern(10); + hero.sprite.showStatus( 0x808080, "10"); } } else { super.attackProc( enemy, damage ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalLingTower.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalLingTower.java new file mode 100644 index 000000000..ad73a1e8c --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalLingTower.java @@ -0,0 +1,157 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.SpellCaster; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.effects.BeamCustom; +import com.shatteredpixel.shatteredpixeldungeon.effects.Effects; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.IceStalSprites; +import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.utils.Bundle; +import com.watabou.utils.Random; + +public class CrystalLingTower extends Mob { + + { + spriteClass = IceStalSprites.class; + + HP = HT = 400; + + properties.add(Property.MINIBOSS); + + state = HUNTING; + } + + protected enum State{ + PREPARING, AIMING, SHOOTING + } + + @Override + public void damage(int dmg, Object src) { + if (dmg >= 15){ + dmg = 15 + (int)(Math.sqrt(8*(dmg - 4) + 1) - 1)/2; + } + super.damage(dmg, src); + } + + protected int count=0; + protected CrystalDiedTower.State countDown(){ + if(maxCount() - count > 0 && maxCount() - count < 3); + if(count >= maxCount()){ + count = Random.Int(0, 3) - 3; return CrystalDiedTower.State.SHOOTING; + }else if(count == maxCount() - 1){ + count ++; + sprite.showStatus( CharSprite.NEGATIVE, "!!!" ); + return CrystalDiedTower.State.AIMING; + }else{ + count ++; + return CrystalDiedTower.State.PREPARING; + } + } + + protected int maxCount(){ + return 6; + } + + protected boolean findTarget(){ + if(enemy != null){ + //record last pos of enemy. Not update if out of FOV. + if(enemySeen){ + lastTargeting = enemy.pos; + return true; + }else{ + lastTargeting = Dungeon.hero.pos; + } + }else{ + lastTargeting = Dungeon.hero.pos; + } + return false; + } + + protected void zapProc() { + Ballistica ba = new Ballistica(pos, lastTargeting, Ballistica.PROJECTILE); + + sprite.parent.add(new BeamCustom( + sprite.center(), + DungeonTilemap.tileCenterToWorld(ba.collisionPos), + Effects.Type.BLUE_RAY)); + + if(ba.collisionPos != lastTargeting) { + findTarget(); + Buff.affect(this, SpellCaster.HaloFireCaster.BouncePostShoot.class).setTrace(ba.collisionPos, lastTargeting); + } + hitProc(ba); + } + + public static void zapDamage(Char ch, int min, int max, float modifier, Object src){ + int damage = Random.IntRange(min, max); + if(ch.buff(SpellCaster.Marked.class)!=null){ + damage = Math.round(damage*(2f+modifier*1.15f)); + } + ch.damage(damage, src); + if(ch == Dungeon.hero && !ch.isAlive()){ + Dungeon.fail(src.getClass()); + } + } + + protected void hitProc(Ballistica ba){ + Char ch = findChar(ba.collisionPos); + if(ch != null){ + ch.sprite.burst( 0xFF99CCFF, 5 ); + if(ch.alignment != Alignment.ENEMY){ + Buff.affect(ch, Chill.class, 5f); + zapDamage(ch, 8, 12, 0.45f, this); + } + } + } + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put("ALIGNMENT", alignment); + bundle.put("lastPos", lastTargeting); + bundle.put("countDown", count); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + alignment = bundle.getEnum("ALIGNMENT", Char.Alignment.class); + lastTargeting = bundle.getInt("lastPos"); + count = bundle.getInt("countDown"); + } + + protected int lastTargeting=-1; + @Override + protected boolean act(){ + if(alignment == Alignment.NEUTRAL) return true; + CrystalDiedTower.State s = countDown(); + if(s == CrystalDiedTower.State.SHOOTING) { + zapProc(); + }else{ + spend(TICK); + } + return true; + } + + @Override + public void die( Object cause ) { + super.die(cause); + for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) { + if (mob instanceof FireMagicDied) { + Viscosity.DeferedDamage deferred = Buff.affect( mob, Viscosity.DeferedDamage.class ); + deferred.prolong( 10000 ); + GLog.n( Messages.get(FireMagicDied.class, "dixsdf" )); + } + } + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java index 0646750db..e3aaa807a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireMagicDied.java @@ -2,16 +2,17 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel.CryStalPosition; +import static com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel.TRUEPosition; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.BeamTowerAdbility; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; @@ -107,10 +108,10 @@ public class FireMagicDied extends Mob implements Callback { } } - @Override - public boolean isInvulnerable(Class effect) { - return phase == 3 && effect != FireMagicDied.KingDamager.class; - } +// @Override +// public boolean isInvulnerable(Class effect) { +// return phase == 3 && effect != FireMagicDied.KingDamager.class; +// } @Override public int attackSkill( Char target ) { @@ -437,7 +438,7 @@ public class FireMagicDied extends Mob implements Callback { actPhaseTwoSummon(); return true; } - actScanning(); + //actScanning(); if (Dungeon.level.water[pos] && HP < HT) { HP += healInc; @@ -660,12 +661,15 @@ public class FireMagicDied extends Mob implements Callback { } @Override - protected boolean getCloser( int target ) { - if (pumpedUp != 0) { - pumpedUp = 0; - sprite.idle(); + protected boolean getCloser(int target) { + this.pumpedUp = 0; + if (this.state != this.HUNTING) { + return FireMagicDied.super.getCloser(target); } - return super.getCloser( target ); + if (!this.enemySeen || !getFurther(target)) { + return false; + } + return true; } @Override @@ -710,10 +714,20 @@ public class FireMagicDied extends Mob implements Callback { sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable")); Buff.affect(this, DwarfMaster.DKBarrior.class).setShield(12*25); } - } else if (phase == 2 && shielding() == 0 && HP <= 100) { + } else if (phase == 2 && shielding() == 0 && HP <= 200) { actPhaseTwoSummon(); - yell( Messages.get(this, "enraged", Dungeon.hero.name()) ); - //Buff.detach(this, FireMagicDied.SacrificeSubjectListener.class); + yell( Messages.get(this, "enraged" )); + GLog.n( Messages.get(this, "xslx") ); + + //T3 阶段 + CrystalLingTower abc = new CrystalLingTower(); + abc.pos = TRUEPosition; + GameScene.add(abc); + + Buff.affect(this, DwarfMaster.DKBarrior.class).setShield(1000); + + Buff.append(hero, BeamTowerAdbility.class).towerPos = TRUEPosition; + for (Buff buff : hero.buffs()) { if (buff instanceof FireMagicDied.KingDamager) { buff.detach(); @@ -732,7 +746,22 @@ public class FireMagicDied extends Mob implements Callback { Buff.affect(this, FireMagicDied.YogScanHalf.class).setPos(pos, direction); beamCD = 40 + 8 - (phase == 10 ? 38 : 0); sprite.showStatus(0xff0000, Messages.get(this, "dead")); - + switch (Random.Int(7)){ + case 0: default: Buff.affect(this, ChampionEnemy.Blazing.class); + break; + case 1: Buff.affect(this, ChampionEnemy.Projecting.class); + break; + case 2: Buff.affect(this, ChampionEnemy.AntiMagic.class); + break; + case 3: Buff.affect(this, ChampionEnemy.Giant.class); + break; + case 4: Buff.affect(this, ChampionEnemy.Blessed.class); + break; + case 5: Buff.affect(this, ChampionEnemy.Growing.class); + break; + case 6: Buff.affect(this, ChampionEnemy.Halo.class); + break; + } } else if (phase == 3 && preHP > 80 && HP <= 80){ yell( Messages.get(this, "losing") ); } @@ -750,7 +779,6 @@ public class FireMagicDied extends Mob implements Callback { public void die( Object cause ) { super.die( cause ); - ShatteredPixelDungeon.seamlessResetScene(); Dungeon.level.drop(new BackGoKey().quantity(1).identify(), pos).sprite.drop(); Dungeon.level.drop(new ScrollOfMagicMapping().quantity(1).identify(), pos).sprite.drop(); @@ -763,9 +791,11 @@ public class FireMagicDied extends Mob implements Callback { woc.identify(); Dungeon.level.unseal(); + Buff.affect(hero, ShopLimitLock.class).set((1), 1); - for (Mob mob : (Iterable)Dungeon.level.mobs.clone()) { - if (mob instanceof FireMagicDied.ColdGuradA || mob instanceof SRPDICLRPRO ||mob instanceof Skeleton||mob instanceof CrystalDiedTower||mob instanceof DM100|| mob instanceof BlackHost|| mob instanceof Warlock|| mob instanceof Monk) { + + for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) { + if (mob instanceof FireMagicDied.ColdGuradA || mob instanceof SRPDICLRPRO ||mob instanceof Skeleton||mob instanceof DM100|| mob instanceof BlackHost|| mob instanceof Warlock|| mob instanceof Monk|| mob instanceof CrystalDiedTower) { mob.die( cause ); } } @@ -787,7 +817,7 @@ public class FireMagicDied extends Mob implements Callback { public void notice() { super.notice(); BossHealthBar.assignBoss(this); - ShatteredPixelDungeon.seamlessResetScene(); + Music.INSTANCE.play(Assets.BGM_FRBOSS, true); yell( Messages.get(this, "notice") ); //summon(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/NullDiedTO.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/NullDiedTO.java index 7f3e11e57..7fc00ac04 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/NullDiedTO.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/NullDiedTO.java @@ -2,7 +2,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EnergyParticle; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java index 289d0a0da..842047361 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java @@ -21,6 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -164,7 +165,12 @@ public class Shopkeeper extends NPC { //shopkeepers are greedy! public static int sellPrice(Item item){ - return item.value() * 5 * (Dungeon.depth / 5 + 1); + int price = item.value() * 5 * (Dungeon.depth / 5 + 1); + + if (Dungeon.isChallenged(PRO)) { + price *= 0.25; + } + return price; } public static WndBag sell() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BadgeBanner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BadgeBanner.java index cc4de0533..9e9d6fa60 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BadgeBanner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BadgeBanner.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.effects; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.watabou.gltextures.SmartTexture; import com.watabou.gltextures.TextureCache; import com.watabou.noosa.Game; @@ -31,6 +32,7 @@ import com.watabou.noosa.audio.Sample; import com.watabou.utils.Point; import com.watabou.utils.PointF; +import java.util.ArrayList; import java.util.HashMap; public class BadgeBanner extends Image { @@ -39,108 +41,112 @@ public class BadgeBanner extends Image { FADE_IN, STATIC, FADE_OUT } private State state; - - private static final float DEFAULT_SCALE = 3; - + + public static final float DEFAULT_SCALE = 3; + public static final int SIZE = 16; + private static final float FADE_IN_TIME = 0.25f; private static final float STATIC_TIME = 1f; private static final float FADE_OUT_TIME = 1.75f; - + private int index; private float time; - + private static TextureFilm atlas; - - private static BadgeBanner current; - + + public static ArrayList showing = new ArrayList<>(); + private BadgeBanner( int index ) { - + super( Assets.Interfaces.BADGES ); - + if (atlas == null) { - atlas = new TextureFilm( texture, 16, 16 ); + atlas = new TextureFilm( texture, SIZE, SIZE ); } - + setup(index); } - + public void setup( int index ){ this.index = index; - + frame( atlas.get( index ) ); origin.set( width / 2, height / 2 ); - + alpha( 0 ); scale.set( 2 * DEFAULT_SCALE ); - + state = State.FADE_IN; time = FADE_IN_TIME; - + Sample.INSTANCE.play( Assets.Sounds.BADGE ); } - + @Override public void update() { super.update(); - + time -= Game.elapsed; if (time >= 0) { - + switch (state) { - case FADE_IN: - float p = time / FADE_IN_TIME; - scale.set( (1 + p) * DEFAULT_SCALE ); - alpha( 1 - p ); - break; - case STATIC: - break; - case FADE_OUT: - alpha( time / FADE_OUT_TIME ); - break; + case FADE_IN: + float p = time / FADE_IN_TIME; + scale.set( (1 + p) * DEFAULT_SCALE ); + alpha( 1 - p ); + break; + case STATIC: + break; + case FADE_OUT: + alpha( time / FADE_OUT_TIME ); + break; } - + } else { - + switch (state) { - case FADE_IN: - time = STATIC_TIME; - state = State.STATIC; - scale.set( DEFAULT_SCALE ); - alpha( 1 ); - highlight( this, index ); - break; - case STATIC: - time = FADE_OUT_TIME; - state = State.FADE_OUT; - break; - case FADE_OUT: - killAndErase(); - break; + case FADE_IN: + time = STATIC_TIME; + state = State.STATIC; + scale.set( DEFAULT_SCALE ); + alpha( 1 ); + highlight( this, index ); + break; + case STATIC: + time = FADE_OUT_TIME; + state = State.FADE_OUT; + break; + case FADE_OUT: + killAndErase(); + break; } - + } } - + @Override public void kill() { - if (current == this) { - current = null; - } + showing.remove(this); super.kill(); } + @Override + public void destroy() { + showing.remove(this); + super.destroy(); + } + //map to cache highlight positions so we don't have to keep looking at texture pixels private static HashMap highlightPositions = new HashMap<>(); //we also hardcode any special cases static { - //combo master - highlightPositions.put(66, new Point(3, 7)); + highlightPositions.put(Badges.Badge.MASTERY_COMBO.image, new Point(3, 7)); } //adds a shine to an appropriate pixel on a badge public static void highlight( Image image, int index ) { - + PointF p = new PointF(); if (highlightPositions.containsKey(index)){ @@ -181,25 +187,26 @@ public class BadgeBanner extends Image { } p.offset( - -image.origin.x * (image.scale.x - 1), - -image.origin.y * (image.scale.y - 1) ); + -image.origin.x * (image.scale.x - 1), + -image.origin.y * (image.scale.y - 1) ); p.offset( image.point() ); - + Speck star = new Speck(); star.reset( 0, p.x, p.y, Speck.DISCOVER ); star.camera = image.camera(); image.parent.add( star ); } - + public static BadgeBanner show( int image ) { - if (current != null) { - current.setup(image); - } else { - current = new BadgeBanner(image); - } - return current; + BadgeBanner banner = new BadgeBanner(image); + showing.add(banner); + return banner; } - + + public static boolean isShowingBadges(){ + return !showing.isEmpty(); + } + public static Image image( int index ) { Image image = new Image( Assets.Interfaces.BADGES ); if (atlas == null) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java index a3fc8f097..c724bc35c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java @@ -21,13 +21,8 @@ package com.shatteredpixel.shatteredpixeldungeon.items; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; - import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sanity; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; @@ -74,10 +69,6 @@ public class LostBackpack extends Item { } } - if(Dungeon.isChallenged(LIGHTBLACK)) { - Buff.affect(hero, Sanity.class).set((150), 1); - } - hero.updateHT(false); Item.updateQuickslot(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/EndingBlade.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/EndingBlade.java index 426a575b9..d51916435 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/EndingBlade.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/EndingBlade.java @@ -124,7 +124,7 @@ public class EndingBlade extends Weapon { switch (action) { case AC_LASERCRYSTAL: - if(level >= 3 && firstx){ + if(fireenergy >= 300 && firstx){ firstx = false; new LaserPython().quantity(1).identify().collect(); GLog.n("你突然感觉你的背包鼓鼓的……"); @@ -135,7 +135,7 @@ public class EndingBlade extends Weapon { } break; case AC_DIEDGHOST: - if(level >= 5 && TIME_TO_DIED == 0) { + if(fireenergy >= 500 && TIME_TO_DIED == 0) { curUser = hero; curItem = this; GameScene.selectCell(zapper); @@ -146,7 +146,7 @@ public class EndingBlade extends Weapon { } break; case AC_HEALRESET: - if(level >= 7 && 0.30f >= (float)(hero.HP/hero.HT) && !Statistics.wangzheguilai) { + if(fireenergy >= 700 && 0.30f >= (float)(hero.HP/hero.HT) && !Statistics.wangzheguilai) { //0.30f >= (float)(hero.HP/hero.HT) PotionOfHealing.cure( hero ); hero.belongings.uncurseEquipped(); @@ -390,7 +390,11 @@ public class EndingBlade extends Weapon { public int proc(Char attacker, Char defender, int damage ) { //常规加+1浊焰能量 - ++fireenergy; + if(level >= 10) { + fireenergy = 1000; + } else { + ++fireenergy; + } int dmg; tier+= fireenergy/100; @@ -404,13 +408,13 @@ public class EndingBlade extends Weapon { //武器最高级 } else if(defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage){ //目标Boss血量小于实际伤害判定为死亡,+20浊焰能量 - fireenergy+=20; + fireenergy+=40; } else if(defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage){ //目标迷你Boss血量小于实际伤害判定为死亡,+10浊焰能量 - fireenergy+=10; + fireenergy+=20; } else if (defender.HP <= damage){ //目标血量小于实际伤害判定为死亡,+5浊焰能量 - fireenergy+=5; + fireenergy+=10; } /* diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java index 1c590cdd0..409e5775f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java @@ -25,15 +25,15 @@ public class LockSword extends MeleeWeapon { @Override public int min(int lvl) { - return Math.round(1.0f*(tier+1)) + //15 base, down from 30 - lvl*Math.round(0.5f*(tier+1)); //+3 per level, down from +6 + return Math.round(1.0f*(tier+1)) + + lvl*Math.round(1.5f*(tier+1)); } @Override public int max(int lvl) { - return Math.round(1.5f*(tier+1)) + //15 base, down from 30 - lvl*Math.round(0.5f*(tier+1)); //+3 per level, down from +6 + return Math.round(2.5f*(tier+1)) + + lvl*Math.round(0.5f*(tier+1)); } public String desc() { @@ -41,16 +41,21 @@ public class LockSword extends MeleeWeapon { } public int image() { - if (lvl == 150) { - super.image = ItemSpriteSheet.DG4; - } else if (lvl >= 350) { + if (lvl >= 750) { super.image = ItemSpriteSheet.DG5; + } else if (lvl >= 550) { + super.image = ItemSpriteSheet.DG4; } return image; } public int proc(Char attacker, Char defender, int damage ) { - ++lvl; + if(level >= 10) { + lvl = 1000; + } else { + ++lvl; + } + int dmg; if(level >= 10){ @@ -85,29 +90,29 @@ public class LockSword extends MeleeWeapon { } - public void restoreFromBundle(Bundle var1) { - super.restoreFromBundle(var1); + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); super.image = ItemSpriteSheet.DG3; - if (lvl == 150) { - super.image = ItemSpriteSheet.DG4; - } else if (lvl >= 350) { + if (lvl >= 750) { super.image = ItemSpriteSheet.DG5; + } else if (lvl >= 550) { + super.image = ItemSpriteSheet.DG4; } - this.lvl = var1.getInt("lvl"); + this.lvl = bundle.getInt("lvl"); } - public void storeInBundle(Bundle var1) { - super.storeInBundle(var1); + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); super.image = ItemSpriteSheet.DG3; - if (lvl == 150) { - super.image = ItemSpriteSheet.DG4; - } else if (lvl >= 350) { + if (lvl >= 750) { super.image = ItemSpriteSheet.DG5; + } else if (lvl >= 550) { + super.image = ItemSpriteSheet.DG4; } - var1.put("lvl", this.lvl); + bundle.put("lvl", this.lvl); } } 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 848fed83e..3f221db67 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -478,16 +478,14 @@ public abstract class Level implements Bundlable { abstract protected boolean build(); private ArrayList> mobsToSpawn = new ArrayList<>(); - + public Mob createMob() { if (mobsToSpawn == null || mobsToSpawn.isEmpty()) { mobsToSpawn = Bestiary.getMobRotation(Dungeon.depth); } Mob m = Reflection.newInstance(mobsToSpawn.remove(0)); - if (Dungeon.isChallenged(Challenges.CHAMPION_ENEMIES)){ - ChampionEnemy.rollForChampion(m); - } + ChampionEnemy.rollForChampion(m); return m; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ShopBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ShopBossLevel.java index 557c5f3c2..24ebf694f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ShopBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ShopBossLevel.java @@ -8,7 +8,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrystalDiedTower; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.FireMagicDied; @@ -20,11 +19,11 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; -import com.watabou.utils.Random; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.Objects; public class ShopBossLevel extends Level { @@ -80,6 +79,8 @@ public class ShopBossLevel extends Level { WIDTH*17 + 22, }; + public static int TRUEPosition = WIDTH * 17 + 17; + @Override public void unseal() { super.unseal(); @@ -123,7 +124,8 @@ public class ShopBossLevel extends Level { private static final int[] pedestals = new int[4]; public int getSummoningPos(){ Mob king = getKing(); - HashSet summons = king.buffs(FireMagicDied.Summoning.class); + //fixed + HashSet summons = Objects.requireNonNull(king).buffs(FireMagicDied.Summoning.class); ArrayList positions = new ArrayList<>(); for (int pedestal : pedestals) { boolean clear = true; @@ -137,11 +139,12 @@ public class ShopBossLevel extends Level { positions.add(pedestal); } } - if (positions.isEmpty()){ - return -1; - } else { - return Random.element(positions); - } + //if (positions.isEmpty()){ + // return -1; + //} else { + // return Random.element(positions); + //} + return -1; } public static final int thronex; @@ -274,19 +277,11 @@ public class ShopBossLevel extends Level { } public String tilesTex() { - if (Dungeon.hero.buff(LockedFloor.class)!=null) { - return Assets.Environment.TILES_DIED; - } else { return Assets.Environment.TILES_COLD; - } } public String waterTex() { - if (Dungeon.hero.buff(LockedFloor.class)!=null) { - return Assets.Environment.WATER_HALLS; - } else { return Assets.Environment.WATER_COLD; - } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index a26455882..226b92245 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DemonSpawner; @@ -63,6 +64,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CursingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; @@ -529,6 +531,17 @@ public class GameScene extends PixelScene { } else { GLog.h(Messages.get(this, "descend"), Dungeon.depth); } + + /* + TODO 检查是否存在诅咒buff,然后在下楼的时候背刺英雄一下 + TODO 魔女的低语:束缚 本大层每下一层穿戴的装备必定被诅咒。 + */ + if(Dungeon.hero.buff(MagicGirlSayCursed.class) != null){ + CursingTrap cursed = new CursingTrap(); + cursed.pos = Dungeon.hero.pos; + cursed.activate(); + } + Sample.INSTANCE.play(Assets.Sounds.DESCEND); if(Dungeon.sbbossLevel()){ tell(Messages.get(Slyl.class, "tips")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java index 5099af764..14ee7e40b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java @@ -21,7 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; @@ -33,7 +32,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.LostBackpack; -import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; @@ -182,7 +180,7 @@ public class InterlevelScene extends PixelScene { fadeTime += 0.9f; //adds 1 second total //speed up transition when debugging } else if (DeviceCompat.isDebug()){ - fadeTime = 0.8f; + fadeTime = 0.1f; } SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){ @@ -506,11 +504,8 @@ public class InterlevelScene extends PixelScene { level.map[Dungeon.hero.pos] = Terrain.GRASS; } Dungeon.hero.resurrect(); - if(Dungeon.isChallenged(LIGHTBLACK)) { - level.drop(new Food(), invPos); - } else { + level.drop(new LostBackpack(), invPos); - } } Dungeon.switchLevel( level, Dungeon.hero.pos ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java index a4316616d..278d25aa7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java @@ -288,18 +288,28 @@ public class PixelScene extends Scene { protected void fadeIn( int color, boolean light ) { add( new Fader( color, light ) ); } - + public static void showBadge( Badges.Badge badge ) { Game.runOnRenderThread(new Callback() { @Override public void call() { - BadgeBanner banner = BadgeBanner.show( badge.image ); - banner.camera = uiCamera; - float offset = Camera.main.centerOffset.y; - banner.x = align( banner.camera, (banner.camera.width - banner.width) / 2 ); - banner.y = align( uiCamera, (uiCamera.height - banner.height) / 2 - banner.height/2 - 16 - offset ); Scene s = Game.scene(); - if (s != null) s.add( banner ); + if (s != null) { + BadgeBanner banner = BadgeBanner.show(badge.image); + s.add(banner); + float offset = Camera.main.centerOffset.y; + + int left = uiCamera.width/2 - BadgeBanner.SIZE/2; + left -= (BadgeBanner.SIZE * BadgeBanner.DEFAULT_SCALE * (BadgeBanner.showing.size()-1))/2; + for (int i = 0; i < BadgeBanner.showing.size(); i++){ + banner = BadgeBanner.showing.get(i); + banner.camera = uiCamera; + banner.x = align(banner.camera, left); + banner.y = align(uiCamera, (uiCamera.height - banner.height) / 2 - banner.height / 2 - 16 - offset); + left += BadgeBanner.SIZE * BadgeBanner.DEFAULT_SCALE; + } + + } } }); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index 0c364ff4c..282f1be77 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -103,7 +103,7 @@ public class BuffIndicator extends Component { public static final int NOINV = 53; public static final int RANDOM = 54; - public static final int FIREDIED = 54; + public static final int FIREDIED = 55; public static final int ROSEBARRIER= 56; public static final int HALOMETHANEBURNING = 57; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LanterFireCator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LanterFireCator.java new file mode 100644 index 000000000..569e03cb5 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LanterFireCator.java @@ -0,0 +1,70 @@ +package com.shatteredpixel.shatteredpixeldungeon.ui; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.windows.PageWindows; + +public class LanterFireCator extends Button { + + protected float lightness = 0; + + public void flash() { + lightness = 1f; + } + private static boolean targeting = false; + + private Toolbar.Tool slot; + + private static Item item = null; + + public LanterFireCator() { + + int color=0x7C8072; + + setSize( 21, 12 ); + + visible=false; + } + + @Override + protected void createChildren() { + + super.createChildren(); + + add(slot = new Toolbar.Tool(0, 64, 24, 70) { + + @Override + protected void onClick() { + super.onClick(); + GameScene.show(new PageWindows()); + } + }); + + } + + @Override + protected void layout() { + super.layout(); + + slot.setRect( x, y, width, height); + } + + @Override + public void update() { + super.update(); + + slot.enable(Dungeon.hero.isAlive() && Dungeon.hero.ready); + if (item == null) { + visible = true; + } + else visible=true; + } + + public static boolean targeting() + { + return targeting; + } +} + + 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 14a0ecade..26b182c0e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -21,7 +21,8 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.LIGHTBLACK; +import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.ClassPage; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -30,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PureSoul; import com.shatteredpixel.shatteredpixeldungeon.effects.CircleArc; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -72,8 +72,6 @@ public class StatusPane extends Component { private Image puresoul; private BitmapText hgText; - private BitmapText puresoulText; - private Image exp; private BitmapText expText; @@ -93,6 +91,7 @@ public class StatusPane extends Component { public MainHandIndicator mainhand; public BossSelectIndicator bossselect; public JoinIndicator joinxxx; + public LanterFireCator lanter; private static String asset = Assets.Interfaces.STATUS; @@ -151,8 +150,7 @@ public class StatusPane extends Component { else hg = new Image(asset, 0, 45, 49, 4); add( hg ); - if (large) puresoul = new Image(asset, 0, 128, 128, 7); - else puresoul = new Image(asset, 0, 49, 52, 4); + puresoul = new Image(Assets.Interfaces.LANTERLING); add( puresoul ); hpText = new BitmapText(PixelScene.pixelFont); @@ -164,11 +162,6 @@ public class StatusPane extends Component { hgText.alpha(0.6f); add(hgText); - - puresoulText = new BitmapText(PixelScene.pixelFont); - puresoulText.alpha(0.6f); - add(puresoulText); - heroInfoOnBar = new Button(){ @Override protected void onClick () { @@ -217,6 +210,9 @@ public class StatusPane extends Component { joinxxx=new JoinIndicator(); add(joinxxx); + + lanter=new LanterFireCator(); + add(lanter); } @@ -265,10 +261,11 @@ public class StatusPane extends Component { heroInfoOnBar.setRect(heroInfo.right(), y + 19, 130, 20); - //buffs.setPos( x + 31, y ); - //下半段 - puresoul.visible = false; +// buffs.setPos( x + 31, y +15 ); + +// //下半段 +// puresoul.visible = true; busy.x = x + bg.width + 1; busy.y = y + bg.height - 9; @@ -295,28 +292,24 @@ public class StatusPane extends Component { hgText.y -= 0.001f; //prefer to be slightly higher PixelScene.align(hgText); - puresoulText.scale.set(PixelScene.align(0.5f)); - puresoulText.x = 31f; - puresoulText.y = 13f + (hg.height - (puresoulText.baseLine()+puresoulText.scale.y))/2f; - puresoulText.y -= 0.001f; //prefer to be slightly higher - PixelScene.align(puresoulText); +// puresoulText.scale.set(PixelScene.align(0.5f)); +// puresoulText.x = 31f; +// puresoulText.y = 13f + (hg.height - (puresoulText.baseLine()+puresoulText.scale.y))/2f; +// puresoulText.y -= 0.001f; //prefer to be slightly higher +// PixelScene.align(puresoulText); heroInfoOnBar.setRect(heroInfo.right(), y, 50, 9); - if(Dungeon.isChallenged(LIGHTBLACK)){ - puresoul.x= 30.0f; - puresoul.y= 13.0f; - buffs.setPos( x + 36, y + 20 ); - } else { - puresoul.x= 500f; - puresoul.y= 500f; - buffs.setPos( x + 31, y + 12 ); - } - + puresoul.x= 1.0f; + puresoul.y= 142.0f; + puresoul.visible = false; // + buffs.setPos( x + 31, y + 12 ); busy.x = x + 1; busy.y = y + 33; + + lanter.setPos(0, 500); } counter.point(busy.center()); @@ -329,38 +322,65 @@ public class StatusPane extends Component { super.update(); int maxHunger = (int) Hunger.STARVING; + int maxPureSole = Dungeon.hero.lanterfire; int health = Dungeon.hero.HP; int shield = Dungeon.hero.shielding(); int max = Dungeon.hero.HT; - int maxSoul = (int) PureSoul.PURESOULBASE; + int mtPureSole = 100; //检查为光与影使用黑色模块 - if(Dungeon.isChallenged(LIGHTBLACK)){ - if (SPDSettings.ClassUI()) { - bg.texture = TextureCache.get(Assets.Interfaces.STATUSSOUL_DARK); - } else { - bg.texture = TextureCache.get(Assets.Interfaces.STATUSSOUL); - } - } else if (SPDSettings.ClassUI()) { +// int chCount = 0; +// for (int ch : Challenges.MASKS){ +// if ((Dungeon.challenges & ch) != 0) chCount++; +// } +// +// if(chCount >= 3 && !Dungeon.isChallenged(PRO) && lanterfireactive){ +// if (SPDSettings.ClassUI()) { +// bg.texture = TextureCache.get(Assets.Interfaces.STATUSSOUL_DARK); +// } else { +// bg.texture = TextureCache.get(Assets.Interfaces.STATUSSOUL); +// } +// } else + if (SPDSettings.ClassUI()) { bg.texture = TextureCache.get(Assets.Interfaces.STATUS_DARK); } else { bg.texture = TextureCache.get(Assets.Interfaces.STATUS); } - if (SPDSettings.ClassPage()) { + if (ClassPage()) { page.setPos(0, 40); pageb.setPos(0, 500); mainhand.setPos(0, 51); joinxxx.setPos(0, 78); bossselect.setPos(0, 104); + + if(lanterfireactive){ + lanter.setPos(0, 500); + puresoul.visible = false; + } + } else { page.setPos(0, 500); pageb.setPos(0, 40); mainhand.setPos(0, 500); joinxxx.setPos(0, 500); bossselect.setPos(0, 500); + + //TODO 灯火前行 + if(lanterfireactive){ + lanter.setPos(0, 75); + lanter.visible = true; + lanter.active = true; + puresoul.visible =true; + puresoul.x= 1.0f; + puresoul.y= 142.0f; + } + + } + + if (!Dungeon.hero.isAlive()) { avatar.tint(0x000000, 0.5f); } else if ((health/(float)max) < 0.3f) { @@ -377,6 +397,12 @@ public class StatusPane extends Component { hp.scale.x = Math.max( 0, (health-shield)/(float)max); shieldedHP.scale.x = health/(float)max; + if(lanterfireactive) { + puresoul.scale.y = -Math.max( 0, (maxPureSole)/(float)mtPureSole); + } else { + puresoul.scale.y = -1.0f; + } + if (shield > health) { rawShielding.scale.x = shield / (float) max; } else { @@ -399,17 +425,6 @@ public class StatusPane extends Component { hg.scale.x = 1.0f; } - PureSoul PureSoulBuff = Dungeon.hero.buff(PureSoul.class); - if (PureSoulBuff != null) { - int sanity = Math.max(0, maxSoul - PureSoulBuff.soul()); - puresoul.scale.x = (float) sanity / (float) maxSoul; - //puresoul.scale.x = 1.0f; - puresoulText.text(sanity + "/" + maxSoul); - } - else if (Dungeon.hero.isAlive()) { - puresoul.scale.x = 1.0f; - } - if (large) { exp.scale.x = (128 / exp.width) * Dungeon.hero.exp / Dungeon.hero.maxExp(); 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 d98cebe19..f37027756 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 @@ -8,6 +8,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.IceCryStalSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.KagenoNusujinSprite; @@ -26,6 +27,7 @@ import java.util.ArrayList; public class vM0_6_7_X_Changes { public static void addAllChanges(ArrayList changeInfos) { + add_v0_6_11_Changes(changeInfos); add_v0_6_10_Changes(changeInfos); add_v0_6_9_Changes(changeInfos); add_v0_6_8_Changes(changeInfos); @@ -39,6 +41,30 @@ public class vM0_6_7_X_Changes { add_v0_6_0_Changes(changeInfos); } + public static void add_v0_6_11_Changes( ArrayList changeInfos ) { + ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p1.4-5", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new IceCryStalSprite(), ("浊焰魔女AI调整"), + ("重新调整了浊焰魔女的AI属性"))); + + changes.addButton(new ChangeButton(new BlueBatSprite(), ("血影蝙蝠调整"), + ("英雄15级后法术伤害面板调整"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + 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_06X31"))); + + } + public static void add_v0_6_10_Changes( ArrayList changeInfos ) { ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p1.2", 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 056080e82..510f8f76c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java @@ -216,7 +216,8 @@ public class WndChallenges extends Window { protected boolean onClick(float x, float y){ if(!inside(x,y)) return false; - if(active) onClick(); + if(active) + onClick(); return true; } 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 b0bc34be0..3501845d6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java @@ -37,6 +37,8 @@ public class WndInfoMob extends WndTitledMessage { super( new MobTitle( mob ), mob.info() ); } + + private static class MobTitle extends Component { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java index dc8c937a6..b5f7ec7a9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java @@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.IntroScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.ui.ActionIndicator; @@ -50,7 +51,6 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.utils.DungeonSeed; -import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.ColorBlock; import com.watabou.noosa.Game; import com.watabou.noosa.Image; @@ -71,8 +71,7 @@ public class WndStartGame extends Window { text = DungeonSeed.formatText(text); if(positive) { SPDSettings.customSeed(text); - //抛出一个问题,保证初始化成功 - throw new RuntimeException("成功,信息已录入"); + ShatteredPixelDungeon.switchScene(TitleScene.class); } } })); @@ -282,7 +281,6 @@ public class WndStartGame extends Window { Game.switchScene( IntroScene.class ); } else { Game.switchScene( InterlevelScene.class ); - GLog.n(SPDSettings.customSeed()); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java index 0391be468..4e14c8bda 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTradeItem.java @@ -151,11 +151,15 @@ public class WndTradeItem extends WndInfoItem { btnStole.setRect( 0, pos + GAP, width, BTN_HEIGHT ); btnStole.icon(Statistics.fireGirlnoshopping && !Statistics.deadshoppingdied ? new FireMagicGirlSprite() : new ShopGuardDead.ShopGuardianRedSprite()); + add( btnStole ); + if(shopOnLevel()){ pos = btnStole.bottom(); + btnStole.visible=true; } else { - pos = btnBuy.bottom()-4; + pos = btnBuy.bottom()-2; + btnStole.visible=false; }