diff --git a/build.gradle b/build.gradle index 9649095aa..1ac026175 100644 --- a/build.gradle +++ b/build.gradle @@ -18,10 +18,10 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =908800 - appVersionName = '0.6.5.0-Alpha6.8' + appVersionCode =910000 + appVersionName = '0.6.5.0-Alpha6.9-LAST' - appJavaCompatibility = JavaVersion.VERSION_11 + appJavaCompatibility = JavaVersion.VERSION_1_8 appAndroidCompileSDK = 33 appAndroidMinSDK = 19 diff --git a/core/build.gradle b/core/build.gradle index 0468242ac..f1bd28b3a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -6,5 +6,12 @@ sourceCompatibility = targetCompatibility = appJavaCompatibility dependencies { api project(':SPD-classes') implementation project(':services') + + // 添加 Lunar-Java 依赖 接入农历计算 + + //由于作者的版本号问题,136才是最新版 + + //noinspection GradleDependency + implementation 'cn.6tail:lunar:1.3.6' } diff --git a/core/src/main/assets/environment/tiles_sewers.png b/core/src/main/assets/environment/tiles_sewers.png index ae31f917b..d2bf9af23 100644 Binary files a/core/src/main/assets/environment/tiles_sewers.png and b/core/src/main/assets/environment/tiles_sewers.png differ diff --git a/core/src/main/assets/environment/water0.png b/core/src/main/assets/environment/water0.png index f7d237649..d9b5f58e1 100644 Binary files a/core/src/main/assets/environment/water0.png and b/core/src/main/assets/environment/water0.png differ diff --git a/core/src/main/assets/interfaces/arcs1.png b/core/src/main/assets/interfaces/arcs1.png index 5d36c54d0..e53b4b6a8 100644 Binary files a/core/src/main/assets/interfaces/arcs1.png and b/core/src/main/assets/interfaces/arcs1.png differ diff --git a/core/src/main/assets/interfaces/arcs2.png b/core/src/main/assets/interfaces/arcs2.png index 48cf7a11a..cbdc8397c 100644 Binary files a/core/src/main/assets/interfaces/arcs2.png and b/core/src/main/assets/interfaces/arcs2.png differ diff --git a/core/src/main/assets/interfaces/arcs2_night.png b/core/src/main/assets/interfaces/arcs2_night.png new file mode 100644 index 000000000..9b3e6907e Binary files /dev/null and b/core/src/main/assets/interfaces/arcs2_night.png differ diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index 9d64916c1..3daaae04b 100644 Binary files a/core/src/main/assets/interfaces/badges.png and b/core/src/main/assets/interfaces/badges.png differ diff --git a/core/src/main/assets/interfaces/chrome.png b/core/src/main/assets/interfaces/chrome.png index 8f361309a..8671e1ca9 100644 Binary files a/core/src/main/assets/interfaces/chrome.png and b/core/src/main/assets/interfaces/chrome.png differ diff --git a/core/src/main/assets/interfaces/go-surface.png b/core/src/main/assets/interfaces/go-surface.png index 4c576d7b1..ad7560afe 100644 Binary files a/core/src/main/assets/interfaces/go-surface.png and b/core/src/main/assets/interfaces/go-surface.png differ diff --git a/core/src/main/assets/interfaces/icons.png b/core/src/main/assets/interfaces/icons.png index b8e2d7039..a01f67f6a 100644 Binary files a/core/src/main/assets/interfaces/icons.png and b/core/src/main/assets/interfaces/icons.png differ diff --git a/core/src/main/assets/interfaces/loading_sewers.png b/core/src/main/assets/interfaces/loading_sewers.png index a3e72dfd3..5d6613693 100644 Binary files a/core/src/main/assets/interfaces/loading_sewers.png and b/core/src/main/assets/interfaces/loading_sewers.png differ diff --git a/core/src/main/assets/interfaces/status_pane.png b/core/src/main/assets/interfaces/status_pane.png index 9bbd51def..c2a1b7f0d 100644 Binary files a/core/src/main/assets/interfaces/status_pane.png and b/core/src/main/assets/interfaces/status_pane.png differ diff --git a/core/src/main/assets/interfaces/surface.png b/core/src/main/assets/interfaces/surface.png index be311407c..13fac1f0f 100644 Binary files a/core/src/main/assets/interfaces/surface.png and b/core/src/main/assets/interfaces/surface.png differ diff --git a/core/src/main/assets/interfaces/talent_button.png b/core/src/main/assets/interfaces/talent_button.png index 7dd6734fc..76244aee7 100644 Binary files a/core/src/main/assets/interfaces/talent_button.png and b/core/src/main/assets/interfaces/talent_button.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index e8d5de157..c03e2b736 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -3,6 +3,19 @@ actors.mobs.blackmimic.name=暗金宝箱怪 actors.mobs.blackmimic.desc=宝箱怪是一种能随意改变外形的魔法生物。在地牢里它们几乎一直以宝箱形态出现,因为这样总能吸引不防备的冒险者。\n\n暗金宝箱怪是在极度魔力紊乱下才会出现的极度危险的怪物。它们潜伏在暗影中等待猎物的到来…… +actors.mobs.flowerslime.name=丛林繁花史莱姆 +actors.mobs.flowerslime.desc= 在丛林中随处可见的生物,原本应该是比较温顺的一种生物,可能是受到地牢诅咒影响,它们也开始主动袭击过往的人类。\n\n史莱姆的身体富有粘性,很显然,这个史莱姆身上沾满了这片地区的植物,也许上面还有些种子。 + +actors.mobs.olddm300.name=DM300-原型机 +actors.mobs.olddm300.desc=这台机器是DM300量产前,矮人王国研发的原型试验机,由于其较为笨重的原因,原型机已被废弃,你现在看见的这台应该是最后一台!\n\n在燃料耗尽前可以进行极大范围的远程攻击,在水面移动时可以进行自我修复并填装一定的燃料但会蒸发水面。血量低于一定比列后立刻吸收本层所有DM201的能量给自己生成护盾,同时被吸收能量的DM201也会立刻被关闭。 +actors.mobs.olddm300.notice=侦察到入侵者…… +actors.mobs.olddm300.defeated=系统能量不足,自动关…… +actors.mobs.olddm300.repair=自我修复 + + +actors.mobs.greenslting.name=绿野精灵 +actors.mobs.greenslting.desc=丛林中的植物精灵,对入侵者没有任何好感……也包括你!!! + actors.mobs.npcs.pinkghost.name=粉色幽灵 actors.mobs.npcs.pinkghost.desc=这个幽灵正在发出非常靓丽的光芒,在地牢中就像一盏希望的冥灯。这个幽灵的脸上露出了灿烂的笑容…… @@ -823,7 +836,7 @@ actors.mobs.npcs.ren.message2=你好,我是REN-33!我是唯一的个体……, actors.mobs.npcs.ren.message3=猎枪击毙了穹顶天上的椋鸟群落,此时即可眺望繁星、即可观测天津星肆、即可瞭望海之灯塔,为之祈祷。 actors.mobs.npcs.ren.def_verb=随机应变 -actors.mobs.npcs.goonpc.name=粘咕-天痕座 +actors.mobs.npcs.goonpc.name=粘咕 actors.mobs.npcs.slyl.name=冷群 actors.mobs.npcs.slyl.message1=我叫冷群,这是我的真名。 @@ -1983,8 +1996,8 @@ actors.mobs.brute$bruterage.desc=这个豺狼暴徒的死亡已经不可避免 actors.mobs.causticslime.name=蚀化史莱姆 actors.mobs.causticslime.desc=这个史莱姆似乎已经被下方渗透的黑暗能量完全侵蚀了。它已经失去了体表原有的绿色光泽,并且在不断滴落腐蚀污泥。 -actors.mobs.crab.name=密林螃蟹 -actors.mobs.crab.desc=这些巨型的螃蟹位居密林食物链的顶端。它们行动极其迅速且其厚重的甲壳能承受沉重的打击。 +actors.mobs.crab.name=丛林螃蟹 +actors.mobs.crab.desc=这些巨型的螃蟹位居丛林食物链的顶端。它们行动极其迅速且其厚重的甲壳能承受沉重的打击。 actors.mobs.crystalmimic.name=水晶宝箱怪 actors.mobs.crystalmimic.ate=水晶宝箱怪吃掉了你的%s! @@ -2064,7 +2077,7 @@ actors.mobs.ghoul.name=矮人尸群 actors.mobs.ghoul.desc=在矮人王国逐渐衰亡,现在的矮人国王掌握了绝对的权力时,一些较为弱小的或是反抗国王的矮人受到了不公的待遇。然而随着矮人国王逐渐精通黑暗魔法,这些矮人逐渐屈从于其意志,并最终沦为了其大军中的一枚棋子。\n\n矮人尸群中的个体本身没有强大的战斗力,但它们总是结伴作战,试图利用数量优势击败强大的对手。_一名矮人尸群成员被击倒时,如果周围仍有其他同类,它将会在几回合后重生_。 actors.mobs.gnoll.name=豺狼巡查 -actors.mobs.gnoll.desc=豺狼是鬣狗状的类人生物。它们在密林和地牢里游荡,不时向上行动试图向地表发起进攻。豺狼巡查是它们种群里最普通的一员,它们既没有豺狼暴徒强壮,也赶不上萨满聪明。 +actors.mobs.gnoll.desc=豺狼是鬣狗状的类人生物。它们在丛林和地牢里游荡,不时向上行动试图向地表发起进攻。豺狼巡查是它们种群里最普通的一员,它们既没有豺狼暴徒强壮,也赶不上萨满聪明。 actors.mobs.gnolltrickster.name=豺狼诡术师 actors.mobs.gnolltrickster.desc=即使以豺狼人的标准来看,这个生物也非常的诡异。它佝偻着腰,鬼鬼祟祟地行进着,大嘴咧开,露出邪恶的笑容,肩上挂着的挎包鼓得同摇篮一般。它的瞳孔中混杂着恐惧与兴奋。\n\n它的挎包里有一大批粗制滥造的飞镖,它们似乎包含着各种有害物质。 @@ -2089,26 +2102,16 @@ actors.mobs.goo.pumpup=粘咕正在不断地抽动! actors.mobs.goo.enraged=激怒 actors.mobs.goo.gluuurp=咕——————! actors.mobs.goo.rankings_desc=被粘咕消化 -actors.mobs.goo.desc=我们对粘咕所知甚少。它甚至很有可能不是一个生物,而是密林表面聚集的邪恶物质得到基本智能而产生的实体。不管怎样,很明显是黑暗魔法造就了这个生物。\n\n其凝胶性质让它吸收了很多黑暗能量,你光是靠近就感受到了一股寒意。如果粘咕使用这种能量对你进行攻击那你肯定支撑不了多久。 +actors.mobs.goo.desc=我们对粘咕所知甚少。它甚至很有可能不是一个生物,而是丛林表面聚集的邪恶物质得到基本智能而产生的实体。不管怎样,很明显是黑暗魔法造就了这个生物。\n\n其凝胶性质让它吸收了很多黑暗能量,你光是靠近就感受到了一股寒意。如果粘咕使用这种能量对你进行攻击那你肯定支撑不了多久。 actors.mobs.spical.goomob.name=粘咕 -actors.mobs.spical.goomob.desc=我们对粘咕所知甚少。它甚至很有可能不是一个生物,而是密林表面聚集的邪恶物质得到基本智能而产生的实体。不管怎样,很明显是黑暗魔法造就了这个生物。\n\n其凝胶性质让它吸收了很多黑暗能量,你光是靠近就感受到了一股寒意。如果粘咕使用这种能量对你进行攻击那你肯定支撑不了多久。 +actors.mobs.spical.goomob.desc=我们对粘咕所知甚少。它甚至很有可能不是一个生物,而是丛林表面聚集的邪恶物质得到基本智能而产生的实体。不管怎样,很明显是黑暗魔法造就了这个生物。\n\n其凝胶性质让它吸收了很多黑暗能量,你光是靠近就感受到了一股寒意。如果粘咕使用这种能量对你进行攻击那你肯定支撑不了多久。 actors.mobs.spical.goomob.notice=给我过来!曾经的敌人! -actors.mobs.olddm300.name=DM300-原型机 -actors.mobs.olddm300.desc=DM300是DM300研究前的矮人王国研发的原型试验机,由于其笨重的灵活性和各种原因,原型机已被废弃,你现在看见的这台应该是最后一台! -actors.mobs.olddm300.notice=侦察到入侵者…… -actors.mobs.olddm300.vent=DM300喷射了一团有毒的废气! -actors.mobs.olddm300.defeated=系统能量不足,自动关…… -actors.mobs.olddm300.repair=自我修复 - -actors.mobs.greenslting.name=绿野精灵 -actors.mobs.greenslting.desc=丛林中的植物精灵,对入侵者没有任何好感……也包括你!!! - actors.mobs.greatcrab.name=巨大螃蟹 actors.mobs.greatcrab.noticed=巨型螃蟹用它硕大的钳子格挡了这次攻击。 actors.mobs.greatcrab.def_verb=格挡 -actors.mobs.greatcrab.desc=这只螃蟹的块头相当大,甚至超过了其他的密林螃蟹。它的蓝色甲壳上布满了裂纹和藤壶,足以证明其经历的无数岁月。它爬行缓慢,那只巨大的钳子让它难以保持平衡。\n\n尽管这螃蟹只剩下一边的钳子,但钳子的个头完全弥补了这点不足。螃蟹只要发现危险就会把爪子举在身前,利用坚不可摧的甲壳进行防御。不过螃蟹无法格挡未察觉的攻击,也无法同时格挡多个敌人的进攻。 +actors.mobs.greatcrab.desc=这只螃蟹的块头相当大,甚至超过了其他的丛林螃蟹。它的赤色甲壳上布满了裂纹和藤壶,足以证明其经历的无数岁月。它爬行缓慢,那只巨大的钳子让它难以保持平衡。\n\n尽管这螃蟹只剩下一边的钳子,但钳子的个头完全弥补了这点不足。螃蟹只要发现危险就会把爪子举在身前,利用坚不可摧的甲壳进行防御。不过螃蟹无法格挡未察觉的攻击,也无法同时格挡多个敌人的进攻。 actors.mobs.guard.name=监狱守卫 actors.mobs.guard.scorpion=给我过来! @@ -2157,7 +2160,7 @@ actors.mobs.pylon.desc_inactive=这是一座用于分配区域内机械用电的 actors.mobs.pylon.desc_active=这是一座用于分配区域内机械用电的能量塔。此刻能量塔电能涌动,定是它正在为DM-300充能!\n\n这时的能量塔可被摧毁,却会顺时针向四周释放电弧。厚重的金属结构为其提供了强劲的防御。 actors.mobs.rat.name=啮齿小鼠 -actors.mobs.rat.desc=虽说啮齿小鼠们具有攻击性,可它们依旧是密林居民里的弱者。它们的啮咬非常烦人,但只有数量巨大时才会有生命威胁。 +actors.mobs.rat.desc=虽说啮齿小鼠们具有攻击性,可它们依旧是丛林居民里的弱者。它们的啮咬非常烦人,但只有数量巨大时才会有生命威胁。 actors.mobs.ripperdemon.name=恶魔撕裂者 actors.mobs.ripperdemon.leap=恶魔撕裂者正准备扑杀! @@ -2193,9 +2196,9 @@ actors.mobs.skeleton.desc=骷髅是从那些悲惨的冒险者及地牢原住民 actors.mobs.slime.name=史莱姆 actors.mobs.slime.def_verb=格挡 -actors.mobs.slime.desc=史莱姆是一种具有胶质外形与液态内核的奇特魔法生物。城市的密林为它们提供了充分的水源和富足的养分。\n\n史莱姆的外层胶膜具有极强的弹性,这使得任何单次攻击都难以对它们造成超过_6点的伤害_。 +actors.mobs.slime.desc=史莱姆是一种具有胶质外形与液态内核的奇特魔法生物。城市的丛林为它们提供了充分的水源和富足的养分。\n\n史莱姆的外层胶膜具有极强的弹性,这使得任何单次攻击都难以对它们造成超过_6点的伤害_。 -actors.mobs.snake.name=密林巨蛇 +actors.mobs.snake.name=丛林巨蛇 actors.mobs.snake.hint=试试点击检查按钮再选择蛇,以了解如何击败它们。 actors.mobs.snake.desc=这些体型庞大的蛇能通过快速滑行以闪避普通的攻击,让它们难以命中。不过伏击与魔法攻击会使它们措手不及。\n\n在这条蛇的视野外攻击它时可以触发伏击。当这条蛇在追击你时,可以尝试躲入一扇门后,再_在蛇进门的瞬间发动攻击_。 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 8cc1d841c..9e99bc614 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -6,6 +6,10 @@ items.quest.red.name=白玫瑰 items.quest.red.desc=在这危险而阴森的地牢中,这朵白玫瑰仿佛刺破了周遭的黑暗,向你展示着名为“人文”的力量。 items.quest.red.ac_interlevel_tp=返回 +items.quest.devitem.crystalling.name=水晶项链 +items.quest.devitem.crystalling.desc=这个紫色项链下挂着一块蓝紫色的琉璃,当光线透过水晶,水晶的中间仿佛也亮堂了起来。\n\n根据历史记载,翼绫使用圣洁之心创造了世界,将其一半力量分给了三使者后,又让他们将另一半铸造为水晶之心。\n\n圣洁之心并没有常规意义上的实体,尽管没有人真正见过水晶之心,但人们还是按照传说中的模样复制出了这个项链。\n\n他们在翼绫的生日这天制造这种水晶项链,以此寻求着创世神的祝福。至少他们也在用自己的方式寻求着自己的未来。\n\n你知道这块水晶并不能给你带来什么,但是,当你握住这块水晶时,你仍然感觉心里踏实了许多。 + + items.quest.redwhiterose.name="一种载体" items.quest.redwhiterose.desc=他们从未离开,这两束玫瑰配不上他们。\n\n情感无需载体,意志无需证明。\n\n而你也不曾放弃。 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 4dd9cb4bb..17aff451f 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -170,6 +170,9 @@ badges$badge.ghostdage.desc=_在悲伤幽灵处获得一次+3品质武器或护 badges$badge.dageto.title=白幽神谕 badges$badge.dageto.desc=在悲伤幽灵处获得一次_+4_品质武器或护甲\n\n[你已成功镀层[ +badges$badge.hideen_badage.title=隐秘探索 +badges$badge.hideen_badage.desc=发现隐藏徽章界面\n\n_长按徽章按钮_ + badges$badge.endied.title=终焉之旅 badges$badge.endied.desc=_(获得彩蛋武器终焉)_,目前版本暂时无法获得 @@ -299,7 +302,7 @@ paswordbadges$badge.zqj_ghost.title=映月离合之殇 paswordbadges$badge.zqj_ghost.desc=完成悲伤幽灵的中秋时期特别任务。\n\n[你太棒了,我所深爱着的搭档[ paswordbadges$badge.night_cat.title=不眠之夜 -paswordbadges$badge.night_cat.desc=在现实时间的夜间单局游玩超过6000回合\n(游戏固然好玩,但也要劳逸结合)\n\n[再玩一局就睡觉……睡觉了,啊?怎么早上七点了?! +paswordbadges$badge.night_cat.desc=在夜间通关一次。\n\n[再玩一局就睡觉……睡觉了,啊?怎么早上七点了?! challenges.no_food=缩餐节食 diff --git a/core/src/main/assets/messages/scenes/scenes.properties b/core/src/main/assets/messages/scenes/scenes.properties index f7541bdf3..b6bfc59c2 100644 --- a/core/src/main/assets/messages/scenes/scenes.properties +++ b/core/src/main/assets/messages/scenes/scenes.properties @@ -228,7 +228,12 @@ scenes.startscene.new=新游戏 scenes.surfacescene.exit=英雄归来 scenes.titlescene.play=开始 + + scenes.titlescene.enter=进入地牢 + +scenes.titlescene.go=走向地牢之外 + scenes.titlescene.rankings=排行榜 scenes.titlescene.badges=徽章 scenes.titlescene.news=游戏动态情报 diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index cd8e1b121..c8e3f7592 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -208,7 +208,7 @@ windows.wndgameinprogress.gamegold=游戏金币: windows.wndgameinprogress.gamenayzi=奈亚大亨: windows.wndgameinprogress.gamenayzis=\n一局游戏内购买7次终端的物品,即可永久让奈亚入驻0层。 windows.wndgameinprogress.gamemimic=拟态猎杀: -windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。A类就是没有开启_变幻莫测_的种子\n_B类_为开启_变幻莫测_挑战后的种子。\n特别类:BossRush\n\n(种子判定优先级:BossRush>B>A) +windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。A类就是没有开启_变幻莫测_的种子\n\n_B类_为开启_变幻莫测_挑战后的种子。\n\n特别类:BossRush\n\n(种子判定优先级:BossRush>B>A) windows.wndgameinprogress.title=%1$d级%2$s windows.wndgameinprogress.challenges=挑战 diff --git a/core/src/main/assets/music/theme_sky.ogg b/core/src/main/assets/music/theme_sky.ogg new file mode 100644 index 000000000..deb4c0af9 Binary files /dev/null and b/core/src/main/assets/music/theme_sky.ogg differ diff --git a/core/src/main/assets/sprites/crab.png b/core/src/main/assets/sprites/crab.png index dcd54be5f..498518be6 100644 Binary files a/core/src/main/assets/sprites/crab.png and b/core/src/main/assets/sprites/crab.png differ diff --git a/core/src/main/assets/sprites/flowers_slime.png b/core/src/main/assets/sprites/flowers_slime.png new file mode 100644 index 000000000..1dcfe850f Binary files /dev/null and b/core/src/main/assets/sprites/flowers_slime.png differ diff --git a/core/src/main/assets/sprites/items/items.png b/core/src/main/assets/sprites/items/items.png index 9adfc7566..7859515c2 100644 Binary files a/core/src/main/assets/sprites/items/items.png and b/core/src/main/assets/sprites/items/items.png differ diff --git a/core/src/main/assets/sprites/katydid.png b/core/src/main/assets/sprites/katydid.png new file mode 100644 index 000000000..0c285ffce Binary files /dev/null and b/core/src/main/assets/sprites/katydid.png differ diff --git a/core/src/main/assets/sprites/piranha.png b/core/src/main/assets/sprites/piranha.png index ee7fe105f..b70c81541 100644 Binary files a/core/src/main/assets/sprites/piranha.png and b/core/src/main/assets/sprites/piranha.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 8531a6769..dd35cbb82 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -43,6 +43,7 @@ public class Assets { public static final String BGM_BOSSE3 = "music/Yogdead.ogg"; public static final String BGM_FRBOSS = "music/SnowLing.ogg"; public static final String RUN = "music/Run.ogg"; + public static final String SHOP = "music/shop.ogg"; public static final String NYZSHOP = "music/nyzshop2.ogg"; public static class Effects { @@ -118,6 +119,8 @@ public class Assets { public static final String ARCS_BG = "interfaces/arcs1.png"; public static final String ARCS_FG = "interfaces/arcs2.png"; + public static final String ARCS_FGN = "interfaces/arcs2_night.png"; + public static final String LANTERLING = "interfaces/LanterLing.png"; public static final String BANNERS = "interfaces/banners.png"; @@ -185,7 +188,7 @@ public class Assets { public static final String GO = "music/Open.ogg"; public static final String SHOP = "music/shop.ogg"; public static final String THEME_1 = "music/theme.ogg"; - public static final String THEME_2 = "music/theme.ogg"; + public static final String THEME_2 = "music/theme_sky.ogg"; public static final String SEWERS_1 = "music/Level1.ogg"; public static final String SEWERS_2 = "music/Level1.ogg"; @@ -381,6 +384,8 @@ public class Assets { public static final String RAT = "sprites/rat.png"; + public static final String FLOWER_SLIME = "sprites/flowers_slime.png"; + public static final String GREEN = "sprites/greenslting.png"; public static final String CLEAR = "sprites/clearelemt.png"; public static final String BRUTE = "sprites/brute.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/BGMPlayer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/BGMPlayer.java index ab9066026..9a97ab24d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/BGMPlayer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/BGMPlayer.java @@ -148,12 +148,12 @@ public class BGMPlayer { } } else { - if (Dungeon.bossLevel() && t == 5) { + if (Dungeon.bossLevel() && t == 5 || t == 4) { playBGM(Assets.BGM_BOSSA, true); } else if (Dungeon.bossLevel() && t == 10) { playBGM(Assets.BGM_BOSSB, true); - } else if (Dungeon.bossLevel() && t == 15 && Statistics.spawnersIce > 0) { - playBGM(Assets.BGM_BOSSC3, true); + } else if (t == 14) { + playBGM(Assets.BGM_BOSSC, true); } else if (Dungeon.bossLevel() && t == 15) { if((Statistics.boss_enhance & 0x4) != 0) playBGM(Assets.BGM_BOSSC3, true); else playBGM(Assets.BGM_BOSSC, true); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 8fe412a3a..f4d86b780 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -123,6 +123,8 @@ public class Badges { READ_BOOK_TWO ( 56 ), + HIDEEN_BADAGE ( 57 ), + //gold PIRANHAS ( 64 ), //these names are a bit outdated, but it doesn't really matter. @@ -941,6 +943,8 @@ public class Badges { public static void validateVictory() { + Statistics.winGame = true; + Badge badge = Badge.VICTORY; displayBadge( badge ); @@ -1052,6 +1056,11 @@ public class Badges { displayBadge( Badge.KILL_SM ); } + public static void HDEX() { + displayBadge( Badge.HIDEEN_BADAGE ); + } + + public static void GOODRLPT() { displayBadge( Badge.RLPT ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 3fa1574e2..9d2753851 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -71,6 +71,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton; import com.shatteredpixel.shatteredpixeldungeon.utils.BArray; import com.shatteredpixel.shatteredpixeldungeon.utils.DungeonSeed; @@ -94,6 +95,8 @@ public class Dungeon { public static int nyzbuy; public static int boss; + public static boolean nightMode; + public static boolean interfloorTeleportAllowed(){ if (Dungeon.level.locked || (Dungeon.hero != null && Dungeon.hero.belongings.getItem(Amulet.class) != null)){ return false; @@ -356,6 +359,8 @@ public class Dungeon { //难度模式 difficultys = new Difficulty.HardStorage(SPDSettings.difficulty()); + TitleScene.Reusable = false; + mobsToChampion = -1; mobsToStateLing = -1; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java index c5cc44221..94cf7a214 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java @@ -133,6 +133,10 @@ public class Statistics { public static float turnsPassed = 0f; public static boolean TryUsedAnmy= false; + public static boolean winGame = false; + + public static boolean HiddenOK = false; + public static void reset() { boss_enhance = 0; ChaicBlood = 0; @@ -301,9 +305,17 @@ public class Statistics { private static final String FUCKALONE = "fuckplayer"; + private static final String WINGAME = "wingame"; + + private static final String HIDEEN = "hideen"; + public static void storeInBundle( Bundle bundle ) { + bundle.put(HIDEEN,HiddenOK); + + bundle.put(WINGAME,winGame); + bundle.put(BDTX,bossWeapons); @@ -400,6 +412,10 @@ public class Statistics { public static void restoreFromBundle( Bundle bundle ) { + winGame = bundle.getBoolean(WINGAME); + + HiddenOK = bundle.getBoolean(HIDEEN); + //嗜血荆棘等级处理 ChaicBlood = bundle.getInt( CHACEBLOOD ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/BeamTowerAdbility.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/BeamTowerAdbility.java index e6a30b6e6..205ba9ccb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/BeamTowerAdbility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/BeamTowerAdbility.java @@ -1,5 +1,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -7,6 +9,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrystalDiedTo import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; import com.watabou.utils.Bundle; import com.watabou.utils.PointF; @@ -25,8 +28,9 @@ public class BeamTowerAdbility extends Buff { if (ch.alignment != Char.Alignment.ENEMY) { ch.damage(Random.IntRange(6, 10), CrystalDiedTower.class); Statistics.bossScores[3] -= 300; + hero.sprite.showStatus(CharSprite.NEGATIVE, "300"); Buff.affect(ch, Cripple.class, 2f); - if (ch == Dungeon.hero && !ch.isAlive()) { + if (ch == hero && !ch.isAlive()) { Dungeon.fail(getClass()); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessGoRead.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessGoRead.java index b796f9a2e..ca3a0bf79 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessGoRead.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessGoRead.java @@ -30,10 +30,9 @@ public class BlessGoRead extends Buff { } if(hero.lanterfire > 60) { - float healDelay = 10f - 10*0.5f; - healDelay /= 0.1f; //effectively 1HP at lvl 0-5, 2HP lvl 6-8, 3HP lvl 9, and 5HP lvl 10. - target.HP = Math.min( target.HT, target.HP + (int)Math.ceil(5/healDelay)); + target.HP = Math.min( target.HT, target.HP + 2); + spend(3f); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessLing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessLing.java new file mode 100644 index 000000000..89ffe90b4 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessLing.java @@ -0,0 +1,96 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class BlessLing extends Buff { + + { + type = Buff.buffType.POSITIVE; + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + spend(interval); + if (level <= 0) { + detach(); + } + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level, dispTurns(visualcooldown())); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x00ff00); + } + + @Override + public int icon() { + return BuffIndicator.NONE; + } + + +} + + + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessRedWhite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessRedWhite.java new file mode 100644 index 000000000..125c6cfea --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ClearBleesdGoodBuff/BlessRedWhite.java @@ -0,0 +1,102 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class BlessRedWhite extends Buff { + + { + type = buffType.POSITIVE; + immunities.addAll(AntiMagic.RESISTS); + } + + public static int level = 0; + private int interval = 1; + + @Override + public boolean act() { + if (target.isAlive()) { + + if (level <= 0) { + detach(); + } + + + //effectively 1HP at lvl 0-5, 2HP lvl 6-8, 3HP lvl 9, and 5HP lvl 10. + target.HP = Math.min( target.HT, target.HP + 1); + spend(5f); + + } + + return true; + } + + public int level() { + return level; + } + + public void set( int value, int time ) { + //decide whether to override, preferring high value + low interval + if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) { + level = value; + interval = time; + spend(time - cooldown() - 1); + } + } + + + + @Override + public float iconFadePercent() { + if (target instanceof Hero){ + float max = ((Hero) target).lvl; + return Math.max(0, (max-level)/max); + } + return 0; + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc"); + } + + private static final String LEVEL = "level"; + private static final String INTERVAL = "interval"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( INTERVAL, interval ); + bundle.put( LEVEL, level ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + interval = bundle.getInt( INTERVAL ); + level = bundle.getInt( LEVEL ); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0xFF1493); + } + + @Override + public int icon() { + return BuffIndicator.NONE; + } + + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Healing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Healing.java index 353e73f4b..ad136ef7c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Healing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Healing.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; import com.shatteredpixel.shatteredpixeldungeon.Difficulty; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.DevItem.CrystalLing; import com.shatteredpixel.shatteredpixeldungeon.items.quest.MIME; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; @@ -89,6 +90,12 @@ public class Healing extends Buff { percentHealPerTick = percentPerTick*2; flatHealPerTick = flatPerTick*2; } + CrystalLing crystalLing = Dungeon.hero.belongings.getItem(CrystalLing.class); + if(crystalLing != null) { + healingLeft = amount+(amount/3); + percentHealPerTick = percentPerTick*1.2f; + flatHealPerTick = flatPerTick+(flatPerTick/5); + } } public void increaseHeal( int amount ){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/IceHpBuff.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/IceHpBuff.java index 0dc98b5eb..8578a9b35 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/IceHpBuff.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/IceHpBuff.java @@ -53,7 +53,7 @@ public class IceHpBuff extends Buff { } if (hero.icehp < 25 && Dungeon.depth<10) { hero.damageIcehp(1); - spend(32f-(float) Dungeon.depth/5); + spend(50f-(float) Dungeon.depth/5); } else { spend(STEP); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index ea37eef02..c20fe356c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -63,9 +63,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoRead; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoodSTR; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessLing; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessRedWhite; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; @@ -151,7 +153,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfDivineInspiration; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.DevItem.CrystalLing; import com.shatteredpixel.shatteredpixeldungeon.items.quest.MIME; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.RedWhiteRose; import com.shatteredpixel.shatteredpixeldungeon.items.quest.SakaFishSketon; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfAccuracy; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEvasion; @@ -300,14 +304,17 @@ public class Hero extends Char { public void updateHT( boolean boostHP ){ int curHT = HT; - + HT = 20 + 5*(lvl-1) + HTBoost; + float multiplier = RingOfMight.HTMultiplier(this); HT = Math.round(multiplier * HT); if (buff(ElixirOfMight.HTBoost.class) != null){ HT += buff(ElixirOfMight.HTBoost.class).boost(); } + + if (boostHP){ HP += Math.max(HT - curHT, 0); @@ -336,6 +343,10 @@ public class Hero extends Char { strBonus += 2; } + if(Dungeon.hero.buff(BlessRedWhite.class) != null) { + strBonus += 2; + } + return STR + strBonus; } @@ -723,6 +734,10 @@ public class Hero extends Char { if (getSpeed!=null) { speed *= 1.2f; } + + if(Dungeon.hero.buff(BlessRedWhite.class) != null) { + speed *= 1.1f; + } if (belongings.armor() != null) { speed = belongings.armor().speedFactor(this, speed); @@ -946,10 +961,24 @@ public class Hero extends Char { private boolean actMove( HeroAction.Move action ) { PotionOfPurity.PotionOfPurityLing potionOfPurityLing = Dungeon.hero.belongings.getItem(PotionOfPurity.PotionOfPurityLing.class); - if(potionOfPurityLing != null){ + if(potionOfPurityLing != null && !Dungeon.level.locked){ potionOfPurityLing.detachAll( hero.belongings.backpack ); } + RedWhiteRose redWhiteRose = Dungeon.hero.belongings.getItem(RedWhiteRose.class); + if(redWhiteRose != null){ + Buff.affect(hero, BlessRedWhite.class).set( (100), 1 ); + } else { + Buff.detach(hero, BlessRedWhite.class); + } + + CrystalLing crystalLing = Dungeon.hero.belongings.getItem(CrystalLing.class); + if(crystalLing != null){ + Buff.affect(hero, BlessLing.class).set( (100), 1 ); + } else { + Buff.detach(hero, BlessLing.class); + } + MIME.GOLD_FIVE getHeal = Dungeon.hero.belongings.getItem(MIME.GOLD_FIVE.class); if(getHeal != null && HT/4 > HP){ this.HP = HT; @@ -1556,6 +1585,11 @@ public class Hero extends Char { dmg = (int)Math.ceil(dmg * RingOfTenacity.damageMultiplier( this )); + CrystalLing crystalLing = Dungeon.hero.belongings.getItem(CrystalLing.class); + if(crystalLing != null){ + dmg = (int)Math.ceil(dmg * RingOfTenacity.damageMultiplier( this )); + } + //TODO improve this when I have proper damage source logic if (belongings.armor() != null && belongings.armor().hasGlyph(AntiMagic.class, this) && AntiMagic.RESISTS.contains(src.getClass())){ 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 15dbe2f8a..14433d7d9 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 @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessLing; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RandomBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.NaturesPower; @@ -57,7 +58,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.LamellarArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet; import com.shatteredpixel.shatteredpixeldungeon.items.bags.BookBag; @@ -77,7 +77,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfLightStromCloud; import com.shatteredpixel.shatteredpixeldungeon.items.quest.CrivusFruitsFlake; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.DevItem.CrystalLing; import com.shatteredpixel.shatteredpixeldungeon.items.quest.MIME; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.RedWhiteRose; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfFlameCursed; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify; @@ -106,6 +108,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCr import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.HaloDart; +import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.AikeLaier; import com.shatteredpixel.shatteredpixeldungeon.plants.Fadeleaf; @@ -134,6 +137,11 @@ public enum HeroClass { Badges.BOSSTHREE(); } + if(RegularLevel.birthday == RegularLevel.DevBirthday.DEV_BIRTHDAY){ + new CrystalLing().quantity(1).identify().collect(); + Buff.affect(hero, BlessLing.class).set( (100), 1 ); + } + if (Dungeon.isChallenged(Challenges.AQUAPHOBIA)) { new WaterSoul().quantity(4).identify().collect(); } @@ -164,7 +172,7 @@ public enum HeroClass { new TengusMask().quantity(1).identify().collect(); new RingOfWealth().quantity(1).identify().collect(); new DiedCrossBow().quantity(1).identify().collect(); - new EtherealChains().quantity(1).identify().collect(); + new RedWhiteRose().quantity(1).identify().collect(); Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f); new WraithAmulet().quantity(1).identify().collect(); new BloodthirstyThorn().quantity(1).identify().collect(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index 993edca9d..826058574 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -47,16 +47,16 @@ public class Bestiary { case 1: //3x rat, 1x snake return new ArrayList<>(Arrays.asList( - Rat.class, Rat.class, - Rat.class)); + FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class)); case 2: - return new ArrayList<>(Arrays.asList(Rat.class, - Rat.class, Rat.class, Gnoll.class, Gnoll.class, + return new ArrayList<>(Arrays.asList(FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, Gnoll.class, Gnoll.class, Gnoll.class, Gnoll.class, Albino.class)); case 3: - return new ArrayList<>(Arrays.asList(Rat.class, - Rat.class, Salamander.class, - Salamander.class, Rat.class, Rat.class, + return new ArrayList<>(Arrays.asList(FlowerSlime.class, + FlowerSlime.class, Salamander.class, + Salamander.class, FlowerSlime.class, FlowerSlime.class, ClearElemental.class,Crab.class,Swarm.class)); case 4: return new ArrayList<>(Arrays.asList(Salamander.class, @@ -153,11 +153,11 @@ public class Bestiary { Golem.class)); } default: - return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, - Rat.class, - Rat.class, Rat.class, Rat.class, - Rat.class, Rat.class, Rat.class, - Rat.class)); + return new ArrayList<>(Arrays.asList(FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class)); } } switch (i) { @@ -165,23 +165,22 @@ public class Bestiary { case 1: //3x rat, 1x snake return new ArrayList<>(Arrays.asList( - Rat.class, Rat.class, - Rat.class)); + Rat.class, Rat.class)); case 2: - return new ArrayList<>(Arrays.asList(Rat.class, - Rat.class, Rat.class, Gnoll.class, Gnoll.class, + return new ArrayList<>(Arrays.asList(FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, Gnoll.class, Gnoll.class, Gnoll.class, Gnoll.class)); case 3: - return new ArrayList<>(Arrays.asList(Rat.class, - Rat.class, Salamander.class, - Salamander.class, Rat.class, Rat.class, + return new ArrayList<>(Arrays.asList(FlowerSlime.class, + FlowerSlime.class, Salamander.class, + Salamander.class, FlowerSlime.class, FlowerSlime.class, ClearElemental.class,Crab.class,Swarm.class)); case 4: return new ArrayList<>(Arrays.asList(Salamander.class, ClearElemental.class, Slime_Red.class, Slime_Orange.class, Swarm.class,Crab.class)); case 5: - return new ArrayList<>(Arrays.asList(Rat.class, Rat.class,Slime.class,Slime.class,Swarm.class,Crab.class)); + return new ArrayList<>(Arrays.asList(FlowerSlime.class, FlowerSlime.class,Slime.class,Slime.class,Swarm.class,Crab.class)); case 6: return new ArrayList<>(Arrays.asList(Skeleton.class, BlackHost.class,Guard.class, DM100.class, DM100.class, DM100.class)); @@ -203,7 +202,8 @@ public class Bestiary { Brute.class, Brute.class, Necromancer.class,Necromancer.class)); case 11: - return new ArrayList<>(Arrays.asList(Bat.class, DM100.class,DM100.class,ColdMagicRat.class,ColdMagicRat.class)); + return new ArrayList<>(Arrays.asList(Bat.class, DM100.class,DM100.class,ColdMagicRat.class, + ColdMagicRat.class)); case 12: //1x bat, 1x brute, 2x shaman, 2x spinner, 2x DM-300 return new ArrayList<>(Arrays.asList( @@ -271,7 +271,7 @@ public class Bestiary { return Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? new ArrayList<>(Arrays.asList( Eye.class,ShieldHuntsman.class,RedMurderer.class,MolotovHuntsman.class)) : new ArrayList<>(Arrays.asList( - Eye.class,ShieldHuntsman.class)); + Eye.class,ShieldHuntsman.class)); case 23: //1x: succubus, 2x evil eye, 3x scorpio return Dungeon.isDLC(Conducts.Conduct.BOSSRUSH) ? new ArrayList<>(Arrays.asList( @@ -287,11 +287,11 @@ public class Bestiary { Eye.class, Scorpio.class, Succubus.class,Fire_Scorpio.class,Ice_Scorpio.class,ShieldHuntsman.class)); default: - return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, - Rat.class, - Rat.class, Rat.class, Rat.class, - Rat.class, Rat.class, Rat.class, - Rat.class)); + return new ArrayList<>(Arrays.asList(FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class, FlowerSlime.class, FlowerSlime.class, + FlowerSlime.class)); } } @@ -329,7 +329,7 @@ public class Bestiary { for (int i = 0; i < rotation.size(); i++){ if (Random.Int( 50 ) == 0) { Class cl = rotation.get(i); - if (cl == Rat.class) { + if (cl == FlowerSlime.class) { cl = Albino.class; } else if (cl == Guard.class) { cl = SRPDHBLR.class; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/ColdGurad.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/ColdGurad.java index 1d21572ea..09cac1ff1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/ColdGurad.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/ColdGurad.java @@ -145,7 +145,7 @@ public class ColdGurad extends Mob implements Callback { @Override public int drRoll() { - return Random.NormalIntRange(0, 5); + return Random.NormalIntRange(0, 2); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java index 8976b51c4..79d21b534 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlameB01.java @@ -103,7 +103,7 @@ public class FlameB01 extends Mob { sprite.attack( enemy.pos ); spend( TIME_TO_BURN ); shoot(this, enemy.pos); - gasTankPressure -= Random.Int(1, 10); + gasTankPressure -= 60; } return !visible; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlowerSlime.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlowerSlime.java new file mode 100644 index 000000000..00bf29b0a --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FlowerSlime.java @@ -0,0 +1,37 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FlowerSlimeSprites; +import com.watabou.utils.Random; + +public class FlowerSlime extends Mob { + + { + spriteClass = FlowerSlimeSprites.class; + + loot = Generator.Category.SEED; + lootChance = 0.25f; + + HP = HT = 12; + defenseSkill = 2; + maxLvl = 7; + } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 2, 5 ); + } + + @Override + public int attackSkill( Char target ) { + return 8; + } + + @Override + public int drRoll() { + return Random.NormalIntRange(0, 2); + } + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java index cee83793c..aab9b0d3a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java @@ -50,9 +50,7 @@ public class Goo extends Mob { { if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { - HP = HT = 180; - } else { - HP = HT = Dungeon.isChallenged(Challenges.STRONGER_BOSSES) ? 120 : 100; + HP = HT = 120; } EXP = 10; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java index c93212185..a6f8c833c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/OldDM300.java @@ -23,13 +23,15 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; 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; -import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; @@ -38,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; @@ -52,25 +55,26 @@ import com.watabou.utils.Bundle; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; -public class OldDM300 extends DM200 { +public class OldDM300 extends FlameB01 { { spriteClass = DM300SpiderSprite.class; state = PASSIVE; - HP = HT = 320; + HP = HT = 270; EXP = 30; defenseSkill = 18; maxLvl=30; - baseSpeed = 1.45f; + baseSpeed = 0.85f; properties.add(Property.LARGE); properties.add(Property.MINIBOSS); properties.add(Property.INORGANIC); + properties.add(Property.FIERY); } - + @Override public int damageRoll() { - return Random.NormalIntRange( 20, 25 ); + return Random.NormalIntRange( 10, 20 ); } @Override @@ -87,14 +91,25 @@ public class OldDM300 extends DM200 { public boolean act() { LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ - Dungeon.level.seal(); - if(Dungeon.isChallenged(MOREROOM)) { + if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { AlarmTrap alarmTrap = new AlarmTrap(); alarmTrap.pos = pos; alarmTrap.activate(); + Dungeon.level.seal(); + ScrollOfTeleportation.appear(hero, pos+8); + } + } + + 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 ); } } - GameScene.add( Blob.seed( pos, 30, ToxicGas.class ) ); return super.act(); } @@ -110,6 +125,7 @@ public class OldDM300 extends DM200 { if (Dungeon.level.heroFOV[step] && Dungeon.hero.isAlive()) { sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "repair")); + gasTankPressure += 20; } } @@ -171,7 +187,7 @@ public class OldDM300 extends DM200 { } GameScene.bossSlain(); for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){ - if ( mob instanceof DM201 ) { + if (mob instanceof DM201 ) { mob.die( cause ); } } @@ -184,7 +200,20 @@ public class OldDM300 extends DM200 { if (state == PASSIVE) { state = HUNTING; notice(); + ScrollOfTeleportation.appear(hero, pos+8); + Dungeon.level.seal(); } + + if(HP<50){ + for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){ + if (mob instanceof DM201 ) { + mob.die(true); + } + } + Buff.affect(this, Barrier.class).setShield(140); + } + + LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); if (lock != null && !isImmune(src.getClass())) lock.addTime(dmg*1.5f); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java index f9a9a2f9e..38ba6cda7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java @@ -489,6 +489,10 @@ public class YogDzewa extends Mob { Badges.GOODRLPT(); } + if(Dungeon.nightMode){ + PaswordBadges.NIGHT_CAT(); + } + if(Dungeon.isChallenged(AQUAPHOBIA)){ Badges.CLEARWATER(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nxhy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nxhy.java index 04a47f978..b2b49898d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nxhy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nxhy.java @@ -1,7 +1,9 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; +import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; @@ -29,6 +31,7 @@ public class Nxhy extends Shopkeeper { if (!seenBefore && Dungeon.level.heroFOV[pos]) { yell(Messages.get(this, "greetings", Dungeon.hero.name())); seenBefore = true; + playBGM(Assets.SHOP, true); } if (Dungeon.level.heroFOV[pos]){ Notes.add(Notes.Landmark.SHOP); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java index 50998e899..344bcedde 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Nyz.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -57,12 +58,9 @@ public class Nyz extends NTNPC { playBGM(Assets.NYZSHOP, true); } seenBefore = true; - } else if (seenBefore && !Dungeon.level.heroFOV[pos] && Dungeon.depth == 0) { - playBGM(Assets.TOWN, true); - seenBefore = false; - } else if (seenBefore && !Dungeon.level.heroFOV[pos] && Dungeon.depth == 12) { - playBGM(Assets.BGM_2,true); + } else if(seenBefore && !Dungeon.level.heroFOV[pos]) { seenBefore = false; + BGMPlayer.playBGMWithDepth(); } throwItem(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java index 88305b76d..80af922c7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Shopkeeper.java @@ -21,8 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; +import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.BGMPlayer; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; @@ -72,9 +75,11 @@ public class Shopkeeper extends NPC { if (!seenBefore && Dungeon.level.heroFOV[pos]) { yell(Messages.get(this, "greetings", hero.name())); seenBefore = 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.visited[pos]){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java index 7e7b2e992..488267639 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/spical/GooMob.java @@ -2,8 +2,10 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical; import static com.shatteredpixel.shatteredpixeldungeon.BGMPlayer.playBGM; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.MOREROOM; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; @@ -11,8 +13,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Goo; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.GooNPC; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -21,8 +25,11 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GooSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.utils.Bundle; +import com.watabou.utils.Callback; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; @@ -31,7 +38,7 @@ public class GooMob extends Mob { { - HP = HT = 180; + HP = HT = Random.NormalIntRange(90,180); EXP = 10; defenseSkill = 8; @@ -78,16 +85,30 @@ public class GooMob extends Mob { return Random.NormalIntRange(0, 2); } public static boolean seenBefore = false; + + private void tell(String text) { + Game.runOnRenderThread(new Callback() { + @Override + public void call() { + GameScene.show(new WndQuest(new GooNPC(), text)); + } + } + ); + } + @Override public boolean act() { LockedFloor lock = Dungeon.hero.buff(LockedFloor.class); if(lock == null && !seenBefore && Dungeon.level.heroFOV[pos]){ Dungeon.level.seal(); seenBefore = false; - if(Dungeon.isChallenged(MOREROOM)) { + if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { AlarmTrap alarmTrap = new AlarmTrap(); alarmTrap.pos = pos; alarmTrap.activate(); + ScrollOfTeleportation.appear(hero, pos+4); + sprite().showAlert(); + tell(Messages.get(this, "notice")); } } @@ -219,6 +240,8 @@ public class GooMob extends Mob { if (state == PASSIVE) { state = HUNTING; notice(); + ScrollOfTeleportation.appear(hero, pos+1); + Dungeon.level.seal(); } if ((HP*2 <= HT) && !bleeding){ @@ -275,6 +298,11 @@ public class GooMob extends Mob { pumpedUp = bundle.getInt( PUMPEDUP ); + if(Dungeon.isChallenged(MOREROOM)){ + if (state != SLEEPING) BossHealthBar.assignBoss(this); + if ((HP*2 <= HT)) BossHealthBar.bleed(true); + } + //if check is for pre-0.9.3 saves healInc = bundle.getInt(HEALINC); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Gregorian.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Gregorian.java new file mode 100644 index 000000000..c0b662c38 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/utils/Gregorian.java @@ -0,0 +1,61 @@ +package com.shatteredpixel.shatteredpixeldungeon.custom.utils; + +import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.birthday; +import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.holiday; + +import com.nlf.calendar.Lunar; +import com.nlf.calendar.Solar; +import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; + +import java.util.Calendar; + +public class Gregorian { + + /** + * 这个代码是基于6Tail的农历Java库
+ * 皆在计算中国的传统节日,
+ * 使地牢自动计算农历日期成为可能
+ * 目前已经实现端午节 中秋节 作者自身的生日等
+ *

+ * 要在地牢中使用该代码,
+ * 你需要在core级gradle导入指定的库
+ * 然后,使用这个库
+ * 最后调用在你需要的位置即可
+ *

+ * 实列参见RegularLevel.java:
+ * Gregorian.LunarCheckDate();
+ *
+ * Gradle Config:
+ * build.gradle (Module:core)
+ * implementation 'cn.6tail:lunar:1.3.6'
+ *

+ * Lunar Maven
+ * Lunar Release
+ * Lunar Github + * */ + public static void LunarCheckDate() { + Calendar calendar = Calendar.getInstance(); + Solar date = Solar.fromDate(calendar.getTime()); + Lunar lunar = date.getLunar(); + + boolean isZQJ = lunar.getMonth() == 8 && (lunar.getDay() >= 15-10 && lunar.getDay() <= 15+12); + boolean isDevBirthday = lunar.getMonth() == 8 && lunar.getDay() >= 22 && lunar.getDay() <= 25; + boolean isDWJ = lunar.getMonth() == 5 && (lunar.getDay() >= 5-3 && lunar.getDay() <= 5+7); + + //判断是否是开发组的开发者Ling的当天生日到后续三天-8-22--8.25*/ + if(isDevBirthday) { + birthday = RegularLevel.DevBirthday.DEV_BIRTHDAY; + } + + //判断是否是中秋节前10天到中秋节后12天*/ + if(isZQJ){ + holiday = RegularLevel.Holiday.ZQJ; + } + + //判断是否是端午节前3天到端午节后7天*/ + if(isDWJ){ + holiday = RegularLevel.Holiday.DWJ; + } + + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/EtherealChains.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/EtherealChains.java index 049da6b65..724a09144 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/EtherealChains.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/EtherealChains.java @@ -33,7 +33,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.effects.Chains; import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy; -import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; @@ -116,7 +115,7 @@ public class EtherealChains extends Artifact { //chains cannot be used to go where it is impossible to walk to PathFinder.buildDistanceMap(target, BArray.or(Dungeon.level.passable, Dungeon.level.avoid, null)); - if (PathFinder.distance[curUser.pos] == Integer.MAX_VALUE || Dungeon.level.feeling == Level.Feeling.DIEDROOM && Dungeon.level.locked){ + if (PathFinder.distance[curUser.pos] == Integer.MAX_VALUE){ GLog.w( Messages.get(EtherealChains.class, "cant_reach") ); return; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java index 09b7271b5..b2312be53 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/WraithAmulet.java @@ -218,6 +218,8 @@ public class WraithAmulet extends Artifact { if (enemy.properties().contains(Char.Property.BOSS)) { enemy.damage(enemy.HT / 4, WraithAmulet.class); GLog.i(Messages.get(this, "killboss")); + amulet.cooldown = 150 / (amulet.level() / 2); + amulet.charge -= 6; enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "koss")); } else if (enemy.properties().contains(Char.Property.MIMIC) && enemy.alignment == Char.Alignment.NEUTRAL){ for (Mob m: Dungeon.level.mobs){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/DevItem/CrystalLing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/DevItem/CrystalLing.java new file mode 100644 index 000000000..bd21546b6 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/DevItem/CrystalLing.java @@ -0,0 +1,30 @@ +package com.shatteredpixel.shatteredpixeldungeon.items.quest.DevItem; + +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class CrystalLing extends Item { + + { + image = ItemSpriteSheet.CRYSTAL_LING; + cursed = false; + } + + @Override + public ItemSprite.Glowing glowing() { + return new ItemSprite.Glowing(0x008888, 6f); + } + + @Override + public boolean isUpgradable() { + return false; + } + + @Override + public boolean isIdentified() { + return true; + } + +} + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/RedWhiteRose.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/RedWhiteRose.java index 8a7696820..ab44a1fec 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/RedWhiteRose.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/quest/RedWhiteRose.java @@ -9,7 +9,7 @@ public class RedWhiteRose extends Item { { image = ItemSpriteSheet.REDWHITEROSE; - upgrade(99); + cursed = false; } @Override @@ -22,6 +22,11 @@ public class RedWhiteRose extends Item { return false; } + @Override + public int level() { + return 99; + } + @Override public boolean isIdentified() { return true; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java index 09f16534c..18af37bcb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java @@ -111,12 +111,8 @@ public class WandOfAnmy extends DamageWand { @Override public void fx(boolean on) { - if (on) { - target.sprite.add(CharSprite.State.HEARTS); - //Statistics.TryUsedAnmy = true; - } - else - target.sprite.remove(CharSprite.State.HEARTS); + if (on) target.sprite.add(CharSprite.State.HEARTS); + else target.sprite.remove(CharSprite.State.HEARTS); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index e5cbc8f73..9505a767c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -27,11 +27,8 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OldDM300; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.RedDragon; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CavesPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; @@ -118,27 +115,19 @@ public class CavesLevel extends RegularLevel { public void updateChasmTerrain() { for (int i = 0; i < map.length; i++) { - if (map[i] == Terrain.EMBERS) { + if (map[i] == Terrain.SIGN) { // 将 EMPTY_DECO 地块改为新地形 set(i, Terrain.LOCKED_EXIT); GameScene.updateMap(i); // 更新地图显示 Camera.main.shake(4f,7f); } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { // 将 CHASM 地块改为新地形 - set(i, Terrain.EMBERS); + set(i, Terrain.EMPTY); GameScene.updateMap(i); // 更新地图显示 GameScene.flash(Window.WATA_COLOR); } - for (Mob m : Dungeon.level.mobs){ - if (m instanceof OldDM300){ - if(m.isAlive() && hero.buff(LockedFloor.class) != null){ - ScrollOfTeleportation.appear(hero, m.pos+8); - GameScene.flash(Window.SKYBULE_COLOR); - } - playBGM(Assets.BGM_BOSSC, true); - } - } - + GameScene.flash(Window.SKYBULE_COLOR); + playBGM(Assets.BGM_BOSSC, true); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index fb2b5c0a5..7747e91bf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -269,7 +269,7 @@ public abstract class Level implements Bundlable { } private void initializeLevelDepthType(){ - if(Dungeon.isChallenged(MOREROOM)){ + if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ int randomInt = Random.Int(10); if(Dungeon.depth == 4 || Dungeon.depth == 14){ feeling = Feeling.DIEDROOM; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 88735f2c7..9e3965158 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GoldenMimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue; +import com.shatteredpixel.shatteredpixeldungeon.custom.utils.Gregorian; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; @@ -103,58 +104,63 @@ public abstract class RegularLevel extends Level { public static Holiday holiday; + public static DevBirthday birthday; + + //开发团队的生日列表 + // S直接参与Calendar类计算 + // L参与Lunar-Java类计算 + public enum DevBirthday { + DEV_BIRTHDAY, + //QinYue S-5.13 + CHAPTER_BIRTHDAY, + //设寄师 + DESIGN_BIRTHDAY, + //丹尼尔 + ART_DC_BIRTHDAY, + //冷群 + ART_LQ_BIRTHDAY, + //小蓝 S-3.26 + ART_LB_BIRTHDAY, + //清扬 L-12.3 + ART_CY_BIRTHDAY, + } + public enum Holiday{ NONE, DWJ, ZQJ, //TBD HWEEN,//2nd week of october though first day of november - XMAS //3rd week of december through first week of january + XMAS, } + + static{ holiday = Holiday.NONE; + /**农历计算*/ + Gregorian.LunarCheckDate(); + final Calendar calendar = Calendar.getInstance(); + + //计算中国传统节日的代码已迁移到最上方的"Gregorian.LunarCheckDate();"方法。 switch(calendar.get(Calendar.MONTH)){ case Calendar.JANUARY: if (calendar.get(Calendar.WEEK_OF_MONTH) == 1) - holiday = XMAS; - break; - //6.20-6.30 - case Calendar.JUNE: - if (calendar.get(Calendar.DAY_OF_MONTH) >= 20 ){ - holiday = Holiday.DWJ; - } else { - holiday = Holiday.NONE; - } - break; - case Calendar.JULY: - int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); - if(dayOfMonth <= 12){ - holiday = Holiday.DWJ; - } else { - holiday = Holiday.NONE; - } - break; - //9.10-10.8 - case Calendar.SEPTEMBER: - if (calendar.get(Calendar.DAY_OF_MONTH) >= 10 ){ - holiday = Holiday.ZQJ; - } else { - holiday = Holiday.NONE; - } + holiday = Holiday.XMAS; break; case Calendar.OCTOBER: - if (calendar.get(Calendar.DAY_OF_MONTH) <= 8 ){ - holiday = Holiday.ZQJ; - } else { - holiday = Holiday.NONE; - } + if (calendar.get(Calendar.WEEK_OF_MONTH) >= 2) + holiday = Holiday.HWEEN; + break; + case Calendar.NOVEMBER: + if (calendar.get(Calendar.DAY_OF_MONTH) == 1) + holiday = Holiday.HWEEN; break; case Calendar.DECEMBER: if (calendar.get(Calendar.WEEK_OF_MONTH) >= 3) - holiday = XMAS; + holiday = Holiday.XMAS; break; } } @@ -243,8 +249,8 @@ public abstract class RegularLevel extends Level { initRooms.add( roomExit = new ExitRoom()); //force max standard rooms and multiple by 1.5x for large levels - int standards = standardRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)); - if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){ + int standards = standardRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))); + if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ standards = (int)Math.ceil(standards * 1.5f); } for (int i = 0; i < standards; i++) { @@ -305,8 +311,8 @@ public abstract class RegularLevel extends Level { } //force max special rooms and add one more for large levels - int specials = specialRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)); - if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){ + int specials = specialRooms(feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))); + if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ specials++; } if(feeling == Feeling.THREEWELL){ @@ -396,12 +402,12 @@ public abstract class RegularLevel extends Level { if (Dungeon.depth <= 1) return 0; int mobs = 3 + Dungeon.depth % 5 + Random.Int(3); - if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){ + if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ mobs = (int)Math.ceil(mobs * 1.33f); } // 在特定挑战中怪物生成翻倍 - if (Dungeon.isChallenged(MOREROOM)) { + if (Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))) { mobs += Random.NormalIntRange(1,3); } @@ -537,7 +543,7 @@ public abstract class RegularLevel extends Level { // drops 3/4/5 items 60%/30%/10% of the time int nItems = 3 + Random.chances(new float[]{6, 3, 1}); - if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM)){ + if (feeling == Feeling.LARGE || Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ nItems += 2; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index 4cd86be72..9027ab019 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -27,11 +27,8 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.spical.GooMob; import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.JunglePainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; @@ -102,25 +99,17 @@ public class SewerLevel extends RegularLevel { public void updateChasmTerrain() { for (int i = 0; i < map.length; i++) { - if (map[i] == Terrain.EMBERS) { + if (map[i] == Terrain.SIGN) { // 将 EMPTY_DECO 地块改为新地形 set(i, Terrain.LOCKED_EXIT); GameScene.updateMap(i); // 更新地图显示 Camera.main.shake(3f,6f); - } else if(hero.buff(LockedFloor.class) == null && map[i] == Terrain.LOCKED_EXIT) { // 将 CHASM 地块改为新地形 - set(i, Terrain.EMBERS); + set(i, Terrain.EMPTY); GameScene.updateMap(i); // 更新地图显示 } - for (Mob m : Dungeon.level.mobs){ - if (m instanceof GooMob){ - if(m.isAlive() && hero.buff(LockedFloor.class) != null){ - ScrollOfTeleportation.appear(hero, m.pos+1); - } - playBGM(Assets.BGM_BOSSA, true); - } - } + playBGM(Assets.BGM_BOSSA, true); GameScene.flash(Window.ANSDO_COLOR); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java index 10eca99ba..de5ba358b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java @@ -101,7 +101,8 @@ public class Terrain { flags[EMPTY_DECO] = flags[EMPTY]; flags[LOCKED_EXIT] = SOLID; flags[UNLOCKED_EXIT]= PASSABLE; - flags[SIGN] = SOLID; //Currently these are unused except for visual tile overrides where we want terrain to be solid with no other properties + flags[SIGN] = PASSABLE; + // to be solid with no other properties flags[WELL] = AVOID; flags[STATUE] = SOLID; flags[STATUE_SP] = flags[STATUE]; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java index 2a4678439..7d6f1fce9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/GooRoom.java @@ -1,5 +1,6 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard; +import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ClearElemental; @@ -11,6 +12,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.MagicalFireRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CorrosionTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CursingTrap; @@ -27,9 +29,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WarpingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WeakeningTrap; +import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; +import com.watabou.noosa.Image; +import com.watabou.noosa.Tilemap; import com.watabou.utils.Point; -public class GooRoom extends StandardRoom { +public class GooRoom extends SpecialRoom { { //noMobs = true; @@ -53,8 +58,9 @@ public class GooRoom extends StandardRoom { public void paint( Level level ) { Painter.fill( level, this, Terrain.WALL ); - Painter.fill( level, this, 1, Terrain.EMBERS ); - Painter.fill( level, this, 2, Terrain.WATER ); + Painter.fill( level, this, 1, Terrain.SIGN ); + Painter.fill( level, this, 2, Terrain.EMPTY_SP ); + Point c = center(); int cx = c.x; @@ -71,16 +77,37 @@ public class GooRoom extends StandardRoom { } } + setupGooNest(level); + + int pillarW = (width()-8)/2; + int pillarH = (height()-8)/2; + + Painter.fill(level, left+3, top+3, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, left+3, bottom-3-pillarH, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, right-3-pillarW, top+3, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, right-3-pillarW, bottom-3-pillarH, pillarW+1, pillarH+1, Terrain.WALL); + Painter.drawCircle(level, c, 7, Terrain.WATER); - Painter.drawCircle(level, c, 5, Terrain.EMPTY_SP); - Painter.drawCircle(level, c, 2, Terrain.WATER); + Painter.drawCircle(level, c, 5, Terrain.EMPTY); + Painter.drawCircle(level, c, 3, Terrain.WATER); + Painter.drawCircle(level, c, 2, Terrain.STATUE); + Painter.drawCircle(level, c, 0, Terrain.WATER); + + Painter.set(level, cx, cy - 1, Terrain.WATER); + Painter.set(level, cx+1, cy - 1, Terrain.WATER); + Painter.set(level, cx-1, cy - 1, Terrain.WATER); + Painter.set(level, cx+1, cy + 1, Terrain.WATER); + Painter.set(level, cx-1, cy + 1, Terrain.WATER); + Painter.set(level, cx+1, cy, Terrain.WATER); + Painter.set(level, cx-1, cy, Terrain.WATER); + Painter.set(level, cx, cy + 1, Terrain.WATER); GooMob statue = new GooMob(); statue.pos = cx + cy * level.width(); level.mobs.add( statue ); Guard statue2 = new Guard(); - statue2.HT = statue2.HP = statue2.HT * 3; + statue2.HT = statue2.HP = statue2.HT*2; statue2.pos = (cx-5) + cy * level.width(); statue2.properties.add(Char.Property.IMMOVABLE); level.mobs.add( statue2 ); @@ -104,6 +131,73 @@ public class GooRoom extends StandardRoom { level.mobs.add( statue5 ); } + protected void setupGooNest( Level level ){ + GooRoom.GooNest nest = new GooRoom.GooNest(); + nest.setRect(left + width()/2 - 2, top + height()/2 - 2, 4 + width()%2, 4 + height()%2); + + level.customTiles.add(nest); + } + + public static class GooNest extends CustomTilemap { + + { + texture = Assets.Environment.SEWER_BOSS; + } + + @Override + public Tilemap create() { + Tilemap v = super.create(); + int[] data = new int[tileW*tileH]; + for (int x = 0; x < tileW; x++){ + for (int y = 0; y < tileH; y++){ + + //corners + if ((x == 0 || x == tileW-1) && (y == 0 || y == tileH-1)){ + data[x + tileW*y] = -1; + + //adjacent to corners + } else if ((x == 1 && y == 0) || (x == 0 && y == 1)){ + data[x + tileW*y] = 0; + + } else if ((x == tileW-2 && y == 0) || (x == tileW-1 && y == 1)){ + data[x + tileW*y] = 1; + + } else if ((x == 1 && y == tileH-1) || (x == 0 && y == tileH-2)){ + data[x + tileW*y] = 2; + + } else if ((x == tileW-2 && y == tileH-1) || (x == tileW-1 && y == tileH-2)) { + data[x + tileW*y] = 3; + + //sides + } else if (x == 0){ + data[x + tileW*y] = 4; + + } else if (y == 0){ + data[x + tileW*y] = 5; + + } else if (x == tileW-1){ + data[x + tileW*y] = 6; + + } else if (y == tileH-1){ + data[x + tileW*y] = 7; + + //inside + } else { + data[x + tileW*y] = 8; + } + + } + } + v.map( data, tileW ); + return v; + } + + @Override + public Image image(int tileX, int tileY) { + return null; + } + } + protected Class[] trapClasses() { return new Class[]{ FrostTrap.class, StormTrap.class, CorrosionTrap.class, BlazingTrap.class, DisintegrationTrap.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java index 817abfe45..ad482071f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/OldDM300Room.java @@ -6,6 +6,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.OldDM300; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CursingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.FrostTrap; @@ -16,7 +17,7 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; import com.watabou.utils.Reflection; -public class OldDM300Room extends StandardRoom { +public class OldDM300Room extends SpecialRoom { { //noMobs = true; @@ -39,7 +40,7 @@ public class OldDM300Room extends StandardRoom { public void paint( Level level ) { Painter.fill( level, this, Terrain.WALL ); - Painter.fill( level, this, 1, Terrain.EMBERS ); + Painter.fill( level, this, 1, Terrain.SIGN ); Painter.fill( level, this, 2, Terrain.WATER ); Point c = center(); @@ -50,12 +51,21 @@ public class OldDM300Room extends StandardRoom { door.set( Door.Type.REGULAR ); } + int pillarW = (width()-8)/2; + int pillarH = (height()-8)/2; + + Painter.fill(level, left+3, top+3, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, left+3, bottom-3-pillarH, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, right-3-pillarW, top+3, pillarW+1, pillarH+1, Terrain.WALL); + Painter.fill(level, right-3-pillarW, bottom-3-pillarH, pillarW+1, pillarH+1, Terrain.WALL); + Painter.drawCircle(level, c, 17, Terrain.HIGH_GRASS); Painter.drawCircle(level, c, 16, Terrain.TRAP); Painter.drawCircle(level, c, 15, Terrain.HIGH_GRASS); Painter.drawCircle(level, c, 14, Terrain.TRAP); Painter.drawCircle(level, c, 13, Terrain.EMPTY); - Painter.drawCircle(level, c, 7, Terrain.EMPTY); + Painter.drawCircle(level, c, 7, Terrain.STATUE); + Painter.drawCircle(level, c, 6, Terrain.WATER); Painter.drawCircle(level, c, 5, Terrain.WATER); Painter.drawCircle(level, c, 2, Terrain.EMPTY); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java index 000cc3590..1a759b352 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PassWordBadgesScene.java @@ -4,6 +4,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.effects.PasswordBadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -16,7 +17,6 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndProBadge; import com.watabou.noosa.Camera; import com.watabou.noosa.Game; import com.watabou.noosa.Image; -import com.watabou.noosa.audio.Music; import com.watabou.noosa.audio.Sample; import com.watabou.utils.Random; @@ -26,10 +26,14 @@ public class PassWordBadgesScene extends PixelScene { @Override public void create() { + if(!Statistics.HiddenOK){ + Badges.HDEX(); + Statistics.HiddenOK = true; + } super.create(); - Music.INSTANCE.play( Assets.Music.THEME, true ); + //Music.INSTANCE.play( Assets.Music.THEME, true ); uiCamera.visible = false; @@ -56,7 +60,7 @@ public class PassWordBadgesScene extends PixelScene { List badges = PaswordBadges.filtered( true ); - int blankBadges = 9; + int blankBadges = 14; blankBadges -= badges.size(); if (badges.contains(Badges.Badge.ALL_ITEMS_IDENTIFIED)) blankBadges -= 6; if (badges.contains(Badges.Badge.YASD)) blankBadges -= 5; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java index 784bd82b1..d4001f82e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/TitleScene.java @@ -1,10 +1,14 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Chrome; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; +import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; import com.shatteredpixel.shatteredpixeldungeon.effects.BannerSprites; import com.shatteredpixel.shatteredpixeldungeon.effects.Fireball; import com.shatteredpixel.shatteredpixeldungeon.effects.Flare; @@ -28,24 +32,39 @@ import com.watabou.utils.ColorMath; import com.watabou.utils.DeviceCompat; import com.watabou.utils.GameMath; import com.watabou.utils.Point; +import com.watabou.utils.Random; +import java.util.Calendar; import java.util.Date; public class TitleScene extends PixelScene { + public static boolean Reusable = false; @Override public void create() { super.create(); + Calendar calendar = Calendar.getInstance(); + int currentHour = calendar.get(Calendar.HOUR_OF_DAY); + Dungeon.nightMode = currentHour > 7 && currentHour < 22; // if(SPDSettings.startPort(false)){ // SPDSettings.scale(3); // ShatteredPixelDungeon.seamlessResetScene(); // SPDSettings.startPort(true); // } - Music.INSTANCE.play(Assets.Music.THEME_1, true); + if(Random.Int(10) == 1 && !Reusable && Statistics.winGame) { + Reusable = true; + Music.INSTANCE.play(Assets.Music.THEME_2, true); + } else if (!Reusable) { + Music.INSTANCE.play(Assets.Music.THEME_1, true); + } else { + Music.INSTANCE.play(Assets.Music.THEME_2, true); + } + + uiCamera.visible = false; @@ -173,6 +192,18 @@ public class TitleScene extends PixelScene { ShatteredPixelDungeon.switchNoFade( StartScene.class ); } + @Override + public void update() { + super.update(); + + if (TitleScene.Reusable){ + textColor(ColorMath.interpolate( 0xFFFFFF, Window.CYELLOW, + 0.5f + (float)Math.sin(Game.timeTotal*5)/2f)); + text(Messages.get(TitleScene.class, "go")); + icon(BadgeBanner.image(Badges.Badge.HAPPY_END.image)); + } + } + @Override protected boolean onLongClick() { //making it easier to start runs quickly while debugging diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java index 3b6a3f7e6..fec0f591c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java @@ -576,6 +576,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip hearts.on = false; hearts = null; } + break; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FlowerSlimeSprites.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FlowerSlimeSprites.java new file mode 100644 index 000000000..cc395ea25 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FlowerSlimeSprites.java @@ -0,0 +1,31 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.MovieClip; +import com.watabou.noosa.TextureFilm; + +public class FlowerSlimeSprites extends MobSprite { + + public FlowerSlimeSprites() { + super(); + + texture( Assets.Sprites.FLOWER_SLIME ); + + TextureFilm frames = new TextureFilm( texture, 16, 16 ); + + idle = new MovieClip.Animation( 2, true ); + idle.frames( frames, 0, 0, 0, 1 ); + + run = new MovieClip.Animation( 10, true ); + run.frames( frames, 2,3 ); + + attack = new MovieClip.Animation( 15, false ); + attack.frames( frames, 9, 10, 11, 5, 0 ); + + die = new MovieClip.Animation( 10, false ); + die.frames( frames, 4,5,6,7 ); + + play( idle ); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 9d07fb751..ddefd6e9a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -182,6 +182,8 @@ public class ItemSpriteSheet { public static final int SHRAPNEL_BOMB = BOMBS+11; public static final int BLACK_KEY = BOMBS+12; + public static final int CRYSTAL_LING = BOMBS+13; + static{ assignItemRect(BOMB, 10, 13); assignItemRect(DBL_BOMB, 14, 13); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java index b19fb8df0..1aeaece79 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.watabou.gltextures.TextureCache; import com.watabou.glwrap.Blending; import com.watabou.noosa.Game; @@ -64,7 +65,7 @@ public class Archs extends Component { arcsBg.offsetTo( 0, offsB ); add( arcsBg ); - arcsFg = new SkinnedBlock( 1, 1, Assets.Interfaces.ARCS_FG ){ + arcsFg = new SkinnedBlock( 1, 1, Dungeon.nightMode ? Assets.Interfaces.ARCS_FG : Assets.Interfaces.ARCS_FGN ){ @Override protected NoosaScript script() { return NoosaScriptNoLighting.get(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/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 e296c2070..705d0cd9b 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 @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.DimandKingSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireCrystalSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FlowerSlimeSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceSlowGirlSprites; @@ -144,6 +145,65 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); + changes = new ChangeInfo("v0.6.5.0-Alpha6.9-LAST", 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 Image("Ling.png", 0, 0, 16, 16)), ("开发者的话"), + ("v0.6.5.0-Alpha6.9-LAST--完成于2023-10-6\n\n" + + "今天对我来说是一个特别的日子,因为今天是我21岁生日。\n\n" + + "回想MLPD的两年,我也从一名曾经的准大学生变成了即将毕业的大学生\n\n" + + "生活的忙碌,社会的考验,实习的困难比比皆是。但好在我有一批非常爱我和这个游戏的玩家\n\n" + + "Alpha6.9,是MLPD的近期的最终版本。接下来,她(代指魔绫)将进入休整期阶段,\n\n" + + "但游戏的内容足够玩家游玩,当然,如果有bug,我会来修复。\n\n" + + "最近只是没有大版本更新了。最后,近期是我的生日,我在游戏中为各位玩家准备了水晶项链。\n\n" + + "她应该可以帮助你们更好的游玩游戏,希望水晶项链能给你们带来不错的体验。\n\n" + + "最后,让我们在冬季版本大更新中相见,再会!!!\n\n" + + "---MLPD主要开发者:JDSALing" ))); + + changes.addButton(new ChangeButton(Icons.get(Icons.DISPLAY_LAND), ("农历计算系统"), + ("现在MLPD支持农历计算系统,中秋节,端午节,以及作者的生日,均使用此系统计算。\n" + + "Ling的生日:农历8.22\n\n有效时间范围:8.22-8.25\n\n" + + "中秋节:农历8.15\n\n有效时间范围:中秋节前10天到中秋节后12天\n\n" + + "端午节:农历5.5\n\n有效时间范围:端午节前3天到端午节后7天"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.AUDIO), ("新主题BGM"), + ("在玩家在新版本胜利一次后,有机会在主界面播放新BGM和下半段暗示。"))); + + changes.addButton(new ChangeButton(new FlowerSlimeSprites(), ("新生物:丛林繁花史莱姆"), + ("替代普通老鼠,老鼠现在只会在丛林边缘(第一层生成),后面都是这个新生物。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.REDWHITEROSE), ("一种载体彻底实装"), + ("效果:力量+2,移速+10%,每5回合回复1HP"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CRYSTAL_LING), ("新开发者物品:水晶项链"), + ("在每年绫的生日有效活得时间直接在开局就能获得,自带韧性之戒效果,治疗效果小幅度提升。"))); + + changes.addButton(new ChangeButton(PasswordBadgeBanner.image(PaswordBadges.Badge.NIGHT_CAT.image), ( + "新隐藏徽章:不眠之夜"), + ("解密片段:月黑风高,古神陨落。"))); + + changes.addButton(new ChangeButton(BadgeBanner.image(Badges.Badge.HIDEEN_BADAGE.image), ("新徽章:隐秘探索"), + ("获得方式:发现隐藏徽章的位置"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("挑战:变幻莫测V0.2"), + ("修复了一堆问题:\n\n" + + "1.可能导致钥匙丢失\n\n2.重复Boss警报\n\n3.看见人不传送\n\n4.改善了Goo和DM300原型机的属性与地形。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项改动"), + ("1.优化了主题背景界面,并且植入夜间状态,在晚上22点到早上7点前是夜间状态。因此是夜间背景。反之则是白天背景。\n\n" + + "2.圣境密林层改善了几个地块,部分敌人素材迭代\n\n" + + "3.上个版本的一些FB-bug修复"))); + + changes = new ChangeInfo("v0.6.5.0-Alpha6-6.8-国庆", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -162,6 +222,7 @@ public class vM0_6_7_X_Changes { "4.部分界面UI迭代,变幻莫测挑战平衡"))); + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项修改"), ("1.迭代了UI材质\n\n2.优化了一些代码"))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java index 57aa652fc..fd30ade80 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java @@ -290,7 +290,7 @@ public class WndHero extends WndTabbed { String seed; if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { seed = "BossRush"; - }else if(Dungeon.isChallenged(MOREROOM)){ + }else if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ seed = "B"; } else { seed = "A"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java index eb1d8adcd..16457e428 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -174,7 +174,7 @@ public class WndRanking extends WndTabbed { String seed; if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) { seed = "BossRush"; - }else if(Dungeon.isChallenged(MOREROOM)){ + }else if(Dungeon.isChallenged(MOREROOM) && !(Dungeon.isDLC(Conducts.Conduct.BOSSRUSH))){ seed = "B"; } else { seed = "A";