update v0.6.5.0-Alpha6.9-LAST

This commit is contained in:
LingASDJ 2023-10-07 00:05:22 +08:00
parent 0421bd3ef2
commit 4974286085
72 changed files with 905 additions and 183 deletions

View File

@ -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

View File

@ -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'
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 B

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

After

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 B

After

Width:  |  Height:  |  Size: 875 B

View File

@ -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=-原型机
actors.mobs.olddm300.desc=是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在这条蛇的视野外攻击它时可以触发伏击。当这条蛇在追击你时可以尝试躲入一扇门后再_在蛇进门的瞬间发动攻击_。

View File

@ -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而你也不曾放弃。

View File

@ -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=缩餐节食

View File

@ -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=游戏动态情报

View File

@ -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=挑战

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 B

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -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";

View File

@ -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);

View File

@ -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 );
}

View File

@ -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;

View File

@ -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 );

View File

@ -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());
}
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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 ){

View File

@ -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);
}

View File

@ -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())){

View File

@ -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();

View File

@ -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(
@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -489,6 +489,10 @@ public class YogDzewa extends Mob {
Badges.GOODRLPT();
}
if(Dungeon.nightMode){
PaswordBadges.NIGHT_CAT();
}
if(Dungeon.isChallenged(AQUAPHOBIA)){
Badges.CLEARWATER();
}

View File

@ -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);

View File

@ -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();

View File

@ -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]){

View File

@ -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);

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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){

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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

View File

@ -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,30 +115,22 @@ 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);
}
}
}
}
@Override
protected Painter painter() {
return new CavesPainter()

View File

@ -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;

View File

@ -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;
}

View File

@ -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);
}
}
GameScene.flash(Window.ANSDO_COLOR);
}
}

View File

@ -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];

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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);
// }
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

View File

@ -576,6 +576,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
hearts.on = false;
hearts = null;
}
break;
}
}

View File

@ -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 );
}
}

View File

@ -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);

View File

@ -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();

View File

@ -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.优化了一些代码")));

View File

@ -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";

View File

@ -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";