update v0.6.5.0-Alpha6.9-LAST
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
}
|
||||
|
||||
|
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 737 B |
Before Width: | Height: | Size: 121 B After Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 180 B After Width: | Height: | Size: 956 B |
BIN
core/src/main/assets/interfaces/arcs2_night.png
Normal file
After Width: | Height: | Size: 626 B |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 475 B |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 825 B After Width: | Height: | Size: 875 B |
|
@ -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在这条蛇的视野外攻击它时可以触发伏击。当这条蛇在追击你时,可以尝试躲入一扇门后,再_在蛇进门的瞬间发动攻击_。
|
||||
|
||||
|
|
|
@ -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而你也不曾放弃。
|
||||
|
||||
|
|
|
@ -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=缩餐节食
|
||||
|
|
|
@ -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=游戏动态情报
|
||||
|
|
|
@ -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=挑战
|
||||
|
|
BIN
core/src/main/assets/music/theme_sky.ogg
Normal file
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 4.0 KiB |
BIN
core/src/main/assets/sprites/flowers_slime.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 90 KiB |
BIN
core/src/main/assets/sprites/katydid.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 543 B After Width: | Height: | Size: 1.7 KiB |
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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 ){
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
@ -302,6 +306,7 @@ public class Hero extends Char {
|
|||
int curHT = HT;
|
||||
|
||||
HT = 20 + 5*(lvl-1) + HTBoost;
|
||||
|
||||
float multiplier = RingOfMight.HTMultiplier(this);
|
||||
HT = Math.round(multiplier * HT);
|
||||
|
||||
|
@ -309,6 +314,8 @@ public class Hero extends Char {
|
|||
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;
|
||||
|
||||
}
|
||||
|
@ -724,6 +735,10 @@ public class Hero extends Char {
|
|||
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())){
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -489,6 +489,10 @@ public class YogDzewa extends Mob {
|
|||
Badges.GOODRLPT();
|
||||
}
|
||||
|
||||
if(Dungeon.nightMode){
|
||||
PaswordBadges.NIGHT_CAT();
|
||||
}
|
||||
|
||||
if(Dungeon.isChallenged(AQUAPHOBIA)){
|
||||
Badges.CLEARWATER();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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]){
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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库<br>
|
||||
* 皆在计算中国的传统节日,<br>
|
||||
* 使地牢自动计算农历日期成为可能<br>
|
||||
* 目前已经实现端午节 中秋节 作者自身的生日等<br>
|
||||
* <P></P>
|
||||
* 要在地牢中使用该代码,<br>
|
||||
* 你需要在core级gradle导入指定的库<br>
|
||||
* 然后,使用这个库<br>
|
||||
* 最后调用在你需要的位置即可<br>
|
||||
* <P></P>
|
||||
* 实列参见RegularLevel.java:<br>
|
||||
* Gregorian.LunarCheckDate();<br>
|
||||
* <br>
|
||||
* Gradle Config:<br>
|
||||
* build.gradle (Module:core) <br>
|
||||
* implementation 'cn.6tail:lunar:1.3.6'<br>
|
||||
* <P></P>
|
||||
* <a href="https://mvnrepository.com/artifact/cn.6tail/lunar">Lunar Maven</a><br>
|
||||
* <a href="https://github.com/6tail/lunar-java/releases">Lunar Release</a><br>
|
||||
* <a href="https://github.com/6tail/lunar-java">Lunar Github</a>
|
||||
* */
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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){
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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<? extends Trap>[] trapClasses() {
|
||||
return new Class[]{
|
||||
FrostTrap.class, StormTrap.class, CorrosionTrap.class, BlazingTrap.class, DisintegrationTrap.class,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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<PaswordBadges.Badge> 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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -576,6 +576,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
|
|||
hearts.on = false;
|
||||
hearts = null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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.优化了一些代码")));
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|