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 extends Mob> 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库
+ * 皆在计算中国的传统节日,
+ * 使地牢自动计算农历日期成为可能
+ * 目前已经实现端午节 中秋节 作者自身的生日等
+ *