diff --git a/build.gradle b/build.gradle index 1ac026175..ad80eef32 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =910000 - appVersionName = '0.6.5.0-Alpha6.9-LAST' + appVersionCode =913000 + appVersionName = '0.6.5.0-Alpha6-Patch3' appJavaCompatibility = JavaVersion.VERSION_1_8 diff --git a/core/src/main/assets/environment/custom_tiles/prison_exit.png b/core/src/main/assets/environment/custom_tiles/prison_exit.png index 2030603d0..9de0c6edb 100644 Binary files a/core/src/main/assets/environment/custom_tiles/prison_exit.png and b/core/src/main/assets/environment/custom_tiles/prison_exit.png differ diff --git a/core/src/main/assets/environment/custom_tiles/prison_quests.png b/core/src/main/assets/environment/custom_tiles/prison_quests.png index 6bf5d0722..39fe6b7ac 100644 Binary files a/core/src/main/assets/environment/custom_tiles/prison_quests.png and b/core/src/main/assets/environment/custom_tiles/prison_quests.png differ diff --git a/core/src/main/assets/environment/tiles_cold.png b/core/src/main/assets/environment/tiles_cold.png index e1adca8a7..544093803 100644 Binary files a/core/src/main/assets/environment/tiles_cold.png and b/core/src/main/assets/environment/tiles_cold.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index c03e2b736..5bba3501c 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -838,16 +838,16 @@ actors.mobs.npcs.ren.def_verb=随机应变 actors.mobs.npcs.goonpc.name=粘咕 -actors.mobs.npcs.slyl.name=冷群 -actors.mobs.npcs.slyl.message1=我叫冷群,这是我的真名。 +actors.mobs.npcs.slyl.name=冷 +actors.mobs.npcs.slyl.message1=你好!冒险家! actors.mobs.npcs.slyl.message2=地牢最深处的黑暗……似乎有点忘记了。但据说最近有冒险者在地牢新发现了一批特别的书籍,它们或多或少都沾染过魔法。 actors.mobs.npcs.slyl.message3=地牢已经有成千上万的冒险者为了“水晶之心”而前往,但没有一个人回来……我不清楚他的做法是否正确,但风暴就要到来了……我们别无选择,我们只能继续这样…… actors.mobs.npcs.slyl.tips=温馨提示:Boss终端暂时被禁用,敬请期待后续版本。 actors.mobs.npcs.slyl.readbooks=温馨提示:教程书籍正在翻修,敬请期待后续版本。 actors.mobs.npcs.slyl.def_verb=风暴将临 -actors.mobs.npcs.slyl.desc=_冷群_是一位掌握冰系力量的魔女,是300年前_寒冰圣都_的管理者。\n由于地下异常的不断出现,她来到这里调查异常的原因。\n看起来她似乎正在摸鱼。 -actors.mobs.npcs.slyl.howuse=你好,我是冷群。\n\n欢迎使用我们_寒冰圣都_的可以扰乱_魔力流_的_魔法金币_,通过它我们可以看见_特定的首领_。\n\n其中_抛动一次_会出现_天痕粘咕(5层),天狗(10层),DM300(15层),矮人国王(20层),Yog(25层)_\n]抛动两次]是_史莱姆王(5层),钻石宝箱王(10层),DM720(15层),矮人将军(20层),Yog-Zot(25层)_\n[抛动三次[是_(15层 寒冰魔女)_(抛动三次次仅在_特定楼层显示_)\n\n同时,仅在Boss前一楼层显示,每一次的最后的一次抛动将会决定下一层Boss的生成。\n\n好的,以上就是_使用方法和介绍了_,祝你_地牢冒险愉快_。 +actors.mobs.npcs.slyl.desc=_冷_是一位掌握冰系力量的魔女,是300年前_寒冰圣都_的管理者。\n由于地下异常的不断出现,她来到这里调查异常的原因。\n看起来她似乎正在摸鱼。 +actors.mobs.npcs.slyl.howuse=你好,我是冷。\n\n欢迎使用我们_寒冰圣都_的可以扰乱_魔力流_的_魔法金币_,通过它我们可以看见_特定的首领_。\n\n其中_抛动一次_会出现_天痕粘咕(5层),天狗(10层),DM300(15层),矮人国王(20层),Yog(25层)_\n]抛动两次]是_史莱姆王(5层),钻石宝箱王(10层),DM720(15层),矮人将军(20层),Yog-Zot(25层)_\n[抛动三次[是_(15层 寒冰魔女)_(抛动三次次仅在_特定楼层显示_)\n\n同时,仅在Boss前一楼层显示,每一次的最后的一次抛动将会决定下一层Boss的生成。\n\n好的,以上就是_使用方法和介绍了_,祝你_地牢冒险愉快_。 actors.mobs.npcs.renshop.guards=看来你并不是好人。 actors.mobs.npcs.renshop.thief=看来你的命运多舛。 @@ -1159,7 +1159,7 @@ actors.buffs.championenemy$longsider.name=突变烟雾体 actors.buffs.championenemy$longsider.desc=攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n突变烟雾体喜好在远处骚扰敌人,他就像烟雾一样来无影去无踪…… actors.buffs.championenemy$sider.name=突变酸液体 -actors.buffs.championenemy$sider.desc=该词条的敌人获得远程攻击,攻击范围+6,造成自身可造成的伤害20%的额外法术伤害并有概率随机产生一种有害烟雾。\n\n突变酸液体喜欢使用酸液来攻击敌人,他们的酸液不稳定性可以造成大量伤害,但是这种致命的酸液需要时间来准备,因此他们的攻击速度会降低_200%_。 +actors.buffs.championenemy$sider.desc=该词条的敌人获得远程攻击,攻击范围+6,造成自身可造成的伤害20%的额外法术伤害并有概率随机产生一种有害烟雾。\n\n突变酸液体喜欢使用酸液来攻击敌人,他们的酸液不稳定性可以造成大量伤害,但是这种致命的酸液需要时间来准备,因此他们的攻击速度会降低_300%_。\n\n部分敌人突变为酸液体还会进行多次连击造成巨额伤害。 actors.buffs.charm.name=魅惑 @@ -1907,6 +1907,9 @@ actors.mobs.npcs.ratking.not_sleeping=我可不是在睡觉! actors.mobs.npcs.ratking.what_is_it=你这是想干什么?我可没时间管这些破事。我的王国可不会自己运转下去! actors.mobs.npcs.ratking.confused=这……我这是在哪?我的王国需要我! actors.mobs.npcs.ratking.crown_clothes=把衣服穿上!会见皇室的礼仪都不懂吗! + +actors.mobs.npcs.ratking.what=把这件衣服取下!皇室血脉的我发现这件衣服上面有未知的魔力,它与我的力量所排斥!你无法通过这件%1$s让我与你交换。 + actors.mobs.npcs.ratking.crown_desc=哇,那个皇冠是要给本王的吗!?它看上去比我的皇冠更闪更亮,那我就好心好意地接受了!\n\n当然,我堂堂鼠王也不会白拿的。作为交换,本王能赐你一项配得上「英雄」之称的强大能力!怎么样?要不要? actors.mobs.npcs.ratking.crown_yes=当然了! actors.mobs.npcs.ratking.crown_info=我愿闻其详。 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 9e99bc614..7980601c9 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -6,9 +6,15 @@ items.quest.red.name=白玫瑰 items.quest.red.desc=在这危险而阴森的地牢中,这朵白玫瑰仿佛刺破了周遭的黑暗,向你展示着名为“人文”的力量。 items.quest.red.ac_interlevel_tp=返回 +items.potions.potionofpurity$potionofpurityling.name=毒气中和药剂 +items.potions.potionofpurity$potionofpurityling.desc=从骸骨中翻出的药剂,你突然明白过来,曾经有一批更早的冒险家来过这里。然而很不幸,他们没能幸存下来。\n\n这瓶毒气中和药剂是其他冒险家提取丛林的植物精华制作而成,它可以中和丛林最深处的危险毒气。\n\n希望你能继承其他冒险家的精神与意志,将丛林的毒瘤斩草除根! + items.quest.devitem.crystalling.name=水晶项链 items.quest.devitem.crystalling.desc=这个紫色项链下挂着一块蓝紫色的琉璃,当光线透过水晶,水晶的中间仿佛也亮堂了起来。\n\n根据历史记载,翼绫使用圣洁之心创造了世界,将其一半力量分给了三使者后,又让他们将另一半铸造为水晶之心。\n\n圣洁之心并没有常规意义上的实体,尽管没有人真正见过水晶之心,但人们还是按照传说中的模样复制出了这个项链。\n\n他们在翼绫的生日这天制造这种水晶项链,以此寻求着创世神的祝福。至少他们也在用自己的方式寻求着自己的未来。\n\n你知道这块水晶并不能给你带来什么,但是,当你握住这块水晶时,你仍然感觉心里踏实了许多。 +items.quest.devitem.crystalling.active=\n\n此为MLPD制作团队主要开发者-Ling生日物品\n\n有效加成时间:f8.22-8.25(阴历) +items.quest.devitem.crystalling.end=\n\n开发者Ling的生日活动已经结束,该物品的所有额外加成全部失效。 +items.quest.devitem.crystalling.last=\n\n今天是水晶项链的有效期最后一天,切勿错失使用良机。 items.quest.redwhiterose.name="一种载体" items.quest.redwhiterose.desc=他们从未离开,这两束玫瑰配不上他们。\n\n情感无需载体,意志无需证明。\n\n而你也不曾放弃。 @@ -71,7 +77,7 @@ items.quest.mime$gold_four.name=幽蓝碑文纪念章 items.quest.mime$gold_four.desc=不属于这个时间线的产物,自身散发出诡异的能量。幽蓝的碑文似乎记录了一些事情,但已无从查证。应该可以在商人那里兑换一定的金币。 items.quest.mime$gold_five.name=“创始神”之心 -items.quest.mime$gold_five.desc=为了纪念创世神,人们雕刻了这个了工艺品。如今早已没有人再去制作这个工艺品,也无人再记得她,这可能是现存的唯一真品了。你能感受到上面还残留了创世神的力量,卖给商人可以得到一个好价钱,但如果将它携带在背包中说不定能得到创世神的祝福。\n\n_携带该物品时,玩家治疗效果翻倍,且首次受到致命伤没十字架时无敌数回合,并进入创世神之怒状态。_ +items.quest.mime$gold_five.desc=为了纪念创世神,人们雕刻了这个了工艺品。如今早已没有人再去制作这个工艺品,也无人再记得她,这可能是现存的唯一真品了。你能感受到上面还残留了创世神的力量,卖给商人可以得到一个好价钱,但如果将它携带在背包中说不定能得到创世神的祝福。\n\n_携带该物品时,玩家治疗效果翻倍,且血量低于1/4时无敌数回合,并进入创世神之怒状态。(该物品总是优先于十字架之前触发)_ items.weapon.melee.lifetreesword.name=“倒悬的生命树” items.weapon.melee.lifetreesword.desc=克里弗斯之果破碎时,四周的藤蔓缠结在暴露出的种子上,形成剑的形状。剑身触碰到生物时会汲取他们的生命力提供给种子,期待着它再一结出猩红的果实。\n\n这是一个比较精准的武器。\n\n特别说明:克里弗斯之果Boss专武,每击杀_75只怪物_可以使用特殊武器技能,并重置杀敌计数。\n\n杀敌点数: @@ -295,49 +301,49 @@ items.books.bookslist.indexbooks.ac_read=打开看看 items.books.bookslist.yellowsunbooks.name=《朝阳教团史-Dr.BloodMoon纪年326年卷二》 items.books.bookslist.yellowsunbooks.desc=此册编撰者以鲜血与性命示忠于原地表势力的领头者朝阳教团并承诺绝无欺骗 \n\n……但是在300年前的那件事发生后,朝阳教团因管理不利而渐渐衰落,从此便销声匿迹了,它原有的地位与名誉被深渊魔都和极地圣境两方势力所分食。\n\n两方的管理者携手封印了地牢的最深处的入口,并且对她进行了水晶力量抑制,于Dr.BloodMoon纪年17年她封印在了金城水晶实验室。\n\n……距封印之日已过去三百余年,随着她力量的增强,水晶已经开始极不稳定……\n\n……Dr.BloodMoon纪年326年四月中旬,一名朝阳教团的残支要求接见管理者……并且声称,朝阳教团可以帮助他们彻底杀死她…… items.books.bookslist.yellowsunbooks.author=--作者:Kiley-Alien -items.books.bookslist.yellowsunbooks.acread=阅读书籍 +items.books.bookslist.yellowsunbooks.ac_read=阅读书籍 items.books.bookslist.yellowsunbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.yellowsunbooks.anmazing=你解读书中的奥秘,你领悟到了敌法的力量! items.books.bookslist.icecitybooks.name=《寒冰圣域游记》 items.books.bookslist.icecitybooks.desc=这是坐拥于曾经的寒冰地带的一座大型城市,似乎已经驱走了严寒的危机,而我现在就站在这里。\n现在由"一位神秘人"进行着管理。\n\n这里的人们都生活的悠哉游哉,似乎工作都是以享受的姿态去迎接的。在冬季的十二月月末下雪的日子,居民们还会举办大型的盛典来庆祝。\n\n似乎所有人都忘记了三百年前的那件事了…… items.books.bookslist.icecitybooks.author=--作者:LunRes -items.books.bookslist.icecitybooks.acread=阅读书籍 +items.books.bookslist.icecitybooks.ac_read=阅读书籍 items.books.bookslist.icecitybooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.icecitybooks.anmazing=你解读书中的奥秘,你领悟到了烈焰的力量! items.books.bookslist.deepbloodbooks.name=《深渊魔都纪事录》 items.books.bookslist.deepbloodbooks.desc=本传仅作参考,可能包含大量个人想法。\n\n……魔都来了一位少女,她成功地将魔都再次复兴。……三天后,地牢调查团发来一则关于地牢深处强烈魔力流的报告。\n\n地牢第???层:\n魔力强度:DEAD\n采取措施:无\n危险评估:DEADNOBACK\n……以上评估报告仅供参考。 items.books.bookslist.deepbloodbooks.author=--作者:Dr.血月博士 -items.books.bookslist.deepbloodbooks.acread=阅读书籍 +items.books.bookslist.deepbloodbooks.ac_read=阅读书籍 items.books.bookslist.deepbloodbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.deepbloodbooks.anmazing=你解读书中的奥秘,你领悟到了索敌的力量! items.books.bookslist.grasskingbooks.name=《绿林圣境守则》 items.books.bookslist.grasskingbooks.desc=1.无论是天灾还是人祸,请不要感到害怕。我们有着足够的实力保护你们。\n\n2.请居民不要靠近森色之庭,那里是地表势力最高层的会议室\n\n……5.请带领刚出生的婴儿到源色之泉处进行洗礼,以获取魔力。\n\n……7.外来旅者或是移民请自觉忽略一切你所认为的高傲、自大、冷酷、无情、自私、不平等,在这里发生的一切都是正常的,不要试图去做出改变,学会融入我们。\n\n8.其他条例请等待第十三次高层会议的补充。 items.books.bookslist.grasskingbooks.author=--作者:牡丹洛华 -items.books.bookslist.grasskingbooks.acread=阅读书籍 +items.books.bookslist.grasskingbooks.ac_read=阅读书籍 items.books.bookslist.grasskingbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.grasskingbooks.anmazing=你解读书中的奥秘,你领悟到了无畏的力量! items.books.bookslist.brokenbooks.name=《奇怪的档案袋》 items.books.bookslist.brokenbooks.desc=上面沾染了水渍与污垢,鲜红的“火灾案”几个大字以及标注着调查人员的表格也似乎是有点褪色了。\n\n幸存者:“火焰肆虐过这个地牢,吞噬了一切能被吞噬的东西……包括人类。这只有可能是魔法,是魔法引起的!”\n\n……我们的调查结果表面确实如此,焦黑的地板,卷轴残页,以及熔化的玻璃药瓶,基本排除了过失起火的可能。\n\n……α队员搜查到一枚熔融的金属袖章,里面似乎残存过火焰魔法。 items.books.bookslist.brokenbooks.author=--作者:不详 -items.books.bookslist.brokenbooks.acread=阅读书籍 +items.books.bookslist.brokenbooks.ac_read=阅读书籍 items.books.bookslist.brokenbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.brokenbooks.anmazing=你解读书中的奥秘,你领悟到了英雄的力量! items.books.bookslist.magicgirlbooks.name=《镶着金边的魔女手记》 items.books.bookslist.magicgirlbooks.desc=(前面的几页似乎是被撕掉了)……这是大火后的第三天,我像往常一样推开了窗户。\n\n瘴气似的魔力涌入房间,没办法……我无法对抗它……\n\n在我被这股魔力吞噬殆尽之前,在它占据我的身体之前,我得准备好一些能与之抗衡的东西……\n\n仇恨,密谋,计划,灾厄正在降临。(最后这几个字的笔迹似乎变成了另一个人的) items.books.bookslist.magicgirlbooks.author=--作者:凛 -items.books.bookslist.magicgirlbooks.acread=阅读书籍 +items.books.bookslist.magicgirlbooks.ac_read=阅读书籍 items.books.bookslist.magicgirlbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.magicgirlbooks.anmazing=你解读书中的奥秘,你领悟到了天佑的力量! items.books.bookslist.nokingmobbooks.name=《异变调查》 items.books.bookslist.nokingmobbooks.desc=地表最近总是能感到一股力量正在从地下涌动,我奉命前往地下进行调查。\n\n没想到,这一次前来,我发现了一个一些惊奇的事情。\n\n老鼠能说话,新的未知生物更多,还有一些高智能怪物。似乎一切,就和那场大火毫无关系。\n\n谁在幕后策划着一切?异变的真凶究竟是谁?\n\n我将继续调查,直到找到答案。 items.books.bookslist.nokingmobbooks.author=--作者:Demain-Pixel -items.books.bookslist.nokingmobbooks.acread=阅读书籍 +items.books.bookslist.nokingmobbooks.ac_read=阅读书籍 items.books.bookslist.nokingmobbooks.blees=你阅读了书籍,一股力量油然而生! items.books.bookslist.nokingmobbooks.anmazing=你解读书中的奥秘,你领悟到了鬼磷的力量! diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 17aff451f..a0c0c1b26 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -170,8 +170,8 @@ badges$badge.ghostdage.desc=_在悲伤幽灵处获得一次+3品质武器或护 badges$badge.dageto.title=白幽神谕 badges$badge.dageto.desc=在悲伤幽灵处获得一次_+4_品质武器或护甲\n\n[你已成功镀层[ -badges$badge.hideen_badage.title=隐秘探索 -badges$badge.hideen_badage.desc=发现隐藏徽章界面\n\n_长按徽章按钮_ +badges$badge.hideen_badagex.title=隐秘探索 +badges$badge.hideen_badagex.desc=发现隐藏徽章界面\n\n_长按徽章按钮_ badges$badge.endied.title=终焉之旅 badges$badge.endied.desc=_(获得彩蛋武器终焉)_,目前版本暂时无法获得 diff --git a/core/src/main/assets/messages/scenes/scenes.properties b/core/src/main/assets/messages/scenes/scenes.properties index b6bfc59c2..b6bd9ce43 100644 --- a/core/src/main/assets/messages/scenes/scenes.properties +++ b/core/src/main/assets/messages/scenes/scenes.properties @@ -234,6 +234,8 @@ scenes.titlescene.enter=进入地牢 scenes.titlescene.go=走向地牢之外 +scenes.titlescene.dark=夜幕之下 危机四伏 + scenes.titlescene.rankings=排行榜 scenes.titlescene.badges=徽章 scenes.titlescene.news=游戏动态情报 diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index c8e3f7592..346f08469 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -287,6 +287,9 @@ windows.wndkeybindings.quickslot_3=快捷栏3 windows.wndkeybindings.quickslot_4=快捷栏4 windows.wndkeybindings.quickslot_5=快捷栏5 windows.wndkeybindings.quickslot_6=快捷栏6 +windows.wndkeybindings.quickslot_7=快捷栏7 +windows.wndkeybindings.quickslot_8=快捷栏8 +windows.wndkeybindings.quickslot_9=快捷栏9 windows.wndkeybindings.bag_1=容器1 windows.wndkeybindings.bag_2=容器2 windows.wndkeybindings.bag_3=容器3 @@ -396,7 +399,7 @@ windows.wndsettings$uitab.flip_indicators=翻转指示器 windows.wndsettings$uitab.quickslot_swapper=使用V1快捷栏 windows.wndsettings$uitab.swapper_desc=仅手机端布局可在V1,V2快捷栏进行切换,\n而PC端布局只能使用V2快捷栏。{\n_注意:仅V2快捷栏支持三类布局,使用V1会无效。_ windows.wndsettings$uitab.system_font=系统字体 -windows.wndsettings$uitab.key_bindings=键位设置 +windows.wndsettings$uitab.key_bindings=PC版键位设置 windows.wndsettings$datatab.title=网络相关设置 windows.wndsettings$datatab.news=自动检查新闻 windows.wndsettings$datatab.updates=自动检查更新 diff --git a/core/src/main/assets/music/night.ogg b/core/src/main/assets/music/night.ogg new file mode 100644 index 000000000..548b7c7ef Binary files /dev/null and b/core/src/main/assets/music/night.ogg differ diff --git a/core/src/main/assets/sprites/items/items.png b/core/src/main/assets/sprites/items/items.png index 7859515c2..a61ebe336 100644 Binary files a/core/src/main/assets/sprites/items/items.png and b/core/src/main/assets/sprites/items/items.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index dd35cbb82..66ae3afc4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -30,6 +30,8 @@ public class Assets { public static final String BGM_0 = "music/Level0.ogg"; public static final String SNOWCYON = "music/SnowCyon.ogg"; + public static final String NIGHT = "music/night.ogg"; + public static final String SKBJY = "music/Boss-Saka.ogg"; public static final String TOWN = "music/town.ogg"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index f4d86b780..4bedd1433 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -123,7 +123,7 @@ public class Badges { READ_BOOK_TWO ( 56 ), - HIDEEN_BADAGE ( 57 ), + HIDEEN_BADAGEX( 57 ), //gold PIRANHAS ( 64 ), @@ -1023,6 +1023,17 @@ public class Badges { displayBadge( Badge.HAPPY_END ); } + public static void silentValidateHDEX() { + if (!local.contains( Badge.HIDEEN_BADAGEX)){ + local.add( Badge.HIDEEN_BADAGEX); + } + } + + public static void HDEX() { + displayBadge( Badge.HIDEEN_BADAGEX); + } + + public static void KILLSAPPLE() { displayBadge( Badge.KILL_APPLE); } @@ -1056,11 +1067,6 @@ public class Badges { displayBadge( Badge.KILL_SM ); } - public static void HDEX() { - displayBadge( Badge.HIDEEN_BADAGE ); - } - - public static void GOODRLPT() { displayBadge( Badge.RLPT ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 9d2753851..325638fb3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -95,7 +95,7 @@ public class Dungeon { public static int nyzbuy; public static int boss; - public static boolean nightMode; + public static boolean whiteDaymode; public static boolean interfloorTeleportAllowed(){ if (Dungeon.level.locked || (Dungeon.hero != null && Dungeon.hero.belongings.getItem(Amulet.class) != null)){ @@ -361,6 +361,11 @@ public class Dungeon { TitleScene.Reusable = false; + + TitleScene.NightDay = false; + + + mobsToChampion = -1; mobsToStateLing = -1; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java index 7d9979a00..2a1701195 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDAction.java @@ -55,8 +55,6 @@ public class SPDAction extends GameAction { public static final GameAction SE = new SPDAction("se"); public static final GameAction WAIT = new SPDAction("wait"); - public static final GameAction SLPD = new SPDAction("slpd"); - public static final GameAction INVENTORY = new SPDAction("inventory"); public static final GameAction QUICKSLOT_1 = new SPDAction("quickslot_1"); public static final GameAction QUICKSLOT_2 = new SPDAction("quickslot_2"); @@ -64,6 +62,9 @@ public class SPDAction extends GameAction { public static final GameAction QUICKSLOT_4 = new SPDAction("quickslot_4"); public static final GameAction QUICKSLOT_5 = new SPDAction("quickslot_5"); public static final GameAction QUICKSLOT_6 = new SPDAction("quickslot_6"); + public static final GameAction QUICKSLOT_7 = new SPDAction("quickslot_7"); + public static final GameAction QUICKSLOT_8 = new SPDAction("quickslot_8"); + public static final GameAction QUICKSLOT_9 = new SPDAction("quickslot_9"); public static final GameAction BAG_1 = new SPDAction("bag_1"); public static final GameAction BAG_2 = new SPDAction("bag_2"); @@ -103,7 +104,7 @@ public class SPDAction extends GameAction { defaultBindings.put( Input.Keys.D, SPDAction.E ); defaultBindings.put( Input.Keys.SPACE, SPDAction.WAIT ); - defaultBindings.put( Input.Keys.K, SPDAction.SLPD ); +// defaultBindings.put( Input.Keys.K, SPDAction.SLPD ); defaultBindings.put( Input.Keys.UP, SPDAction.N ); defaultBindings.put( Input.Keys.LEFT, SPDAction.W ); @@ -135,6 +136,9 @@ public class SPDAction extends GameAction { defaultBindings.put( Input.Keys.BUTTON_A, SPDAction.QUICKSLOT_4 ); defaultBindings.put( Input.Keys.NUM_5, SPDAction.QUICKSLOT_5 ); defaultBindings.put( Input.Keys.NUM_6, SPDAction.QUICKSLOT_6 ); + defaultBindings.put( Input.Keys.NUM_7, SPDAction.QUICKSLOT_7 ); + defaultBindings.put( Input.Keys.NUM_8, SPDAction.QUICKSLOT_8 ); + defaultBindings.put( Input.Keys.NUM_9, SPDAction.QUICKSLOT_9 ); defaultBindings.put( Input.Keys.F1, SPDAction.BAG_1 ); defaultBindings.put( Input.Keys.F2, SPDAction.BAG_2 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java index a6f8c833c..bf44e57ac 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java @@ -41,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.levels.CavesLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; @@ -87,6 +88,29 @@ public class OldDM300 extends FlameB01 { return Random.NormalIntRange(0, 10); } public static boolean seenBefore = false; + + + @Override + public void add(Buff buff) { + super.add(buff); + LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ + if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { + AlarmTrap alarmTrap = new AlarmTrap(); + alarmTrap.pos = pos; + alarmTrap.activate(); + CavesLevel level = (CavesLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); + ScrollOfTeleportation.appear(hero, pos+8); + } + } + + if (state == PASSIVE && buff.type == Buff.buffType.NEGATIVE){ + state = HUNTING; + } + } + @Override public boolean act() { LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); @@ -95,7 +119,9 @@ public class OldDM300 extends FlameB01 { AlarmTrap alarmTrap = new AlarmTrap(); alarmTrap.pos = pos; alarmTrap.activate(); - Dungeon.level.seal(); + CavesLevel level = (CavesLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); ScrollOfTeleportation.appear(hero, pos+8); } } @@ -170,7 +196,9 @@ public class OldDM300 extends FlameB01 { public void die( Object cause ) { super.die( cause ); playBGM(Assets.BGM_3, true); - Dungeon.level.unseal(); + CavesLevel level = (CavesLevel) Dungeon.level; + Buff.detach( hero, LockedFloor.class ); + level.updateChasmTerrain(); //60% chance of 2 shards, 30% chance of 3, 10% chance for 4. Average of 2.5 int shards = Random.chances(new float[]{0, 0, 6, 3, 1}); for (int i = 0; i < shards; i++){ @@ -201,16 +229,18 @@ public class OldDM300 extends FlameB01 { state = HUNTING; notice(); ScrollOfTeleportation.appear(hero, pos+8); - Dungeon.level.seal(); + CavesLevel level = (CavesLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); } if(HP<50){ for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){ if (mob instanceof DM201 ) { mob.die(true); + Buff.affect(this, Barrier.class).setShield(140); } } - Buff.affect(this, Barrier.class).setShield(140); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java index 490613afe..59b03f489 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java @@ -116,7 +116,7 @@ public class Swarm extends Mob { public int attackSkill( Char target ) { return 10; } - + private Swarm split() { Swarm clone = new Swarm(); clone.generation = generation + 1; @@ -130,9 +130,15 @@ public class Swarm extends Mob { for (Buff b : buffs(ChampionEnemy.class)){ Buff.affect( clone, b.getClass()); } + return clone; } + @Override + public void die( Object cause ) { + super.die(cause); + } + @Override public float lootChance() { lootChance = 1f/(6 * (generation+1) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java index 38ba6cda7..17e3c7be0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java @@ -489,7 +489,7 @@ public class YogDzewa extends Mob { Badges.GOODRLPT(); } - if(Dungeon.nightMode){ + if(!Dungeon.whiteDaymode){ PaswordBadges.NIGHT_CAT(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java index d4cf4965b..7cded07fd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java @@ -1,5 +1,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.STRONGER_BOSSES; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.bossWeapons; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.crivusfruitslevel2; @@ -11,7 +12,6 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; -import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; @@ -226,9 +226,17 @@ public class CrivusFruits extends Mob { //毒雾扩散 if(!crivusfruitslevel2){ - GameScene.add(Blob.seed(pos, HP<65 ? 50 : 30, DiedBlobs.class)); + if(Dungeon.isChallenged(STRONGER_BOSSES)){ + GameScene.add(Blob.seed(pos, HP<65 ? 90 : 70, DiedBlobs.class)); + } else { + GameScene.add(Blob.seed(pos, HP<65 ? 50 : 30, DiedBlobs.class)); + } } else { - GameScene.add(Blob.seed(pos, HP<36 ? 150 : 50, DiedBlobs.class)); + if(Dungeon.isChallenged(STRONGER_BOSSES)){ + GameScene.add(Blob.seed(pos, HP<36 ? 280 : 100, DiedBlobs.class)); + } else { + GameScene.add(Blob.seed(pos, HP<36 ? 150 : 50, DiedBlobs.class)); + } //doYogLasers(); } @@ -250,8 +258,8 @@ public class CrivusFruits extends Mob { CrivusFruitsLasher csp = new CrivusFruitsLasher(); csp.pos = i; GameScene.add(csp); - if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ - Buff.affect(csp, Barrier.class).setShield((int) (2.4f * csp.HT + 10)); + if(Dungeon.isChallenged(STRONGER_BOSSES)){ + Buff.affect(csp, Barrier.class).setShield((int) (2.4f * csp.HT + 80)); } } Sample.INSTANCE.play( Assets.Sounds.CHALLENGE ); @@ -280,7 +288,7 @@ public class CrivusFruits extends Mob { alignment = Alignment.ENEMY; GameScene.flash(0x80009c9c); HP=HT=35; - if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + if(Dungeon.isChallenged(STRONGER_BOSSES)){ Buff.affect(this, Barrier.class).setShield((int) (3f * this.HT + 10)); } GLog.n(Messages.get(this,"died!!!")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index 1978802d0..aeb40fc70 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -15,6 +15,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostBurning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HalomethaneBurning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.NewDM720; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; @@ -48,7 +49,8 @@ import com.watabou.utils.GameMath; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; -/**萨卡班甲鱼 Boss 难度:3.5级 */ +/**萨卡班甲鱼 Boss 难度:4级 + * 隐藏Boss 萨卡班甲鱼*/ public class SakaFishBoss extends Boss { private int leapPos = -1; private float leapCooldown = 0; @@ -60,7 +62,7 @@ public class SakaFishBoss extends Boss { public boolean beamCharged; - /**隐藏Boss 萨卡班甲鱼*/ + /***/ { spriteClass = SakaFishBossSprites.class; initBaseStatus(19, 25, 6, 0, 480, 5, 12); @@ -74,6 +76,7 @@ public class SakaFishBoss extends Boss { HT=480; immunities.add(FrostBurning.class); immunities.add(HalomethaneBurning.class); + immunities.add(Terror.class); properties.add(Property.ICY); properties.add(Property.ELECTRIC); properties.add(Property.FIERY); @@ -295,8 +298,6 @@ public class SakaFishBoss extends Boss { PaswordBadges.KILLSAKA(); yell( Messages.get(this, "defeated") ); - - } @Override @@ -323,8 +324,6 @@ public class SakaFishBoss extends Boss { private static final String BEAM_COOLDOWN = "beamCooldown"; private static final String BEAM_CHARGED = "beamCharged"; - //二阶段 - private static final String TO_ATTACK = "toattack"; @Override public void storeInBundle( Bundle bundle ) { @@ -383,7 +382,6 @@ public class SakaFishBoss extends Boss { { actPriority = HERO_PRIO+1; } - private static final float TIME_TO_ZAP = 1f; @Override protected boolean act() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java index 344bcedde..dba883945 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java @@ -67,12 +67,12 @@ public class Nyz extends NTNPC { sprite.turnTo( pos, Dungeon.hero.pos ); spend( TICK ); - shop6 = (Books) new YellowSunBooks().quantity(2); - shop5 = (Books) new BrokenBooks().quantity(2); - shop4 = (Books) new IceCityBooks().quantity(2); - shop3 = (Books) new NoKingMobBooks().quantity(2); - shop2 = (Books) new DeepBloodBooks().quantity(2); - shop1 = (Books) new MagicGirlBooks().quantity(2); + shop6 = (Books) new YellowSunBooks().quantity(1); + shop5 = (Books) new BrokenBooks().quantity(1); + shop4 = (Books) new IceCityBooks().quantity(1); + shop3 = (Books) new NoKingMobBooks().quantity(1); + shop2 = (Books) new DeepBloodBooks().quantity(1); + shop1 = (Books) new MagicGirlBooks().quantity(1); bomb1 = (Bomb) new Flashbang().quantity(1); bomb2 = (Bomb) new Noisemaker().quantity(1); bomb3 = (Bomb) new RegrowthBomb().quantity(1); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RatKing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RatKing.java index c5f7181dc..77d4c668e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RatKing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RatKing.java @@ -21,12 +21,15 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify; import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.RatKingSprite; @@ -107,18 +110,20 @@ public class RatKing extends NPC { public boolean interact(Char c) { sprite.turnTo( pos, c.pos ); - if (c != Dungeon.hero){ + if (c != hero){ return super.interact(c); } - KingsCrown crown = Dungeon.hero.belongings.getItem(KingsCrown.class); + KingsCrown crown = hero.belongings.getItem(KingsCrown.class); if (state == SLEEPING) { notice(); - yell( Messages.get(this, "not_sleeping") ); + yell(Messages.get(this, "not_sleeping")); state = WANDERING; } else if (crown != null){ - if (Dungeon.hero.belongings.armor() == null){ - yell( Messages.get(RatKing.class, "crown_clothes") ); + if (hero.belongings.armor() == null) { + yell(Messages.get(RatKing.class, "crown_clothes")); + } else if(hero.belongings.armor instanceof CustomArmor) { + yell(Messages.get(RatKing.class, "what",hero.belongings.armor.name())); } else { Badges.validateRatmogrify(); Game.runOnRenderThread(new Callback() { @@ -135,11 +140,11 @@ public class RatKing extends NPC { @Override protected void onSelect(int index) { if (index == 0){ - crown.upgradeArmor(Dungeon.hero, Dungeon.hero.belongings.armor(), new Ratmogrify()); + crown.upgradeArmor(hero, hero.belongings.armor(), new Ratmogrify()); ((RatKingSprite)sprite).resetAnims(); yell(Messages.get(RatKing.class, "crown_thankyou")); } else if (index == 1) { - GameScene.show(new WndInfoArmorAbility(Dungeon.hero.heroClass, new Ratmogrify())); + GameScene.show(new WndInfoArmorAbility(hero.heroClass, new Ratmogrify())); } else { yell(Messages.get(RatKing.class, "crown_fine")); } @@ -148,7 +153,7 @@ public class RatKing extends NPC { } }); } - } else if (Dungeon.hero.armorAbility instanceof Ratmogrify) { + } else if (hero.armorAbility instanceof Ratmogrify) { yell( Messages.get(RatKing.class, "crown_after") ); } else { yell( Messages.get(this, "what_is_it") ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java index 488267639..7d38705e1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java @@ -17,6 +17,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.GooNPC; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -97,17 +98,43 @@ public class GooMob extends Mob { } @Override - public boolean act() { + public void add(Buff buff) { + super.add(buff); LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + + if (state == PASSIVE && buff.type == Buff.buffType.NEGATIVE){ + state = HUNTING; + } + if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ - Dungeon.level.seal(); + SewerLevel level = (SewerLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); + seenBefore = false; + if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { + AlarmTrap alarmTrap = new AlarmTrap(); + alarmTrap.pos = pos; + alarmTrap.activate(); + ScrollOfTeleportation.appear(hero, pos+4); + tell(Messages.get(this, "notice")); + } + } + } + + @Override + public boolean act() { + LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + + if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ + SewerLevel level = (SewerLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); seenBefore = false; if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { AlarmTrap alarmTrap = new AlarmTrap(); alarmTrap.pos = pos; alarmTrap.activate(); ScrollOfTeleportation.appear(hero, pos+4); - sprite().showAlert(); tell(Messages.get(this, "notice")); } } @@ -241,7 +268,9 @@ public class GooMob extends Mob { state = HUNTING; notice(); ScrollOfTeleportation.appear(hero, pos+1); - Dungeon.level.seal(); + SewerLevel level = (SewerLevel) Dungeon.level; + level.seal(); + level.updateChasmTerrain(); } if ((HP*2 <= HT) && !bleeding){ @@ -265,7 +294,9 @@ public class GooMob extends Mob { @Override public void die( Object cause ) { super.die( cause ); - Dungeon.level.unseal(); + SewerLevel level = (SewerLevel) Dungeon.level; + level.unseal(); + level.updateChasmTerrain(); //60% chance of 2 blobs, 30% chance of 3, 10% chance for 4. Average of 2.5 int blobs = Random.chances(new float[]{0, 0, 6, 3, 1}); for (int i = 0; i < blobs; i++){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index 66f3e0ad4..70dc045a4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -8,6 +8,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameC01Sprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FlowerSlimeSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.GooSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceGolemSprite; @@ -131,6 +132,8 @@ public class DictSpriteSheet { return new Image(Assets.Sprites.SLIME, 14, 0, 14, 12); case F_RAT: return new Image(Assets.Sprites.RAT, 0, 30, 16, 15); + case FLOWER: + return new FlowerSlimeSprites(); case GNOLL_DARTER: return new Image(Assets.Sprites.GNOLL, 0, 15, 12, 15); case CAUSTIC_SLIME: @@ -294,6 +297,8 @@ public class DictSpriteSheet { public static final int SLIME = 206 + 10000; public static final int CAUSTIC_SLIME = 207 + 10000; public static final int F_RAT = 208 + 10000; + + public static final int FLOWER = 1608 + 10000; public static final int GNOLL_DARTER = 209 + 10000; public static final int GREAT_CRAB = 210 + 10000; public static final int OGPDNQHZ = 211 + 10000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java index b44f5cfc5..22c3818ee 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FetidRat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Fire_Scorpio; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FlameC01; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FlowerSlime; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Ghoul; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Gnoll; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollShiled; @@ -451,6 +452,7 @@ public class MobPlacer extends TestItem{ private enum DataPack{ RAT(Rat.class, DictSpriteSheet.RAT), + FLWW(FlowerSlime.class, DictSpriteSheet.FLOWER), //TESTRAT(TestRat.class, DictSpriteSheet.RAT), GNOLL(Gnoll.class, DictSpriteSheet.GNOLL), SNAKE(Snake.class, DictSpriteSheet.SNAKE), @@ -460,6 +462,9 @@ public class MobPlacer extends TestItem{ SLIME(Slime.class, DictSpriteSheet.SLIME), C_SLIME(CausticSlime.class, DictSpriteSheet.CAUSTIC_SLIME), F_RAT(FetidRat.class, DictSpriteSheet.F_RAT), + + + GNOLL_DARTER(GnollTrickster.class, DictSpriteSheet.GNOLL_DARTER), GREAT_CRAB(GreatCrab.class, DictSpriteSheet.GREAT_CRAB), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java index b2312be53..6705bb87e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java @@ -101,7 +101,7 @@ public class WraithAmulet extends Artifact { } else { GLog.i(Messages.get(this,"nochareup")); } - } else if(cursed) { + } else if(cursed && isEquipped(hero)) { GLog.i(Messages.get(this,"must_nocursed")); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java index 124d951cf..e801c44a2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java @@ -30,6 +30,8 @@ public class OilLantern extends Item { private static final String CHARGE = "charge"; private static final String FLASKS = "flasks"; + private static final String PLASKS = "plasks"; + private static final int MAX_CHARGE = 60; private static final int MIX_CHARGE = 20; private static final float TIME_TO_USE = 2.0f; @@ -72,6 +74,7 @@ public class OilLantern extends Item { bundle.put(ACTIVE, this.active); bundle.put(CHARGE, this.charge); bundle.put(FLASKS, this.flasks); + bundle.put(PLASKS, this.plingks); } public void restoreFromBundle(Bundle bundle) { @@ -79,6 +82,7 @@ public class OilLantern extends Item { this.active = bundle.getBoolean(ACTIVE); this.charge = bundle.getInt(CHARGE); this.flasks = bundle.getInt(FLASKS); + this.plingks = bundle.getInt(PLASKS); updateSprite(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfPurity.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfPurity.java index 96743d543..0a5de7641 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfPurity.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfPurity.java @@ -42,9 +42,25 @@ public class PotionOfPurity extends Potion { public static class PotionOfPurityLing extends PotionOfPurity { { icon = ItemSpriteSheet.Icons.POTION_PURITY; - image = ItemSpriteSheet.POTION_INDIGO; + image = ItemSpriteSheet.GREEN_LING; affectedBlobs = new ArrayList<>(new BlobImmunity().immunities()); } + + @Override + public int energyVal() { + return 0; + } + + @Override + public int value() { + return 0; + } + + public boolean isKnown() { + return true; + } + + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTeleportation.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTeleportation.java index 304ec7a3c..bd04cab09 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTeleportation.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTeleportation.java @@ -276,7 +276,7 @@ public class ScrollOfTeleportation extends Scroll { ch.sprite.interruptMotion(); - if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[ch.pos] || Dungeon.level.feeling != Level.Feeling.DIEDROOM){ + if (Dungeon.level.heroFOV[pos] && Dungeon.level.feeling != Level.Feeling.DIEDROOM || Dungeon.level.heroFOV[ch.pos] && Dungeon.level.feeling != Level.Feeling.DIEDROOM ){ Sample.INSTANCE.play(Assets.Sounds.TELEPORT); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfSirensSong.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfSirensSong.java index 16b4dc69f..b2c564710 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfSirensSong.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfSirensSong.java @@ -122,8 +122,8 @@ public class ScrollOfSirensSong extends ExoticScroll { @Override public void fx(boolean on) { - if (on) target.sprite.add(CharSprite.State.PARALYSED); - else target.sprite.remove(CharSprite.State.PARALYSED); + if (on) target.sprite.add(CharSprite.State.HEARTS); + else target.sprite.remove(CharSprite.State.HEARTS); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java index 18af37bcb..ca460fb29 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java @@ -79,12 +79,10 @@ public class WandOfAnmy extends DamageWand { @Override public void fx(boolean on) { - if (on) { - target.sprite.add(CharSprite.State.HEARTS); - //Statistics.TryUsedAnmy = true; + if(!target.properties.contains(Char.Property.NOBIG)){ + if (on) {target.sprite.add(CharSprite.State.HEARTS); + } else target.sprite.remove(CharSprite.State.HEARTS); } - else - target.sprite.remove(CharSprite.State.HEARTS); } @Override @@ -111,8 +109,10 @@ public class WandOfAnmy extends DamageWand { @Override public void fx(boolean on) { - if (on) target.sprite.add(CharSprite.State.HEARTS); - else target.sprite.remove(CharSprite.State.HEARTS); + if(!target.properties.contains(Char.Property.NOBIG)){ + if (on) {target.sprite.add(CharSprite.State.HEARTS); + } else target.sprite.remove(CharSprite.State.HEARTS); + } } @Override @@ -121,7 +121,7 @@ public class WandOfAnmy extends DamageWand { } public int icon() { - return BuffIndicator.HEX; + return BuffIndicator.HEART; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CaveTwoBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CaveTwoBossLevel.java index e010c87ec..205d227e8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CaveTwoBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CaveTwoBossLevel.java @@ -32,7 +32,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.NewDM720; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OldDM300; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.PylonCS; import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; @@ -807,7 +806,7 @@ public class CaveTwoBossLevel extends Level { if (c instanceof PylonCS && c.alignment != Char.Alignment.NEUTRAL){ energySourceSprite = c.sprite; break; - } else if (c instanceof OldDM300){ + } else if (c instanceof NewDM720){ energySourceSprite = c.sprite; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index 9505a767c..4804f1771 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -67,6 +67,7 @@ public class CavesLevel extends RegularLevel { color2 = 0xb9d661; } + //红龙的试炼 @Override protected void createItems() { @@ -101,33 +102,23 @@ public class CavesLevel extends RegularLevel { return 2+Random.chances(new float[]{4, 1}); } - @Override - public void seal() { - super.seal(); - updateChasmTerrain(); - } - - @Override - public void unseal() { - super.unseal(); - updateChasmTerrain(); - } - public void updateChasmTerrain() { - for (int i = 0; i < map.length; i++) { - if (map[i] == Terrain.SIGN) { - // 将 EMPTY_DECO 地块改为新地形 - set(i, Terrain.LOCKED_EXIT); - GameScene.updateMap(i); // 更新地图显示 - Camera.main.shake(4f,7f); - } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { - // 将 CHASM 地块改为新地形 - set(i, Terrain.EMPTY); - GameScene.updateMap(i); // 更新地图显示 - GameScene.flash(Window.WATA_COLOR); + synchronized (map){ + for (int i = 0; i < map.length; i++) { + if (map[i] == Terrain.SIGN_SP) { + // 将 EMPTY_DECO 地块改为新地形 + set(i, Terrain.LOCKED_EXIT); + GameScene.updateMap(i); // 更新地图显示 + Camera.main.shake(4f,7f); + } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { + // 将 CHASM 地块改为新地形 + set(i, Terrain.EMPTY); + GameScene.updateMap(i); // 更新地图显示 + GameScene.flash(Window.WATA_COLOR); + } + GameScene.flash(Window.SKYBULE_COLOR); + playBGM(Assets.BGM_BOSSC, true); } - GameScene.flash(Window.SKYBULE_COLOR); - playBGM(Assets.BGM_BOSSC, true); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java index 814675a53..919d17038 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java @@ -1,9 +1,9 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; +import static com.shatteredpixel.shatteredpixeldungeon.Challenges.STRONGER_BOSSES; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level; import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -198,10 +198,14 @@ public class ForestBossLevel extends Level { GameScene.updateMap( HOME ); Dungeon.observe(); - if (!Dungeon.isChallenged(Challenges.STRONGER_BOSSES)) { - drop(new PotionOfPurity.PotionOfPurityLing().identify(), WIDTH * 11 + 15); - drop(new PotionOfPurity.PotionOfPurityLing().identify(), WIDTH * 15 + 16); - drop(new PotionOfPurity.PotionOfPurityLing().identify(), WIDTH * 11 + 17); + if (!Dungeon.isChallenged(STRONGER_BOSSES)) { + Heap s = drop(new PotionOfPurity.PotionOfPurityLing().identify(), WIDTH * 23 + 15); + s.type = Heap.Type.SKELETON; + s.sprite.view(s); + + Heap x = drop(new PotionOfPurity.PotionOfPurityLing().identify(), WIDTH * 15 + 17); + x.type = Heap.Type.SKELETON; + x.sprite.view(x); } } @@ -301,6 +305,42 @@ public class ForestBossLevel extends Level { }; + private static final int[] WorldHard = { + W,W,W,W,W,W,W,B,B,B,B,W,W,W,W,W,W,W,W,W,W,W,B,B,B,B,W,W,W,W,W,W, + W,M,M,M,M,M,M,C,C,C,C,L,L,W,T,M,I,M,T,W,L,L,C,C,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,C,L,L,L,W,T,M,M,M,T,W,L,L,L,C,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,H,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,M,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,H,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,M,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,H,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,T,M,M,M,T,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,W,W,X,W,W,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,L,L,L,L,W,M,B,H,B,M,W,L,L,L,L,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,C,L,L,L,A,M,C,H,C,M,A,L,L,L,C,C,C,M,M,M,M,M,W, + W,M,M,M,M,M,M,C,C,C,C,L,L,W,M,C,H,C,M,W,L,L,C,C,C,C,M,M,M,M,M,W, + W,B,B,B,B,B,B,W,W,W,W,B,W,B,M,C,H,C,M,B,W,B,W,W,W,B,B,B,B,B,B,W, + W,C,C,C,C,C,C,W,W,W,M,C,M,C,M,C,H,C,M,C,M,C,W,W,W,C,C,C,C,C,C,W, + W,L,L,L,W,W,W,B,M,M,M,C,M,H,M,C,H,C,M,H,M,C,M,M,B,W,W,L,L,L,L,W, + W,L,L,W,W,M,M,C,M,M,M,C,C,C,C,C,H,C,C,C,M,C,M,M,C,M,W,W,L,L,L,W, + W,W,W,W,B,M,M,W,M,M,M,H,C,C,H,H,H,H,H,C,M,H,M,M,W,M,M,B,W,W,W,W, + W,W,C,C,C,C,C,W,C,C,C,C,C,C,H,C,C,C,H,C,C,C,C,C,W,C,C,C,C,C,W,W, + W,H,H,H,W,W,W,W,W,W,W,H,H,H,H,C,D,C,H,H,H,W,W,W,W,W,W,W,H,H,H,W, + W,C,C,C,C,C,C,W,C,C,C,C,C,C,H,C,C,C,H,C,C,C,C,C,W,C,C,C,C,C,M,W, + W,M,M,M,M,M,M,W,M,M,M,H,M,C,H,H,H,H,H,C,M,H,M,M,W,M,M,M,M,M,M,W, + W,M,M,M,M,M,M,M,M,M,M,M,M,C,C,C,H,C,C,C,M,M,M,M,M,M,M,M,M,M,M,W, + W,M,M,H,M,M,M,M,M,M,M,M,M,H,M,C,H,C,M,H,M,M,M,M,M,M,M,M,M,M,M,W, + W,M,M,M,W,M,M,H,M,M,M,M,M,M,M,C,H,C,M,M,M,M,M,M,M,M,M,H,M,M,M,W, + W,M,M,M,M,M,W,M,M,M,M,W,W,W,W,W,S,W,W,W,W,W,M,H,W,M,M,M,M,M,M,W, + W,M,M,M,W,M,M,M,M,M,W,W,M,M,W,L,M,L,W,M,M,W,W,M,M,M,M,W,M,M,M,W, + W,M,M,M,H,M,M,M,W,W,W,M,M,M,W,L,M,L,W,M,M,M,W,W,M,M,M,M,M,M,M,W, + W,M,M,M,M,M,M,M,W,M,M,M,M,M,S,M,M,M,S,M,M,M,M,W,W,W,M,M,M,M,M,W, + W,M,M,M,M,M,M,M,W,M,M,M,M,M,W,L,M,L,W,M,M,M,M,M,W,M,M,H,M,M,M,W, + W,W,M,M,M,M,M,M,W,M,M,M,M,M,W,L,Q,L,W,M,M,M,M,M,W,M,M,M,M,M,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, + + }; + private static class Sink extends Emitter { private int pos; @@ -378,7 +418,13 @@ public class ForestBossLevel extends Level { //构建地图 protected boolean build() { setSize(WIDTH, HEIGHT); - map = WorldRoomShort.clone(); + + if(Dungeon.isChallenged(STRONGER_BOSSES)){ + map = WorldHard.clone(); + } else { + map = WorldRoomShort.clone(); + } + this.entrance = WIDTH + 16 ; this.exit = WIDTH*30 + 16; 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 7747e91bf..b4aa3ae7d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -24,6 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG; import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.CHASM; +import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.SIGN; +import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.SIGN_SP; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Challenges; @@ -799,8 +801,13 @@ public abstract class Level implements Bundlable { avoid[i] = (flags & Terrain.AVOID) != 0; water[i] = (flags & Terrain.LIQUID) != 0; pit[i] = (flags & Terrain.PIT) != 0; + } + + + + for (Blob b : blobs.values()){ b.onBuildFlagMaps(this); } @@ -1465,7 +1472,7 @@ public abstract class Level implements Bundlable { return Messages.get(Level.class, "locked_exit_name"); case Terrain.UNLOCKED_EXIT: return Messages.get(Level.class, "unlocked_exit_name"); - case Terrain.SIGN: + case SIGN:case SIGN_SP: return Messages.get(Level.class, "sign_name"); case Terrain.WELL: return Messages.get(Level.class, "well_name"); @@ -1510,7 +1517,7 @@ public abstract class Level implements Bundlable { return Messages.get(Level.class, "locked_exit_desc"); case Terrain.BARRICADE: return Messages.get(Level.class, "barricade_desc"); - case Terrain.SIGN: + case SIGN:case SIGN_SP: return Messages.get(Level.class, "sign_desc"); case Terrain.INACTIVE_TRAP: return Messages.get(Level.class, "inactive_trap_desc"); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 9e3965158..ea5013ca6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -28,6 +28,8 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.depth; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.Holiday.XMAS; +import com.nlf.calendar.Lunar; +import com.nlf.calendar.Solar; import com.shatteredpixel.shatteredpixeldungeon.Bones; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -144,6 +146,12 @@ public abstract class RegularLevel extends Level { final Calendar calendar = Calendar.getInstance(); + Solar date = Solar.fromDate(calendar.getTime()); + Lunar lunar = date.getLunar(); + + boolean isZQJ = lunar.getMonth() == 8 && (lunar.getDay() >= 15-10 && lunar.getDay() <= 15+12); + + //计算中国传统节日的代码已迁移到最上方的"Gregorian.LunarCheckDate();"方法。 switch(calendar.get(Calendar.MONTH)){ case Calendar.JANUARY: @@ -151,11 +159,11 @@ public abstract class RegularLevel extends Level { holiday = Holiday.XMAS; break; case Calendar.OCTOBER: - if (calendar.get(Calendar.WEEK_OF_MONTH) >= 2) + if (calendar.get(Calendar.WEEK_OF_MONTH) >= 2 && !isZQJ) holiday = Holiday.HWEEN; break; case Calendar.NOVEMBER: - if (calendar.get(Calendar.DAY_OF_MONTH) == 1) + if (calendar.get(Calendar.DAY_OF_MONTH) == 1 && !isZQJ) holiday = Holiday.HWEEN; break; case Calendar.DECEMBER: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index 9027ab019..451a516c6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.SIGN_SP; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -85,32 +86,24 @@ public class SewerLevel extends RegularLevel { .setTraps(nTraps(), trapClasses(), trapChances()); } - @Override - public void seal() { - super.seal(); - updateChasmTerrain(); - } - - @Override - public void unseal() { - super.unseal(); - updateChasmTerrain(); - } public void updateChasmTerrain() { - for (int i = 0; i < map.length; i++) { - if (map[i] == Terrain.SIGN) { - // 将 EMPTY_DECO 地块改为新地形 - set(i, Terrain.LOCKED_EXIT); - GameScene.updateMap(i); // 更新地图显示 - Camera.main.shake(3f,6f); - } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { - // 将 CHASM 地块改为新地形 - set(i, Terrain.EMPTY); - GameScene.updateMap(i); // 更新地图显示 + synchronized (map){ + for (int i = 0; i < map.length; i++) { + if (map[i] == SIGN_SP) { + // 将 EMPTY_DECO 地块改为新地形 + set(i, Terrain.LOCKED_EXIT); + GameScene.updateMap(i); // 更新地图显示 + Camera.main.shake(3f,6f); + } else if(hero.buff(LockedFloor.class) == null + && map[i] == Terrain.LOCKED_EXIT) { + // 将 CHASM 地块改为新地形 + set(i, Terrain.EMPTY); + GameScene.updateMap(i); // 更新地图显示 + } + playBGM(Assets.BGM_BOSSA, true); + GameScene.flash(Window.DeepPK_COLOR); } - playBGM(Assets.BGM_BOSSA, true); - GameScene.flash(Window.ANSDO_COLOR); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java index de5ba358b..f57b36283 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java @@ -60,6 +60,9 @@ public class Terrain { public static final int WATER = 29; public static final int LAVA = 30; + + public static final int SIGN_SP = 33; + public static final int PASSABLE = 0x01; public static final int LOS_BLOCKING = 0x02; @@ -101,7 +104,14 @@ public class Terrain { flags[EMPTY_DECO] = flags[EMPTY]; flags[LOCKED_EXIT] = SOLID; flags[UNLOCKED_EXIT]= PASSABLE; - flags[SIGN] = PASSABLE; + + //Currently these are unused except for visual tile overrides where we want terrain to be solid with no other properties + flags[SIGN] = SOLID; + + flags[SIGN_SP] = PASSABLE; + + + // to be solid with no other properties flags[WELL] = AVOID; flags[STATUE] = SOLID; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NxhyShopRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NxhyShopRoom.java index 00c3c96a8..e779d33e6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NxhyShopRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NxhyShopRoom.java @@ -165,8 +165,8 @@ public class NxhyShopRoom extends SpecialRoom { break; case 3: case 4: - itemsToSpawn2.add(new YellowSunBooks().quantity(3)); - itemsToSpawn2.add(new GrassKingBooks().quantity(3)); + itemsToSpawn2.add(new YellowSunBooks().quantity(1)); + itemsToSpawn2.add(new GrassKingBooks().quantity(1)); break; case 5: itemsToSpawn2.add(new MeatPie()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NyzBombAndBooksRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NyzBombAndBooksRoom.java index cfc706a85..bdc26f138 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NyzBombAndBooksRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/NyzBombAndBooksRoom.java @@ -126,7 +126,7 @@ public class NyzBombAndBooksRoom extends SpecialRoom { itemsToSpawn2.add (new Firebomb().quantity(1)); itemsToSpawn2.add (new FrostBomb().quantity(1)); itemsToSpawn2.add(new MerchantsBeacon()); - itemsToSpawn2.add(new GrassKingBooks().quantity(2)); + itemsToSpawn2.add(new GrassKingBooks().quantity(1)); itemsToSpawn2.add(new ScrollOfTransmutation()); //itemsToSpawn2.add(new DriedRose()); itemsToSpawn2.add(new ScrollOfMagicMapping()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java index 7d6f1fce9..5235e3ec9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java @@ -58,7 +58,7 @@ public class GooRoom extends SpecialRoom { public void paint( Level level ) { Painter.fill( level, this, Terrain.WALL ); - Painter.fill( level, this, 1, Terrain.SIGN ); + Painter.fill( level, this, 1, Terrain.SIGN_SP ); Painter.fill( level, this, 2, Terrain.EMPTY_SP ); @@ -104,6 +104,7 @@ public class GooRoom extends SpecialRoom { GooMob statue = new GooMob(); statue.pos = cx + cy * level.width(); + statue.state = statue.PASSIVE; level.mobs.add( statue ); Guard statue2 = new Guard(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java index ad482071f..44a00de40 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java @@ -40,7 +40,7 @@ public class OldDM300Room extends SpecialRoom { public void paint( Level level ) { Painter.fill( level, this, Terrain.WALL ); - Painter.fill( level, this, 1, Terrain.SIGN ); + Painter.fill( level, this, 1, Terrain.SIGN_SP ); Painter.fill( level, this, 2, Terrain.WATER ); Point c = center(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java index 1a759b352..9496280a2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java @@ -4,7 +4,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; -import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -26,13 +25,11 @@ public class PassWordBadgesScene extends PixelScene { @Override public void create() { - if(!Statistics.HiddenOK){ - Badges.HDEX(); - Statistics.HiddenOK = true; - } super.create(); + Badges.HDEX(); + fadeIn(); //Music.INSTANCE.play( Assets.Music.THEME, true ); uiCamera.visible = false; @@ -60,7 +57,7 @@ public class PassWordBadgesScene extends PixelScene { List badges = PaswordBadges.filtered( true ); - int blankBadges = 14; + int blankBadges = 13; blankBadges -= badges.size(); if (badges.contains(Badges.Badge.ALL_ITEMS_IDENTIFIED)) blankBadges -= 6; if (badges.contains(Badges.Badge.YASD)) blankBadges -= 5; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java index d4001f82e..95c55e287 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java @@ -40,28 +40,36 @@ import java.util.Date; public class TitleScene extends PixelScene { public static boolean Reusable = false; - + public static boolean NightDay = false; @Override public void create() { super.create(); Calendar calendar = Calendar.getInstance(); int currentHour = calendar.get(Calendar.HOUR_OF_DAY); - - Dungeon.nightMode = currentHour > 7 && currentHour < 22; + Badges.loadGlobal(); + Dungeon.whiteDaymode = currentHour > 7 && currentHour < 22; // if(SPDSettings.startPort(false)){ // SPDSettings.scale(3); // ShatteredPixelDungeon.seamlessResetScene(); // SPDSettings.startPort(true); // } - if(Random.Int(10) == 1 && !Reusable && Statistics.winGame) { + Badges.loadGlobal(); + boolean whiteDaymode = currentHour > 7 && currentHour < 22; + if(Random.Int(10) == 1 && !NightDay && !whiteDaymode){ + NightDay = true; + } + + if(Random.Int(10) == 1 && !Reusable && Statistics.winGame && !NightDay) { Reusable = true; Music.INSTANCE.play(Assets.Music.THEME_2, true); - } else if (!Reusable) { + } else if (!Reusable && !NightDay) { Music.INSTANCE.play(Assets.Music.THEME_1, true); + } else if(NightDay) { + Music.INSTANCE.play(Assets.NIGHT, true); } else { - Music.INSTANCE.play(Assets.Music.THEME_2, true); + Music.INSTANCE.play(Assets.Music.THEME_1, true); } @@ -196,7 +204,12 @@ public class TitleScene extends PixelScene { public void update() { super.update(); - if (TitleScene.Reusable){ + if(TitleScene.NightDay){ + textColor(ColorMath.interpolate( 0xFFFFFF, Window.CBLACK, + 0.1f + (float)Math.sin(Game.timeTotal*5)/2f)); + text(Messages.get(TitleScene.class, "dark")); + icon(BadgeBanner.image(Badges.Badge.STORM.image)); + } else if (TitleScene.Reusable){ textColor(ColorMath.interpolate( 0xFFFFFF, Window.CYELLOW, 0.5f + (float)Math.sin(Game.timeTotal*5)/2f)); text(Messages.get(TitleScene.class, "go")); @@ -235,7 +248,10 @@ public class TitleScene extends PixelScene { } @Override protected boolean onLongClick() { + Badges.silentValidateHDEX(); + ShatteredPixelDungeon.switchNoFade(PassWordBadgesScene.class); + return super.onLongClick(); } }; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index ddefd6e9a..a74ef1649 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -585,9 +585,14 @@ public class ItemSpriteSheet { public static final int SEED_BLINDWEED = SEEDS+11; public static final int SEED_SKYBLUEFIRE = SEEDS+12; public static final int SEED_AIKELAIER = SEEDS+13; + + + public static final int GREEN_LING = SEEDS+15; static{ for (int i = SEEDS; i < SEEDS+16; i++) assignItemRect(i, 10, 10); + + assignItemRect(GREEN_LING, 8, 15); } private static final int BREWS = xy(1, 25); //8 slots diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java index a113dcd48..93e4fd405 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java @@ -66,7 +66,7 @@ public class DungeonTerrainTilemap extends DungeonTilemap { pos + mapWidth < size ? map[pos + mapWidth] : -1, pos % mapWidth != 0 ? map[pos - 1] : -1 ); - } else if (tile == Terrain.SIGN) { + } else if (tile == Terrain.SIGN ||tile == Terrain.SIGN_SP) { return DungeonTileSheet.RAISED_SIGN; } else if (tile == Terrain.STATUE) { return DungeonTileSheet.RAISED_STATUE; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java index 734a89872..951f2a4d7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java @@ -82,7 +82,7 @@ public class DungeonTileSheet { Terrain.ENTRANCE, Terrain.EXIT, Terrain.EMBERS, Terrain.BARRICADE, Terrain.HIGH_GRASS, Terrain.FURROWED_GRASS, Terrain.SECRET_TRAP, Terrain.TRAP, Terrain.INACTIVE_TRAP, Terrain.EMPTY_DECO, - Terrain.SIGN, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY, + Terrain.SIGN,Terrain.SIGN_SP, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY, Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR, Terrain.CRYSTAL_DOOR )); @@ -188,6 +188,8 @@ public class DungeonTileSheet { public static final int FLAT_HIGH_GRASS_ALT = FLAT_OTHER+8; public static final int FLAT_FURROWED_ALT = FLAT_OTHER+9; + public static final int FLAT_FURROWED_TREE = FLAT_OTHER+11; + /********************************************************************** * Raised Tiles, Lower Layer @@ -279,6 +281,8 @@ public class DungeonTileSheet { public static final int RAISED_HIGH_GRASS_ALT = RAISED_OTHER+9; public static final int RAISED_FURROWED_ALT = RAISED_OTHER+10; + public static final int RAISED_TREE = RAISED_OTHER+14; + /********************************************************************** @@ -381,14 +385,18 @@ public class DungeonTileSheet { directFlatVisuals.put(Terrain.CRYSTAL_DOOR, FLAT_DOOR_CRYSTAL); directFlatVisuals.put(Terrain.WALL_DECO, FLAT_WALL_DECO); directFlatVisuals.put(Terrain.BOOKSHELF, FLAT_BOOKSHELF); + directFlatVisuals.put(Terrain.SIGN, FLAT_SIGN); + directFlatVisuals.put(Terrain.SIGN_SP, FLAT_SIGN); + + directFlatVisuals.put(Terrain.STATUE, FLAT_STATUE); directFlatVisuals.put(Terrain.STATUE_SP, FLAT_STATUE_SP); directFlatVisuals.put(Terrain.ALCHEMY, FLAT_ALCHEMY_POT); directFlatVisuals.put(Terrain.BARRICADE, FLAT_BARRICADE); directFlatVisuals.put(Terrain.HIGH_GRASS, FLAT_HIGH_GRASS); directFlatVisuals.put(Terrain.FURROWED_GRASS, FLAT_FURROWED_GRASS); - + //directFlatVisuals.put(Terrain.TREE, FLAT_FURROWED_TREE); directFlatVisuals.put(Terrain.SECRET_DOOR, directFlatVisuals.get(Terrain.WALL)); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java index 1aeaece79..1f6ed9f4c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java @@ -65,7 +65,7 @@ public class Archs extends Component { arcsBg.offsetTo( 0, offsB ); add( arcsBg ); - arcsFg = new SkinnedBlock( 1, 1, Dungeon.nightMode ? Assets.Interfaces.ARCS_FG : Assets.Interfaces.ARCS_FGN ){ + arcsFg = new SkinnedBlock( 1, 1, Dungeon.whiteDaymode ? Assets.Interfaces.ARCS_FG : Assets.Interfaces.ARCS_FGN ){ @Override protected NoosaScript script() { return NoosaScriptNoLighting.get(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java index 6bc82cd24..66a9f0b22 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java @@ -166,6 +166,16 @@ public class QuickSlotButton extends Button { return SPDAction.QUICKSLOT_3; case 3: return SPDAction.QUICKSLOT_4; + case 4: + return SPDAction.QUICKSLOT_5; + case 5: + return SPDAction.QUICKSLOT_6; + case 6: + return SPDAction.QUICKSLOT_7; + case 7: + return SPDAction.QUICKSLOT_8; + case 8: + return SPDAction.QUICKSLOT_9; default: return super.keyAction(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java index 046e70b71..cb07bcdfc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ToobarV.java @@ -417,11 +417,6 @@ public class ToobarV extends Component { super.onPointerDown(); } - @Override - public GameAction keyAction() { - return SPDAction.SLPD; - } - }; fill = new ColorBlock[9]; for (int i = 0; i < fill.length; i ++) { 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 705d0cd9b..314911644 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 @@ -145,7 +145,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); - changes = new ChangeInfo("v0.6.5.0-Alpha6.9-LAST", true, ""); + changes = new ChangeInfo("v0.6.5.0-Alpha6.9-6.93-LAST", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -169,7 +169,7 @@ public class vM0_6_7_X_Changes { ("现在MLPD支持农历计算系统,中秋节,端午节,以及作者的生日,均使用此系统计算。\n" + "Ling的生日:农历8.22\n\n有效时间范围:8.22-8.25\n\n" + "中秋节:农历8.15\n\n有效时间范围:中秋节前10天到中秋节后12天\n\n" + - "端午节:农历5.5\n\n有效时间范围:端午节前3天到端午节后7天"))); + "端午节:农历5.5\n\n有效时间范围:端午节前3天到端午节后7天\n\n注意:如果与西方节日冲突,优先将用中国传统节日!"))); changes.addButton(new ChangeButton(Icons.get(Icons.AUDIO), ("新主题BGM"), ("在玩家在新版本胜利一次后,有机会在主界面播放新BGM和下半段暗示。"))); @@ -187,22 +187,44 @@ public class vM0_6_7_X_Changes { "新隐藏徽章:不眠之夜"), ("解密片段:月黑风高,古神陨落。"))); - changes.addButton(new ChangeButton(BadgeBanner.image(Badges.Badge.HIDEEN_BADAGE.image), ("新徽章:隐秘探索"), + changes.addButton(new ChangeButton(BadgeBanner.image(Badges.Badge.HIDEEN_BADAGEX.image), ("新徽章:隐秘探索"), ("获得方式:发现隐藏徽章的位置"))); changes = new ChangeInfo("改动", false, null); changes.hardlight(Window.CYELLOW); changeInfos.add(changes); + Image xax = new SakaFishBossSprites(); + xax.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(xax, "萨卡班甲鱼", + "现在免疫恐惧!")); + + changes.addButton(new ChangeButton(new CrivusFruitsSprite(), ("克里弗斯之果"), + ("现在净化药剂有特定版,且绝命头目地形改变。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("开发者模式V0.4"), + ("开发者模式进行一些小型优化,追加新怪物:丛林繁花史莱姆"))); + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("挑战:变幻莫测V0.2"), ("修复了一堆问题:\n\n" + "1.可能导致钥匙丢失\n\n2.重复Boss警报\n\n3.看见人不传送\n\n4.改善了Goo和DM300原型机的属性与地形。"))); - changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动"), + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动-1"), ("1.优化了主题背景界面,并且植入夜间状态,在晚上22点到早上7点前是夜间状态。因此是夜间背景。反之则是白天背景。\n\n" + "2.圣境密林层改善了几个地块,部分敌人素材迭代\n\n" + "3.上个版本的一些FB-bug修复"))); + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动-2"), + ("1.修复了提灯环境下火把能量无法被保存的相关问题\n" + + "2.修复了变幻莫测挑战相关问题\n" + + "3.修复了DM300原型机无限护盾问题\n" + + "4.修复了徽章界面可能闪退的问题\n" + + "5.修复了沉沦效果动画丢失问题\n" + + "6.优化了部分地块贴图\n" + + "7.修复了DM300 DM720进入即过关的问题\n" + + "8.修复了隐藏徽章-不眠之夜,无法被获得的问题\n" + + "9.新增夜晚文本提醒"))); + changes = new ChangeInfo("v0.6.5.0-Alpha6-6.8-国庆", true, ""); changes.hardlight(Window.TITLE_COLOR); @@ -219,7 +241,8 @@ public class vM0_6_7_X_Changes { ("1.修复三井协定的三井重复生成问题\n" + "2.改善变幻莫测迷你Boss地形以及战利品\n" + "3.种子现在分为A类,B类,BossRush类\n" + - "4.部分界面UI迭代,变幻莫测挑战平衡"))); + "4.部分界面UI迭代,变幻莫测挑战平衡\n" + + "5.修复鼠王可以改造特定护甲,例如板鳖甲"))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java index 9cc76abf2..4db7db6a6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndSettings.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; import static com.watabou.utils.DeviceCompat.isAndroid; +import static com.watabou.utils.DeviceCompat.isDesktop; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Chrome; @@ -408,6 +409,7 @@ public class WndSettings extends WndTabbed { ColorBlock sep1; OptionSlider optUIMode; + RedButton btnKeyBindings; OptionSlider optUIScale; RedButton btnToolbarSettings; CheckBox chkFlipTags; @@ -640,6 +642,17 @@ public class WndSettings extends WndTabbed { }; chkFont.checked(SPDSettings.systemFont()); add(chkFont); + + btnKeyBindings = new RedButton(Messages.get(this, "key_bindings")){ + @Override + protected void onClick() { + super.onClick(); + ShatteredPixelDungeon.scene().addToFront(new WndKeyBindings()); + } + }; + + add(btnKeyBindings); + } @Override @@ -666,6 +679,8 @@ public class WndSettings extends WndTabbed { } } + + if (btnToolbarSettings != null) { btnToolbarSettings.setRect(0, height + GAP, width, BTN_HEIGHT); height = btnToolbarSettings.bottom(); @@ -679,6 +694,14 @@ public class WndSettings extends WndTabbed { chkFont.setRect(0, sep2.y + 1 + GAP, width, BTN_HEIGHT); height = chkFont.bottom(); + + if (!isDesktop()) { + btnKeyBindings.active = false; + btnKeyBindings.alpha(0.3f); + } + btnKeyBindings.setRect(0, height + GAP, width, BTN_HEIGHT); + height = btnKeyBindings.bottom(); + } }