diff --git a/build.gradle b/build.gradle index 0bea13961..ade67fd85 100644 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =900876 - appVersionName = '0.6.2.0-Beta5.0' + appVersionCode =900901 + appVersionName = '0.6.3.0-Beta1.5' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png b/core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png new file mode 100644 index 000000000..87d4c63ec Binary files /dev/null and b/core/src/main/assets/interfaces/bosslogo/qliphoth-clear.png differ diff --git a/core/src/main/assets/interfaces/bosslogo/qliphoth-title.png b/core/src/main/assets/interfaces/bosslogo/qliphoth-title.png new file mode 100644 index 000000000..b2aeb3520 Binary files /dev/null and b/core/src/main/assets/interfaces/bosslogo/qliphoth-title.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 7a61344e1..499839594 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -40,6 +40,9 @@ actors.mobs.bosses.crivusfruits$diedblobs.csed=果实爆开后迸射出一些气 actors.mobs.bosses.crivusfruitslasher.name=魔化藤 actors.mobs.bosses.crivusfruitslasher.desc=藤蔓没有智慧,它们的存在价值就是保护果实。不论是不小心靠近果实的“小动物”,还是企图清理枯藤更进一步的冒险者,都被这些藤蔓绞死成孕育果实的肥料了。 +actors.mobs.bosses.crivusfruitslasher.frost_kill=克里弗斯之果发出的酸蚀气雾彻底杀死了你…… +actors.mobs.bosses.crivusfruits.frost_kill=克里弗斯之果发出的酸蚀气雾彻底杀死了你…… + actors.mobs.npcs.pinkling.name=紫凛 actors.mobs.npcs.pinkling.desc=紫凛究竟是谁,我们无从得知。_尚未实装_ actors.mobs.npcs.pinkling.not-yet=不,现在......还不是时候...... @@ -74,7 +77,7 @@ actors.mobs.npcs.lanfire.cancel=取消烤肉 actors.mobs.npcs.lanfire.round=回合)_ actors.buffs.icesworddown.name=刀锋寒冻 -actors.buffs.icesworddown.desc=地牢的寒冷已经开始影响到你的武器,现在你的物理伤害会进行一定程度的下降。寒冷值越高,伤害下降越大。\n\n地牢的寒冷是由深处的暗黑能量驱使的,随着不断的深入地牢,寒冷会越来越刺入骨髓,从而造成更加急剧的威胁。要降低寒冷,可以寻找篝火房间,这里是能Δ缓慢回复温度的区域Δ。当然,在后面的探索中,你也会寻找到更多降低寒冷的手段。 +actors.buffs.icesworddown.desc=地牢的寒冷已经开始影响到你的武器,现在你的物理伤害会进行一定程度的下降。寒冷值越高,伤害下降越大。\n\n地牢的寒冷是由深处的暗黑能量驱使的,随着不断的深入地牢,寒冷会越来越刺入骨髓,从而造成更加急剧的威胁。要降低寒冷,可以寻找篝火房间,这里是能}缓慢回复温度的区域}。当然,在后面的探索中,你也会寻找到更多降低寒冷的手段。 actors.buffs.icesworddown.ice=\n\n当前玩家物理伤害为:_ actors.buffs.nyctophobia.name=光芒前路 @@ -286,7 +289,7 @@ actors.buffs.halomethaneburning.heromsg=磷火像恶魔一样缠在了你的身 actors.buffs.halomethaneburning.burnsup=%s被烧的渣都不剩了! actors.buffs.halomethaneburning.ondeath=你被磷火缠身燃烧的折磨至死… actors.buffs.halomethaneburning.rankings_desc=无法逃脱磷火缠身的痛苦 -actors.buffs.halomethaneburning.desc=没什么比被磷火缠身更痛苦了。 \n\n磷火会每回合都会造成伤害直到它被液体扑灭或者自行消散。磷火会在你进入水中时熄灭,打碎药瓶产生的磷火也具有同样的效果。 \n\n此外,磷火还会点燃所有接触到的可燃地形(以及可燃地形上的可燃物)。 \n\n剩余的燃烧效果时长:%s回合\n\nΠ相比于一般的火焰,磷火更加危险且更加致命Π +actors.buffs.halomethaneburning.desc=没什么比被磷火缠身更痛苦了。 \n\n磷火会每回合都会造成伤害直到它被液体扑灭或者自行消散。磷火会在你进入水中时熄灭,打碎药瓶产生的磷火也具有同样的效果。 \n\n此外,磷火还会点燃所有接触到的可燃地形(以及可燃地形上的可燃物)。 \n\n剩余的燃烧效果时长:%s回合\n\n]相比于一般的火焰,磷火更加危险且更加致命] actors.buffs.halofireimblue.name=磷火审判 actors.buffs.halofireimblue.desc=你被灌注了磷火的力量!\n\n所有物理攻击都可以使敌人磷火缠身。与此同时你对磷火,火焰完全免疫。\n\n剩余磷火审判效果时长:%s回合 @@ -334,11 +337,11 @@ actors.buffs.sanity.sanitydrop=受到来自敌人的精神伤害! actors.buffs.sanity.name=信心满满 actors.buffs.sanity.name2=迷茫时刻 actors.buffs.sanity.name3=恐惧袭来 -actors.buffs.sanity.normal_desc=_一次次的踏入地牢只会使自己更加的被恶毒的魔法侵蚀。\n\n_这一次,你已不知道是何时再来到这个地牢,但邪恶的诡异气氛扑面而来。这一次你进入地牢你感觉到了一种名为理智的存在。但你却不知道何时会因失去理智而被地牢吞噬,至少不是现在。\n\nΔ目前理智为:%s点Δ\n\nΔ你现在非常的理智,因此你完全不用担心任何事情Δ +actors.buffs.sanity.normal_desc=_一次次的踏入地牢只会使自己更加的被恶毒的魔法侵蚀。\n\n_这一次,你已不知道是何时再来到这个地牢,但邪恶的诡异气氛扑面而来。这一次你进入地牢你感觉到了一种名为理智的存在。但你却不知道何时会因失去理智而被地牢吞噬,至少不是现在。\n\n}目前理智为:%s点}\n\n}你现在非常的理智,因此你完全不用担心任何事情} -actors.buffs.sanity.crazy_desc=_由于没有光芒的照耀或因为怪物的精神摧残,你现在已经有一点的不理智了。_\n\nΔ目前理智为:%s点Δ\n\nΔ你现在有一点失去理智,建议还是尽管想办法振作起来。Δ +actors.buffs.sanity.crazy_desc=_由于没有光芒的照耀或因为怪物的精神摧残,你现在已经有一点的不理智了。_\n\n}目前理智为:%s点}\n\n}你现在有一点失去理智,建议还是尽管想办法振作起来。} -actors.buffs.sanity.died_desc=Π理智已经离你而去,臆想的怪物,残破的信念,堕落的灵魂,你的恐惧已经成为了了现实Π\n\nΠ目前理智为:%s点Π\n\nΠ你已经快要完全丧失理智了,你能感受到自己的灵魂正在被蚕食,如果还不想办法恢复自己的理智,那么自己将会变成下一个怪物! +actors.buffs.sanity.died_desc=]理智已经离你而去,臆想的怪物,残破的信念,堕落的灵魂,你的恐惧已经成为了了现实]\n\n]目前理智为:%s点]\n\n]你已经快要完全丧失理智了,你能感受到自己的灵魂正在被蚕食,如果还不想办法恢复自己的理智,那么自己将会变成下一个怪物! # actors.hero.heroclass.slime_unlock= 从史莱姆王身上迸裂的原浆所聚合成的新个体,也许是为了模仿击败它的强者,这团小生命有着一定的智能。\n\n_上半段暂无法解锁,敬请期待。_ @@ -387,17 +390,17 @@ actors.mobs.bosses.dmzero$diedblobs.rankings_desc=死于黑渊 actors.mobs.bosses.dmzero$diedblobs.ondeath=你被黑雾毒死了 actors.mobs.bosses.dmzero.name=DMZERO -actors.mobs.bosses.dmzero.desc=DMZERO是死灵巫师为夺取前矮人国王的政权而用黑暗魔法仿造矮人科技所制造的试作型魔法机械。\n\n由于水晶之心的影响,DMZERO被禁锢在另一个异次元空间内,无法影响地牢所在的时间线。\n\nΓ战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n根据商人给出的情报,它的高智能辐射电波影响了这个地牢。封印,摧毁,抑或是遣返。让这里恢复原状吧。 +actors.mobs.bosses.dmzero.desc=DMZERO是死灵巫师为夺取前矮人国王的政权而用黑暗魔法仿造矮人科技所制造的试作型魔法机械。\n\n由于水晶之心的影响,DMZERO被禁锢在另一个异次元空间内,无法影响地牢所在的时间线。\n\n{战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n根据商人给出的情报,它的高智能辐射电波影响了这个地牢。封印,摧毁,抑或是遣返。让这里恢复原状吧。 actors.mobs.bosses.dmzero.notice=侦查到未授权单位……!! actors.mobs.bosses.dmzero.defeated=能量负载6%…… actors.mobs.bosses.dmzero$dm300attackmode.name=DMZERO-黯色 -actors.mobs.bosses.dmzero$dm300attackmode.desc= DMZERO内部的黑暗能量逐渐充盈,将机体染成暗黑色。\n\n黯色只是对颜色的描述。\n\n黯色状态下的DMZERO会使用_腐蚀毒雾_攻击,并且能发射震波击飞敌人。\n\n黯色形态下DMZERO会投掷暗黑能量炸弹,并主动远离任何生物。靠得太近可能会被溢出的黑暗能量麻痹。\n\nΓ战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。 +actors.mobs.bosses.dmzero$dm300attackmode.desc= DMZERO内部的黑暗能量逐渐充盈,将机体染成暗黑色。\n\n黯色只是对颜色的描述。\n\n黯色状态下的DMZERO会使用_腐蚀毒雾_攻击,并且能发射震波击飞敌人。\n\n黯色形态下DMZERO会投掷暗黑能量炸弹,并主动远离任何生物。靠得太近可能会被溢出的黑暗能量麻痹。\n\n{战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。 actors.mobs.bosses.dmzero$dm300attackmode.notice=侦查到未授权单位…… actors.mobs.bosses.dmzero$dm300attackmode.defeated=燃料填充66%…… actors.mobs.bosses.dmzero$dm300spidermode.name=DMZERO-赤色 -actors.mobs.bosses.dmzero$dm300spidermode.desc=DMZERO将所有燃料转化为猩红能量覆盖体表,实体化的猩红能量有着极强的魔法吸收性与驱动性。\n\n赤色如血。\n\n赤色状态下dmzero会使用_酸蚀毒雾_攻击,并且能发射蜘蛛丝困住敌人。\n\n赤色状态下,dmzero将完全免疫魔法伤害,且普通攻击的伤害提升。\n\nΓ战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。 +actors.mobs.bosses.dmzero$dm300spidermode.desc=DMZERO将所有燃料转化为猩红能量覆盖体表,实体化的猩红能量有着极强的魔法吸收性与驱动性。\n\n赤色如血。\n\n赤色状态下dmzero会使用_酸蚀毒雾_攻击,并且能发射蜘蛛丝困住敌人。\n\n赤色状态下,dmzero将完全免疫魔法伤害,且普通攻击的伤害提升。\n\n{战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。 actors.mobs.bosses.dmzero$dm300spidermode.notice=侦查到未授权单位…… actors.mobs.bosses.dmzero$dm300spidermode.defeated=猩红缚茧已完成…… @@ -569,7 +572,7 @@ actors.mobs.redmurderer.name=猩红大盗 actors.mobs.redmurderer.stole=猩红大盗偷走了你的%s!并立刻产生魔法阵瞬移走了。 actors.mobs.redmurderer.carries=\n\n这个猩红大盗携带着一个_%s_。明显是偷来的。 actors.mobs.redmurderer.escapes=猩红大盗带着你的%s卖了个好价钱,她意犹未尽,你还会再次遇见她。 -actors.mobs.redmurderer.desc=猩红大盗是监狱中逃出来的危险怪物,因为地牢的魔力影响而被误导到矮人王国。\n\n矮人国王给了他们可怕的能力。\n-无论如何,他们绝对不是善茬,尽量别和他们正面交锋!\n\nΓ 有一点必须记住,她们偷盗的欲望是无底线的 Γ。 +actors.mobs.redmurderer.desc=猩红大盗是监狱中逃出来的危险怪物,因为地牢的魔力影响而被误导到矮人王国。\n\n矮人国王给了他们可怕的能力。\n-无论如何,他们绝对不是善茬,尽量别和他们正面交锋!\n\n{ 有一点必须记住,她们偷盗的欲望是无底线的 {。 actors.mobs.brownbat.name=棕色蝙蝠 actors.mobs.brownbat.desc=这些脆弱的蝙蝠似乎并不希望你来打扰他们。\n\n由于他们身手敏捷,因此必须使用_偷袭_才能攻击到他们。你很有可能被他们的_利刃的爪牙_刺伤眼睛\n\n他们死亡前都会发出警报,务必小心。 @@ -585,15 +588,15 @@ actors.mobs.gnollshiled.name=豺狼炼药长老 actors.mobs.gnollshiled.desc=豺狼是鬣狗状的类人生物。它们在地牢里游荡,不时向上行动试图向地表发起进攻。豺狼炼药长老是豺狼中的精英,他们善于使用炼金催化剂来让入侵者随机获得DeBuff。 actors.mobs.shopguarddead.name=商店守卫-重力者 -actors.mobs.shopguarddead.desc=当你试图在_商店0元购_的时候,这个Γ不速之客Γ来到你的面前。你深知,你遇到了Γ大麻烦Γ了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_重力者是掌握重力的力量,他们有着操控重力的能力,他们势必要将试图在商店0元购的人全部杀死。_ +actors.mobs.shopguarddead.desc=当你试图在_商店0元购_的时候,这个{不速之客{来到你的面前。你深知,你遇到了{大麻烦{了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_重力者是掌握重力的力量,他们有着操控重力的能力,他们势必要将试图在商店0元购的人全部杀死。_ actors.mobs.shopguarddead.kil=没有用的,不要试图使用漂浮能力。重力由我控制,你切勿再动一分一毫! actors.mobs.shopguard.name=商店守卫-制裁者 -actors.mobs.shopguard.desc=当你试图在_商店0元购_的时候,这个Γ不速之客Γ来到你的面前。你深知,你遇到了Γ大麻烦Γ了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_制裁者是最基础的守卫,他们有着最基础抑制治疗的能力,他们势必要将试图在商店0元购的人全部杀死。_ +actors.mobs.shopguard.desc=当你试图在_商店0元购_的时候,这个{不速之客{来到你的面前。你深知,你遇到了{大麻烦{了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_制裁者是最基础的守卫,他们有着最基础抑制治疗的能力,他们势必要将试图在商店0元购的人全部杀死。_ actors.mobs.shopguard.noha=没有用的,不要试图使用治疗能力。你已经违反地牢商店法则,你的治疗能力将被剥夺! actors.mobs.shopguardeye.name=商店守卫-真眼者 -actors.mobs.shopguardeye.desc=当你试图在_商店0元购_的时候,这个Γ不速之客Γ来到你的面前。你深知,你遇到了Γ大麻烦Γ了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_真眼者将无视任何隐形的玩家,他们势必要将试图在商店0元购的人全部杀死。_ +actors.mobs.shopguardeye.desc=当你试图在_商店0元购_的时候,这个{不速之客{来到你的面前。你深知,你遇到了{大麻烦{了。\n\n雕像装备着精良的护甲,看上去相当坚硬很难对付。\n\n尽管雕像本身是用石头做的,但它装备着的_%1$s_和_%2$s_。\n\n_真眼者将无视任何隐形的玩家,他们势必要将试图在商店0元购的人全部杀死。_ actors.mobs.shopguardeye.nois=没有用的,不要试图使用隐形能力。我们能看见你! actors.buffs.roseshiled.name=玫瑰结界 @@ -670,7 +673,7 @@ actors.mobs.npcs.slyl.readbooks=温馨提示:教程书籍正在翻修,敬请 actors.mobs.npcs.slyl.def_verb=风暴将临 actors.mobs.npcs.slyl.desc=_冷群_是一位掌握冰系力量的魔女,是300年前_寒冰圣都_的管理者。\n由于地下异常的不断出现,她来到这里调查异常的原因。\n看起来她似乎正在摸鱼。 -actors.mobs.npcs.slyl.howuse=你好,我是冷群。\n\n欢迎使用我们_寒冰圣都_的可以扰乱_魔力流_的_魔法金币_,通过它我们可以看见_特定的首领_。\n\n其中_抛动一次_会出现_天痕粘咕(5层),天狗(10层),DM300(15层),矮人国王(20层),Yog(25层)_\nΠ抛动两次Π是_史莱姆王(5层),钻石宝箱王(10层),DM720(15层),矮人将军(20层),Yog-Zot(25层)_\nΞ抛动三次Ξ是_(15层 寒冰魔女)_(抛动三次次仅在_特定楼层显示_)\n\n同时,仅在Boss前一楼层显示,每一次的最后的一次抛动将会决定下一层Boss的生成。\n\n好的,以上就是_使用方法和介绍了_,祝你_地牢冒险愉快_。 +actors.mobs.npcs.slyl.howuse=你好,我是冷群。\n\n欢迎使用我们_寒冰圣都_的可以扰乱_魔力流_的_魔法金币_,通过它我们可以看见_特定的首领_。\n\n其中_抛动一次_会出现_天痕粘咕(5层),天狗(10层),DM300(15层),矮人国王(20层),Yog(25层)_\n]抛动两次]是_史莱姆王(5层),钻石宝箱王(10层),DM720(15层),矮人将军(20层),Yog-Zot(25层)_\n[抛动三次[是_(15层 寒冰魔女)_(抛动三次次仅在_特定楼层显示_)\n\n同时,仅在Boss前一楼层显示,每一次的最后的一次抛动将会决定下一层Boss的生成。\n\n好的,以上就是_使用方法和介绍了_,祝你_地牢冒险愉快_。 actors.mobs.npcs.nxhy.guards=看来你需要更加艰难的试炼了。 actors.mobs.npcs.nxhy.thief=看来你需要更加艰难的试炼了。 @@ -678,7 +681,7 @@ actors.mobs.npcs.nxhy.why=抢劫商店?你可真有趣! actors.mobs.npcs.nxhy.sell=选择一件要出售的物品 actors.mobs.npcs.nxhy.name=那些回忆 -actors.mobs.npcs.nxhy.desc=这是一个拥有很多东西的商人,他的名字叫那些回忆。据说他知道300年前这地牢究竟发生了什么事情的,他在这里等着每一位冒险者的前来。他会给予冒险者相应的补给,但是他从来不告诉冒险者这个地牢的危险程度是多么的高。传言说,他曾经是一个侠客,只不过现在他已经成为了一个商人了。\n\nΓ 请不要攻击他!!!否则他会让你痛不欲生!!! Γ +actors.mobs.npcs.nxhy.desc=这是一个拥有很多东西的商人,他的名字叫那些回忆。据说他知道300年前这地牢究竟发生了什么事情的,他在这里等着每一位冒险者的前来。他会给予冒险者相应的补给,但是他从来不告诉冒险者这个地牢的危险程度是多么的高。传言说,他曾经是一个侠客,只不过现在他已经成为了一个商人了。\n\n{ 请不要攻击他!!!否则他会让你痛不欲生!!! { actors.mobs.npcs.nxhy.greetings=你好,%s。欢迎来到我的大商店。 actors.mobs.npcs.renshop.guards=看来你并不是好人。 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 3ef4c59b4..4581d9be6 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -167,21 +167,21 @@ items.weapon.melee.endingblade.desc_2=\n\n(通过打击敌人减掉)死亡宣告 items.weapon.melee.endingblade.cursed=当你装备上这个武器后,一股无形的力量将你束缚住…… items.weapon.melee.endingblade.donot_eqip=终焉的诅咒已经浸染你的身体,你无力脱下它。 items.weapon.melee.endingblade.procced=终焉:审判一切,归于虚无!!! -items.weapon.melee.endingblade.ac_lastcrystal=Γ激光晶柱Γ -items.weapon.melee.endingblade.ac_diedghost=✦死亡宣告✦ +items.weapon.melee.endingblade.ac_lastcrystal={激光晶柱{ +items.weapon.melee.endingblade.ac_diedghost=|死亡宣告| items.weapon.melee.endingblade.ac_healreset=_千里追魂_ items.weapon.melee.washcrime.name=涤罪 -items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的Γ血迹Γ已然生锈。\n命中有几率释放✦未安息的亡魂✦助战,并给敌人施加✦残废✦效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_ +items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的{血迹{已然生锈。\n命中有几率释放|未安息的亡魂|助战,并给敌人施加|残废|效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_ items.weapon.melee.washcrime$diedghost.name=未安息的亡魂 items.weapon.melee.washcrime$diedghost.desc=肉身已然逝去,灵魂尚未得到安息,脑海遵照主人的意愿,直到真正的死亡降临。 items.weapon.melee.bloodthirstythorn.name=嗜血荆棘 -items.weapon.melee.bloodthirstythorn.desc=鲜血腐蚀所残留的倒悬树之刺。舍弃了仅存的秩序,独留狂暴与混乱。\n-攻击时有概率给敌人施加Γ流血和恐惧Γ效果。\n-特性:升级机制与蓄血圣杯相同\n_+3_前攻击将概率流失自身2点生命值并刺伤自己\n_+5_时取消负面影响,攻击距离+1,+20%精准\n_+10_时每次有效攻击将有大概率汲取一定生命力回馈给自身\n_这是一把十分精准的武器_ +items.weapon.melee.bloodthirstythorn.desc=鲜血腐蚀所残留的倒悬树之刺。舍弃了仅存的秩序,独留狂暴与混乱。\n-攻击时有概率给敌人施加{流血和恐惧{效果。\n-特性:升级机制与蓄血圣杯相同\n_+3_前攻击将概率流失自身2点生命值并刺伤自己\n_+5_时取消负面影响,攻击距离+1,+20%精准\n_+10_时每次有效攻击将有大概率汲取一定生命力回馈给自身\n_这是一把十分精准的武器_ items.weapon.melee.bloodthirstythorn.stats_desc=这株植物不再抗拒你,并且发生了一些变化 items.weapon.melee.bloodthirstythorn.stats_descx=\n\n这株植物成长到了极限,或许会通过某种方式给予回馈 -items.weapon.melee.bloodthirstythorn.good=你的生命精华已经完全浸染吾等,作为尔等忠诚的报答,你会获得一个Γ诅咒但含有1~3等级的圣杯Γ作为补偿。 +items.weapon.melee.bloodthirstythorn.good=你的生命精华已经完全浸染吾等,作为尔等忠诚的报答,你会获得一个{诅咒但含有1~3等级的圣杯{作为补偿。 items.weapon.melee.bloodthirstythorn.ac_prick=血祭 items.weapon.melee.bloodthirstythorn.yes=是的,我知道我在做什么 @@ -273,7 +273,7 @@ items.books.bookslist.nokingmobbooks.anmazing=你解读书中的奥秘,你领 #MLPDPLAYBOOKS items.books.playbookslist.moneymorebooks.name=《财富神教教典》 -items.books.playbookslist.moneymorebooks.desc=_财富戒指_是最好的功能性戒指,它拥有无限可能,你想要的,它都可以给你!快来加入吧!\n\n切记:新教徒能力不足,无法掌控_财富流派_,不可将Γ升级全部给Γ财富戒指。否则届时你将无法在探索地牢之中走下去。\n\n试试让幽灵穿上Γ分身诅咒Γ甲,让她在Γ鱼群中Γ玩耍。 +items.books.playbookslist.moneymorebooks.desc=_财富戒指_是最好的功能性戒指,它拥有无限可能,你想要的,它都可以给你!快来加入吧!\n\n切记:新教徒能力不足,无法掌控_财富流派_,不可将{升级全部给{财富戒指。否则届时你将无法在探索地牢之中走下去。\n\n试试让幽灵穿上{分身诅咒{甲,让她在{鱼群中{玩耍。 items.books.playbookslist.moneymorebooks.author=--作者:_迷茫_ items.books.playbookslist.pinkrandombooks.name=《闲天随笔》 @@ -355,7 +355,7 @@ items.weapon.melee.blackdog.name=黑狗爪 items.weapon.melee.blackdog.desc=看我疯狂乱抓! items.potions.potionofnowater.name=生石灰固体理想试剂 -items.potions.potionofnowater.desc=与水反应,可将_水_除去。能够与_3*3_范围内的水完全反应而除去。\n反应为极其理想的完全反应,不能用常识理解。\n\n_缺点_ _产生大量热_,足以_点燃周围_,扔在生物脸上有_致盲效果_。\n帕秋莉提出配方,中国制造。\nΔ源码来自:古明地觉地牢Δ +items.potions.potionofnowater.desc=与水反应,可将_水_除去。能够与_3*3_范围内的水完全反应而除去。\n反应为极其理想的完全反应,不能用常识理解。\n\n_缺点_ _产生大量热_,足以_点燃周围_,扔在生物脸上有_致盲效果_。\n帕秋莉提出配方,中国制造。\n}源码来自:古明地觉地牢} items.superdewvial.name=荧光露珠瓶 items.superdewvial.desc=这个发出荧光的露珠瓶可以带200滴露珠\n同时它的最大容量是_200滴_露珠。\n可以祝福十字架十次好东西! @@ -819,6 +819,7 @@ items.artifacts.timekeepershourglass.deactivate=你取消了时间冻结。 items.artifacts.timekeepershourglass.no_charge=你的沙漏充能还不足以用来激活。 items.artifacts.timekeepershourglass.cursed=你不能使用受诅咒的沙漏。 items.artifacts.timekeepershourglass.onstasis=你周遭的世界似乎就在这一瞬间变化了。 +items.artifacts.timekeepershourglass.onstasiss=受圣火魔女魔力影响,你不能在雪凛峡谷静止自己。 items.artifacts.timekeepershourglass.onfreeze=你周围的一切突然都彻底静止下来。 items.artifacts.timekeepershourglass.stasis=使我彻底静止 items.artifacts.timekeepershourglass.freeze=冻结周围时间 @@ -849,7 +850,7 @@ items.artifacts.unstablespellbook.desc_empowered=被你放进书中的卷轴闪 items.artifacts.unstablespellbook.read_empowered=被你放入魔典的卷轴都充满了魔法能量。你可以自主选择导引出该卷轴的正常或秘卷能力。\n\n如果选择释放秘卷能力,则会消耗2点魔典充能。 items.artifacts.wraithamulet.name=暗金宝石护符 -items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候,你还可以对敌人实行一次暗夜突袭,对目标造成Γ真实即死Γ伤害,并立刻瞬移到指定目标位置。\n\n如果是首领,则受到_最大生命值的10%伤害_。护符能量将会随着时间自动恢复,所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符,自从她在地牢中失踪后,这个护符就一直被遗弃在这里…… +items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候,你还可以对敌人实行一次暗夜突袭,对目标造成{真实即死{伤害,并立刻瞬移到指定目标位置。\n\n如果是首领,则受到_最大生命值的10%伤害_。护符能量将会随着时间自动恢复,所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符,自从她在地牢中失踪后,这个护符就一直被遗弃在这里…… items.artifacts.wraithamulet.ghost=你遁入了虚无,你的身体变得透明了。 items.artifacts.wraithamulet.cooddown=你的护符能量正在冷却,你暂时无法使用任何能力。 items.artifacts.wraithamulet.nochareup=你的护符能量不足,你无法使用任何能力。 @@ -1909,7 +1910,7 @@ items.weapon.melee.flail.desc=铁链上附着的一个带刺的钢球。笨重 items.weapon.melee.gauntlet.name=碧灰双刃 items.weapon.melee.gauntlet.typical_stats_desc=这件武器通常能格挡0~%d点伤害。通过升级可以使格挡量增长。 items.weapon.melee.gauntlet.stats_desc=这是一套极快的武器。\n\n这件武器通常能格挡0~%d点伤害。通过升级可以使格挡量增长。 -items.weapon.melee.gauntlet.desc=碧绿的宝石加上纯黑的宝石再加上Δ矮人工匠—Mr.LunRes的Δ鬼斧神工,造就了这个无与伦比的产物。它可以在攻击的时候有几率对敌人造成Γ鬼磷燃烧Γ效果,但同时会让攻击者有概率Γ获得3回合的眩晕Γ效果。不过,这个Δ武器的潜能Δ无比强大,因此它Δ需要的力量Δ也更加强大。如果武器等级+3以上,则没有反噬效果。 +items.weapon.melee.gauntlet.desc=碧绿的宝石加上纯黑的宝石再加上}矮人工匠—Mr.LunRes的}鬼斧神工,造就了这个无与伦比的产物。它可以在攻击的时候有几率对敌人造成{鬼磷燃烧{效果,但同时会让攻击者有概率{获得3回合的眩晕{效果。不过,这个}武器的潜能}无比强大,因此它}需要的力量}也更加强大。如果武器等级+3以上,则没有反噬效果。 items.weapon.melee.glaive.name=关刀 items.weapon.melee.glaive.stats_desc=这是一件相当缓慢的武器。\n这把武器有额外的攻击距离。 @@ -2001,7 +2002,7 @@ items.weapon.melee.sword.desc=平衡性良好的剑。不算太大,但是依 items.weapon.melee.warhammer.name=白金真银战锤大剑 items.weapon.melee.warhammer.stats_desc=这是一把十分精准的武器但攻速较慢。\n\n注意:_恐惧过程中再次攻击敌人会激怒敌人,从而失效_。 -items.weapon.melee.warhammer.desc=外表看起来像_大剑_,实质却是被Γ地牢的魔法Γ扭曲成这个样子。\n\n别看它看起来威力不大,实际上非常危险。\n\n它可以使在攻击的过程可能对Δ敌人造成恐惧+眩晕+燃烧Δ效果。随着武器等级上升,效果会更强。\n\n但同时,攻击方会被Γ战锤大剑Γ有概率反噬,每次成功对敌人造成效果后Γ获得6回合易伤Γ效果。如果武器等级+3以上,则没有反噬效果。 +items.weapon.melee.warhammer.desc=外表看起来像_大剑_,实质却是被{地牢的魔法{扭曲成这个样子。\n\n别看它看起来威力不大,实际上非常危险。\n\n它可以使在攻击的过程可能对}敌人造成恐惧+眩晕+燃烧}效果。随着武器等级上升,效果会更强。\n\n但同时,攻击方会被{战锤大剑{有概率反噬,每次成功对敌人造成效果后{获得6回合易伤{效果。如果武器等级+3以上,则没有反噬效果。 items.weapon.melee.whip.name=冰霜长剑 items.weapon.melee.whip.stats_desc=这把武器拥有_惊人的攻击距离_并且可能对_敌人造成冻伤效果_。 @@ -2208,6 +2209,7 @@ items.heap.crystal_chest_desc=你看得见里面的%s,但你需要一枚水晶 items.heap.artifact=一件神器 items.heap.wand=一根法杖 items.heap.ring=一枚戒指 +items.heap.unknow=未知物品 items.heap.tomb=坟墓 items.heap.tomb_desc=这个坟墓里或许埋葬着一些有用的东西,但墓主肯定是不会让你拿走的。 items.heap.skeleton=遗骸 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 839503858..84c922a3d 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -166,7 +166,7 @@ badges$badge.ghostdage.title=白幽祝福 badges$badge.ghostdage.desc=_在幽妹处获得一次+4品质武器或护甲\n\n_(镀层需求:+5品质武器) badges$badge.dageto.title=白幽神谕 -badges$badge.dageto.desc=在幽妹处获得一次_+5_品质武器或护甲\n\nΞ你已成功镀层Ξ +badges$badge.dageto.desc=在幽妹处获得一次_+5_品质武器或护甲\n\n[你已成功镀层[ badges$badge.endied.title=终焉之旅 badges$badge.endied.desc=_(获得彩蛋武器终焉)_,目前版本暂时无法获得 @@ -284,23 +284,24 @@ challenges.champion_enemies=精英战场 challenges.champion_enemies_desc=会升级的不止你一个!\n\n・普通敌人刷出时有 1/8 \ 的机率拥有特殊的精英属性。\n・精英敌人刷出时会立即醒来。\n・精英敌人免疫腐化效果。\n\n精英敌人有八种:\n_烈焰(橙色):_ 近战伤害 \ +25% 且带有点燃效果,免疫火焰,死亡时引燃周围。\n_索敌(紫色):_ 近战伤害 +25%,近战范围 +4。\n_敌法(绿色):_ 受到伤害 -25%,拥有魔法免疫。\n_巨型(蓝色):_ 受到伤害 -75%,近战范围 +1,无法进入门与过道。\n_祝福(黄色):_ 精准与躲避 +200%。\n_成长(红色):_ 精准、躲避、攻击伤害与有效生命值 +20%。每过 3 回合会再增长 1%。\n_鬼磷(天蓝色):_ 近战伤害 +15% 且带有磷火效果,免疫火焰与磷火。\n_苦痛(暗紫色):_受到的伤害延缓释放,近战伤害+45%_ -challenges.stronger_bosses=梦魇Boss[尚未完成] -challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_钻石宝箱王_: 生命+20%\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从 + +challenges.stronger_bosses=梦魇领袖-测试版 +challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_克里弗斯之果:_\n_-_ 第二阶段:触手和本体可以远程攻击,并造成更加大的威胁\n_-_ 触手和本体在战斗过程中拥有额外护盾加成。\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从 actors.char.aquaphobia=你受到了来自水的伤害! -challenges.pro=Δ开发者模式Δ +challenges.pro=}开发者模式} challenges.pro_desc=供测试和开发使用\n开局_几乎是全物品_!同时,你将无法通关!也无法记录在排行榜上面。 challenges.traditional = 现实之声-T1挑战 challenges.hard = 梦境之声-T2挑战 challenges.warning = 寻觅之声-T3挑战 challenges.test = 测试时间-DEBUG -challenges.rlpt = Π支离破碎Π +challenges.rlpt = ]支离破碎] challenges.rlpt_desc=地下涌动的神秘力量正在渐渐腐蚀这里,这里不过是而言是另一场噩梦。\n\n从第六层开始,怪物必定有几个不是本大层的怪物,但不会超过两级。一般来说,在监狱遇到矮人层的怪物几率很小。通常遇到矿洞层的怪物。 -challenges.sbsg = Π基因突变Π +challenges.sbsg = ]基因突变] challenges.sbsg_desc=地牢中的神秘魔力让一些生物发生了重大的变化\n-所有生物都会因为突变激素变得各不相同,给探索地牢的脚步带来更大的困难。\n-敌人有5种突变类型:\n突变失败体_(30%概率)_:近战伤害减少35%,移速提高到1.3。\n突变爆炸体_(25%概率)_:移速减少50%,攻击力降低30%,但死亡时拥有爆炸伤害。\n突变完全体_(20%概率)_:移速和攻击力各提高25%,且拥有30%伤害减免。\n突变危险体_(15%概率)_:攻击力提升20%,攻击有10%概率造成流血。死亡时有5%概率立刻向本层发出警报。\n突变烟雾体_(10%概率)_:攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n_特别说明:如果开启精英强敌,词条会和精英词条共存_ -challenges.exsg = Π药水癔症Π +challenges.exsg = ]药水癔症] challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-1\n灵视药剂--60%概率喝后失明5回合\n隐形药剂--60%概率喝后立刻怒吼\n极速药剂--60%概率喝后立刻残废8回合\n==========================\n小型口粮-吃后立刻获得极速4回合\n冷冻生肉片-吃后获得奥术护盾\n全肉大饼-吃后立刻获得8回合极速,且有大概率+1力量(_随着力量的追加,获得力量的概率会渐渐变低_)\n\n高级药水_(合剂/魔药)_不受影响\n不知道何种原因,大部分正面药水你都感觉有毒!\n你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 challenges.icedied = 雪虐风饕(未完成) diff --git a/core/src/main/assets/messages/scenes/scenes.properties b/core/src/main/assets/messages/scenes/scenes.properties index 7af338677..790d99b06 100644 --- a/core/src/main/assets/messages/scenes/scenes.properties +++ b/core/src/main/assets/messages/scenes/scenes.properties @@ -48,18 +48,18 @@ scenes.gamescene.died_5= 地牢的环境复杂多变,只有细心之人才能 scenes.interlevelscene.dialog_1=合理_运用物品_,\n\n获取_最终胜利_! scenes.interlevelscene.dialog_2=你知道吗?\n\n_左下角的放大镜_是一个好东西 scenes.interlevelscene.dialog_3=常去看_更新记录_的好孩子,\n\n就不会因为_新改动_而茫然. -scenes.interlevelscene.dialog_4=魔绫像素地牢-始于_2021年2月_,\n\n感谢引导者_Ren_和Γ红龙Γ。 +scenes.interlevelscene.dialog_4=魔绫像素地牢-始于_2021年2月_,\n\n感谢引导者_Ren_和{红龙{。 scenes.interlevelscene.dialog_5=有些时候_直面失败_,\n\n或许并不是什么坏事 scenes.interlevelscene.dialog_6=_小心奸商!!!_\n\n他甚至不会卖给你_未诅咒的物品_! -scenes.interlevelscene.dialog_7=Δ种子Δ是个好东西,\n\n_关键看你_会不会用 +scenes.interlevelscene.dialog_7=}种子}是个好东西,\n\n_关键看你_会不会用 scenes.interlevelscene.dialog_8=你的运气常常是通关的必要东西之一,当然你可以试试自定义种子来盘爽局! -scenes.interlevelscene.dialog_9=呐呐呐,\n\n你听说过Ξ水晶之城Ξ的谣言吗? -scenes.interlevelscene.dialog_10=_总是暴毙?_这可能并不是你的问题。\n\nΞ总之,不要气馁,菜就多练练Ξ。 +scenes.interlevelscene.dialog_9=呐呐呐,\n\n你听说过[水晶之城[的谣言吗? +scenes.interlevelscene.dialog_10=_总是暴毙?_这可能并不是你的问题。\n\n[总之,不要气馁,菜就多练练[。 scenes.interlevelscene.dialog_11=魔绫像素地牢,绝望与希望并存。 scenes.interlevelscene.dialog_12=寻找_红龙之王_,\n\n剿灭_精英敌人_。 -scenes.interlevelscene.dialog_13=不是史神:\n\n请Γ小心咕咕!!! -scenes.interlevelscene.dialog_14=萌新岚:\n\n欢迎来到Γ火炎焱燚Γ地牢,本地牢Γ全面Γ戒烟.\n\n请不要在Γ过道内、木门口、地牢房间Γ吸烟。\n\n谢谢合作,祝您Δ冒险愉快Δ呢。 -scenes.interlevelscene.dialog_15=你知道吗?\n\n作者游玩的第一个地牢\n\n是Δ阿飞的不思议地牢Δ呢。 +scenes.interlevelscene.dialog_13=不是史神:\n\n请{小心咕咕!!! +scenes.interlevelscene.dialog_14=萌新岚:\n\n欢迎来到{火炎焱燚{地牢,本地牢{全面{戒烟.\n\n请不要在{过道内、木门口、地牢房间{吸烟。\n\n谢谢合作,祝您}冒险愉快}呢。 +scenes.interlevelscene.dialog_15=你知道吗?\n\n作者游玩的第一个地牢\n\n是}阿飞的不思议地牢}呢。 scenes.interlevelscene.dialog_16=_太难打了?试着做一些新东西_\n\n让你的敌人只能抱头鼠窜! scenes.interlevelscene.dialog_17=_雪凛峡谷_,商人们的总部 scenes.interlevelscene.dialog_18=魔绫像素地牢2岁啦! @@ -194,7 +194,7 @@ scenes.gamenewsscene.read_more=继续游玩 scenes.gamenewsscene$articlebutton.update=最新版本! scenes.gamenewsscene$articlebutton.desc=恭喜!!!\n你的游戏版本为最新,请点击下方继续游玩的按钮以方便你继续游玩这个游戏。\n最新版更新内容如下所示: -scenes.gamenewsscene$articlebutton.download=Π更新版本Π +scenes.gamenewsscene$articlebutton.download=]更新版本] scenes.gamenewsscene$articlebutton.force_download=点我下载正版并关闭游戏 scenes.gamenewsscene$articlebutton.okay=继续游玩 scenes.gamenewsscene$newsinfo.metered_network=当连接到一个流量计费的网络,比如移动数据时,为了保证你的话费,我们不会发送更新数据给你。\n\n请连接WIFI后再次尝试,现在可以点击下方继续游玩继续游戏。 @@ -253,13 +253,13 @@ scenes.kamuletscene.text=骄傲、妒忌、愤怒,伤悲、贪婪、贪食、 scenes.guidescene.title=魔绫像素地牢指南书 scenes.guidescene.pages=12 scenes.guidescene.title_0=写在前面 -scenes.guidescene.page_0=欢迎来到魔绫的像素地牢,这个地牢Δ基于1.2.3破碎Δ。\n\n这里是新手必读指南书。\n\n如果你是第一次游玩本地牢,请一定先看看这个指南。\n\nΔ它绝对对你今后游玩有益处。 +scenes.guidescene.page_0=欢迎来到魔绫的像素地牢,这个地牢}基于1.2.3破碎}。\n\n这里是新手必读指南书。\n\n如果你是第一次游玩本地牢,请一定先看看这个指南。\n\n}它绝对对你今后游玩有益处。 scenes.guidescene.title_1=关于难度 scenes.guidescene.page_1=诚然,难度是有的,不过肯定比不上赫拉克勒斯的十二试炼。 \n\n 事实上它的难度被认为控制在了一个可以接受的水平,如果不适应或感觉太难,很可能是因为没有熟悉它较为独特的机制,你可能需要更细致和灵活的战略战术才能在地牢里无往不利,所以接下来的内容会很好地帮助你。\n\n 放轻松,虽然它的要求有点高,但凡人又不是非要通关不可。 scenes.guidescene.title_2=鉴定物品 -scenes.guidescene.page_2=无知者无畏,然而更经常无能。 \n\n _药水的颜色与卷轴的符文_与它们的作用在每个地牢中都不一样,在你使用或鉴定它们之前,知识还处于混沌之中。 \n\n 地牢里的装备在_漫长的时间_中也许吸收了力量,但Γ也可能磨损甚至被施下恶毒的诅咒Γ。穿上一件被诅咒的装备会让你陷入不利境地,但也不会立刻宣判你的死亡。\n\n 通过_升级、鉴定以及驱邪_等手段,你可以很容易地规避掉这些风险,有备无患。 +scenes.guidescene.page_2=无知者无畏,然而更经常无能。 \n\n _药水的颜色与卷轴的符文_与它们的作用在每个地牢中都不一样,在你使用或鉴定它们之前,知识还处于混沌之中。 \n\n 地牢里的装备在_漫长的时间_中也许吸收了力量,但{也可能磨损甚至被施下恶毒的诅咒{。穿上一件被诅咒的装备会让你陷入不利境地,但也不会立刻宣判你的死亡。\n\n 通过_升级、鉴定以及驱邪_等手段,你可以很容易地规避掉这些风险,有备无患。 scenes.guidescene.title_3=搜索查寻 -scenes.guidescene.page_3=真相往往不会明摆在那里,尤其是对粗心的人而言。 \n\n 记得随时停下脚步休整或观察周遭,以寻求最佳方案。Γ鲁莽地一头冲进敌阵也许很勇敢,但不明智。 Γ \n\n 不要忘记搜索,地牢里_暗门和陷阱遍布,双击放大镜按钮来发现它们的秘密_。 +scenes.guidescene.page_3=真相往往不会明摆在那里,尤其是对粗心的人而言。 \n\n 记得随时停下脚步休整或观察周遭,以寻求最佳方案。{鲁莽地一头冲进敌阵也许很勇敢,但不明智。 { \n\n 不要忘记搜索,地牢里_暗门和陷阱遍布,双击放大镜按钮来发现它们的秘密_。 scenes.guidescene.title_4=书籍祝福 scenes.guidescene.page_4=在地牢里面,你总是你看到各种各样的书籍。\n\n-它们记录了_地牢的一些变故和一些骇人听闻的故事。_\n\n-当然,你如果想使用书籍的力量,这就需要一点方法。\n\n-鉴定你的书籍,这样你就可以阅读它们。不同的书籍将会有不同的效果,祝战斗愉快! scenes.guidescene.title_5=任务系统 diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index b6fc3b529..cd830ea56 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -229,7 +229,7 @@ ui.changelist.mlpd.vm0_5_x_changes.crashsx=新崩溃界面 ui.changelist.mlpd.vm0_5_x_changes.crashsxlogs=崩溃界面2.0正式启用!Power By UCE Handler! ui.changelist.mlpd.vm0_5_x_changes.ankh=十字架改动 -ui.changelist.mlpd.vm0_5_x_changes.ankhlogs=十字架现在有Ξ更加的强力Ξ效果,复活后可以获得_短暂的治疗效果_。 +ui.changelist.mlpd.vm0_5_x_changes.ankhlogs=十字架现在有[更加的强力[效果,复活后可以获得_短暂的治疗效果_。 ui.changelist.mlpd.vm0_5_x_changes.dg24=新秘卷-炎魔秘卷 ui.changelist.mlpd.vm0_5_x_changes.dg24logs=合成方案:自己去炼金合成表看( @@ -248,10 +248,10 @@ ui.changelist.mlpd.vm0_5_x_changes.bat=新怪物:棕色蝙蝠 ui.changelist.mlpd.vm0_5_x_changes.batlogs=危险而又令人捉摸不透的地牢原住民,它们的攻击的可以让你_失明_。\n\n一旦死亡,它们会给你一个_大惊喜_。\n\n它们会在_监狱层_刷新! ui.changelist.mlpd.vm0_5_x_changes.kingno=史莱姆王子改动 -ui.changelist.mlpd.vm0_5_x_changes.kingnologs=1.减少了Δ闪避数值Δ\n-2.减少了Δ血量Δ\n-3.攻速上升,召唤的Γ怪物击败后不再掉落任何物品Γ。\n-满血开启秒杀模式 +ui.changelist.mlpd.vm0_5_x_changes.kingnologs=1.减少了}闪避数值}\n-2.减少了}血量}\n-3.攻速上升,召唤的{怪物击败后不再掉落任何物品{。\n-满血开启秒杀模式 ui.changelist.mlpd.vm0_5_x_changes.hxblr=血月魔盾猎人改动 -ui.changelist.mlpd.vm0_5_x_changes.hxblrlogs=1.血量随机化数值减小!\n-2.如果被猎人重击,那么则会触发Γ诅咒燃烧Γ。\n-3.血月魔盾猎人现在更不容易将你的武器击飞。 +ui.changelist.mlpd.vm0_5_x_changes.hxblrlogs=1.血量随机化数值减小!\n-2.如果被猎人重击,那么则会触发{诅咒燃烧{。\n-3.血月魔盾猎人现在更不容易将你的武器击飞。 ui.changelist.mlpd.vm0_5_x_changes.fireball=新机制:自讨苦吃 ui.changelist.mlpd.vm0_5_x_changes.fireballlogs=如果你没有处理冰雪矿洞的寒冰结晶或恶魔层的东西,那么,Boss将会遇到最难打的。 @@ -529,4 +529,8 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x70=-V0.6.2-Beta4.9\n1.修复游戏 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x71=-V0.6.2-Beta5\n1.修复评分规则错误问题\n2.少量文案修复\n3.修复少量小型错误 +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x72=-V0.6.3-Beta1\n1.修复一些小型错误\n2.修复炖肉恐药癔症的错误\n3.修复一些崩溃错误\n4.修复一些文案错误 + +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x73=-V0.6.3-Beta1.5\n1.修复时光沙漏在雪凛峡谷的一些问题\n2.修复梦魇领袖的魔化藤为法伤的问题,并延长母体酸蚀释放间隔\n3.修复一些小型错误 + //ui.changelist.mlpd.vm0_5_x_changes.xxx// \ No newline at end of file diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 6d12a8ee4..40f13434e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -95,6 +95,14 @@ public class Assets { } public static class Interfaces { + + //Boss 贴图 + + public static final String QliPhoth_Title = "interfaces/bosslogo/qliphoth-title.png"; + public static final String QliPhoth_Clear = "interfaces/bosslogo/qliphoth-clear.png"; + + + public static final String ARCS_BG = "interfaces/arcs1.png"; public static final String ARCS_FG = "interfaces/arcs2.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index 4fc098134..7c7180018 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -56,8 +56,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet; import com.shatteredpixel.shatteredpixeldungeon.items.bags.HerbBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.KingBag; @@ -77,7 +77,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlam import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul; -import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfFlameCursed; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby; @@ -97,6 +96,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfGodIce; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfScale; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfTransfusion; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger; @@ -161,6 +161,7 @@ public enum HeroClass { new LockSword().quantity(1).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect(); new MysteryMeat().quantity(100).identify().collect(); + new TimekeepersHourglass().quantity(1).identify().collect(); Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f); new WraithAmulet().quantity(1).identify().collect(); @@ -169,6 +170,7 @@ public enum HeroClass { new WashCrime().quantity(1).identify().collect(); new MagicTorch().quantity(1).identify().collect(); + new WandOfTransfusion().quantity(2).identify().collect(); new TengusMask().quantity(1).identify().collect(); new ScrollOfIdentify().quantity(45).identify().collect(); new ScrollOfTransmutation().quantity(45).identify().collect(); @@ -194,8 +196,6 @@ public enum HeroClass { new AquaBlast().quantity(1).identify().collect(); new TestBooks().quantity(1).identify().collect(); new WandOfCorruption().quantity(1).identify().collect(); - new MasterThievesArmband().quantity(1).identify().collect(); - new MetalShard().quantity(1).identify().collect(); new ChaliceOfBlood().quantity(1).identify().collect(); new LifeTreeSword().quantity(1).identify().collect(); new Sai().quantity(1).identify().collect(); @@ -218,6 +218,8 @@ public enum HeroClass { Dungeon.gold = 600000000; hero.STR = 27; hero.lvl = 30; + hero.HP=hero.HT=120; + hero.exp=-1; } hero.heroClass = this; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/IceGolem.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/IceGolem.java index ee8dba824..dcd3ed308 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/IceGolem.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/IceGolem.java @@ -99,7 +99,7 @@ public class IceGolem extends Mob implements Callback { } public int attackProc(Char var1, int var2) { int var3 = var2; - if (Random.Int(3) == 0) { + if (Random.Int(3) == 0 && var1 == Dungeon.hero) { var3 = var2 +10; TeleportationTrap var4 = new TeleportationTrap(); var4.pos = super.pos; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java index d72442f98..b2831a2ad 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruits.java @@ -1,5 +1,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.crivusfruitslevel2; import static com.shatteredpixel.shatteredpixeldungeon.levels.ForestBossLevel.BRatKingRoom; import static com.shatteredpixel.shatteredpixeldungeon.levels.ForestBossLevel.ForestBossLasherTWOPos; @@ -9,14 +10,17 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.Level.set; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; @@ -27,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; import com.shatteredpixel.shatteredpixeldungeon.items.food.CrivusFruitsFood; @@ -36,19 +41,27 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.items.quest.CrivusFruitsFlake; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LifeTreeSword; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.ConeAOE; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CrivusFruitsSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.Camera; import com.watabou.noosa.audio.Sample; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; +import java.util.HashSet; + //克里弗斯之果 本体 public class CrivusFruits extends Mob { - + //the actual affected cells + private HashSet affectedCells; + //the cells to trace fire shots to, for visual effects. + private HashSet visualCells; //基本属性 { spriteClass = CrivusFruitsSprite.class; @@ -58,7 +71,7 @@ public class CrivusFruits extends Mob { EXP = 20; - state = PASSIVE; + state = WANDERING; properties.add(Property.IMMOVABLE); properties.add(Property.BOSS); @@ -99,7 +112,10 @@ public class CrivusFruits extends Mob { if (!BossHealthBar.isAssigned()) { BossHealthBar.assignBoss(this); GLog.n(Messages.get(this, "notice")); + GameScene.flash(0x8000cc00); + Camera.main.shake(1f,3f); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); + GameScene.bossReady(); for (Char ch : Actor.chars()){ if (ch instanceof DriedRose.GhostHero){ ((DriedRose.GhostHero) ch).sayBoss(); @@ -111,7 +127,7 @@ public class CrivusFruits extends Mob { //回合 @Override public void damage(int dmg, Object src) { - LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); + LockedFloor lock = hero.buff(LockedFloor.class); if (lock != null) lock.addTime(dmg * 2); super.damage(dmg, src); } @@ -123,12 +139,17 @@ public class CrivusFruits extends Mob { if(!crivusfruitslevel2){ GameScene.add(Blob.seed(pos, HP<65 ? 50 : 30, DiedBlobs.class)); } else { + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 25f ); + shoot(this, hero.pos); + } GameScene.add(Blob.seed(pos, HP<36 ? 150 : 50, DiedBlobs.class)); } //判定是否第一次加进入游戏 - if( Dungeon.hero.buff(LockedFloor.class) != null){ + if( hero.buff(LockedFloor.class) != null){ notice(); } state = PASSIVE; @@ -143,6 +164,9 @@ public class CrivusFruits extends Mob { CrivusFruitsLasher csp = new CrivusFruitsLasher(); csp.pos = i; GameScene.add(csp); + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + Buff.affect(csp, Barrier.class).setShield((int) (2.4f * csp.HT + 10)); + } } Sample.INSTANCE.play( Assets.Sounds.CHALLENGE ); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); @@ -163,16 +187,32 @@ public class CrivusFruits extends Mob { GameScene.updateMap( WIDTH*11+25 ); } + + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 3f ); + shoot(this, hero.pos); + } + + } //三阶段 if(HP==36){ GameScene.flash(0x80009c9c); HP=HT=35; + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + Buff.affect(this, Barrier.class).setShield((int) (3f * this.HT + 10)); + } GLog.n(Messages.get(this,"died!!!")); GLog.w(Messages.get(this,"!!!")); Sample.INSTANCE.play( Assets.Sounds.CHALLENGE ); this.sprite.showStatus(CharSprite.NEGATIVE, "!!!"); + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){ + sprite.attack( hero.pos ); + spend( 3f ); + shoot(this, hero.pos); + } } return super.act(); @@ -184,7 +224,7 @@ public class CrivusFruits extends Mob { //Boss死亡后改变描述 @Override public String tileDesc() { - return Messages.get(this, Dungeon.hero.buff(LockedFloor.class) != null? "desc" : "csed" ); + return Messages.get(this, hero.buff(LockedFloor.class) != null? "desc" : "csed" ); } @Override protected void evolve() { @@ -200,9 +240,9 @@ public class CrivusFruits extends Mob { cell = i + j*Dungeon.level.width(); if (cur[cell] > 0 && (ch = Actor.findChar( cell )) != null) { if (!ch.isImmune(this.getClass())) { - if( Dungeon.hero.buff(LockedFloor.class) != null) { + if( hero.buff(LockedFloor.class) != null) { //不为空为4 否则就是0 - ch.damage(Dungeon.hero.buff(LockedFloor.class) != null ? damage : 0, this); + ch.damage(hero.buff(LockedFloor.class) != null ? damage : 0, this); Statistics.bossScores[0] -= 200; } } @@ -272,12 +312,51 @@ public class CrivusFruits extends Mob { if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { GetBossLoot(); } - - - - } + public void shoot(Char ch, int pos){ + final Ballistica shot = new Ballistica( hero.pos, pos, Ballistica.MAGIC_BOLT); + fx(shot, ch); + } + ConeAOE cone; + + protected void fx(Ballistica bolt, Char ch ) { + //need to perform flame spread logic here so we can determine what cells to put flames in. + affectedCells = new HashSet<>(); + visualCells = new HashSet<>(); + + int maxDist = 2 + 4*4; + int dist = Math.min(bolt.dist, maxDist); + + for (int i = 0; i < PathFinder.CIRCLE8.length; i++){ + if (bolt.sourcePos+PathFinder.CIRCLE8[i] == bolt.path.get(1)){ + break; + } + } + + cone = new ConeAOE( bolt, + maxDist, + 80 + 40,Ballistica.MAGIC_BOLT); + + visualCells.remove(bolt.path.get(dist)); + + for (Ballistica ray : cone.rays){ + ((MagicMissile)ch.sprite.parent.recycle( MagicMissile.class )).reset( + MagicMissile.SHADOW_CONE, + ch.sprite, + ray.path.get(ray.dist), + null + ); + } + + GameScene.add(Blob.seed(hero.pos, 120, CorrosiveGas.class)); + + if(Dungeon.level.heroFOV[bolt.sourcePos] || Dungeon.level.heroFOV[bolt.collisionPos]){ + Sample.INSTANCE.play( Assets.Sounds.ZAP ); + } + } + + { immunities.add( Paralysis.class ); immunities.add( Amok.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java index f61542083..503f27ab7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrivusFruitsLasher.java @@ -2,6 +2,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -21,9 +23,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.levels.ForestBossLevel; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RotLasherSprite; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; import com.watabou.utils.Random; public class CrivusFruitsLasher extends Mob { @@ -36,15 +42,66 @@ public class CrivusFruitsLasher extends Mob { EXP = 1; -// loot = Generator.Category.SEED; -// lootChance = 0.35f; - state = WANDERING = new Waiting(); properties.add(Property.IMMOVABLE); properties.add(Property.MINIBOSS); } + @Override + protected boolean canAttack( Char enemy ) { + if(Dungeon.isChallenged(Challenges.STRONGER_BOSSES) && Statistics.crivusfruitslevel2){ + return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos; + } + return super.canAttack(enemy); + } + + protected boolean doAttack( Char enemy ) { + + if (Dungeon.level.adjacent( pos, enemy.pos )) { + + return super.doAttack( enemy ); + + } else { + + if (sprite != null && (sprite.visible || enemy.sprite.visible) && Dungeon.isChallenged(Challenges.STRONGER_BOSSES)) { + sprite.zap( enemy.pos ); + return false; + } else { + zap(); + return true; + } + } + } + + + + private void zap() { + spend( 3f ); + + if (hit( this, enemy, true )) { + //TODO would be nice for this to work on ghost/statues too + if (enemy == Dungeon.hero && Random.Int( 2 ) == 0) { + GameScene.add(Blob.seed(enemy.pos, 45, ToxicGas.class)); + Sample.INSTANCE.play( Assets.Sounds.DEBUFF ); + } + + enemy.damage( damageRoll(), enemy ); + + if (enemy == Dungeon.hero && !enemy.isAlive()) { + Dungeon.fail( getClass() ); + GLog.n( Messages.get(this, "frost_kill") ); + } + } else { + enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() ); + } + } + + public void onZapComplete() { + zap(); + next(); + } + @Override protected boolean act() { //毒雾 都得死 啊哈哈哈哈 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java index b05adb2b8..64b74b276 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DwarfMaster.java @@ -112,6 +112,7 @@ public class DwarfMaster extends Boss { initBaseStatus(3, 8, 14, 10, 800, 0, 2); initStatus(20); + properties.add(Property.BOSS); properties.add(Property.FIERY); properties.add(Property.DEMONIC); properties.add(Property.ACIDIC); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java index 1efad2cd7..d0b0e9851 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java @@ -20,7 +20,7 @@ public class TPDoor extends Mob { HP = HT = 100; - properties.add(Property.MINIBOSS); + properties.add(Property.BOSS); properties.add(Property.INORGANIC); properties.add(Property.ELECTRIC); properties.add(Property.IMMOVABLE); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java index 10e0ff526..ab594a144 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/BannerSprites.java @@ -35,7 +35,8 @@ public class BannerSprites { GAME_OVER, SELECT_YOUR_HERO, PIXEL_DUNGEON_SIGNS, - SWORD + SWORD, + NULL }; public static Image get( Type type ) { @@ -59,6 +60,9 @@ public class BannerSprites { case SWORD: icon.frame( icon.texture.uvRect( 0, 181 , 160, 206 ) ); break; + case NULL: + icon.frame( icon.texture.uvRect( 0, 300 , 0, 200 ) ); + break; } return icon; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java index 645f5c950..5f4e8678b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java @@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.journal.DocumentPage; import com.shatteredpixel.shatteredpixeldungeon.items.journal.Guidebook; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; +import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; @@ -70,7 +71,7 @@ public class Heap implements Bundlable { public Type type = Type.HEAP; public int pos = 0; - + public ItemSprite sprite; public boolean seen = false; public boolean haunted = false; @@ -389,8 +390,10 @@ public class Heap implements Bundlable { return Messages.get(this, "crystal_chest_desc", Messages.get(this, "artifact") ); else if (peek() instanceof Wand) return Messages.get(this, "crystal_chest_desc", Messages.get(this, "wand") ); - else + else if (peek() instanceof Ring) return Messages.get(this, "crystal_chest_desc", Messages.get(this, "ring") ); + else + return Messages.get(this, "crystal_chest_desc", Messages.get(this, "unknow") ); case TOMB: return Messages.get(this, "tomb_desc"); case BLACK: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java index fd7486f41..cf0916e0e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; @@ -101,13 +102,18 @@ public class TimekeepersHourglass extends Artifact { @Override protected void onSelect(int index) { if (index == 0) { - GLog.i( Messages.get(TimekeepersHourglass.class, "onstasis") ); - GameScene.flash(0x80FFFFFF); - Sample.INSTANCE.play(Assets.Sounds.TELEPORT); + if(!Statistics.deadshoppingdied && Dungeon.depth<0){ + GLog.n( Messages.get(TimekeepersHourglass.class, "onstasiss") ); + } else { + GLog.i( Messages.get(TimekeepersHourglass.class, "onstasis") ); + GameScene.flash(0x80FFFFFF); + Sample.INSTANCE.play(Assets.Sounds.TELEPORT); + + activeBuff = new timeStasis(); + Talent.onArtifactUsed(Dungeon.hero); + activeBuff.attachTo(Dungeon.hero); + } - activeBuff = new timeStasis(); - Talent.onArtifactUsed(Dungeon.hero); - activeBuff.attachTo(Dungeon.hero); } else if (index == 1) { GLog.i( Messages.get(TimekeepersHourglass.class, "onfreeze") ); GameScene.flash(0x80FFFFFF); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java index 2f6fac216..70ac41e83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java @@ -49,13 +49,9 @@ public class FrozenCarpaccio extends Food { @Override protected void satisfy(Hero hero) { if (Dungeon.isChallenged(Challenges.EXSG)) { - if (Dungeon.isChallenged(Challenges.NO_HEALING)){ - PotionOfHealing.pharmacophobiaProc(hero); - } else { //~75% of a potion of healing Buff.affect(hero, Barrier.class).setShield((int) (0.6f * hero.HT + 10)); Talent.onHealingPotionUsed( hero ); - } } super.satisfy(hero); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java index c1a09e05e..3f6d10d08 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLivingEarth.java @@ -298,6 +298,9 @@ public class WandOfLivingEarth extends DamageWand { alignment = Alignment.ALLY; state = HUNTING; intelligentAlly = true; + + properties.add(Property.INORGANIC); + WANDERING = new Wandering(); //before other mobs @@ -337,10 +340,11 @@ public class WandOfLivingEarth extends DamageWand { @Override public int drRoll() { + int dr = super.drRoll(); if (Dungeon.isChallenged(Challenges.NO_ARMOR)){ - return Random.NormalIntRange(wandLevel, 2 + wandLevel); + return dr + Random.NormalIntRange(wandLevel, 2 + wandLevel); } else { - return Random.NormalIntRange(wandLevel, 3 + 3 * wandLevel); + return dr + Random.NormalIntRange(wandLevel, 3 + 3 * wandLevel); } } @@ -351,9 +355,9 @@ public class WandOfLivingEarth extends DamageWand { } else { return Messages.get(this, "desc", wandLevel, 3 + 3*wandLevel); } - + } - + { immunities.add( AllyBuff.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java index 394c68a1e..64d13b99f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfTransfusion.java @@ -74,7 +74,7 @@ public class WandOfTransfusion extends Wand { //this wand does different things depending on the target. //heals/shields an ally or a charmed enemy while damaging self - if (ch.alignment == Char.Alignment.ALLY || ch.buff(Charm.class) != null){ + if (ch.alignment == Char.Alignment.ALLY || ch.buff(Charm.class) != null ){ // 5% of max hp int selfDmg = Math.round(curUser.HT*0.05f); @@ -87,11 +87,20 @@ public class WandOfTransfusion extends Wand { } else { shielding = 0; } + + if(ch.properties().contains(Char.Property.BOSS)){ + ch.HP += 0; + ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); + ch.sprite.showStatus(CharSprite.WARNING, "+0HP", healing + shielding); + GLog.n("注魂法杖对Boss治疗是无效的!"); + } else { + ch.HP += healing; + ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); + ch.sprite.showStatus(CharSprite.POSITIVE, "+%dHP", healing + shielding); + } + - ch.HP += healing; - - ch.sprite.emitter().burst(Speck.factory(Speck.HEALING), 2 + buffedLvl() / 2); - ch.sprite.showStatus(CharSprite.POSITIVE, "+%dHP", healing + shielding); + if (!freeCharge) { damageHero(selfDmg); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java index a6a7b8c47..eb67f9d8a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ForestBossLevel.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -12,6 +13,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.RatKing; import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Gold; +import com.shatteredpixel.shatteredpixeldungeon.items.Heap; +import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; @@ -214,19 +217,39 @@ public class ForestBossLevel extends Level { switch(Random.NormalIntRange(1,6)){ case 1:case 2:case 3: for (int i : RatKingRoomASpawn) { - drop(new Gold( Random.IntRange( 10, 25 )),i); + //drop(new Gold( Random.IntRange( 10, 25 )),i).type = Heap.Type.CHEST; + Heap droppedGold = Dungeon.level.drop( new Gold( Random.IntRange( 10, 25 )),i); + droppedGold.type = Heap.Type.CHEST; + //必须追加一个view处理才能让金币的类型申请给地牢view处理后变成箱子样子 + droppedGold.sprite.view( droppedGold ); } RatKing king = new RatKing(); king.pos = WIDTH*7+3; GameScene.add(king); + + drop( new CrystalKey(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? 2 : 5 ), WIDTH*7+29 ); + + Heap droppedA = Dungeon.level.drop( Generator.randomUsingDefaults( Generator.Category.STONE), + WIDTH*7+28 ); + droppedA.type = Heap.Type.CRYSTAL_CHEST; + droppedA.sprite.view( droppedA ); break; case 4: case 5: case 6: for (int i : RatKingRoomBSpawn) { - drop(new Gold( Random.IntRange( 10, 25 )),i); + Heap droppedGold = Dungeon.level.drop( new Gold( Random.IntRange( 10, 25 )),i); + droppedGold.type = Heap.Type.CHEST; + droppedGold.sprite.view( droppedGold ); } RatKing king2 = new RatKing(); king2.pos = WIDTH*7+28; GameScene.add(king2); + + drop( new CrystalKey(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? 2 : 5 ), WIDTH*7+4 ); + + Heap droppedB = Dungeon.level.drop( Generator.randomUsingDefaults( Generator.Category.WEAPON), + WIDTH*7+3 ); + droppedB.type = Heap.Type.CRYSTAL_CHEST; + droppedB.sprite.view( droppedB ); break; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java index 7b9975ec2..bd0da384e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/SentryRoom.java @@ -3,7 +3,7 @@ * Copyright (C) 2012-2015 Oleg Dolya * * Shattered Pixel Dungeon - * Copyright (C) 2014-2022 Evan Debenham + * Copyright (C) 2014-2023 Evan Debenham * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC; import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; @@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -131,7 +132,7 @@ public class SentryRoom extends SpecialRoom { } } dangerDist = 2*(height()-5); - } else if (entrance.y == bottom){ + } else if (entrance.y == bottom){ sentryPos.set(center.x, top+1); Painter.fill(level, left+1, bottom-1, width()-2, 1, Terrain.EMPTY); if (entrance.x > center.x){ @@ -156,7 +157,7 @@ public class SentryRoom extends SpecialRoom { sentry.pos = level.pointToCell(sentryPos); sentry.room = new EmptyRoom(); sentry.room.set((Rect)this); - sentry.initialChargeDelay = dangerDist / 3f + 0.1f; + sentry.initialChargeDelay = sentry.curChargeDelay = dangerDist / 3f + 0.1f; level.mobs.add( sentry ); Painter.set(level, treasurePos, Terrain.PEDESTAL); @@ -238,7 +239,8 @@ public class SentryRoom extends SpecialRoom { if (Dungeon.hero != null){ if (fieldOfView[Dungeon.hero.pos] && Dungeon.level.map[Dungeon.hero.pos] == Terrain.EMPTY_SP - && room.inside(Dungeon.level.cellToPoint(Dungeon.hero.pos))){ + && room.inside(Dungeon.level.cellToPoint(Dungeon.hero.pos)) + && Dungeon.hero.buff(LostInventory.class) == null){ if (curChargeDelay > 0.001f){ //helps prevent rounding errors if (curChargeDelay == initialChargeDelay) { @@ -273,13 +275,22 @@ public class SentryRoom extends SpecialRoom { } public void onZapComplete(){ - Dungeon.hero.damage(Random.NormalIntRange(2+Dungeon.depth/2, 4+Dungeon.depth), new Eye.DeathGaze()); - if (!Dungeon.hero.isAlive()){ - GLog.n( Messages.capitalize(Messages.get(Char.class, "kill", name())) ); - Dungeon.fail( getClass() ); + if (hit(this, Dungeon.hero, true)) { + Dungeon.hero.damage(Random.NormalIntRange(2 + Dungeon.depth / 2, 4 + Dungeon.depth), new Eye.DeathGaze()); + if (!Dungeon.hero.isAlive()) { + Dungeon.fail(getClass()); + GLog.n(Messages.capitalize(Messages.get(Char.class, "kill", name()))); + } + } else { + Dungeon.hero.sprite.showStatus( CharSprite.NEUTRAL, Dungeon.hero.defenseVerb() ); } } + @Override + public int attackSkill(Char target) { + return 20 + Dungeon.depth * 2; + } + @Override public int defenseSkill( Char enemy ) { return INFINITE_EVASION; @@ -287,10 +298,7 @@ public class SentryRoom extends SpecialRoom { @Override public void damage( int dmg, Object src ) { - } - - @Override - public void add( Buff buff ) { + //do nothing } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 3597bad91..33f5b22b1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -1423,12 +1423,68 @@ public class GameScene extends PixelScene { Buff.detach( ch, MagicGirlSayTimeLast.class ); } + + public static void bossReady() { + if (Dungeon.hero.isAlive()) { + Banner bossSlain = new Banner( BannerSprites.get( BannerSprites.Type.NULL ) ); + + + //Boss开始后的处理Logo,不在Switch中就是默认的Logo。 + switch (Dungeon.depth){ + case 2: + if(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ){ + bossSlain.texture( Assets.Interfaces.QliPhoth_Title ); + bossSlain.show( 0xFFFFFF, 0.3f, 5f ); + scene.showBanner( bossSlain ); + } + break; + case 5: + if(!Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ) { + bossSlain.texture(Assets.Interfaces.QliPhoth_Title); + bossSlain.show(0xFFFFFF, 0.3f, 5f); + scene.showBanner(bossSlain); + } + break; + } + + if(lanterfireactive){ + cure( Dungeon.hero ); + } + + if (Dungeon.hero.buff(LockedFloor.class) == null) { + BGMPlayer.playBGMWithDepth(); + } + + Sample.INSTANCE.play( Assets.Sounds.ALERT ); + } + } + + public static void bossSlain() { if (Dungeon.hero.isAlive()) { Banner bossSlain = new Banner( BannerSprites.get( BannerSprites.Type.BOSS_SLAIN ) ); bossSlain.show( 0xFFFFFF, 0.3f, 5f ); scene.showBanner( bossSlain ); + + //Boss死亡后的处理Logo,不在Switch中就是默认的Logo。 + switch (Dungeon.depth){ + case 2: + if(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ){ + bossSlain.texture( Assets.Interfaces.QliPhoth_Clear ); + bossSlain.show( 0xFFFFFF, 0.3f, 5f ); + scene.showBanner( bossSlain ); + } + break; + case 5: + if(!Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ) { + bossSlain.texture(Assets.Interfaces.QliPhoth_Clear); + bossSlain.show(0xFFFFFF, 0.3f, 5f); + scene.showBanner(bossSlain); + } + break; + } + if(lanterfireactive){ cure( Dungeon.hero ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java index 2cbf959a5..a5fbbb136 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RotLasherSprite.java @@ -22,7 +22,11 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrivusFruitsLasher; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.watabou.noosa.TextureFilm; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Callback; public class RotLasherSprite extends MobSprite { @@ -45,9 +49,29 @@ public class RotLasherSprite extends MobSprite { die = new Animation( 12, false ); die.frames( frames, 3, 4, 5, 6 ); + zap = attack.clone(); + play( idle ); } + public void zap( int cell ) { + + turnTo( ch.pos , cell ); + play( zap ); + + MagicMissile.boltFromChar( parent, + MagicMissile.SHAMAN_BLUE, + this, + cell, + new Callback() { + @Override + public void call() { + ((CrivusFruitsLasher)ch).onZapComplete(); + } + } ); + Sample.INSTANCE.play( Assets.Sounds.ZAP ); + } + @Override public int blood() { return 0xFF88CC44; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java index 0fd813b9b..2ff9dcc0e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/RenderedTextBlock.java @@ -124,27 +124,27 @@ public class RenderedTextBlock extends Component { /* - Γ = 红色 - Δ = 绿色 + { = 红色 + } = 绿色 Θ = 蓝色 - Ξ = 粉色 - Π = 紫色 - ✦ = 黑色 + [ = 粉色 + ] = 紫色 + | = 黑色 _ = 青色 */ if (str.equals("_") && highlightingEnabled){ highlighting = !highlighting; - } else if(str.equals("Γ") && RedEnabled){ + } else if(str.equals("{") && RedEnabled){ Redhighlighting = !Redhighlighting; - } else if(str.equals("Δ") && GreenEnabled){ + } else if(str.equals("}") && GreenEnabled){ Greenhighlighting = !Greenhighlighting; - } else if(str.equals("Θ") && BlueEnabled){ + } else if(str.equals("*") && BlueEnabled){ Bluehighlighting = !Bluehighlighting; - } else if(str.equals("Ξ") && PinkEnabled){ + } else if(str.equals("[") && PinkEnabled){ Pinkhighlighting = !Pinkhighlighting; - } else if(str.equals("Π") && DeepEnabled){ + } else if(str.equals("]") && DeepEnabled){ Deeppinkhighlighting = !Deeppinkhighlighting; - } else if(str.equals("✦") && BlackEnabled){ + } else if(str.equals("|") && BlackEnabled){ Blackhighlighting = !Blackhighlighting; } else if (str.equals("\n")){ words.add(NEWLINE); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java index ecd1ea267..47af09af5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/S_Changes.java @@ -376,12 +376,6 @@ public class S_Changes { "_3._两袖清风&负债累累_\n"+ "_一个是禁止地牢的_金币生成_,另一个则是_移除金币_")); - changes.addButton( new ChangeButton(Icons.get(Icons.LANGS), "文本渲染", - "文本现在可以渲染成RGB各拉满的三种颜色\n\n红色:_红_ \n\n蓝色:∮蓝∮ \n\n绿色:_绿_")); - - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.DG8), "_红宝石魔袋_", - "矮人国王的宝贝,现在在_DM300_那里有可能获得!\n\n或者去_商人那里_也有可能获得!")); - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.DG7), "_食物袋_", "在_粘咕_那里有几率获得该物品\n\n或者在_商人那里_也可能得到")); @@ -461,22 +455,22 @@ public class S_Changes { ChangeInfo changeInfo6 = new ChangeInfo("v0.3.0.1b", true, ""); changeInfo6.hardlight(16711935); arrayList.add(changeInfo6); - ChangeInfo changeInfo7 = new ChangeInfo(Messages.get(ChangesScene.class, "new", new Object[0]), false, (String) null); + ChangeInfo changeInfo7 = new ChangeInfo(Messages.get(ChangesScene.class, "new"), false, (String) null); changeInfo7.hardlight(16711935); arrayList.add(changeInfo7); changeInfo7.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.MAGIC_INFUSE, (ItemSprite.Glowing) null), "新怪物", "1.添加了一个怪物\n\n")); changeInfo7.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CURSE_INFUSE, (ItemSprite.Glowing) null), "新机制", "地牢的一些机制改变了\n\n")); - ChangeInfo changeInfo8 = new ChangeInfo(Messages.get(ChangesScene.class, "changes", new Object[0]), false, (String) null); + ChangeInfo changeInfo8 = new ChangeInfo(Messages.get(ChangesScene.class, "changes"), false, (String) null); changeInfo8.hardlight(16745258); arrayList.add(changeInfo8); changeInfo8.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHEST, (ItemSprite.Glowing) null), "Bug修复", "修复了以下问题\n\n1.修复了上个版本楼层26层闪退问题\n\n2.修复了界面问题\n\n")); changeInfo8.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.RING_OPAL, (ItemSprite.Glowing) null), "武器改动详情", "武器名称:_血红魔剑_\n-首个版本属于_5阶武器_,现在已经升级了_8阶武器_\n\n")); - ChangeInfo changeInfo9 = new ChangeInfo(Messages.get(ChangesScene.class, "buffs", new Object[0]), false, (String) null); + ChangeInfo changeInfo9 = new ChangeInfo(Messages.get(ChangesScene.class, "buffs"), false, (String) null); changeInfo9.hardlight(16711935); arrayList.add(changeInfo9); changeInfo9.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.HOLSTER, (ItemSprite.Glowing) null), "游戏物品增强记录A", "0.2.7 加强蓝色剑\n\n0.2.8 加强蓝焰法杖\n\n")); changeInfo9.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARTIFACT_HOURGLASS, (ItemSprite.Glowing) null), "游戏物品增强记录B", "Up\n\n")); - ChangeInfo changeInfo10 = new ChangeInfo(Messages.get(ChangesScene.class, "nerfs", new Object[0]), false, (String) null); + ChangeInfo changeInfo10 = new ChangeInfo(Messages.get(ChangesScene.class, "nerfs"), false, (String) null); changeInfo10.hardlight(16711680); arrayList.add(changeInfo10); changeInfo10.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_FROST, (ItemSprite.Glowing) null), "武器削弱记录A", "1.蔚蓝审判之剑\n-此版本已削弱精准和伤害,现在它的伤害20-35伤害左右\n\n")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 3a54375c9..ae23b6315 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -52,6 +52,8 @@ import java.util.ArrayList; public class vM0_6_7_X_Changes { public static void addAllChanges(ArrayList changeInfos) { + add_v0_6_44_Changes(changeInfos); + add_v0_6_43_Changes(changeInfos); add_v0_6_42_Changes(changeInfos); add_v0_6_41_Changes(changeInfos); add_v0_6_40_Changes(changeInfos); @@ -97,6 +99,57 @@ public class vM0_6_7_X_Changes { add_v0_6_0_Changes(changeInfos); } + public static void add_v0_6_44_Changes( ArrayList changeInfos ) { + ChangeInfo changes = new ChangeInfo("金榜题名,高考加油", true, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes = new ChangeInfo("v0.6.3.0-Beta1.5", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CRYSTAL_CHEST), ("克里弗斯之果-二选一改进"), + ("对二选一问题进行了一些改进,在新存档生效。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X73"))); + + } + + public static void add_v0_6_43_Changes( ArrayList changeInfos ) { + + ChangeInfo changes = new ChangeInfo("v0.6.3.0-Beta1.0", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_13), ("梦魇领袖-测试版"), + ("现在追加了克里弗斯之果的梦魇领袖词条,欢迎挑战"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.DISPLAY), ("Boss横幅"), + ("现在Boss会在战斗开始时显示大横幅,以便玩家更好地了解Boss\n\n同时在Boss死亡时也会有对应的Boss战败横幅\n\n由于该系统对于美工的工作量极大,因此如果尚未完成logo的Boss将会显示默认的。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X72"))); + + } + public static void add_v0_6_42_Changes( ArrayList changeInfos ) { ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta5.0", true, ""); @@ -509,7 +562,7 @@ public class vM0_6_7_X_Changes { ("由于机制较于复杂,且时间不太充足。将在后续更新进行完善,敬请期待。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DASlade), ("新武器:涤罪[捐赠物品]"), - ("感谢_落白_的投稿,该武器是一个5阶武器,初始19力量,20%生成概率。可以召唤✦未安息的亡魂✦助战,自身基准攻击力随着杀敌数追加,但有上限。"))); + ("感谢_落白_的投稿,该武器是一个5阶武器,初始19力量,20%生成概率。可以召唤|未安息的亡魂|助战,自身基准攻击力随着杀敌数追加,但有上限。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_14), ("寒冷系统0.1测试版"), ("监狱层追加寒冷系统,最高阈值为25"))); @@ -585,7 +638,7 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(a, ("新BOSS:DMZERO"), ("DMZERO是死灵巫师为夺取前矮人国王的政权而用黑暗魔法仿造矮人科技所制造的试作型魔法机械。\n" + "由于水晶之心的影响,DMZERO被禁锢在另一个异次元空间内,无法影响地牢所在的时间线。\n" + - "Γ战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n" + + "{战斗回合过长将会释放_湮灭审判_,对玩家造成致死伤害。半血后伤害大幅度提升。\n\n" + "根据商人给出的情报,它的高智能辐射电波影响了这个地牢。封印,摧毁,抑或是遣返。让这里恢复原状吧。"))); changes = new ChangeInfo("改动", false, null);