update 0.6.5.0-Alpha6-Patch8 and Hollow

-由于代码修正众多,特定提交两次
-本次代码改动了以下方面:
1.迭代了部分素材
2.添加破碎的天狗BGM,并且优化天狗的策略
3.修复一些分数的扣除错误
4.灯火现已支持小数扣减
5.一些底层的修改变动
6.矮人国王额外召唤重甲豺狼和冰雪魔像
7.Yog二阶段额外召唤两个拳头
This commit is contained in:
LingASDJ 2023-10-26 10:42:48 +08:00
parent c812bbbf77
commit b17efc0b7d
79 changed files with 1160 additions and 153 deletions

View File

@ -18,8 +18,8 @@ allprojects {
appName = 'Magic Ling Pixel Dungeon' appName = 'Magic Ling Pixel Dungeon'
appPackageName = 'com.ansdomagiclingpixeldungeon.ling' appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
appVersionCode =916000 appVersionCode =917000
appVersionName = '0.6.5.0-Alpha6-Patch6' appVersionName = '0.6.5.0-Alpha6-Patch7'
appJavaCompatibility = JavaVersion.VERSION_1_8 appJavaCompatibility = JavaVersion.VERSION_1_8

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

View File

@ -1,11 +1,21 @@
#####MLPD-P3文本 #####MLPD-P3文本
actors.mobs.bosses.cerberus.name=刻耳柏洛斯
actors.mobs.bosses.cerberus.desc=刻耳柏洛斯,是一只来自异界的守门恶犬。它凝视着周围的一切,似乎充满了恶意和威胁。\n它身边的环境异常寂静毫无生机。刻耳柏洛斯以死亡和绝望为代表具有无比的威力堪称死亡的化身。
actors.mobs.hollow.apprenticewitch.name=见习魔女 actors.mobs.hollow.apprenticewitch.name=见习魔女
actors.mobs.hollow.apprenticewitch.desc=她曾是某魔法学院的学生,因为太过顽皮,没能通过魔法考试,所以无法成为一名合格的法师。\n\n有些人会吸取教训继续努力学习成为出色的法师但她却渐渐失去了对魔力的控制境况逐渐堕落。如今她只能作为一名见习魔女游荡在荒野之外以汲取过路人灵魂或给予她糖果为乐。如果没有给她糖果那么她会生气你的灵魂会被她汲取。 actors.mobs.hollow.apprenticewitch.desc=她曾是某魔法学院的学生,因为太过顽皮,没能通过魔法考试,所以无法成为一名合格的法师。\n\n有些人会吸取教训继续努力学习成为出色的法师但她却渐渐失去了对魔力的控制境况逐渐堕落。如今她只能作为一名见习魔女游荡在荒野之外以汲取过路人灵魂或给予她糖果为乐。如果没有给她糖果那么她会生气你的灵魂会被她汲取。
actors.mobs.hollow.frankenstein.name=未尽梦偶 actors.mobs.hollow.frankenstein.name=未尽梦偶
actors.mobs.hollow.frankenstein.desc=游荡在万圣大殿的未完成人偶,据说制作它们的主人因为它们失败的外型和缓慢的速度最终抛弃了它们。它们已经陷入了癫狂之中,会寻找一切活着的生命,并撕碎他们的灵魂。 actors.mobs.hollow.frankenstein.desc=游荡在万圣大殿的未完成人偶,据说制作它们的主人因为它们失败的外型和缓慢的速度最终抛弃了它们。它们已经陷入了癫狂之中,会寻找一切活着的生命,并撕碎他们的灵魂。
actors.mobs.hollow.hollowmimic.minames=南瓜灯
actors.mobs.hollow.hollowmimic.midescs=古堡中随处可见的南瓜灯,你能看见它正在对你微笑,这让你不免毛骨悚然。
actors.mobs.hollow.hollowmimic.name=墙怪
actors.mobs.hollow.hollowmimic.desc=墙怪也是拟态怪家族的一员,只不过,它们与它的宝箱怪近亲不同的地方在于它们并不喜欢用宝箱勾引冒险者上钩。\n\n它们更加喜欢让冒险家放松警惕时倚靠墙壁时吗从背后来上一大口使冒险者背后出现一个大的伤口从而失血过多昏迷而死。
actors.mobs.blackmimic.name=暗金宝箱怪 actors.mobs.blackmimic.name=暗金宝箱怪
actors.mobs.blackmimic.desc=宝箱怪是一种能随意改变外形的魔法生物。在地牢里它们几乎一直以宝箱形态出现,因为这样总能吸引不防备的冒险者。\n\n暗金宝箱怪是在极度魔力紊乱下才会出现的极度危险的怪物。它们潜伏在暗影中等待猎物的到来…… actors.mobs.blackmimic.desc=宝箱怪是一种能随意改变外形的魔法生物。在地牢里它们几乎一直以宝箱形态出现,因为这样总能吸引不防备的冒险者。\n\n暗金宝箱怪是在极度魔力紊乱下才会出现的极度危险的怪物。它们潜伏在暗影中等待猎物的到来……
@ -92,7 +102,7 @@ actors.mobs.bosses.sakafishboss.rankings_desc=成为了萨卡班甲鱼的食物
actors.mobs.bosses.dictfish.name=板足鲎 actors.mobs.bosses.dictfish.name=板足鲎
actors.mobs.bosses.dictfish.desc=底栖顶级捕食者,他的巨鳌和巨颚可以碾碎你的铠甲。\n\n与_房角石_是共生互助因此死后房角石会狂暴获得的特殊攻击带有冲击可以击退敌人造成大量伤害。 actors.mobs.bosses.dictfish.desc=底栖顶级捕食者,他的巨鳌和巨颚可以碾碎你的铠甲。\n\n与_房角石_是共生互助因此死后房角石会狂暴获得的特殊攻击带有冲击可以击退敌人造成大量伤害。且免疫火焰。
actors.mobs.bosses.dictfish.notice=板足鲎:大哥! actors.mobs.bosses.dictfish.notice=板足鲎:大哥!
actors.mobs.bosses.dictfish.death=大哥,接下来就交给你了! actors.mobs.bosses.dictfish.death=大哥,接下来就交给你了!
actors.mobs.bosses.dictfish.angry=板足鲎:大哥!该死的人类!我要你们付出代价! actors.mobs.bosses.dictfish.angry=板足鲎:大哥!该死的人类!我要你们付出代价!
@ -1884,6 +1894,7 @@ actors.mobs.npcs.blacksmith.completed=噢,你终于回来了… 算了,总
actors.mobs.npcs.blacksmith.get_lost=我忙着呢。滚开! actors.mobs.npcs.blacksmith.get_lost=我忙着呢。滚开!
actors.mobs.npcs.blacksmith.same_item=选择2个不一样的不是2次一样的 actors.mobs.npcs.blacksmith.same_item=选择2个不一样的不是2次一样的
actors.mobs.npcs.blacksmith.diff_type=选择2个相同类型的物品 actors.mobs.npcs.blacksmith.diff_type=选择2个相同类型的物品
actors.mobs.npcs.blacksmith.oil=这是什么垃圾?!我不能帮你合成这玩意!
actors.mobs.npcs.blacksmith.un_ided=我得知道我在拿什么干活,先鉴定! actors.mobs.npcs.blacksmith.un_ided=我得知道我在拿什么干活,先鉴定!
actors.mobs.npcs.blacksmith.cursed=我可不碰诅咒的东西! actors.mobs.npcs.blacksmith.cursed=我可不碰诅咒的东西!
actors.mobs.npcs.blacksmith.degraded=这简直就是个垃圾,质量太差了! actors.mobs.npcs.blacksmith.degraded=这简直就是个垃圾,质量太差了!
@ -2253,6 +2264,12 @@ actors.mobs.tengu.defeated=终于...我解脱了...
actors.mobs.tengu.rankings_desc=被天狗暗杀 actors.mobs.tengu.rankings_desc=被天狗暗杀
actors.mobs.tengu.desc=一位著名的神秘皇家刺客,其名源于她脸上面具的蚀刻。\n\n天狗的手腕和膝下都带着镣铐但她似乎很久以前就摆脱掉了锁链的束缚。\n\n她将利用陷阱、欺骗性的魔法、精准致命的攻击来消灭唯一能阻止她逃脱的人你。 actors.mobs.tengu.desc=一位著名的神秘皇家刺客,其名源于她脸上面具的蚀刻。\n\n天狗的手腕和膝下都带着镣铐但她似乎很久以前就摆脱掉了锁链的束缚。\n\n她将利用陷阱、欺骗性的魔法、精准致命的攻击来消灭唯一能阻止她逃脱的人你。
actors.mobs.tengu.cut_you=天狗突然出现在你面前!
actors.mobs.tengu.cut_you2=%s,我已经在此等候多时了!接招!
actors.mobs.tengu.rose=突然间,一张玫瑰结界在你面前展开.......
actors.mobs.tengu.ready=好,%s你的反应力不错那么让我来见识见识你的利爪
actors.mobs.tengu$bombability$bombblob.desc=这里翻滚着一片过热的烟尘。当心,要爆炸了! actors.mobs.tengu$bombability$bombblob.desc=这里翻滚着一片过热的烟尘。当心,要爆炸了!
actors.mobs.tengu$bombability$bombitem.name=烟尘炸弹 actors.mobs.tengu$bombability$bombitem.name=烟尘炸弹
actors.mobs.tengu$bombability$bombitem.cant_pickup=它固定在地面上,你无法搬动它! actors.mobs.tengu$bombability$bombitem.cant_pickup=它固定在地面上,你无法搬动它!
@ -2326,6 +2343,14 @@ actors.mobs.yogfist$darkfist.name=暗影之拳
actors.mobs.yogfist$darkfist.teleport=暗影之拳在一片使你光源熄灭的漆黑中传送到了别处! actors.mobs.yogfist$darkfist.teleport=暗影之拳在一片使你光源熄灭的漆黑中传送到了别处!
actors.mobs.yogfist$darkfist.desc=暗影之拳是由纯粹的暗能量形成的。它能在每回合射出强大的暗黑法术!这些法术除了造成大量伤害外,还会削弱你的光源。暗影之拳为了逃脱还能瞬间使全场陷入一片漆黑!\n\n暗影之拳在近战中并没有特殊能力。 actors.mobs.yogfist$darkfist.desc=暗影之拳是由纯粹的暗能量形成的。它能在每回合射出强大的暗黑法术!这些法术除了造成大量伤害外,还会削弱你的光源。暗影之拳为了逃脱还能瞬间使全场陷入一片漆黑!\n\n暗影之拳在近战中并没有特殊能力。
actors.mobs.yogfist$freezingfist.name=寒冰之拳
actors.mobs.yogfist$freezingfist.desc=寒冰之拳催生于地牢的冰寒之气它能够施展魔法能量每隔3回合释放出冻伤的力量。\n\n_寒冰之拳常与鬼磷之拳一同行动。当鬼磷之拳存在时寒冰之拳将不会受到任何与火有关的伤害。_
actors.mobs.yogfist$halofist.name=鬼磷之拳
actors.mobs.yogfist$halofist.desc=鬼磷之拳的诞生源自无数冒险者的尸体聚集,古神巧妙地利用这股怨气创造了这个怪物。\n\n鬼磷之拳足迹所及之处将留下熠熠发光的磷火同时水分也会被蒸发殆尽。\n\n此外若鬼磷之拳的生命力渐趋微弱且战斗持续时间过长它还会定期借助亡灵的诅咒释放一道道激光来对你进行攻击。这些激光充满邪恶之力将给你带来巨大的威胁。\n\n_鬼磷之拳通常与寒冰之拳一起行动。_
actors.mobs.yogfist.halofist=鬼磷之拳已被击败,寒冰之拳的免疫火焰效果已失效。
actors.char.kill=%s杀害了你… actors.char.kill=%s杀害了你…
actors.char.defeat=你击败了%s。 actors.char.defeat=你击败了%s。

View File

@ -157,10 +157,10 @@ levels.newcavesbosslevel.gate_desc=一面高大的金属城门挡住了通往矮
levels.newcavesbosslevel.gate_desc_broken=这扇大门一定是以某种形式与DM-300相连因为在DM-300损坏时它也随之爆炸。现在这扇门炸得只剩下零星的碎片。 levels.newcavesbosslevel.gate_desc_broken=这扇大门一定是以某种形式与DM-300相连因为在DM-300损坏时它也随之爆炸。现在这扇门炸得只剩下零星的碎片。
levels.newcavesbosslevel.water_desc=周围奔涌着强大的电流,这里的水可能不太安全... levels.newcavesbosslevel.water_desc=周围奔涌着强大的电流,这里的水可能不太安全...
levels.citybosslevel.throne_name=王座 levels.newcitybosslevel.throne_name=王座
levels.citybosslevel.throne_desc=这座醒目的高大王座曾是矮人国王的席位,但现在它已属于一位沉湎于力量的死灵法师。\n\n说不清是不是有什么魔法或是机械装置与王座相连矮人国王在上面坐着时会拥有额外的能力。 levels.newcitybosslevel.throne_desc=这座醒目的高大王座曾是矮人国王的席位,但现在它已属于一位沉湎于力量的死灵法师。\n\n说不清是不是有什么魔法或是机械装置与王座相连矮人国王在上面坐着时会拥有额外的能力。
levels.citybosslevel.summoning_name=唤灵基座 levels.newcitybosslevel.summoning_name=唤灵基座
levels.citybosslevel.summoning_desc=唤灵基座的中央有一个巨大的开口,时不时涌出一些黑暗能量。\n\n矮人国王利用这些基座来聚焦死灵魔法为其召唤奴仆。召唤物的生成需要一段时间的能量聚集召唤物的类型取决于聚积于此的魔力。 levels.newcitybosslevel.summoning_desc=唤灵基座的中央有一个巨大的开口,时不时涌出一些黑暗能量。\n\n矮人国王利用这些基座来聚焦死灵魔法为其召唤奴仆。召唤物的生成需要一段时间的能量聚集召唤物的类型取决于聚积于此的魔力。
levels.caveslevel.grass_name=荧光地苔 levels.caveslevel.grass_name=荧光地苔
levels.caveslevel.high_grass_name=荧光菌菇 levels.caveslevel.high_grass_name=荧光菌菇

View File

@ -368,7 +368,7 @@ challenges.no_armorx = 这片大地吃布甲之外的护甲从不挑食,侦查
kill=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成] kill=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
windows.wndchallenges.boss_title=绝命头目-测试版 windows.wndchallenges.boss_title=绝命头目-测试版
windows.wndchallenges.boss_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n开启后你将遭遇更加强大的 Boss,\n以及额外的积分和永久货币奖励(WIP)和更好的战利品!!!\n还等什么立刻开始你的行动吧\n\n注意BossRush直接默认绝命头目开启且部分BR独占头目无此加成。\n\n}第一区域-圣境密林层}\n\n_A.克里弗斯之果(加强效果预览)_\n_-_ 第二阶段:\n_-_ 触手可以远程攻击,但场上出现额外柱子以方便躲避。\n_-_ 不再额外提供净化药水。\n_-_ 第三阶段:\n_-_ 触手和本体在战斗过程中拥有额外护盾加成\n_-_ 在{困难模式{中则会获得额外技能-_丛林质问_\n\n_B.奥克拉赫之花(加强效果预览-WIP)_\n即将到来\n\n[第二区域-冰雪监狱层[\n\n_A.天狗(加强效果预览)_\n_-_ 生命 +25%\n_-_ 第一阶段:\n_-_ 陷阱更加致命\n_-_ 第二阶段:\n_-_ 技能频率更高\n\n_B.拟态之王(加强效果预览-WIP)_\n即将到来\n\n_C.暗黑天狗(加强效果预览-WIP)_\n即将到来\n\n]第三区域-冰雪熔洞层]\n\n_A.DM-300(加强效果预览)_\n_-_ 全局阶段:\n_-_ 生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落随机一枚+2戒指。\n\n_B.DM-720(加强效果预览-WIP)_\n_-_ 全局阶段:\n_-_ 生命 +50%\n_-_ 驾驶员出现时立刻改变地形,并且需要拆除四个能量塔才能攻击血月长老。\n\n_C.冰雪魔女-冬铃(加强效果预览-WIP)_\n即将到来\n\n|第四区域-废都遗址层|\n\n_A.矮人国王(加强效果预览)_\n_-_ 全局阶段\n_-_ 生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n\n_B.矮人将军(加强效果预览-WIP)_\n_-_ 全局阶段:\n_-_ 生命+80%\n_-_ 第二阶段:整场战斗内召唤的随从都更强大。\n_-_ 第三阶段:大激光伤害x2。\n\n[第五区域-恶魔郊区[\n_A.Yog-Dzewa(加强效果预览)_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从\n_B.极度恐惧-水晶意志(加强效果预览-WIP)_\n即将到来\n\n*额外区域-EX头目*\n额外区域的Boss们我目前暂无加强想法或许未来会有。\n\n_总之这是一个WIP(未完成)_ windows.wndchallenges.boss_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n开启后你将遭遇更加强大的 Boss,\n以及额外的积分和永久货币奖励(WIP)和更好的战利品!!!\n还等什么立刻开始你的行动吧\n\n注意BossRush直接默认绝命头目开启且部分BR独占头目无此加成。\n\n}第一区域-圣境密林层}\n\n_A.克里弗斯之果(加强效果预览)_\n_-_ 第二阶段:\n_-_ 触手可以远程攻击,但场上出现额外柱子以方便躲避。\n_-_ 不再额外提供净化药水。\n_-_ 第三阶段:\n_-_ 触手和本体在战斗过程中拥有额外护盾加成\n_-_ 在{困难模式{中则会获得额外技能-_丛林质问_\n\n_B.奥克拉赫之花(加强效果预览-WIP)_\n即将到来\n\n[第二区域-冰雪监狱层[\n\n_A.天狗(加强效果预览)_\n_-_ 生命 +25%\n_-_ 第一阶段:\n_-_ 陷阱更加致命\n_-_ 第二阶段:\n_-_ 技能频率更高\n\n_B.拟态之王(加强效果预览-WIP)_\n即将到来\n\n_C.暗黑天狗(加强效果预览-WIP)_\n即将到来\n\n]第三区域-冰雪熔洞层]\n\n_A.DM-300(加强效果预览)_\n_-_ 全局阶段:\n_-_ 生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落随机一枚+2戒指。\n\n_B.DM-720(加强效果预览-WIP)_\n_-_ 全局阶段:\n_-_ 生命 +50%\n_-_ 驾驶员出现时立刻改变地形,并且需要拆除四个能量塔才能攻击血月长老。\n\n_C.冰雪魔女-冬铃(加强效果预览-WIP)_\n即将到来\n\n|第四区域-废都遗址层|\n\n_A.矮人国王(加强效果预览)_\n_-_ 全局阶段\n_-_ 生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:额外召唤霜冻魔像和重甲豺狼重甲豺狼只有原本的62.5%血量。\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n\n_B.矮人将军(加强效果预览-WIP)_\n_-_ 全局阶段:\n_-_ 生命+80%\n_-_ 第二阶段:整场战斗内召唤的随从都更强大。\n_-_ 第三阶段:大激光伤害x2。\n\n[第五区域-恶魔郊区[\n_A.Yog-Dzewa(加强效果预览)_\n_-_ 同时召唤两个古神之拳!\n_-_ 二阶段额外召唤寒冰与鬼磷拳头\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从\n_B.极度恐惧-水晶意志(加强效果预览-WIP)_\n即将到来\n\n*额外区域-EX头目*\n额外区域的Boss们我目前暂无加强想法或许未来会有。\n\n_总之这是一个WIP(未完成)_
windows.wndchallenges.ok=返回挑战页面 windows.wndchallenges.ok=返回挑战页面

View File

@ -12,6 +12,8 @@ scenes.gamescene.examine=调查这里
scenes.gamescene.interact=与之对话 scenes.gamescene.interact=与之对话
scenes.gamescene.pick_up=拾取此物 scenes.gamescene.pick_up=拾取此物
scenes.mobcatlogscene.title=生物档案库
#挑战模式 #挑战模式
@ -199,6 +201,7 @@ scenes.interlevelscene.file_not_found=未能找到存档文件。如果重启后
scenes.interlevelscene.io_error=未能找到存档文件。如果重启后问题依旧存在, 那这个存档可能已经损坏。节哀顺变。 scenes.interlevelscene.io_error=未能找到存档文件。如果重启后问题依旧存在, 那这个存档可能已经损坏。节哀顺变。
scenes.introscene.text=自宇宙诞生以来,我们的创世神便创造了圣灵之心并建立了我们最初的家园。\n时间不知道过了多久由于创世神需要离开家园于是便创造了三个管理者。\n并嘱咐他们一定要守护好这里。创世神始终放不下他们于是将圣灵之心力量的一半给予了三个管理者三个管理者叫了一名工匠帮忙制作。于是水晶之心就此诞生……\n然而好景不长。一名管理者突然下落不明就在同时另外两个管理者所管理的国度开始受到了未知的毁灭性的袭击。战火蔓延到了每一个角落但创世神早已离去……\n无奈之下其中一名的管理者出来发动了一个禁忌魔法一瞬间袭击停止了。但这名管理者也消耗了自己的四分之一的生命。并且由于袭击过于庞大战后的鬼魂与怨念仍然是头号危机。危急之下创世神突然归来并使用水晶之心将全部污秽净化并用水晶之心把所有的灵体镇压随后将它放在三国交界处的废弃地牢深处之中。\n但这一做创世神违背了天地平衡故此也没有人再记得她。\n所有关于她的记忆她的传说被一并消除。\n3个世纪后……\n当时的三大管理者如今已成为地表三巨头。\n关于那个地牢近期有传言称里面的环境越来越不稳定且还有垂涎于水晶之心的人前往。\n你也是其中的一员你会找到真相吗是时候开始你自己的冒险了 scenes.introscene.text=自宇宙诞生以来,我们的创世神便创造了圣灵之心并建立了我们最初的家园。\n时间不知道过了多久由于创世神需要离开家园于是便创造了三个管理者。\n并嘱咐他们一定要守护好这里。创世神始终放不下他们于是将圣灵之心力量的一半给予了三个管理者三个管理者叫了一名工匠帮忙制作。于是水晶之心就此诞生……\n然而好景不长。一名管理者突然下落不明就在同时另外两个管理者所管理的国度开始受到了未知的毁灭性的袭击。战火蔓延到了每一个角落但创世神早已离去……\n无奈之下其中一名的管理者出来发动了一个禁忌魔法一瞬间袭击停止了。但这名管理者也消耗了自己的四分之一的生命。并且由于袭击过于庞大战后的鬼魂与怨念仍然是头号危机。危急之下创世神突然归来并使用水晶之心将全部污秽净化并用水晶之心把所有的灵体镇压随后将它放在三国交界处的废弃地牢深处之中。\n但这一做创世神违背了天地平衡故此也没有人再记得她。\n所有关于她的记忆她的传说被一并消除。\n3个世纪后……\n当时的三大管理者如今已成为地表三巨头。\n关于那个地牢近期有传言称里面的环境越来越不稳定且还有垂涎于水晶之心的人前往。\n你也是其中的一员你会找到真相吗是时候开始你自己的冒险了
scenes.newsscene.title=游戏动态情报 scenes.newsscene.title=游戏动态情报
scenes.newsscene.read_more=查阅更多 scenes.newsscene.read_more=查阅更多
scenes.newsscene$newsinfo.english_warn=新闻仅能由开发者以中文撰写。 scenes.newsscene$newsinfo.english_warn=新闻仅能由开发者以中文撰写。
@ -239,6 +242,9 @@ scenes.titlescene.play=开始
scenes.titlescene.enter=进入地牢 scenes.titlescene.enter=进入地牢
scenes.titlescene.mobcat=生物档案资料库
scenes.titlescene.go=走向地牢之外 scenes.titlescene.go=走向地牢之外
scenes.titlescene.dark=夜幕之下 危机四伏 scenes.titlescene.dark=夜幕之下 危机四伏
@ -246,6 +252,10 @@ scenes.titlescene.dark=夜幕之下 危机四伏
scenes.titlescene.rankings=排行榜 scenes.titlescene.rankings=排行榜
scenes.titlescene.badges=徽章 scenes.titlescene.badges=徽章
scenes.titlescene.news=游戏动态情报 scenes.titlescene.news=游戏动态情报
scenes.titlescene.news2=新闻
scenes.titlescene.mobcat2=生物档案
scenes.titlescene.changes=改动 scenes.titlescene.changes=改动
scenes.titlescene.update=更新 scenes.titlescene.update=更新
scenes.titlescene.install=安装 scenes.titlescene.install=安装
@ -306,13 +316,13 @@ scenes.guidescene.title_9=0层加成
scenes.guidescene.page_9=当你完成了一些特殊挑战后0层的四个基座就会追加更多的补给品。\n\n-请小心,挑战非常困难,但一旦开着挑战胜利了是不是很有成就感了,对吧!\n\n-同时0层随着探索的深入还会出现更多NPC他们会在你的后续探索中让你获得更多受益。 scenes.guidescene.page_9=当你完成了一些特殊挑战后0层的四个基座就会追加更多的补给品。\n\n-请小心,挑战非常困难,但一旦开着挑战胜利了是不是很有成就感了,对吧!\n\n-同时0层随着探索的深入还会出现更多NPC他们会在你的后续探索中让你获得更多受益。
scenes.guidescene.title_10=寒冷系统 scenes.guidescene.title_10=寒冷系统
scenes.guidescene.page_10=从监狱开始,暴风雪将会开始在地牢飘絮。当然,命运也在照顾我们。\n\n在监狱会有篝火房间在篝火房间中能获得温度克制寒冷的侵蚀。 scenes.guidescene.page_10=从监狱开始,暴风雪将会开始在地牢飘絮。当然,命运也在照顾我们。\n\n在监狱会有篝火房间在篝火房间中能获得温度克制寒冷的侵蚀。
scenes.guidescene.title_11=娱乐模式 scenes.guidescene.title_11=DLC模式
scenes.guidescene.page_11=厌倦了常规模式,想游玩更多模式?\n\n娱乐模式欢迎你的到来点击英雄选择界面右边的_提灯_即可进入。 scenes.guidescene.page_11=厌倦了常规模式,想游玩更多模式?\n\nDLC模式欢迎你的到来点击英雄选择界面右边的_提灯_即可进入。
scenes.thanksscene.code=编码致谢:\n-REN(夜临2作者)\n-Alexstrasza(注解作者)\n-SmuJB(诅咒作者)\n-Tianscar(碳素作者)\n-TrashBoxbodylev(经验作者) scenes.thanksscene.code=编码&设计致谢:\n-REN(夜临2作者)\n-Alexstrasza(注解作者)\n-SmuJB(诅咒作者)\n-Tianscar(碳素作者)\n-TrashBoxbodylev(经验作者)\n-阿巴阿巴(MLPD设寄师)\n-AAC(音乐总策划)\n-罐装狐腻(文本优化)
scenes.thanksscene.test=\n\n测试致谢\n-CodenameE\n-熊猫头\n-迷茫\n-小狐狸\n-摘希\n-ZIOM-ObSir\n-坏猫猫\n-不是史神\n-月鸾\n-口水猫 scenes.thanksscene.test=\n\n测试致谢\nBzmdr(_首席测试员_)\n-CodenameE(_前席纳谏员_)\n-熊猫头(_首席攻略员_)\n-迷茫\n-小狐狸\n-摘希\n-ZIOM-ObSir\n-坏猫猫\n-不是史神\n-月鸾\n-口水猫
scenes.thanksscene.music=\n\n音乐致谢:\n-Prohonor\n-泰拉瑞亚 scenes.thanksscene.music=\n\n原创音乐致谢:\n-Prohonor\n-犬羅\n\n第三方音乐借用\n-泰拉瑞亚\n-泰坦之魂\n-Arknight\n\n(本PDMOD不用于任何商业用途)
scenes.thanksscene.art=\n\n美术致谢\n-被子\n-冷群怪\n-REN\n-Daniel Clan\n-奈亚子-\nTianScar\n-ObSir\n-Nxhy scenes.thanksscene.art=\n\n美术致谢\n-被子\n-冷群怪\n-REN\n-Daniel Clan\n-奈亚子-\nTianScar\n-ObSir\n-Nxhy
scenes.thanksscene.ad=\n\n宣传致谢\n-_那些回忆\n-罗贝里\n-泰勒\n-Ømicrónrg9_\n\n翻译致谢\n-English:\n_Noodlemire & JDSALing_\n\n-繁体中文:\n-_那些回忆 & 冷群_\n\n-日本语:\n-_FromBeyond_ scenes.thanksscene.ad=\n\n宣传致谢\n-_那些回忆\n-QinYue\n-罗贝里\n-泰勒\n-Ømicrónrg9_\n\n翻译致谢\n-English:\n_Noodlemire & JDSALing_\n\n-繁体中文:\n-_那些回忆 & 冷群_\n\n-日本语:\n-_FromBeyond_
scenes.thanksscene.join=加入魔绫总群 scenes.thanksscene.join=加入魔绫总群
scenes.thanksscene.link=https://jq.qq.com/?_wv=1027&k=wzMjU0f7 scenes.thanksscene.link=https://jq.qq.com/?_wv=1027&k=wzMjU0f7

View File

@ -564,4 +564,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x87=1修复中秋节活动时间
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x88=1.修复死亡楼层可以使用锁链传送出去的问题\n2.暗金宝石护符进行了一定的平衡\n3.修复精英策略中错误的DM300原型机生成\n4.修复裂缝遇到任何实体变成地块的问题\n5.削弱绿野精灵的数值\n6.克里弗斯之果改进,特别净化药水在战斗结束后自动删除 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x88=1.修复死亡楼层可以使用锁链传送出去的问题\n2.暗金宝石护符进行了一定的平衡\n3.修复精英策略中错误的DM300原型机生成\n4.修复裂缝遇到任何实体变成地块的问题\n5.削弱绿野精灵的数值\n6.克里弗斯之果改进,特别净化药水在战斗结束后自动删除
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x89=1.修复了棱光法杖光源冲突的问题在灯火状态下棱光法杖可以在视野低于直接给灯火能量充能5点该效果有200回合冷却。\n2.修复了号角可以被盗贼充能\n3.修复了上个版本由FireBase提到的诸多问题\n4.修复了浊焰魔女的一些问题
//ui.changelist.mlpd.vm0_5_x_changes.xxx// //ui.changelist.mlpd.vm0_5_x_changes.xxx//

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -37,6 +37,7 @@ public class Assets {
public static final String TOWN = "music/town.ogg"; public static final String TOWN = "music/town.ogg";
public static final String BGM_BOSSA = "music/Boss1.ogg"; public static final String BGM_BOSSA = "music/Boss1.ogg";
public static final String BGM_BOSSB = "music/Boss2.ogg"; public static final String BGM_BOSSB = "music/Boss2.ogg";
public static final String BGM_BOSSB2 = "music/Tengu.ogg";
public static final String BGM_BOSSC = "music/Boss3.ogg"; public static final String BGM_BOSSC = "music/Boss3.ogg";
public static final String BGM_BOSSC3 = "music/Ice.ogg"; public static final String BGM_BOSSC3 = "music/Ice.ogg";
public static final String BGM_BOSSD = "music/Boss4.ogg"; public static final String BGM_BOSSD = "music/Boss4.ogg";
@ -70,7 +71,7 @@ public class Assets {
public static final String TILES_PRISON = "environment/tiles_prison.png"; public static final String TILES_PRISON = "environment/tiles_prison.png";
public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png"; public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png";
public static final String TILES_FIRE = "environment/tiles_fire.png"; public static final String TILES_FIRE = "environment/tiles_fire.png";
public static final String TILES_TENGUS = "environment/tiles_tengu.png";
public static final String TILES_HOLLOW = "environment/tiles_halloween.png"; public static final String TILES_HOLLOW = "environment/tiles_halloween.png";
public static final String TILES_CAVES = "environment/tiles_caves.png"; public static final String TILES_CAVES = "environment/tiles_caves.png";
@ -125,6 +126,9 @@ public class Assets {
public static final String SakaBJY_Title = "interfaces/bosslogo/sakabjy-title.png"; public static final String SakaBJY_Title = "interfaces/bosslogo/sakabjy-title.png";
public static final String SakaBJY_Clear = "interfaces/bosslogo/sakabjy-clear.png"; public static final String SakaBJY_Clear = "interfaces/bosslogo/sakabjy-clear.png";
public static final String Tengu_Title = "interfaces/bosslogo/tengu-title.png";
public static final String Tengu_Clear = "interfaces/bosslogo/tengu-clear.png";
public static final String ARCS_BG = "interfaces/arcs1.png"; public static final String ARCS_BG = "interfaces/arcs1.png";
public static final String ARCS_FG = "interfaces/arcs2.png"; public static final String ARCS_FG = "interfaces/arcs2.png";
@ -331,9 +335,14 @@ public class Assets {
//HOLLOW //HOLLOW
public static final String APWHEEL = "sprites/hollow/apprentice_witch.png"; public static final String APWHEEL = "sprites/hollow/apprentice_witch.png";
public static final String CSBR = "sprites/hollow/Cerberus.png";
public static final String TYPHON = "sprites/hollow/typhon.png";
public static final String MPHON = "sprites/hollow/morpheus.png";
public static final String ZOMBIE = "sprites/hollow/frankenstein.png"; public static final String ZOMBIE = "sprites/hollow/frankenstein.png";
public static final String MIMICRY = "sprites/hollow/mimicry.png";
public static final String KEEPERKINGBOT = "sprites/npc/autoshop.png"; public static final String KEEPERKINGBOT = "sprites/npc/autoshop.png";
//BOSS //BOSS

View File

@ -150,8 +150,10 @@ public class BGMPlayer {
} else { } else {
if (Dungeon.bossLevel() && t == 5 || t == 4) { if (Dungeon.bossLevel() && t == 5 || t == 4) {
playBGM(Assets.BGM_BOSSA, true); playBGM(Assets.BGM_BOSSA, true);
} else if (Dungeon.bossLevel() && t == 10) { } else if (Dungeon.bossLevel() && t == 10 && Statistics.mimicking) {
playBGM(Assets.BGM_BOSSB, true); playBGM(Assets.BGM_BOSSB, true);
} else if (Dungeon.bossLevel() && t == 10) {
playBGM(Assets.BGM_BOSSB2, true);
} else if (t == 14) { } else if (t == 14) {
playBGM(Assets.BGM_BOSSC, true); playBGM(Assets.BGM_BOSSC, true);
} else if (Dungeon.bossLevel() && t == 15) { } else if (Dungeon.bossLevel() && t == 15) {

View File

@ -396,7 +396,7 @@ public class Badges {
badge = Badge.HIGH_SCORE_4; badge = Badge.HIGH_SCORE_4;
local.add( badge ); local.add( badge );
} }
if (score >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 4.5)) { if (score >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 1 : 5)) {
badge = Badge.HIGH_SCORE_5; badge = Badge.HIGH_SCORE_5;
local.add( badge ); local.add( badge );
} }

View File

@ -5,7 +5,6 @@ import com.watabou.utils.Bundlable;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class Conducts { public class Conducts {
public enum Conduct { public enum Conduct {
@ -33,8 +32,6 @@ public class Conducts {
conducts = new ArrayList<>(); conducts = new ArrayList<>();
} }
public ConductStorage(Conduct... conducts) {this.conducts = new ArrayList<>(Arrays.asList(conducts));}
public ConductStorage(ConductStorage storage) {this.conducts = new ArrayList<>(storage.conducts);} public ConductStorage(ConductStorage storage) {this.conducts = new ArrayList<>(storage.conducts);}
@Override @Override

View File

@ -140,7 +140,7 @@ public abstract class Char extends Actor {
public int HT; public int HT;
public int HP; public int HP;
protected float baseSpeed = 1; public float baseSpeed = 1;
protected PathFinder.Path path; protected PathFinder.Path path;
public int paralysed = 0; public int paralysed = 0;

View File

@ -9,7 +9,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrystalDiedTo
import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; import com.shatteredpixel.shatteredpixeldungeon.effects.Beam;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
@ -28,7 +27,7 @@ public class BeamTowerAdbility extends Buff {
if (ch.alignment != Char.Alignment.ENEMY) { if (ch.alignment != Char.Alignment.ENEMY) {
ch.damage(Random.IntRange(6, 10), CrystalDiedTower.class); ch.damage(Random.IntRange(6, 10), CrystalDiedTower.class);
Statistics.bossScores[3] -= 300; Statistics.bossScores[3] -= 300;
hero.sprite.showStatus(CharSprite.NEGATIVE, "300"); //hero.sprite.showStatus(CharSprite.NEGATIVE, "300");
Buff.affect(ch, Cripple.class, 2f); Buff.affect(ch, Cripple.class, 2f);
if (ch == hero && !ch.isAlive()) { if (ch == hero && !ch.isAlive()) {
Dungeon.fail(getClass()); Dungeon.fail(getClass());

View File

@ -66,7 +66,7 @@ public class Nyctophobia extends Buff implements Hero.Doom {
} }
spend(90f); spend(90f);
} else if(hero.lanterfire < 0){ } else if(hero.lanterfire < 0){
hero.damage( (Dungeon.depth/5)*(Math.abs(hero.lanterfire)/2)+10, this ); hero.damage( (int)((Dungeon.depth/5)*(Math.abs(hero.lanterfire)/2)+10), this );
spend(24f); spend(24f);
GLog.w( Messages.get(this, "desc6") ); GLog.w( Messages.get(this, "desc6") );
} }

View File

@ -277,7 +277,7 @@ public class Hero extends Char {
public int exp = 0; public int exp = 0;
//TODO 灯火前行 //TODO 灯火前行
public int lanterfire; public float lanterfire;
public int icehp; public int icehp;
@ -2675,7 +2675,7 @@ public class Hero extends Char {
hero.sprite.showStatus(0x808080, String.valueOf(value)); hero.sprite.showStatus(0x808080, String.valueOf(value));
} }
public void healLantern(int value){ public void healLantern(float value){
lanterfire = Math.min(lanterfire+value,100); lanterfire = Math.min(lanterfire+value,100);
hero.sprite.showStatus(0x00ff00, String.valueOf(value)); hero.sprite.showStatus(0x00ff00, String.valueOf(value));
} }

View File

@ -87,11 +87,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMappi
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRage; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRage;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMetamorphosis;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast; import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfPrismaticLight;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn;
@ -164,6 +166,7 @@ public enum HeroClass {
new LevelTeleporter().quantity(1).identify().collect(); new LevelTeleporter().quantity(1).identify().collect();
new LockSword().quantity(1).identify().collect(); new LockSword().quantity(1).identify().collect();
new MIME.GOLD_THREE().quantity(1).identify().collect(); new MIME.GOLD_THREE().quantity(1).identify().collect();
new ScrollOfMetamorphosis().quantity(111).identify().collect();
new DriedRose().quantity(1).identify().collect(); new DriedRose().quantity(1).identify().collect();
new PotionOfInvisibility().quantity(45).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect();
new AncityArmor().quantity(1).identify().collect(); new AncityArmor().quantity(1).identify().collect();
@ -195,6 +198,8 @@ public enum HeroClass {
new SkyBlueFireBloom.Seed().quantity(51).identify().collect(); new SkyBlueFireBloom.Seed().quantity(51).identify().collect();
new AikeLaier.Seed().quantity(51).identify().collect(); new AikeLaier.Seed().quantity(51).identify().collect();
new Fadeleaf.Seed().quantity(15).identify().collect(); new Fadeleaf.Seed().quantity(15).identify().collect();
new WandOfPrismaticLight().quantity(1).identify().collect();
new WandOfRegrowth().quantity(1).identify().collect(); new WandOfRegrowth().quantity(1).identify().collect();
new WandOfFrost().quantity(1).identify().collect(); new WandOfFrost().quantity(1).identify().collect();
new MagicalInfusion().quantity(1).identify().collect(); new MagicalInfusion().quantity(1).identify().collect();

View File

@ -154,6 +154,16 @@ public enum Talent {
public String toString() { return Messages.get(this, "name"); } public String toString() { return Messages.get(this, "name"); }
public String desc() { return Messages.get(this, "desc", dispTurns(visualcooldown())); } public String desc() { return Messages.get(this, "desc", dispTurns(visualcooldown())); }
}; };
public static class LanterCooldown extends FlavourBuff{
public int icon() { return BuffIndicator.NONE; }
public void tintIcon(Image icon) { icon.hardlight(0.15f, 0.2f, 0.5f); }
public float iconFadePercent() { return Math.max(0, visualcooldown() / 50); }
public String toString() { return Messages.get(this, "name"); }
public String desc() { return Messages.get(this, "desc", dispTurns(visualcooldown())); }
};
public static class LethalMomentumTracker extends FlavourBuff{}; public static class LethalMomentumTracker extends FlavourBuff{};
public static class StrikingWaveTracker extends FlavourBuff{}; public static class StrikingWaveTracker extends FlavourBuff{};
public static class WandPreservationCounter extends CounterBuff{{revivePersists = true;}}; public static class WandPreservationCounter extends CounterBuff{{revivePersists = true;}};

View File

@ -56,7 +56,7 @@ public class BlackMimic extends Mimic {
} }
@Override @Override
protected void generatePrize() { public void generatePrize() {
super.generatePrize(); super.generatePrize();
//all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0 //all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0
for (Item i : items){ for (Item i : items){

View File

@ -175,7 +175,7 @@ public class CrystalMimic extends Mimic {
} }
@Override @Override
protected void generatePrize() { public void generatePrize() {
//Crystal mimic already contains a prize item. Just guarantee it isn't cursed. //Crystal mimic already contains a prize item. Just guarantee it isn't cursed.
for (Item i : items){ for (Item i : items){
i.cursed = false; i.cursed = false;

View File

@ -159,7 +159,7 @@ public class DimandMimic extends Mimic {
} }
@Override @Override
protected void generatePrize() { public void generatePrize() {
super.generatePrize(); super.generatePrize();
//all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0 //all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0
for (Item i : items){ for (Item i : items){

View File

@ -40,8 +40,9 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing; import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.RainbowParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown; import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
@ -230,6 +231,8 @@ public class DwarfKing extends Mob {
} else { } else {
summonSubject(3, DKGolem.class); summonSubject(3, DKGolem.class);
summonSubject(3, DKGolem.class); summonSubject(3, DKGolem.class);
summonSubject(3, DKBrute.class);
summonSubject(3, DKBrute.class);
summonsMade += 2; summonsMade += 2;
spend(TICK); spend(TICK);
} }
@ -292,8 +295,10 @@ public class DwarfKing extends Mob {
//every 3rd summon is always a monk or warlock, otherwise ghoul //every 3rd summon is always a monk or warlock, otherwise ghoul
//except every 9th summon, which is a golem! //except every 9th summon, which is a golem!
if (summonsMade % 3 == 2) { if (summonsMade % 3 == 2) {
if (summonsMade % 9 == 8){ if (summonsMade % 9 == 8) {
return summonSubject(delay, DKGolem.class); return summonSubject(delay, DKGolem.class);
} else if (summonsMade % 10 == 8){
return summonSubject(delay, DKBrute.class);
} else { } else {
return summonSubject(delay, Random.Int(2) == 0 ? DKMonk.class : DKWarlock.class); return summonSubject(delay, Random.Int(2) == 0 ? DKMonk.class : DKWarlock.class);
} }
@ -324,7 +329,7 @@ public class DwarfKing extends Mob {
private HashSet<Mob> getSubjects(){ private HashSet<Mob> getSubjects(){
HashSet<Mob> subjects = new HashSet<>(); HashSet<Mob> subjects = new HashSet<>();
for (Mob m : Dungeon.level.mobs){ for (Mob m : Dungeon.level.mobs){
if (m.alignment == alignment && (m instanceof Ghoul || m instanceof Monk || m instanceof Warlock || m instanceof Golem)){ if (m.alignment == alignment && (m instanceof Ghoul || m instanceof Monk || m instanceof Warlock || m instanceof IceGolem||m instanceof BruteBot)){
subjects.add(m); subjects.add(m);
} }
} }
@ -572,12 +577,19 @@ public class DwarfKing extends Mob {
} }
} }
public static class DKGolem extends Golem { public static class DKGolem extends IceGolem {
{ {
state = HUNTING; state = HUNTING;
} }
} }
public static class DKBrute extends BruteBot {
{
HP = HT = 75;
state = HUNTING;
}
}
public static class Summoning extends Buff { public static class Summoning extends Buff {
private int delay; private int delay;
@ -595,9 +607,11 @@ public class DwarfKing extends Mob {
delay--; delay--;
if (delay <= 0){ if (delay <= 0){
if (summon == DKGolem.class){ if (summon == DKGolem.class){
particles.burst(SparkParticle.FACTORY, 10); particles.burst(SnowParticle.FACTORY, 10);
Sample.INSTANCE.play(Assets.Sounds.CHARGEUP);
} else if (summon == DKBrute.class){
particles.burst(RainbowParticle.BURST, 10);
Sample.INSTANCE.play(Assets.Sounds.CHARGEUP); Sample.INSTANCE.play(Assets.Sounds.CHARGEUP);
} else if (summon == DKWarlock.class){ } else if (summon == DKWarlock.class){
particles.burst(ShadowParticle.CURSE, 10); particles.burst(ShadowParticle.CURSE, 10);
@ -660,8 +674,10 @@ public class DwarfKing extends Mob {
if (on && particles == null) { if (on && particles == null) {
particles = CellEmitter.get(pos); particles = CellEmitter.get(pos);
if (summon == DKGolem.class){ if (summon == DKBrute.class) {
particles.pour(SparkParticle.STATIC, 0.05f); particles.pour(RainbowParticle.BURST, 0.55f);
} else if (summon == DKGolem.class){
particles.pour(SnowParticle.FACTORY, 0.05f);
} else if (summon == DKWarlock.class){ } else if (summon == DKWarlock.class){
particles.pour(ShadowParticle.UP, 0.1f); particles.pour(ShadowParticle.UP, 0.1f);
} else if (summon == DKMonk.class){ } else if (summon == DKMonk.class){

View File

@ -82,7 +82,7 @@ public class GoldenMimic extends Mimic {
} }
@Override @Override
protected void generatePrize() { public void generatePrize() {
super.generatePrize(); super.generatePrize();
//all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0 //all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0
for (Item i : items){ for (Item i : items){

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow.HollowMimic;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
@ -60,7 +61,7 @@ public class Mimic extends Mob {
properties.add(Property.MIMIC); properties.add(Property.MIMIC);
EXP = 0; EXP = 0;
//mimics are neutral when hidden //mimics are neutral when hidden
alignment = Alignment.NEUTRAL; alignment = Alignment.NEUTRAL;
state = PASSIVE; state = PASSIVE;
@ -104,7 +105,9 @@ public class Mimic extends Mob {
@Override @Override
public String name() { public String name() {
if (alignment == Alignment.NEUTRAL){ if (alignment == Alignment.NEUTRAL && properties.contains(Property.HOLLOW)){
return Messages.get(HollowMimic.class, "minames");
} else if(alignment == Alignment.NEUTRAL) {
return Messages.get(Heap.class, "chest"); return Messages.get(Heap.class, "chest");
} else { } else {
return super.name(); return super.name();
@ -113,7 +116,9 @@ public class Mimic extends Mob {
@Override @Override
public String description() { public String description() {
if (alignment == Alignment.NEUTRAL){ if (alignment == Alignment.NEUTRAL && properties.contains(Property.HOLLOW)) {
return Messages.get(HollowMimic.class, "midescs");
} else if (alignment == Alignment.NEUTRAL){
return Messages.get(Heap.class, "chest_desc") + "\n\n" + Messages.get(this, "hidden_hint"); return Messages.get(Heap.class, "chest_desc") + "\n\n" + Messages.get(this, "hidden_hint");
} else { } else {
return super.description(); return super.description();
@ -290,7 +295,7 @@ public class Mimic extends Mob {
return m; return m;
} }
protected void generatePrize(){ public void generatePrize(){
Item reward = null; Item reward = null;
do { do {
switch (Random.Int(5)) { switch (Random.Int(5)) {

View File

@ -21,10 +21,13 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.depth;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
@ -36,7 +39,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HalomethaneBurning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RoseShiled;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
@ -47,6 +53,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.HalomethaneFlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
@ -55,6 +62,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonBossLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonBossLevel;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
@ -204,6 +212,7 @@ public class Tengu extends Mob {
if (Dungeon.hero.subClass == HeroSubClass.NONE) { if (Dungeon.hero.subClass == HeroSubClass.NONE) {
Dungeon.level.drop( new TengusMask(), pos ).sprite.drop(); Dungeon.level.drop( new TengusMask(), pos ).sprite.drop();
} }
Dungeon.level.drop( new CrystalKey(depth), pos-1 ).sprite.drop();
Statistics.bossScores[1] += 2000; Statistics.bossScores[1] += 2000;
GameScene.bossSlain(); GameScene.bossSlain();
super.die( cause ); super.die( cause );
@ -217,9 +226,46 @@ public class Tengu extends Mob {
yell( Messages.get(this, "defeated") ); yell( Messages.get(this, "defeated") );
} }
//7回合的开场动画
private int timeLeft = 12;
float incTime = 0;
@Override @Override
protected boolean canAttack( Char enemy ) { protected boolean canAttack( Char enemy ) {
/**Tengu Ready Animation
天狗动画切换地块变得河里
*/
if (timeLeft >= 0 && incTime >= 0){
timeLeft -= 1;
incTime = 0;
if(timeLeft == 11){
//给予玩家玫瑰结界+冰冻保证有7回合无敌且无法行动的时间
Buff.affect(enemy, Frost.class, timeLeft);
Buff.affect(enemy, RoseShiled.class, timeLeft);
//给予天狗鬼磷燃烧buff使它攻击玩家的同时也会布置陷阱可以提前告知玩家天狗的一阶段行动策略
Buff.affect(this, HalomethaneBurning.class ).reignite( this, timeLeft*1000 );
GLog.n(Messages.get(Tengu.class, "cut_you"));
}
if(timeLeft == 9){
enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Tengu.class, "rose"));
}
if(timeLeft == 7){
this.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Tengu.class, "cut_you2",enemy.name()));
}
//到达0后天狗去除磷火buff并且血量回满
if(timeLeft == 0){
//TODO 所以还是用到了resetScene()
ShatteredPixelDungeon.resetScene();
HP = HT;
Buff.detach(this, HalomethaneBurning.class );
GLog.n(Messages.get(Tengu.class, "ready",enemy.name()));
}
}
return new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos; return new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos;
} }
@ -342,6 +388,10 @@ public class Tengu extends Mob {
private static final String ABILITIES_USED = "abilities_used"; private static final String ABILITIES_USED = "abilities_used";
private static final String ARENA_JUMPS = "arena_jumps"; private static final String ARENA_JUMPS = "arena_jumps";
private static final String ABILITY_COOLDOWN = "ability_cooldown"; private static final String ABILITY_COOLDOWN = "ability_cooldown";
private static final String ANMONTION_TIME = "an_time";
private static final String INCE_TIME = "ince_time";
@Override @Override
public void storeInBundle(Bundle bundle) { public void storeInBundle(Bundle bundle) {
@ -350,6 +400,10 @@ public class Tengu extends Mob {
bundle.put( ABILITIES_USED, abilitiesUsed ); bundle.put( ABILITIES_USED, abilitiesUsed );
bundle.put( ARENA_JUMPS, arenaJumps ); bundle.put( ARENA_JUMPS, arenaJumps );
bundle.put( ABILITY_COOLDOWN, abilityCooldown ); bundle.put( ABILITY_COOLDOWN, abilityCooldown );
bundle.put(ANMONTION_TIME,timeLeft);
bundle.put(INCE_TIME,incTime);
} }
@Override @Override
@ -361,6 +415,9 @@ public class Tengu extends Mob {
abilitiesUsed = bundle.getInt( ABILITIES_USED ); abilitiesUsed = bundle.getInt( ABILITIES_USED );
arenaJumps = bundle.getInt( ARENA_JUMPS ); arenaJumps = bundle.getInt( ARENA_JUMPS );
abilityCooldown = bundle.getInt( ABILITY_COOLDOWN ); abilityCooldown = bundle.getInt( ABILITY_COOLDOWN );
timeLeft =bundle.getInt( ANMONTION_TIME);
incTime =bundle.getInt( INCE_TIME);
BossHealthBar.assignBoss(this); BossHealthBar.assignBoss(this);
if (HP <= HT/2) BossHealthBar.bleed(true); if (HP <= HT/2) BossHealthBar.bleed(true);
@ -370,11 +427,14 @@ public class Tengu extends Mob {
private boolean yelledCoward = false; private boolean yelledCoward = false;
//tengu is always hunting //tengu is always hunting
private class Hunting extends Mob.Hunting{ private class Hunting extends Mob.Hunting{
@Override @Override
public boolean act(boolean enemyInFOV, boolean justAlerted) { public boolean act(boolean enemyInFOV, boolean justAlerted) {
enemySeen = enemyInFOV; enemySeen = enemyInFOV;
if (enemyInFOV && !isCharmedBy( enemy ) && canAttack( enemy )) { if (enemyInFOV && !isCharmedBy( enemy ) && canAttack( enemy )) {
@ -403,8 +463,9 @@ public class Tengu extends Mob {
} }
spend( TICK ); spend( TICK );
return true; return true;
} }
} }
} }
@ -605,7 +666,7 @@ public class Tengu extends Mob {
if (PathFinder.distance[cell] < Integer.MAX_VALUE) { if (PathFinder.distance[cell] < Integer.MAX_VALUE) {
Char ch = Actor.findChar(cell); Char ch = Actor.findChar(cell);
if (ch != null && !(ch instanceof Tengu)) { if (ch != null && !(ch instanceof Tengu)) {
int dmg = Random.NormalIntRange(5 + Dungeon.depth, 10 + Dungeon.depth * 2); int dmg = Random.NormalIntRange(5 + depth, 10 + depth * 2);
dmg -= ch.drRoll(); dmg -= ch.drRoll();
if (dmg > 0) { if (dmg > 0) {
@ -842,7 +903,12 @@ public class Tengu extends Mob {
Char ch = Actor.findChar( cell ); Char ch = Actor.findChar( cell );
if (ch != null && !ch.isImmune(Fire.class) && !(ch instanceof Tengu)) { if (ch != null && !ch.isImmune(Fire.class) && !(ch instanceof Tengu)) {
Buff.affect( ch, Burning.class ).reignite( ch ); if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
Buff.affect( ch, HalomethaneBurning.class ).reignite( ch );
} else {
Buff.affect( ch, Burning.class ).reignite( ch );
}
} }
if (Dungeon.level.flamable[cell]){ if (Dungeon.level.flamable[cell]){
@ -857,7 +923,12 @@ public class Tengu extends Mob {
} }
burned = true; burned = true;
CellEmitter.get(cell).start(FlameParticle.FACTORY, 0.03f, 10); if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
CellEmitter.get(cell).start(HalomethaneFlameParticle.FACTORY, 0.03f, 10);
} else {
CellEmitter.get(cell).start(FlameParticle.FACTORY, 0.03f, 10);
}
} }
} }
} }
@ -1027,7 +1098,7 @@ public class Tengu extends Mob {
Char ch = Actor.findChar(cell); Char ch = Actor.findChar(cell);
if (ch != null && !(ch instanceof Tengu)){ if (ch != null && !(ch instanceof Tengu)){
ch.damage(2 + Dungeon.depth, new Electricity()); ch.damage(2 + depth, new Electricity());
if (ch == Dungeon.hero){ if (ch == Dungeon.hero){

View File

@ -42,6 +42,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.YogSprite;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar; import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.noosa.audio.Music; import com.watabou.noosa.audio.Music;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -386,6 +387,16 @@ public class YogDzewa extends Mob {
if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
addFist((YogFist)Reflection.newInstance(challengeSummons.remove(0))); addFist((YogFist)Reflection.newInstance(challengeSummons.remove(0)));
if(phase == 3){
YogFist.FreezingFist freezingFist = new YogFist.FreezingFist();
freezingFist.pos = pos-3;
GameScene.add(freezingFist);
Camera.main.shake(1,3f);
GameScene.flash(0x808080,true);
YogFist.HaloFist haloFist = new YogFist.HaloFist();
haloFist.pos = pos+3;
GameScene.add(haloFist);
}
} }
CellEmitter.get(Dungeon.level.exit-1).burst(ShadowParticle.UP, 25); CellEmitter.get(Dungeon.level.exit-1).burst(ShadowParticle.UP, 25);
@ -435,6 +446,9 @@ public class YogDzewa extends Mob {
GameScene.add(fist, 4); GameScene.add(fist, 4);
Actor.addDelayed( new Pushing( fist, Dungeon.level.exit, fist.pos ), -1 ); Actor.addDelayed( new Pushing( fist, Dungeon.level.exit, fist.pos ), -1 );
Dungeon.level.occupyCell(fist); Dungeon.level.occupyCell(fist);
} }
public void updateVisibility( Level level ){ public void updateVisibility( Level level ){

View File

@ -26,19 +26,28 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.HalomethaneFire;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostBurning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HalomethaneBurning;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
import com.shatteredpixel.shatteredpixeldungeon.effects.Beam;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
@ -49,11 +58,17 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.FistSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FistSprite;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Game;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.PathFinder; import com.watabou.utils.PathFinder;
import com.watabou.utils.Random; import com.watabou.utils.Random;
import java.util.ArrayList;
import java.util.HashSet;
public abstract class YogFist extends Mob { public abstract class YogFist extends Mob {
{ {
@ -67,7 +82,11 @@ public abstract class YogFist extends Mob {
maxLvl = -2; maxLvl = -2;
state = HUNTING; state = HUNTING;
properties.add(Property.ICY);
properties.add(Property.FIERY);
immunities.add(FrostBurning.class);
immunities.add(HalomethaneBurning.class);
immunities.add(Terror.class);
properties.add(Property.BOSS); properties.add(Property.BOSS);
properties.add(Property.DEMONIC); properties.add(Property.DEMONIC);
} }
@ -380,7 +399,7 @@ public abstract class YogFist extends Mob {
b.announced = false; b.announced = false;
b.set(dmg*.6f); b.set(dmg*.6f);
b.attachTo(this); b.attachTo(this);
sprite.showStatus(CharSprite.WARNING, b.toString() + " " + (int)b.level()); sprite.showStatus(CharSprite.WARNING, b + " " + (int)b.level());
} else{ } else{
super.damage(dmg, src); super.damage(dmg, src);
} }
@ -583,4 +602,287 @@ public abstract class YogFist extends Mob {
} }
public static class FreezingFist extends YogFist {
{
spriteClass = FistSprite.Ice.class;
HP = HT = 550;
properties.add(Property.ICY);
properties.add(Property.FIERY);
immunities.add(FrostBurning.class);
immunities.add(HalomethaneBurning.class);
immunities.add(Terror.class);
canRangedInMelee = false;
}
@Override
public boolean act() {
GameScene.add(Blob.seed(pos, 20, Freezing.class));
return super.act();
}
@Override
protected void incrementRangedCooldown() {
//ranged attack has no cooldown
}
//used so resistances can differentiate between melee and magical attacks
public static class LightBeam{}
@Override
protected void zap() {
spend( 3f );
if (hit( this, enemy, true )) {
enemy.damage( Random.NormalIntRange(10, 20), new LightBeam() );
Buff.prolong( enemy, Chill.class, Chill.DURATION/2f );
if (!enemy.isAlive() && enemy == Dungeon.hero) {
Dungeon.fail( getClass() );
GLog.n( Messages.get(Char.class, "kill", name()) );
}
} else {
enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() );
}
}
@Override
public void damage(int dmg, Object src) {
super.damage(dmg, src);
LockedFloor buff = Dungeon.hero.buff(LockedFloor.class);
if (buff != null) {
buff.addTime(dmg * 0.5f);
}
}
}
public static class HaloFist extends YogFist {
{
HP = HT = 550;
spriteClass = FistSprite.HaloFist.class;
properties.add(Property.FIERY);
immunities.add(FrostBurning.class);
immunities.add(HalomethaneBurning.class);
immunities.add(Terror.class);
}
private int phase = 1;
private int summonsMade = 0;
private static final int MIN_ABILITY_CD = 7;
private int lastHeroPos;
private static final int MAX_ABILITY_CD = 12;
private float summonCooldown = 0;
private float abilityCooldown = 3;
private static float[] chanceMap = {0f, 100f, 100f, 100f, 100f, 100f, 100f};
private int wave=0;
private int lastAbility = 0;
private static final String PHASE = "phase";
private static final String SUMMONS_MADE = "summons_made";
private static final String SUMMON_CD = "summon_cd";
private static final String ABILITY_CD = "ability_cd";
private static final String LAST_ABILITY = "last_ability";
private static final String TARGETED_CELLS = "targeted_cells";
private ArrayList<Integer> targetedCells = new ArrayList<>();
@Override
public void storeInBundle(Bundle bundle) {
super.storeInBundle(bundle);
bundle.put( PHASE, phase );
bundle.put( SUMMONS_MADE, summonsMade );
bundle.put( SUMMON_CD, summonCooldown );
bundle.put( ABILITY_CD, abilityCooldown );
bundle.put( LAST_ABILITY, lastAbility );
bundle.put("wavePhase2", wave);
//暴力Boss
int[] bundleArr = new int[targetedCells.size()];
for (int i = 0; i < targetedCells.size(); i++){
bundleArr[i] = targetedCells.get(i);
}
bundle.put(TARGETED_CELLS, bundleArr);
}
@Override
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
phase = bundle.getInt( PHASE );
summonsMade = bundle.getInt( SUMMONS_MADE );
summonCooldown = bundle.getFloat( SUMMON_CD );
abilityCooldown = bundle.getFloat( ABILITY_CD );
lastAbility = bundle.getInt( LAST_ABILITY );
wave = bundle.getInt("wavePhase2");
if (phase == 2) properties.add(Property.IMMOVABLE);
//暴力Boss
int[] bundleArr = new int[targetedCells.size()];
for (int i = 0; i < targetedCells.size(); i++){
bundleArr[i] = targetedCells.get(i);
}
bundle.put(TARGETED_CELLS, bundleArr);
}
@Override
public void die( Object cause ) {
GLog.n(Messages.get(YogFist.class,"HaloFist"));
for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) {
if (boss instanceof FreezingFist) {
boss.properties.remove(Property.FIERY);
boss.remove(FrostBurning.class);
boss.remove(HalomethaneBurning.class);
}
}
super.die( cause );
}
public static class DarkBolt{}
public void doDiedLasers(){
boolean terrainAffected = false;
HashSet<Char> affected = new HashSet<>();
//delay fire on a rooted hero
if(enemy != null) {
if (!enemy.rooted) {
for (int i : targetedCells) {
Ballistica b = new Ballistica(i, lastHeroPos, Ballistica.WONT_STOP);
//shoot beams
sprite.parent.add(new Beam.DeathRay(DungeonTilemap.raisedTileCenterToWorld(i),
DungeonTilemap.raisedTileCenterToWorld(b.collisionPos)));
for (int p : b.path) {
Char ch = Actor.findChar(p);
if (ch != null && (ch.alignment != alignment || ch instanceof Bee)) {
affected.add(ch);
}
if (Dungeon.level.flamable[p]) {
Dungeon.level.destroy(p);
GameScene.updateMap(p);
terrainAffected = true;
}
}
}
if (terrainAffected) {
Dungeon.observe();
}
for (Char ch : affected) {
ch.damage(Random.NormalIntRange(28, 42),new DarkBolt());
if (Dungeon.level.heroFOV[pos]) {
ch.sprite.flash();
CellEmitter.center(pos).burst(Speck.factory(Speck.COIN), Random.IntRange(6,12));
}
if (!ch.isAlive() && ch == Dungeon.hero) {
Dungeon.fail(getClass());
GLog.n(Messages.get(Char.class, "kill", name()));
}
}
targetedCells.clear();
}
}
if(enemy != null) {
if (abilityCooldown <= 0 && HP < HT * 0.8f) {
lastHeroPos = enemy.pos;
int beams = (int) (4 + (HP * 1.0f / HT) * 2);
for (int i = 0; i < beams; i++) {
int randompos = Random.Int(Dungeon.level.width()) + Dungeon.level.width() * 2;
targetedCells.add(randompos);
}
for (int i : targetedCells) {
Ballistica b = new Ballistica(i, enemy.pos, Ballistica.WONT_STOP);
for (int p : b.path) {
Game.scene().addToFront(new TargetedCell(p, Window.GDX_COLOR));
}
}
spend(TICK * 1.5f);
Dungeon.hero.interrupt();
abilityCooldown += Random.NormalFloat(MIN_ABILITY_CD - 2 * (1 - (HP * 1f / HT)),
MAX_ABILITY_CD - 5 * (1 - (HP * 1f / HT)));
} else {
spend(TICK);
}
}
if (abilityCooldown > 0) abilityCooldown-= 5;
}
@Override
public boolean act() {
GameScene.add(Blob.seed(pos, 20, HalomethaneFire.class));
doDiedLasers();
boolean result = super.act();
if (Dungeon.level.map[pos] == Terrain.WATER){
Level.set( pos, Terrain.EMPTY);
GameScene.updateMap( pos );
CellEmitter.get( pos ).burst( Speck.factory( Speck.STEAM ), 10 );
}
//1.67 evaporated tiles on average
int evaporatedTiles = Random.chances(new float[]{0, 1, 2});
for (int i = 0; i < evaporatedTiles; i++) {
int cell = pos + PathFinder.NEIGHBOURS8[Random.Int(8)];
if (Dungeon.level.map[cell] == Terrain.WATER){
Level.set( cell, Terrain.EMPTY);
GameScene.updateMap( cell );
CellEmitter.get( cell ).burst( Speck.factory( Speck.STEAM ), 10 );
}
}
for (int i : PathFinder.NEIGHBOURS9) {
int vol = HalomethaneFire.volumeAt(pos+i, HalomethaneFire.class);
if (vol < 4 && !Dungeon.level.water[pos + i] && !Dungeon.level.solid[pos + i]){
GameScene.add( Blob.seed( pos + i, 4 - vol, HalomethaneFire.class ) );
}
}
return result;
}
@Override
protected void zap() {
spend( 1f );
if (Dungeon.level.map[enemy.pos] == Terrain.WATER){
Level.set( enemy.pos, Terrain.EMPTY);
GameScene.updateMap( enemy.pos );
CellEmitter.get( enemy.pos ).burst( Speck.factory( Speck.STEAM ), 10 );
} else {
Buff.affect( enemy, HalomethaneBurning.class ).reignite( enemy );
}
for (int i : PathFinder.NEIGHBOURS9){
if (!Dungeon.level.water[enemy.pos+i] && !Dungeon.level.solid[enemy.pos+i]){
int vol = HalomethaneFire.volumeAt(enemy.pos+i, HalomethaneFire.class);
if (vol < 4){
GameScene.add( Blob.seed( enemy.pos + i, 4 - vol, HalomethaneFire.class ) );
}
}
}
}
{
immunities.add(Frost.class);
}
}
} }

View File

@ -0,0 +1,110 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses;
import com.shatteredpixel.shatteredpixeldungeon.actors.Boss;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CerberusSprite;
import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class Cerberus extends Boss {
{
initProperty();
initBaseStatus(20, 40, 30, 8, 800, 14, 9);
initStatus(100);
spriteClass = CerberusSprite.class;
}
//技能条
public float skillLevel;
//攻击次数
public int attackKills;
//阶段转换
public int phase;
@Override
public void storeInBundle(Bundle bundle) {
super.storeInBundle(bundle);
bundle.put("phaseCR", phase);
bundle.put("skillLevelCR", skillLevel);
bundle.put("attackKillsCR",attackKills);
}
@Override
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
phase = bundle.getInt("phaseCR");
skillLevel = bundle.getFloat("skillLevelCR");
attackKills = bundle.getInt("attackKillsCR");
}
//ACT暂时注释
// @Override
// public boolean act(){
// return super.act();
// }
@Override
protected boolean doAttack( Char enemy ) {
switch (phase){
default:
case 0:
NightmareRoot();
break;
// case 1:
// SoulReCharges(enemy);
// break;
// case 2:
// HellDogBack(enemy);
// break;
// case 3:
// CrystalActive(enemy);
// break;
// case 4:
// TrueOrFalse(enemy);
// break;
// case 5:
// DiedGlyphs(enemy);
// break;
// case 6:
// NoWorldMaster(enemy);
// break;
}
return super.doAttack( enemy );
}
@Override
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
if(attackKills>=3){
((CerberusSprite)sprite).Skills(pos);
}
return damage;
}
//技能1噩梦缠绕
private void NightmareRoot(){
attackKills++;
if(attackKills>=3){
SpellSprite.show(this, SpellSprite.CHARGE);
}
}
private void NightmareRootAtive(Char enmey){
enmey.damage(Random.NormalIntRange((int)(baseMin*1.15), (int)(baseMax*1.15)),damageRoll());
Buff.prolong( enemy, Roots.class, 3f );
spend(attackDelay()*3f);
clearReset();
}
private void clearReset(){
attackKills = 0;
}
}

View File

@ -219,6 +219,10 @@ public class DiamondKnight extends Boss {
Dungeon.level.seal(); Dungeon.level.seal();
} }
int hpBracket = HT / 6;
dmg = Math.min(hpBracket, dmg);
super.damage(dmg, src); super.damage(dmg, src);
LockedFloor lock = hero.buff(LockedFloor.class); LockedFloor lock = hero.buff(LockedFloor.class);
if (lock != null) lock.addTime(dmg*2); if (lock != null) lock.addTime(dmg*2);
@ -226,6 +230,7 @@ public class DiamondKnight extends Boss {
ColdChestBossLevel.State level = ((ColdChestBossLevel)Dungeon.level).pro(); ColdChestBossLevel.State level = ((ColdChestBossLevel)Dungeon.level).pro();
//血量低于360后追加phase并加载楼层的进度方法,加载迷宫 //血量低于360后追加phase并加载楼层的进度方法,加载迷宫
if (level == ColdChestBossLevel.State.START && this.HP <= 360 && phase == 0) { if (level == ColdChestBossLevel.State.START && this.HP <= 360 && phase == 0) {
HP = 360;
Actor.add(new Actor() { Actor.add(new Actor() {
{ {
@ -243,10 +248,12 @@ public class DiamondKnight extends Boss {
} }
}); });
} else if (level == ColdChestBossLevel.State.VSBOSS_START && this.HP <= 240 && phase == 2) { } else if (level == ColdChestBossLevel.State.VSBOSS_START && this.HP <= 240 && phase == 2) {
HP = 240;
((ColdChestBossLevel)Dungeon.level).progress(); ((ColdChestBossLevel)Dungeon.level).progress();
phase++; phase++;
//血量低于200后变成玩家的样子伤害和防御数值与玩家一致 //血量低于200后变成玩家的样子伤害和防御数值与玩家一致
} else if (level == ColdChestBossLevel.State.VSLINK_START && this.HP <= 200 && phase == 3) { } else if (level == ColdChestBossLevel.State.VSLINK_START && this.HP <= 200 && phase == 3) {
HP = 200;
Actor.add(new Actor() { Actor.add(new Actor() {
{ {
@ -262,13 +269,14 @@ public class DiamondKnight extends Boss {
GameScene.flash(0x808080); GameScene.flash(0x808080);
((ColdChestBossLevel)Dungeon.level).progress(); ((ColdChestBossLevel)Dungeon.level).progress();
spriteClass=DimandKingSprite.PrismaticSprite.class; spriteClass=DimandKingSprite.PrismaticSprite.class;
ShatteredPixelDungeon.switchNoFade(GameScene.class); ShatteredPixelDungeon.resetScene();
GameScene.flash(0x888888); GameScene.flash(0x888888);
return true; return true;
} }
}); });
//最终决斗 //最终决斗
} else if (level == ColdChestBossLevel.State.VSYOU_START && this.HP <= 100 && phase == 4) { } else if (level == ColdChestBossLevel.State.VSYOU_START && this.HP <= 100 && phase == 4) {
HP = 100;
Actor.add(new Actor() { Actor.add(new Actor() {
{ {
@ -282,7 +290,7 @@ public class DiamondKnight extends Boss {
GLog.n(Messages.get(DiamondKnight.class,"ok_go")); GLog.n(Messages.get(DiamondKnight.class,"ok_go"));
GameScene.flash(0x808080); GameScene.flash(0x808080);
spriteClass=DimandKingSprite.class; spriteClass=DimandKingSprite.class;
ShatteredPixelDungeon.switchNoFade(GameScene.class); ShatteredPixelDungeon.resetScene();
GameScene.flash(0x888888); GameScene.flash(0x888888);
((ColdChestBossLevel)Dungeon.level).progress(); ((ColdChestBossLevel)Dungeon.level).progress();
phase++; phase++;
@ -372,11 +380,11 @@ public class DiamondKnight extends Boss {
bundle.put( HEALINC, healInc ); bundle.put( HEALINC, healInc );
bundle.put(COMBO, combo); bundle.put(COMBO, combo);
if(phase == 5) { // if(phase == 5) {
spriteClass=DimandKingSprite.PrismaticSprite.class; // spriteClass=DimandKingSprite.PrismaticSprite.class;
} else { // } else {
spriteClass=DimandKingSprite.class; // spriteClass=DimandKingSprite.class;
} // }
} }
@ -391,7 +399,7 @@ public class DiamondKnight extends Boss {
//if check is for pre-0.9.3 saves //if check is for pre-0.9.3 saves
healInc = bundle.getInt(HEALINC); healInc = bundle.getInt(HEALINC);
if(phase == 5) { if(phase == 5 || phase == 6) {
spriteClass=DimandKingSprite.PrismaticSprite.class; spriteClass=DimandKingSprite.PrismaticSprite.class;
} else { } else {
spriteClass=DimandKingSprite.class; spriteClass=DimandKingSprite.class;

View File

@ -457,7 +457,7 @@ public class SakaFishBoss extends Boss {
endPos = leapPos; endPos = leapPos;
} }
//do leap //do leap 泥头车
sprite.visible = Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[leapPos] || Dungeon.level.heroFOV[endPos]; sprite.visible = Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[leapPos] || Dungeon.level.heroFOV[endPos];
sprite.dirtcar(pos, leapPos, new Callback() { sprite.dirtcar(pos, leapPos, new Callback() {
@Override @Override

View File

@ -17,11 +17,6 @@ public class Frankenstein extends Mob {
properties.add(Char.Property.HOLLOW); properties.add(Char.Property.HOLLOW);
} }
// @Override
// protected boolean act() {
// return super.act();
// }
@Override @Override
public int damageRoll() { public int damageRoll() {
return Random.NormalIntRange( 15, 27 ); return Random.NormalIntRange( 15, 27 );

View File

@ -0,0 +1,50 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
import com.watabou.utils.Random;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class HollowMimic extends Mimic {
{
spriteClass = MimicSprite.HollowWall.class;
properties.add( Property.HOLLOW );
HP = HT= Random.Int(35,60);
}
@Override
public int damageRoll() {
return Random.NormalIntRange( 30, 50 );
}
@Override
public int drRoll() {
return 0;
}
public static HollowMimic spawnAt(int pos, Item item, Class mimicType ){
return spawnAt( pos, Arrays.asList(item), mimicType);
}
public static HollowMimic spawnAt(int pos, List<Item> items, Class mimicType ) {
HollowMimic m;
m = new HollowMimic();
m.items = new ArrayList<>( items );
m.setLevel( Dungeon.depth );
m.pos = pos;
//generate an extra reward for killing the mimic
m.generatePrize();
return m;
}
}

View File

@ -37,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem; import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DarkGold; import com.shatteredpixel.shatteredpixeldungeon.items.quest.DarkGold;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Pickaxe; import com.shatteredpixel.shatteredpixeldungeon.items.quest.Pickaxe;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
@ -222,6 +223,10 @@ public class Blacksmith extends NPC {
if (!item1.isIdentified() || !item2.isIdentified()) { if (!item1.isIdentified() || !item2.isIdentified()) {
return Messages.get(Blacksmith.class, "un_ided"); return Messages.get(Blacksmith.class, "un_ided");
} }
if (item1 instanceof OilPotion || item2 instanceof OilPotion) {
return Messages.get(Blacksmith.class, "oil");
}
if (item1.cursed || item2.cursed || if (item1.cursed || item2.cursed ||
(item1 instanceof Armor && ((Armor) item1).hasCurseGlyph()) || (item1 instanceof Armor && ((Armor) item1).hasCurseGlyph()) ||

View File

@ -4,17 +4,11 @@ import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.NxhySprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.NxhySprite;
public class Nxhy extends Shopkeeper { public class Nxhy extends Shopkeeper {
@ -32,7 +26,12 @@ public class Nxhy extends Shopkeeper {
yell(Messages.get(this, "greetings", Dungeon.hero.name())); yell(Messages.get(this, "greetings", Dungeon.hero.name()));
seenBefore = true; seenBefore = true;
playBGM(Assets.SHOP, true); playBGM(Assets.SHOP, true);
} else if(seenBefore && !Dungeon.level.heroFOV[pos]) {
seenBefore = false;
yell(Messages.get(this, "goodbye", hero.name()));
BGMPlayer.playBGMWithDepth();
} }
if (Dungeon.level.heroFOV[pos]){ if (Dungeon.level.heroFOV[pos]){
Notes.add(Notes.Landmark.SHOP); Notes.add(Notes.Landmark.SHOP);
} }
@ -43,49 +42,10 @@ public class Nxhy extends Shopkeeper {
return true; return true;
} }
@Override
public void damage( int dmg, Object src ) {
flee();
}
@Override @Override
public int defenseSkill( Char enemy ) { public int defenseSkill( Char enemy ) {
return 0; return 0;
} }
@Override
public void add( Buff buff ) {
flee();
}
public void flee() {
destroy();
Notes.remove(Notes.Landmark.SHOP);
CellEmitter.get(pos).burst(ElmoParticle.FACTORY, 6);
hero.sprite.burst(15597568, 9);
sprite.killAndErase();
}
@Override
public void destroy() {
Actor.remove( this );
HP = 0;
for (Heap heap: Dungeon.level.heaps.valueList()) {
if (heap.type == Heap.Type.FOR_SALE) {
if (ShatteredPixelDungeon.scene() instanceof GameScene) {
CellEmitter.get(heap.pos).burst(ElmoParticle.FACTORY, 4);
}
if (heap.size() == 1) {
heap.destroy();
} else {
heap.items.remove(heap.size()-1);
heap.type = Heap.Type.HEAP;
}
}
}
}
} }

View File

@ -47,7 +47,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OGPDLLS;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OGPDNQHZ; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OGPDNQHZ;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OGPDZSLS; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OGPDZSLS;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Piranha; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Piranha;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Rat;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RedMurderer; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RedMurderer;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RedSwarm; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RedSwarm;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RipperDemon; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RipperDemon;
@ -73,6 +72,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Warlock; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Warlock;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG200; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG200;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.Cerberus;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.SlimeKingMob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.SlimeKingMob;
import com.shatteredpixel.shatteredpixeldungeon.custom.dict.DictSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.custom.dict.DictSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M; import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M;
@ -450,7 +450,7 @@ public class MobPlacer extends TestItem{
} }
private enum DataPack{ private enum DataPack{
RAT(Rat.class, DictSpriteSheet.RAT), RAT(Cerberus.class, DictSpriteSheet.RAT),
FLWW(FlowerSlime.class, DictSpriteSheet.FLOWER), FLWW(FlowerSlime.class, DictSpriteSheet.FLOWER),
//TESTRAT(TestRat.class, DictSpriteSheet.RAT), //TESTRAT(TestRat.class, DictSpriteSheet.RAT),
GNOLL(Gnoll.class, DictSpriteSheet.GNOLL), GNOLL(Gnoll.class, DictSpriteSheet.GNOLL),

View File

@ -21,6 +21,10 @@
package com.shatteredpixel.shatteredpixeldungeon.items.keys; package com.shatteredpixel.shatteredpixeldungeon.items.keys;
import com.shatteredpixel.shatteredpixeldungeon.Conducts;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
public class CrystalKey extends Key { public class CrystalKey extends Key {
@ -38,5 +42,13 @@ public class CrystalKey extends Key {
this.depth = depth; this.depth = depth;
} }
@Override
public boolean doPickUp(Hero hero, int pos) {
if(depth == 10 || (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) && (depth == 8))){
ShatteredPixelDungeon.resetScene();
}
return super.doPickUp(hero, pos);
}
} }

View File

@ -12,7 +12,7 @@ public class OilPotion extends Item {
public OilPotion() { public OilPotion() {
image = ItemSpriteSheet.SKPOTION; image = ItemSpriteSheet.SKPOTION;
stackable = true; stackable = false;
} }
@Override @Override

View File

@ -21,15 +21,19 @@
package com.shatteredpixel.shatteredpixeldungeon.items.wands; package com.shatteredpixel.shatteredpixeldungeon.items.wands;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; import com.shatteredpixel.shatteredpixeldungeon.effects.Beam;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
@ -69,9 +73,12 @@ public class WandOfPrismaticLight extends DamageWand {
affectMap(beam); affectMap(beam);
if (Dungeon.level.viewDistance < 6 ){ if (Dungeon.level.viewDistance < 6 ){
if (Dungeon.isChallenged(Challenges.DARKNESS)){ if(Dungeon.isChallenged(Challenges.DHXD) && hero.buff(Talent.LanterCooldown.class) == null || Statistics.lanterfireactive && hero.buff(Talent.LanterCooldown.class) == null){
hero.healLantern(5f);
Buff.affect(curUser, Talent.LanterCooldown.class, 200f);
} else if (Dungeon.isChallenged(Challenges.DARKNESS) && !Dungeon.isChallenged(Challenges.DHXD)){
Buff.prolong( curUser, Light.class, 2f + buffedLvl()); Buff.prolong( curUser, Light.class, 2f + buffedLvl());
} else { } else if(!Dungeon.isChallenged(Challenges.DHXD)) {
Buff.prolong( curUser, Light.class, 10f+buffedLvl()*5); Buff.prolong( curUser, Light.class, 10f+buffedLvl()*5);
} }
} }

View File

@ -195,6 +195,7 @@ public class BloodthirstyThorn extends MeleeWeapon {
if(chaliceOfBlood!=null){ if(chaliceOfBlood!=null){
bloodthirstyThorn.level=chaliceOfBlood.level(); bloodthirstyThorn.level=chaliceOfBlood.level();
} else { } else {
//如果圣杯物品为空则读取本局全局玩家献祭圣杯的次数
bloodthirstyThorn.level=Statistics.ChaicBlood; bloodthirstyThorn.level=Statistics.ChaicBlood;
} }

View File

@ -521,6 +521,8 @@ public class ColdChestBossLevel extends Level {
if(boss instanceof DiamondKnight) { if(boss instanceof DiamondKnight) {
//如果楼层为开始且boss血量小于200 4阶段 //如果楼层为开始且boss血量小于200 4阶段
if (pro == VSLINK_START && boss.HP <= 200) { if (pro == VSLINK_START && boss.HP <= 200) {
Buff.detach(boss, ChampionEnemy.Halo.class);
((DiamondKnight) boss).baseSpeed *= 2;
pro = VSYOU_START; pro = VSYOU_START;
} }
} }
@ -533,7 +535,7 @@ public class ColdChestBossLevel extends Level {
//如果楼层为开始且boss血量小于100 判定WIN //如果楼层为开始且boss血量小于100 判定WIN
if (pro == VSYOU_START && boss.HP <= 100) { if (pro == VSYOU_START && boss.HP <= 100) {
pro = WIN; pro = WIN;
Buff.detach(boss, ChampionEnemy.Halo.class); //Buff.detach(boss, ChampionEnemy.Halo.class);
} }
} }
} }

View File

@ -2,6 +2,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.hollow.HollowMimic;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.PrisonPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.PrisonPainter;
@ -104,6 +105,8 @@ public class HollowLevel extends RegularLevel {
switch (tile) { switch (tile) {
case Terrain.WATER: case Terrain.WATER:
return Messages.get(PrisonLevel.class, "water_name"); return Messages.get(PrisonLevel.class, "water_name");
case Terrain.WALL_DECO:
return Messages.get(HollowMimic.class, "minames");
default: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@ -112,6 +115,8 @@ public class HollowLevel extends RegularLevel {
@Override @Override
public String tileDesc(int tile) { public String tileDesc(int tile) {
switch (tile) { switch (tile) {
case Terrain.WALL_DECO:
return Messages.get(HollowMimic.class, "midescs");
case Terrain.EMPTY_DECO: case Terrain.EMPTY_DECO:
return Messages.get(PrisonLevel.class, "empty_deco_desc"); return Messages.get(PrisonLevel.class, "empty_deco_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:

View File

@ -107,7 +107,7 @@ public class PrisonBossLevel extends Level {
@Override @Override
public String tilesTex() { public String tilesTex() {
return Assets.Environment.TILES_PRISON; return locked ? Assets.Environment.TILES_TENGUS : Assets.Environment.TILES_PRISON;
} }
@Override @Override
@ -300,7 +300,7 @@ public class PrisonBossLevel extends Level {
customWalls.add(vis); customWalls.add(vis);
GameScene.add(vis, true); GameScene.add(vis, true);
Painter.set(this, tenguCell.left+4, tenguCell.top, Terrain.DOOR); Painter.set(this, tenguCell.left+4, tenguCell.top, Terrain.CRYSTAL_DOOR);
int cell = pointToCell(endStart); int cell = pointToCell(endStart);
int i = 0; int i = 0;
@ -397,8 +397,13 @@ public class PrisonBossLevel extends Level {
return; return;
} }
} }
seal(); seal();
GameScene.flash(0x80aaaaaa);
Camera.main.shake(1f,2f);
GameScene.bossReady();
set(pointToCell(tenguCellDoor), Terrain.LOCKED_DOOR); set(pointToCell(tenguCellDoor), Terrain.LOCKED_DOOR);
GameScene.updateMap(pointToCell(tenguCellDoor)); GameScene.updateMap(pointToCell(tenguCellDoor));
@ -510,6 +515,8 @@ public class PrisonBossLevel extends Level {
Sample.INSTANCE.play(Assets.Sounds.BLAST); Sample.INSTANCE.play(Assets.Sounds.BLAST);
state = State.WON; state = State.WON;
GameScene.updateMap();
GameScene.flash(0x80FFFFFF);
Game.runOnRenderThread(new Callback() { Game.runOnRenderThread(new Callback() {
@Override @Override
public void call() { public void call() {
@ -521,11 +528,10 @@ public class PrisonBossLevel extends Level {
} }
private boolean[] triggered = new boolean[]{false, false, false, false}; private boolean[] triggered = new boolean[]{false, false, false, false};
@Override @Override
public void occupyCell(Char ch) { public void occupyCell(Char ch) {
super.occupyCell(ch); super.occupyCell(ch);
if (ch == Dungeon.hero){ if (ch == Dungeon.hero){
switch (state){ switch (state){
case START: case START:
@ -534,7 +540,6 @@ public class PrisonBossLevel extends Level {
} }
break; break;
case FIGHT_PAUSE: case FIGHT_PAUSE:
if (cellToPoint(ch.pos).y <= startHallway.top+1){ if (cellToPoint(ch.pos).y <= startHallway.top+1){
progress(); progress();
} }

View File

@ -73,19 +73,26 @@ public class PrisonPainter extends RegularPainter {
if (map[i] == Terrain.WALL && if (map[i] == Terrain.WALL &&
(map[i + w] == Terrain.EMPTY || map[i + w] == Terrain.EMPTY_SP) && (map[i + w] == Terrain.EMPTY || map[i + w] == Terrain.EMPTY_SP) &&
Random.Int( 6 ) == 0) { Random.Int( 6 ) == 0) {
map[i] = Terrain.WALL_DECO; map[i] = Terrain.WALL_DECO;
} }
} }
for (int i = w; i < l - w; i++) {
if (map[i] == Terrain.WALL && map[i - w] == Terrain.WALL && map[i + w] == Terrain.WATER && Random.Int(2) == 0) {
map[i] = Terrain.WALL_DECO;
}
}
for (int i=w; i < l - w; i++) { // for (int i=w; i < l - w; i++) {
if (map[i] == Terrain.WALL && // if (map[i] == Terrain.WALL &&
map[i - w] == Terrain.WALL && // map[i - w] == Terrain.WALL &&
(map[i + w] == Terrain.EMPTY || map[i + w] == Terrain.EMPTY_SP) && // (map[i + w] == Terrain.EMPTY || map[i + w] == Terrain.EMPTY_SP) &&
Random.Int( 3 ) == 0) { // Random.Int( 3 ) == 0) {
// level.mobs.add(HollowMimic.spawnAt(i,( Generator.randomUsingDefaults( Generator.Category.ARMOR ) ),
map[i] = Terrain.WALL_DECO; // HollowMimic.class));
} // map[i] = Terrain.WALL;
} // }
// }
} }
} }

View File

@ -1528,6 +1528,11 @@ public class GameScene extends PixelScene {
bossSlain.show( Window.CYELLOW, 0.3f, 5f); bossSlain.show( Window.CYELLOW, 0.3f, 5f);
scene.showBanner(bossSlain); scene.showBanner(bossSlain);
break; break;
case 10:
bossSlain.texture(Assets.Interfaces.Tengu_Title);
bossSlain.show( Window.R_COLOR, 0.3f, 4f);
scene.showBanner(bossSlain);
break;
case 14: case 14:
bossSlain.texture(Assets.Interfaces.DMOR_Title); bossSlain.texture(Assets.Interfaces.DMOR_Title);
bossSlain.show( Window.CBLACK, 0.3f, 5f); bossSlain.show( Window.CBLACK, 0.3f, 5f);
@ -1570,6 +1575,11 @@ public class GameScene extends PixelScene {
bossSlain.show( Window.CYELLOW, 0.3f, 5f); bossSlain.show( Window.CYELLOW, 0.3f, 5f);
scene.showBanner(bossSlain); scene.showBanner(bossSlain);
break; break;
case 10:
bossSlain.texture(Assets.Interfaces.Tengu_Clear);
bossSlain.show( Window.R_COLOR, 0.2f, 5f);
scene.showBanner(bossSlain);
break;
case 14: case 14:
bossSlain.texture(Assets.Interfaces.DMOR_Clear); bossSlain.texture(Assets.Interfaces.DMOR_Clear);
bossSlain.show( Window.GDX_COLOR, 0.3f, 5f); bossSlain.show( Window.GDX_COLOR, 0.3f, 5f);

View File

@ -1,6 +1,10 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes; package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.Archs; import com.shatteredpixel.shatteredpixeldungeon.ui.Archs;
import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
//怪物图鉴 尚未完成 //怪物图鉴 尚未完成
@ -17,6 +21,19 @@ public class MobCatLogScene extends PixelScene {
Archs archs = new Archs(); Archs archs = new Archs();
archs.setSize(w,h); archs.setSize(w,h);
addToBack(archs); addToBack(archs);
ExitButton btnExit = new ExitButton();
btnExit.setPos( w - btnExit.width(), 0 );
add( btnExit );
RenderedTextBlock title = PixelScene.renderTextBlock( Messages.get(this, "title"), 9);
title.hardlight(Window.TITLE_COLOR);
title.setPos(
(w - title.width()) / 2f,
(20 - title.height()) / 2f
);
align(title);
add(title);
} }
} }

View File

@ -78,22 +78,40 @@ public class ThanksScene extends PixelScene {
content.add(ptr); content.add(ptr);
//*** Special Thanks *** //*** Special Thanks ***
CreditsBlock specialThanks = new CreditsBlock(true, 0xffffff, CreditsBlock specialThanksX = new CreditsBlock(true, 0x808080,
"Original Music By Prohonor", "Original Music One By Prohonor",
new Image("ptr.png", 0, 0, 32, 32), new Image("ptr.png", 0, 0, 32, 32),
null, null,
null, null,
null); null);
specialThanks.setRect((Camera.main.width - colWidth)/2f-10, ptr.bottom()+6, colWidth+20, 0); specialThanksX.setRect((Camera.main.width - colWidth)/2f-10, ptr.bottom()+6, colWidth+20, 0);
content.add(specialThanks); content.add(specialThanksX);
CreditsBlock specialThanksB = new CreditsBlock(true, 0xbe8e6e, CreditsBlock specialThanks = new CreditsBlock(true, 0x00899C,
"Part Music Used Terraria", "Original Music Two By 犬羅",
new Image("tra.png", 0, 0, 17, 28), new Image("dog.png", 0, 0, 22, 24),
null, null,
null, null,
null); null);
specialThanksB.setRect((Camera.main.width - colWidth)/2f-10, specialThanks.bottom()+6, colWidth+20, 0); specialThanks.setRect((Camera.main.width - colWidth)/2f-10, specialThanksX.bottom()+6, colWidth+20, 0);
content.add(specialThanks);
CreditsBlock specialThanks2 = new CreditsBlock(true, 0xC62BFF,
"Map Made 迪泠",
new Image("DiLing.png", 0, 0, 32, 32),
null,
null,
null);
specialThanks2.setRect((Camera.main.width - colWidth)/2f-10, specialThanks.bottom()+6, colWidth+20, 0);
content.add(specialThanks2);
CreditsBlock specialThanksB = new CreditsBlock(true, Window.TITLE_COLOR,
"Third Party Music Used:\n\nTerraria--Arknight--TitanSoul",
new Image("tra.png", 0, 0, 73, 28),
null,
null,
null);
specialThanksB.setRect((Camera.main.width - colWidth)/2f-10, specialThanks2.bottom()+6, colWidth+20, 0);
content.add(specialThanksB); content.add(specialThanksB);
//*** Shattered Pixel Dungeon Credits *** //*** Shattered Pixel Dungeon Credits ***

View File

@ -0,0 +1,43 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.watabou.noosa.MovieClip;
import com.watabou.noosa.TextureFilm;
public class CerberusSprite extends MobSprite {
private Animation skills;
public CerberusSprite() {
super();
texture( Assets.Sprites.CSBR );
TextureFilm frames = new TextureFilm( texture, 32, 32);
idle = new MovieClip.Animation( 6, true );
idle.frames( frames, 0, 1, 2, 3, 4 ,6, 7,8 );
run = new MovieClip.Animation( 6, true );
run.frames( frames, 9,10,11,12,13,14,15,16,17 );
attack = new MovieClip.Animation( 6, false );
attack.frames( frames, 18,19,20,21 );
skills = new MovieClip.Animation( 18, true );
skills.frames( frames, 22, 23, 24, 25, 26 );
die = new MovieClip.Animation( 18, false );
die.frames( frames, 27, 28, 29, 30, 31, 32, 33, 34, 35 );
play( idle );
}
//Skills Animation
public void Skills( int cell ){
turnTo( ch.pos, cell );
play( skills );
}
}

View File

@ -157,7 +157,7 @@ public class DimandKingSprite extends MobSprite {
} }
public void updateArmor( int tier ) { public void updateArmor( int tier ) {
TextureFilm film = new TextureFilm( HeroSprite.tiers(), 6, FRAME_WIDTH, FRAME_HEIGHT ); TextureFilm film = new TextureFilm( HeroSprite.tiers(), 7, FRAME_WIDTH, FRAME_HEIGHT );
idle = new Animation( 1, true ); idle = new Animation( 1, true );
idle.frames( film, 0, 0, 0, 1, 0, 0, 1, 1 ); idle.frames( film, 0, 0, 0, 1, 0, 0, 1, 1 );

View File

@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.CorrosionParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.CorrosionParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.HalomethaneFlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle;
@ -304,4 +305,54 @@ public abstract class FistSprite extends MobSprite {
} }
public static class Ice extends FistSprite {
{
boltType = MagicMissile.FROST;
}
@Override
protected int texOffset() {
return 60;
}
@Override
protected Emitter createEmitter() {
Emitter emitter = emitter();
emitter.pour(MagicMissile.MagicParticle.FACTORY, 0.06f );
return emitter;
}
@Override
public int blood() {
return 0xFF26CCC2;
}
}
public static class HaloFist extends FistSprite {
{
boltType = MagicMissile.HALOFIRE;
}
@Override
protected int texOffset() {
return 70;
}
@Override
protected Emitter createEmitter() {
Emitter emitter = emitter();
emitter.pour(HalomethaneFlameParticle.FACTORY, 0.06f );
return emitter;
}
@Override
public int blood() {
return 0xFF34C9C9;
}
}
} }

View File

@ -905,6 +905,13 @@ public class ItemSpriteSheet {
public static final int CHALLANEESICON_16= CHALLANEESICONINDEX+15; public static final int CHALLANEESICON_16= CHALLANEESICONINDEX+15;
private static final int SCROLL_GOLD = xy(1, 46); //16 slots
public static final int SCROLL_MORETR = SCROLL_GOLD;
static {
assignItemRect(SCROLL_GOLD, 15, 14);
}
//for smaller 8x8 icons that often accompany an item sprite //for smaller 8x8 icons that often accompany an item sprite
public static class Icons { public static class Icons {

View File

@ -0,0 +1,32 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.watabou.noosa.MovieClip;
import com.watabou.noosa.TextureFilm;
public class MiMiCRYSprites extends MimicSprite {
public MiMiCRYSprites() {
super();
texture( Assets.Sprites.MIMICRY );
TextureFilm frames = new TextureFilm( texture, 16, 16 );
idle = new MovieClip.Animation( 5, true );
idle.frames( frames, 0, 1, 2 );
run = new MovieClip.Animation( 9, true );
run.frames( frames, 2,3,4,5 );
attack = new MovieClip.Animation( 6, false );
attack.frames( frames,4,5,6);
die = new MovieClip.Animation( 6, false );
die.frames( frames, 7,8,9,10,11,12 );
play( idle );
}
}

View File

@ -27,7 +27,7 @@ import com.watabou.noosa.TextureFilm;
public class MimicSprite extends MobSprite { public class MimicSprite extends MobSprite {
private Animation hiding; private static Animation hiding;
{ {
//adjust shadow slightly to account for 1 empty bottom pixel (used for border while hiding) //adjust shadow slightly to account for 1 empty bottom pixel (used for border while hiding)
@ -116,5 +116,48 @@ public class MimicSprite extends MobSprite {
} }
} }
public static class HollowWall extends MimicSprite{
@Override
protected int texOffset() {
return 80;
}
@Override
public void link(Char ch) {
super.link(ch);
ch.sprite.add(CharSprite.State.ILLUMINATED);
}
public HollowWall() {
super();
int c = texOffset();
texture( Assets.Sprites.MIMIC );
TextureFilm frames = new TextureFilm( texture, 16, 16 );
hiding = new Animation( 1, true );
hiding.frames( frames, 0+c, 1+c, 2+c, 3+c);
idle = new Animation( 5, true );
idle.frames( frames, 0+c,1+c,2+c,3+c );
run = new Animation( 10, true );
run.frames( frames, 0+c,1+c,2+c,3+c );
attack = new Animation( 10, false );
attack.frames( frames, 4+c, 5+c, 6+c );
die = new Animation( 5, false );
die.frames( frames, 7+c,8+c, 9+c,10+c,11+c,12+c );
play( idle );
}
}
} }

View File

@ -0,0 +1,33 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.watabou.noosa.MovieClip;
import com.watabou.noosa.TextureFilm;
public class MorpheusSprite extends MobSprite {
public MorpheusSprite() {
super();
texture( Assets.Sprites.MPHON );
TextureFilm frames = new TextureFilm( texture, 32, 32 );
idle = new MovieClip.Animation( 6, true );
idle.frames( frames, 0, 1, 2, 3 );
run = new MovieClip.Animation( 12, true );
run.frames( frames, 14,15,16,17 );
attack = new MovieClip.Animation( 18, false );
attack.frames( frames, 4,5,6,7,8,9,0 );
die = new MovieClip.Animation( 18, false );
die.frames( frames, 10, 12, 13 );
play( idle );
}
}

View File

@ -0,0 +1,31 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.watabou.noosa.TextureFilm;
public class TyphonSprite extends MobSprite {
public TyphonSprite() {
super();
texture( Assets.Sprites.TYPHON );
TextureFilm frames = new TextureFilm( texture, 16, 21 );
idle = new Animation( 6, true );
idle.frames( frames, 0, 1, 2, 3, 4 );
run = new Animation( 12, true );
run.frames( frames, 14,15,16,17 );
attack = new Animation( 18, false );
attack.frames( frames, 4,5,6,7,8,9,0 );
die = new Animation( 18, false );
die.frames( frames, 10, 12, 13 );
play( idle );
}
}

View File

@ -396,7 +396,7 @@ public class StatusPane extends Component {
} }
int maxHunger = (int) Hunger.STARVING; int maxHunger = (int) Hunger.STARVING;
int maxPureSole = Dungeon.hero.lanterfire; float maxPureSole = Dungeon.hero.lanterfire;
int mtPureSole = 100; int mtPureSole = 100;
//冰血聪明 x //冰血聪明 x

View File

@ -10,6 +10,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ApprenticeWitchSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ApprenticeWitchSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CerberusSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CrivusFruitsSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CrivusFruitsSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.DM300AttackSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DM300AttackSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite;
@ -19,11 +20,13 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.IceSlowGirlSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceSlowGirlSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MorpheusSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RedNecromancerSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RedNecromancerSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SakaFishBossSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.SakaFishBossSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkeeperSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkeeperSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.TyphonSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.ChangeButton; import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.ChangeButton;
@ -92,6 +95,48 @@ public class vM0_6_4_P_Changes {
changes.addButton(new ChangeButton(c, ("冰雪魔女重做"), changes.addButton(new ChangeButton(c, ("冰雪魔女重做"),
("石碑上记录了有关于她的一切,她的过去,她的现在,她的未来。而当你与她对峙时,你是否能够看清她的真实面目?"))); ("石碑上记录了有关于她的一切,她的过去,她的现在,她的未来。而当你与她对峙时,你是否能够看清她的真实面目?")));
changes = new ChangeInfo("v0.6.5.0-Alpha6-Patch7", true, "");
changes.hardlight(Window.TITLE_COLOR);
changeInfos.add(changes);
changes = new ChangeInfo("预载", false, null);
changes.hardlight(Window.CBLACK);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new TyphonSprite(), ("万妖之祖"),
("虽然这个世界不在我的管理范围之内,但古堡的一切都不应该存在于这里。\n\n该数据已预载将在万圣节活动启用")));
Image mp = new MorpheusSprite();
mp.scale.set(PixelScene.align(0.7f));
changes.addButton(new ChangeButton(mp, ("影境之主"),
("那么,盛大的剧目即将开演。\n\n该数据已预载将在万圣节活动启用")));
Image cr = new CerberusSprite();
cr.scale.set(PixelScene.align(0.7f));
changes.addButton(new ChangeButton(cr, ("地狱噩梦"),
("……\n\n该数据已预载将在万圣节活动启用")));
changes = new ChangeInfo("新内容", false, null);
changes.hardlight(Window.GREEN_COLOR);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_13), ("绝命头目大整改"),
( "1.古神二阶段将额外召唤两个拳头,分别是寒冰和鬼磷之拳。\n\n" +
"2.矮人国王在绝命头目中魔像替换为冰魔像,额外追加重甲豺狼。\n\n" +
"3.天狗在二阶段额外获得护盾且火焰墙替换为鬼磷墙,战斗也更加频繁致命。")));
changes = new ChangeInfo("改动", false, null);
changes.hardlight(Window.CYELLOW);
changeInfos.add(changes);
changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动"),
("1.优化了油瓶可以被巨魔铁匠合成从而无限使用的问题\n" +
"2.开发者模式v0.8:修复了一些问题\n" +
"3.致谢名单优化新增迪泠Yinura-犬羅,秦月,设寄师,罐装狐腻(部分人没有给我图标,所以里面直接是文字)\n" +
"4.灯火已支持小数扣减。" )));
changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16),
Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X89")));
changes = new ChangeInfo("v0.6.5.0-Alpha6-Patch6", true, ""); changes = new ChangeInfo("v0.6.5.0-Alpha6-Patch6", true, "");
@ -121,6 +166,17 @@ public class vM0_6_4_P_Changes {
changes.hardlight(Window.CYELLOW); changes.hardlight(Window.CYELLOW);
changeInfos.add(changes); changeInfos.add(changes);
changes.addButton(new ChangeButton(Icons.get(Icons.INFO), ("分数对照表"),
("以下告诉你分数在何时会变蓝,在变蓝即为获得最高评价标准乃至以上:\n\n" +
"游戏得分50000分以上\n\n" +
"寻宝得分20000分以上\n\n" +
"探索得分20000分以上\n\n" +
"Boss得分18000分以上\n\n" +
"任务得分14000分以上。\n\n" +
"SSS+评价240000*挑战倍率*(通关 ? 1 : 5)\n\n" +
"如果通关是1倍没通关是5倍--(也就是基本无法获得)。" )));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG25), ("开发者模式v0.7"), changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG25), ("开发者模式v0.7"),
("在开发模式中支离破碎第1层是测试怪组。"))); ("在开发模式中支离破碎第1层是测试怪组。")));

View File

@ -4,7 +4,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
public class LevelChecker { public class LevelChecker {
public static final int SSSP_SCORE = 250000; public static final int SSSP_SCORE = 240000;
public static final int SSS_SCORE = 200000; public static final int SSS_SCORE = 200000;
public static final int SS_SCORE = 100000; public static final int SS_SCORE = 100000;
private static final int S_SCORE = 50000; private static final int S_SCORE = 50000;
@ -20,7 +20,7 @@ public class LevelChecker {
boolean amuletObtained = Statistics.amuletObtained; boolean amuletObtained = Statistics.amuletObtained;
String level; String level;
if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 1.5 : 5)) { if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 1 : 5)) {
level = "_SSS+_"; level = "_SSS+_";
} else if (totalScore >= SSS_SCORE * chalMultiplier/2 * (amuletObtained ? 1 : 4)) { } else if (totalScore >= SSS_SCORE * chalMultiplier/2 * (amuletObtained ? 1 : 4)) {
level = "SSS"; level = "SSS";

View File

@ -221,7 +221,7 @@ public class WndHero extends WndTabbed {
if(lanterfireactive){ if(lanterfireactive){
RestatSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 ); RestatSlot( Messages.get(this, "lanterfire"), (double)(hero.lanterfire) + "/" + 100 );
} }
IcestatSlot( Messages.get(this, "icehp"), (hero.icehp) + "/" + 100 ); IcestatSlot( Messages.get(this, "icehp"), (hero.icehp) + "/" + 100 );

View File

@ -39,7 +39,7 @@ import com.watabou.noosa.Image;
import com.watabou.noosa.ui.Component; import com.watabou.noosa.ui.Component;
public class WndInfoMob extends WndTitledMessage { public class WndInfoMob extends WndTitledMessage {
public static boolean reload = false;
public WndInfoMob( Mob mob ) { public WndInfoMob( Mob mob ) {
super( new MobTitle( mob ), mob.info() ); super( new MobTitle( mob ), mob.info() );
@ -185,6 +185,8 @@ public class WndInfoMob extends WndTitledMessage {
return level; return level;
} }
public MobTitle( Mob mob ) { public MobTitle( Mob mob ) {
name = PixelScene.renderTextBlock( Messages.titleCase( mob.name() ), 9 ); name = PixelScene.renderTextBlock( Messages.titleCase( mob.name() ), 9 );
@ -227,6 +229,12 @@ public class WndInfoMob extends WndTitledMessage {
add(mobSixInfo.info6); add(mobSixInfo.info6);
add(mobSixInfo.info7); add(mobSixInfo.info7);
add(mobSixInfo.info8); add(mobSixInfo.info8);
if ((mob.alignment == Char.Alignment.NEUTRAL) && mob.properties.contains(Char.Property.HOLLOW)) {
reload = true;
} else {
reload = false;
}
} }
@Override @Override
@ -248,12 +256,36 @@ public class WndInfoMob extends WndTitledMessage {
name.bottom() - BuffIndicator.SIZE_SMALL-2 name.bottom() - BuffIndicator.SIZE_SMALL-2
); );
height = health.bottom();
mobSixInfo.setPos(-5,Math.max(health.bottom(),image.height()+5));
mobSixInfo.layout();
height = mobSixInfo.bottom(); if(reload){
height = health.bottom();
mobSixInfo.info1.visible = false; mobSixInfo.info2.visible = false;
mobSixInfo.info3.visible = false; mobSixInfo.info4.visible = false;
mobSixInfo.info5.visible = false; mobSixInfo.info6.visible = false;
mobSixInfo.info7.visible = false; mobSixInfo.info8.visible = false;
mobSixInfo.image1.visible = false; mobSixInfo.image2.visible = false;
mobSixInfo.image3.visible = false; mobSixInfo.image4.visible = false;
mobSixInfo.image5.visible = false; mobSixInfo.image6.visible = false;
mobSixInfo.image7.visible = false; mobSixInfo.image8.visible = false;
health.visible = false;
} else {
mobSixInfo.setPos(-5,Math.max(health.bottom(),image.height()+5));
mobSixInfo.layout();
height = mobSixInfo.bottom();
mobSixInfo.info1.visible = true; mobSixInfo.info2.visible = true;
mobSixInfo.info3.visible = true; mobSixInfo.info4.visible = true;
mobSixInfo.info5.visible = true; mobSixInfo.info6.visible = true;
mobSixInfo.info7.visible = true; mobSixInfo.info8.visible = true;
mobSixInfo.image1.visible = true; mobSixInfo.image2.visible = true;
mobSixInfo.image3.visible = true; mobSixInfo.image4.visible = true;
mobSixInfo.image5.visible = true; mobSixInfo.image6.visible = true;
mobSixInfo.image7.visible = true; mobSixInfo.image8.visible = true;
health.visible = true;
}
} }
} }