upate 0.6.5.0-Alpha6-Patch3

1.修复了部分UI错误
2.优化了克里弗斯之果
3.开发者模式怪物放置器追加新怪物
4.PC端快捷键实装与优化
5.部分文案调整优化
6.萨卡班甲鱼现在免疫恐惧
This commit is contained in:
LingASDJ 2023-10-08 22:01:20 +08:00
parent 4974286085
commit 9b62ae4c30
52 changed files with 443 additions and 172 deletions

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -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=我愿闻其详。

View File

@ -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=你解读书中的奥秘,你领悟到了鬼磷的力量!

View File

@ -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=_(获得彩蛋武器终焉)_目前版本暂时无法获得

View File

@ -234,6 +234,8 @@ scenes.titlescene.enter=进入地牢
scenes.titlescene.go=走向地牢之外
scenes.titlescene.dark=夜幕之下 危机四伏
scenes.titlescene.rankings=排行榜
scenes.titlescene.badges=徽章
scenes.titlescene.news=游戏动态情报

View File

@ -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=自动检查更新

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -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";

View File

@ -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 );
}

View File

@ -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;

View File

@ -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 );

View File

@ -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,17 +229,19 @@ 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);
}
}
}
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);

View File

@ -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) );

View File

@ -489,7 +489,7 @@ public class YogDzewa extends Mob {
Badges.GOODRLPT();
}
if(Dungeon.nightMode){
if(!Dungeon.whiteDaymode){
PaswordBadges.NIGHT_CAT();
}

View File

@ -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){
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 {
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!!!"));

View File

@ -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() {

View File

@ -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);

View File

@ -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") );

View File

@ -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++){

View File

@ -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;

View File

@ -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),

View File

@ -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"));
}
}

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -67,6 +67,7 @@ public class CavesLevel extends RegularLevel {
color2 = 0xb9d661;
}
//红龙的试炼
@Override
protected void createItems() {
@ -101,21 +102,10 @@ 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() {
synchronized (map){
for (int i = 0; i < map.length; i++) {
if (map[i] == Terrain.SIGN) {
if (map[i] == Terrain.SIGN_SP) {
// EMPTY_DECO 地块改为新地形
set(i, Terrain.LOCKED_EXIT);
GameScene.updateMap(i); // 更新地图显示
@ -130,6 +120,7 @@ public class CavesLevel extends RegularLevel {
playBGM(Assets.BGM_BOSSC, true);
}
}
}
@Override
protected Painter painter() {

View File

@ -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);
if(Dungeon.isChallenged(STRONGER_BOSSES)){
map = WorldHard.clone();
} else {
map = WorldRoomShort.clone();
}
this.entrance = WIDTH + 16 ;
this.exit = WIDTH*30 + 16;

View File

@ -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");

View File

@ -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:

View File

@ -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() {
synchronized (map){
for (int i = 0; i < map.length; i++) {
if (map[i] == Terrain.SIGN) {
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) {
} 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.ANSDO_COLOR);
GameScene.flash(Window.DeepPK_COLOR);
}
}
}

View File

@ -61,6 +61,9 @@ public class Terrain {
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;
public static final int FLAMABLE = 0x04;
@ -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;

View File

@ -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());

View File

@ -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());

View File

@ -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();

View File

@ -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();

View File

@ -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<PaswordBadges.Badge> 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;

View File

@ -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();
}
};

View File

@ -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

View File

@ -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;

View File

@ -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));
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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 ++) {

View File

@ -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.修复鼠王可以改造特定护甲,例如板鳖甲")));

View File

@ -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();
}
}