diff --git a/build.gradle b/build.gradle index 44b320f0c..a09bb8c13 100644 --- a/build.gradle +++ b/build.gradle @@ -18,8 +18,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =907300 - appVersionName = '0.6.5.0-Alpha2' + appVersionCode =907400 + appVersionName = '0.6.5.0-Alpha3' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/environment/custom_tiles/lavecave_above.png b/core/src/main/assets/environment/custom_tiles/lavecave_above.png new file mode 100644 index 000000000..5bc837485 Binary files /dev/null and b/core/src/main/assets/environment/custom_tiles/lavecave_above.png differ diff --git a/core/src/main/assets/environment/custom_tiles/lavecave_behind.png b/core/src/main/assets/environment/custom_tiles/lavecave_behind.png new file mode 100644 index 000000000..e40a58de6 Binary files /dev/null and b/core/src/main/assets/environment/custom_tiles/lavecave_behind.png differ diff --git a/core/src/main/assets/environment/custom_tiles/town_above.png b/core/src/main/assets/environment/custom_tiles/town_above.png new file mode 100644 index 000000000..f96b3997d Binary files /dev/null and b/core/src/main/assets/environment/custom_tiles/town_above.png differ diff --git a/core/src/main/assets/environment/custom_tiles/town_behind.png b/core/src/main/assets/environment/custom_tiles/town_behind.png new file mode 100644 index 000000000..27715c85e Binary files /dev/null and b/core/src/main/assets/environment/custom_tiles/town_behind.png differ diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index a267cb9ab..3ffe229b7 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -360,7 +360,7 @@ custom.testmode.mobplacer.elite_name4={成长{ custom.testmode.mobplacer.elite_name5=]索敌] custom.testmode.mobplacer.elite_name6=_鬼磷_ custom.testmode.mobplacer.elite_name7=|苦痛| -custom.testmode.mobplacer.elite_name8={炼狱{ +custom.testmode.mobplacer.elite_name8=}盟友} custom.testmode.mobplacer.elite_name9=失败体 custom.testmode.mobplacer.elite_name10=爆炸体 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index fc11a46e7..7a57f5dc1 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -7,9 +7,8 @@ items.weapon.melee.legend.legendweapon.stats_desc=这是一件_%1$s阶_传奇武 items.weapon.melee.legend.diedcrossbow.name=重型弩炮 items.weapon.melee.legend.diedcrossbow.desc=这是一件非常精密复杂的装置,能将数个飞镖一样的小型箭矢以极高的速度射出。这把重型弩炮十分的沉重,如果使用者的力量不足可能会因为装置失灵波及到自己。其本身也相当致命,在肉搏战中可以起到很好的作用。 -items.weapon.melee.legend.diedcrossbow.king_desc=_战术扇形爆炸弩炮_\n\n当玩家背包拥有5个以上任意飞镖时,它允许玩家将它们装置上并发射出去。发射后需要重新装填,通过升级可以减少装填的时间。\n\n在发射的尽头或遭遇敌对目标时立刻产生_4x4_的爆炸并造成范围伤害。每次爆炸完毕后弩炮需要_重新装填_。弩炮伤害会根据自身等级成长。 +items.weapon.melee.legend.diedcrossbow.king_desc=_战术扇形爆炸弩炮_\n\n充能完毕时,可以发射爆炸弩炮。发射后需要重新装填,通过升级可以减少装填的时间。\n\n在发射的尽头或遭遇敌对目标时立刻产生_4x4_的爆炸并造成范围伤害。每次爆炸完毕后弩炮需要_重新装填_。弩炮伤害会根据自身等级成长。 items.weapon.melee.legend.diedcrossbow.ac_king=战术扇形爆炸弩炮 -items.weapon.melee.legend.diedcrossbow.no_king=没有足够的飞镖以装填爆炸弩炮装置,请至少背包有5个飞镖以上。 items.weapon.melee.legend.diedcrossbow.no_cooldown=弩炮装置正在重新装填,请稍后…… items.weapon.melee.legend.diedcrossbow.no_equip=必须装备重型弩炮才能使用它。 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 5e6b71128..71bc74225 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -319,7 +319,7 @@ challenges.stronger_bosses=梦魇领袖-测试版 challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_克里弗斯之果:_\n_-_ 第二阶段:触手和本体可以远程攻击,并造成更加大的威胁\n_-_ 触手和本体在战斗过程中拥有额外护盾加成。\n_天狗:_生命 +25%\n_-_ 第一阶段:陷阱更加致命\n_-_ 第二阶段:技能频率更高\n_DM-300:_生命 +60%\n_-_ 能量塔更坚固。\n_-_ 技能频率更高,威力也更强大\n_-_ 超载时移动速度更高\n_-_ 击败时必掉落荆棘斗篷\n_矮人国王:_生命 +50%\n_-_ 整场战斗内召唤的随从都更强大\n_-_ 第一阶段:技能与召唤频率都更高\n_-_ 第二阶段:每轮额外召唤两个随从\n_-_ 第三阶段:生命值 +100%,召唤频率更高\n_Yog-Dzewa:_\n_-_ 同时召唤两个古神之拳!\n_-_ 激光攻击伤害 +60%\n_-_ 召唤更强大的随从 actors.char.aquaphobia=你受到了来自水的伤害! challenges.pro=}开发者模式} -challenges.pro_desc=供测试和开发使用\n开局_几乎是全物品_!同时,你将无法通关!也无法记录在排行榜上面。 +challenges.pro_desc=供测试和开发使用\n1.可以随意上下楼\n2.可以电子斗蛐蛐\n3.还有更多,欢迎探索\n\n(注意:开发者模式不计入徽章数,也不计入挑战徽章奖励。 challenges.traditional = 现实之声-T1挑战 challenges.hard = 梦境之声-T2挑战 challenges.warning = 寻觅之声-T3挑战 @@ -329,7 +329,7 @@ challenges.rlpt = ]支离破碎] challenges.rlpt_desc=地下涌动的神秘力量正在渐渐腐蚀这里,这里不过是而言是另一场噩梦。\n\n从第六层开始,怪物必定有几个不是本大层的怪物,但不会超过两级。一般来说,在监狱遇到矮人层的怪物几率很小。通常遇到矿洞层的怪物。 challenges.sbsg = ]基因突变] -challenges.sbsg_desc=地牢中的神秘魔力让一些生物发生了重大的变化\n-所有生物都会因为突变激素变得各不相同,给探索地牢的脚步带来更大的困难。\n-敌人有6种突变类型,且Roll出权重一致:\n\n突变失败体:近战伤害减少35%,移速提高到1.3。\n\n突变爆炸体:移速减少50%,攻击力降低30%,但死亡时拥有爆炸伤害。\n\n突变完全体:移速和攻击力各提高25%,且拥有30%伤害减免。\n\n突变危险体:攻击力提升20%,攻击有10%概率造成流血。死亡时有5%概率立刻向本层发出警报。\n\n突变烟雾体:攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n突变酸液体:敌人获得额外远程技能,攻击范围+6,造成自身可造成的伤害20%的额外法术伤害并有概率随机产生一种有害烟雾(酸雾,毒雾,眩雾)\n\n_特别说明:如果开启精英强敌,词条会和精英词条共存,届时你将遭遇更大的挑战_ +challenges.sbsg_desc=地牢中的神秘魔力让一些生物发生了重大的变化\n-所有生物都会因为突变激素变得各不相同,给探索地牢的脚步带来更大的困难。\n-敌人有6种突变类型,且除爆炸体和酸液体概率为5%后,其余Roll出权重一致:\n\n突变失败体:近战伤害减少35%,移速提高到1.3。\n\n突变爆炸体:移速减少50%,攻击力降低30%,但死亡时拥有爆炸伤害。\n\n突变完全体:移速和攻击力各提高25%,且拥有30%伤害减免。\n\n突变危险体:攻击力提升20%,攻击有10%概率造成流血。死亡时有5%概率立刻向本层发出警报。\n\n突变烟雾体:攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n突变酸液体:敌人获得额外远程技能,攻击范围+6,造成自身可造成的伤害20%的额外法术伤害并有概率随机产生一种有害烟雾(酸雾,毒雾,眩雾)\n\n_特别说明:如果开启精英强敌,词条会和精英词条共存,届时你将遭遇更大的挑战_ challenges.exsg = ]药水癔症] challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-1\n灵视药剂--60%概率喝后失明5回合\n隐形药剂--60%概率喝后立刻怒吼\n极速药剂--60%概率喝后立刻残废8回合\n==========================\n小型口粮-吃后立刻获得极速4回合\n冷冻生肉片-吃后获得奥术护盾\n全肉大饼-吃后立刻获得8回合极速,且有大概率+1力量(_随着力量的追加,获得力量的概率会渐渐变低_)\n\n高级药水_(合剂/魔药)_不受影响\n不知道何种原因,大部分正面药水你都感觉有毒!\n你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index 835f72f17..cde6885e8 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -554,4 +554,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x83=1.修复上个版本的FireBase崩溃记录的问题\nK2.修复部分珍宝加成异常的问题\nS2.修复拟态王宝物重复获取的问题\n3.修复幽妹还能获得+5的问题\n4.部分房间优化,少量数据平衡\n5.改进游戏内部分文案 +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x84=1.修复酸液体和爆炸体权重错误的问题\n2.成功的移除了炼狱精英 + //ui.changelist.mlpd.vm0_5_x_changes.xxx// \ No newline at end of file diff --git a/core/src/main/assets/sprites/boss/fireDragon.png b/core/src/main/assets/sprites/boss/fireDragon.png index 5d9a6f441..d2bdd1add 100644 Binary files a/core/src/main/assets/sprites/boss/fireDragon.png and b/core/src/main/assets/sprites/boss/fireDragon.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 30a92297a..e9dd05571 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -55,12 +55,17 @@ public class Assets { public static class Environment { public static final String TERRAIN_FEATURES = "environment/terrain_features.png"; + public static final String LAVACAVE_OP = "environment/custom_tiles/lavecave_behind.png"; + + public static final String LAVACAVE_PO = "environment/custom_tiles/lavecave_above.png"; + public static final String VISUAL_GRID = "environment/visual_grid.png"; public static final String WALL_BLOCKING= "environment/wall_blocking.png"; public static final String TILES_SEWERS = "environment/tiles_sewers.png"; public static final String TILES_PRISON = "environment/tiles_prison.png"; public static final String TILES_COLDCHEST = "environment/tiles_coldchest.png"; + public static final String TILES_FIRE = "environment/tiles_fire.png"; public static final String TILES_CAVES = "environment/tiles_caves.png"; public static final String TILES_CITY = "environment/tiles_city.png"; public static final String TILES_ANCIENT = "environment/tiles_ancient.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 1b9e98010..54ef5525f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -748,15 +748,7 @@ public class Badges { } } - public static void validateAMZ() { - List passwordbadges = PaswordBadges.filtered( true ); - if (global.contains( Badge.KILL_APPLE ) && global.contains( Badge.KILL_DM720 ) && - global.contains( Badge.KILL_MG) && passwordbadges.contains(PaswordBadges.Badge.FIREGIRL) && passwordbadges.contains(PaswordBadges.Badge.DRAWF_HEAD) && passwordbadges.contains(PaswordBadges.Badge.SAKA_DIED)) { - PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; - PaswordBadges.displayBadge( badge ); - } - } private static void validateYASD() { if (global.contains( Badge.DEATH_FROM_FIRE ) && @@ -1021,7 +1013,6 @@ public class Badges { public static void KILLSAPPLE() { displayBadge( Badge.KILL_APPLE); - validateAMZ(); } @@ -1034,7 +1025,6 @@ public class Badges { public static void KILLSDM720() { displayBadge( Badge.KILL_DM720 ); - validateAMZ(); } public static void BOSSTHREE() { @@ -1048,12 +1038,10 @@ public class Badges { public static void KILLMG() { displayBadge( Badge.KILL_MG ); - validateAMZ(); } public static void KILL_SMK() { displayBadge( Badge.KILL_SM ); - validateAMZ(); } public static void GOODRLPT() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index ac4af6755..d75639632 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -660,6 +660,7 @@ public class Dungeon { private static final String CHAPTERS = "chapters"; private static final String QUESTS = "quests"; private static final String BADGES = "badges"; + private static final String ZBADGES = "z-badges"; private static final String BRANCH = "branch"; private static final String MOBS_TO_STATELING = "mobs_to_stateling"; private static final String INIT_VER = "init_ver"; @@ -735,6 +736,11 @@ public class Dungeon { Bundle badges = new Bundle(); Badges.saveLocal( badges ); bundle.put( BADGES, badges ); + + Bundle z_badges = new Bundle(); + PaswordBadges.saveLocal( z_badges ); + bundle.put( ZBADGES, z_badges ); + BloodBat.saveLevel(bundle); FileUtils.bundleToFile( GamesInProgress.gameFile(save), bundle); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java index b11069180..f91961757 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/PaswordBadges.java @@ -1,6 +1,5 @@ package com.shatteredpixel.shatteredpixeldungeon; -import static com.shatteredpixel.shatteredpixeldungeon.Badges.validateAMZ; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -22,17 +21,14 @@ public class PaswordBadges { public static void KILLDWARF() { displayBadge( PaswordBadges.Badge.DRAWF_HEAD ); - validateAMZ(); } public static void KILLFIREGIRL() { displayBadge( PaswordBadges.Badge.FIREGIRL ); - validateAMZ(); } public static void KILLSAKA() { displayBadge( PaswordBadges.Badge.SAKA_DIED); - validateAMZ(); } public static void REHOMESKY() { @@ -115,7 +111,7 @@ public class PaswordBadges { loadGlobal(); } - public static final String BADGES_FILE = "badges.dat"; + public static final String ZBADGES_FILE = "z-badges.dat"; private static final String BADGES = "badges"; private static final HashSet removedBadges = new HashSet<>(); @@ -173,7 +169,7 @@ public class PaswordBadges { public static void loadGlobal() { if (global == null) { try { - Bundle bundle = FileUtils.bundleFromFile( BADGES_FILE ); + Bundle bundle = FileUtils.bundleFromFile( ZBADGES_FILE ); global = restore( bundle ); } catch (IOException e) { @@ -189,7 +185,7 @@ public class PaswordBadges { store( bundle, global ); try { - FileUtils.bundleToFile(BADGES_FILE, bundle); + FileUtils.bundleToFile(ZBADGES_FILE, bundle); saveNeeded = false; } catch (IOException e) { ShatteredPixelDungeon.reportException(e); @@ -210,7 +206,7 @@ public class PaswordBadges { if (global.contains( badge )) { if (!badge.meta) { - GLog.h( Messages.get(Badges.class, "endorsed", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "endorsed", badge.title()) ); } } else { @@ -219,9 +215,9 @@ public class PaswordBadges { saveNeeded = true; if (badge.meta) { - GLog.h( Messages.get(Badges.class, "new_super", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "new_super", badge.title()) ); } else { - GLog.h( Messages.get(Badges.class, "new", badge.desc()) ); + GLog.h( Messages.get(Badges.class, "new", badge.title()) ); } PixelScene.showProBadge( badge ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index e4ecc2e79..4a68ed72a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -114,26 +114,30 @@ public abstract class ChampionEnemy extends Buff { Class buffCls; + int randomNumber = Random.Int(100); - switch (Random.NormalIntRange(0,6)){ - case 0: default: - buffCls = ChampionEnemy.Small.class; - break; - case 1: - buffCls = ChampionEnemy.Bomber.class; - break; - case 2: - buffCls = ChampionEnemy.Middle.class; - break; - case 3: - buffCls = ChampionEnemy.Big.class; - break; - case 4: - buffCls = ChampionEnemy.Sider.class; - break; - case 5: - buffCls = ChampionEnemy.LongSider.class; - break; + if (randomNumber < 5) { + buffCls = ChampionEnemy.LongSider.class; + } else if (randomNumber < 10) { + buffCls = ChampionEnemy.Bomber.class; + } else { + switch (randomNumber % 6) { + case 0: default: + buffCls = ChampionEnemy.Small.class; + break; + case 1: + buffCls = ChampionEnemy.Middle.class; + break; + case 2: + buffCls = ChampionEnemy.Big.class; + break; + case 3: + buffCls = ChampionEnemy.Sider.class; + break; + case 4: + buffCls = ChampionEnemy.LongSider.class; + break; + } } if (Dungeon.mobsToStateLing <= 0 && Dungeon.isChallenged(Challenges.SBSG)) { @@ -320,14 +324,14 @@ public abstract class ChampionEnemy extends Buff { } public static void rollForChampion(Mob m){ - if (Dungeon.mobsToChampion <= 0) Dungeon.mobsToChampion = 8; + if (Dungeon.mobsToChampion <= 0) Dungeon.mobsToChampion = 7; Dungeon.mobsToChampion--; //we roll for a champion enemy even if we aren't spawning one to ensure that //mobsToChampion does not affect levelgen RNG (number of calls to Random.Int() is constant) Class buffCls; - switch (Random.Int(9)){ + switch (Random.Int(8)){ case 0: default: buffCls = Blazing.class; break; case 1: buffCls = Projecting.class; break; case 2: buffCls = AntiMagic.class; break; @@ -336,7 +340,7 @@ public abstract class ChampionEnemy extends Buff { case 5: buffCls = Growing.class; break; case 6: buffCls = Halo.class; break; case 7: buffCls = DelayMob.class; break; - case 8: buffCls = King.class; break; + //case 8: buffCls = King.class; break; } if (Dungeon.mobsToChampion <= 0 && Dungeon.isChallenged(Challenges.CHAMPION_ENEMIES)) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index 37af73d67..2df69e2fa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -54,12 +54,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask; import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.LamellarArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.MailArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor; -import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet; @@ -67,10 +62,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.BookBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.HerbBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.KingBag; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; -import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.BrokenBooks; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.DimandBook; import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.TestBooks; -import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.YellowSunBooks; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; @@ -78,7 +71,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLightningShiledX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlameX; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfLightStromCloud; @@ -93,24 +85,19 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMysticalEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; -import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; -import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfScale; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Gloves; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LifeTreeSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LockSword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RedBloodMoon; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sai; -import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.SkyShield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; @@ -167,6 +154,7 @@ public enum HeroClass { if (Dungeon.isChallenged(Challenges.PRO)){ + new LevelTeleporter().quantity(1).identify().collect(); new LockSword().quantity(1).identify().collect(); new IceFishSword().quantity(1).identify().collect(); new PotionOfInvisibility().quantity(45).identify().collect(); @@ -206,30 +194,14 @@ public enum HeroClass { new ScrollOfMysticalEnergy().quantity(1).identify().collect(); new AquaBlast().quantity(1).identify().collect(); new TestBooks().quantity(1).identify().collect(); - new WandOfCorruption().quantity(1).identify().collect(); - new ChaliceOfBlood().quantity(1).identify().collect(); - new LifeTreeSword().quantity(1).identify().collect(); - new Sai().quantity(1).identify().collect(); - new MagicTorch().quantity(1).identify().collect(); - new SkyShield().quantity(1).identify().collect(); - new WandOfScale().quantity(1).identify().collect(); + new KingsCrown().quantity(1).identify().collect(); new PotionOfLightningShiledX().quantity(1).identify().collect(); - new LevelTeleporter().quantity(1).identify().collect(); - new MobPlacer().quantity(1).identify().collect(); + new RedBloodMoon().quantity(1).identify().collect(); new KingBag().quantity(1).identify().collect(); - new PotionOfLiquidFlameX().quantity(100).identify().collect(); - new YellowSunBooks().quantity(1).identify().collect(); - new BrokenBooks().quantity(12).identify().collect(); new HaloDart().quantity(100).identify().collect(); new ScrollOfFlameCursed().quantity(44).identify().collect(); - - new MailArmor().quantity(1).identify().collect(); - new LeatherArmor().quantity(1).identify().collect(); - new ScaleArmor().quantity(1).identify().collect(); - new PlateArmor().quantity(1).identify().collect(); - Dungeon.gold = 600000000; hero.STR = 27; hero.lvl = 30; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index f2738bec0..4b4c37173 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -21,6 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; +import static com.shatteredpixel.shatteredpixeldungeon.Badges.global; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.DHXD; import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.EASY; import static com.shatteredpixel.shatteredpixeldungeon.Difficulty.DifficultyConduct.HARD; @@ -34,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Difficulty; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; @@ -89,6 +91,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; +import java.util.List; public abstract class Mob extends Char { @@ -864,6 +867,15 @@ public abstract class Mob extends Char { // Analytics.trackBossBeaten(this); // } + PaswordBadges.loadGlobal(); + List passwordbadges = PaswordBadges.filtered( true ); + if (global.contains( Badges.Badge.KILL_APPLE ) && global.contains( Badges.Badge.KILL_DM720 ) && + global.contains( Badges.Badge.KILL_MG) && passwordbadges.contains(PaswordBadges.Badge.FIREGIRL) && passwordbadges.contains(PaswordBadges.Badge.DRAWF_HEAD) && passwordbadges.contains(PaswordBadges.Badge.SAKA_DIED)) { + + PaswordBadges.Badge badge = PaswordBadges.Badge.SPICEALBOSS; + PaswordBadges.displayBadge( badge ); + } + if (cause == Chasm.class){ //50% chance to round up, 50% to round down if (EXP % 2 == 1) EXP += Random.Int(2); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java index e563a6e8c..4062ed080 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/CrystalDiedTower.java @@ -30,6 +30,11 @@ public class CrystalDiedTower extends Mob { state = HUNTING; } + @Override + public boolean interact(Char c) { + return true; + } + @Override public void damage( int dmg, Object src ) { } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java index 1e8c16cf6..bf883964e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java @@ -278,6 +278,8 @@ public class DiamondKnight extends Boss { Badges.KILL_SMK(); + + if(Statistics.dimandchestmazeCollected>=3){ PaswordBadges.validateOMP(); Statistics.bossScores[1] += 1000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java new file mode 100644 index 000000000..07ede6bb4 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/FireDragon.java @@ -0,0 +1,13 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Boss; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FireDragonSprite; + +public class FireDragon extends Boss { + { + initProperty(); + initBaseStatus(10, 20, 15, 15, 300, 8, 12); + initStatus(60); + spriteClass = FireDragonSprite.class; + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java index e28581468..159c91f6a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/SakaFishBoss.java @@ -148,9 +148,9 @@ public class SakaFishBoss extends Boss { public int damageRoll() { AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro(); if(level==AncientMysteryCityBossLevel.State.FALL_BOSS) - return Random.NormalIntRange(40, 75); + return Random.NormalIntRange(30, 55); else - return Random.NormalIntRange(30, 40); + return Random.NormalIntRange(20, 30); } @Override @@ -169,7 +169,7 @@ public class SakaFishBoss extends Boss { @Override public int drRoll() { AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro(); - return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 40; + return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 35; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java index 4c433ce3d..0872cafe0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/dict/DictSpriteSheet.java @@ -2,6 +2,8 @@ package com.shatteredpixel.shatteredpixeldungeon.custom.dict; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ClearElementalSprites; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; @@ -16,13 +18,13 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDLLSTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDNQHZTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.OGPDZSLSTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.PoltergeistSprite; -import com.shatteredpixel.shatteredpixeldungeon.sprites.RedNecromancerSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RedSwarmSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT; import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDICLRTT; +import com.shatteredpixel.shatteredpixeldungeon.sprites.STenguSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.SalamanderSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ShieldHuntsmanSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SpectralNecromancerSprite; -import com.shatteredpixel.shatteredpixeldungeon.sprites.TenguSprite; import com.watabou.noosa.Image; public class DictSpriteSheet { @@ -81,8 +83,8 @@ public class DictSpriteSheet { return new FlameBoiSprite(); case GNOLL: return new Image(Assets.Sprites.GNOLL, 0, 0, 12, 15); - case XTG: - return new TenguSprite(); + case STX: + return new SalamanderSprites(); case XHDD: return new MurdererSprite.RedMuderer(); case IAX: @@ -91,10 +93,16 @@ public class DictSpriteSheet { return new FireAcidicSprite(); case IAS: return new IceGolemSprite(); + case BRTX: + return new BruteBotSprite(); + case GOO: + return new STenguSprite(); + case GKS: + return new ColdGuardSprite(); case CAX: return new SRPDICLRTT(); - case REDBS: - return new RedNecromancerSprite(); + case CLEARS: + return new ClearElementalSprites(); case SLXJ: return new SpectralNecromancerSprite(); case BMHR: @@ -286,8 +294,8 @@ public class DictSpriteSheet { public static final int BLACK = 218 + 10000; public static final int MOLO = 219 + 10000; public static final int FLAME = 220 + 10000; - public static final int XTG = 221 + 10000; - public static final int REDBS = 222 + 10000; + public static final int STX = 221 + 10000; + public static final int CLEARS = 222 + 10000; public static final int SLXJ = 223 + 10000; public static final int BMHR = 224 + 10000; public static final int XHDD = 225 + 10000; @@ -296,6 +304,9 @@ public class DictSpriteSheet { public static final int CAX = 228 + 10000; public static final int IAS = 229 + 10000; + public static final int BRTX = 230 + 10000; + public static final int GOO = 231 + 10000; + public static final int GKS = 232 + 10000; public static final int THIEF = 300 + 10000; public static final int BANDIT = 301 + 10000; public static final int SKELETON = 302 + 10000; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java index b4d7b44fd..6adc8f894 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/custom/testmode/MobPlacer.java @@ -16,6 +16,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BlackHost; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Brute; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BruteBot; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CausticSlime; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ClearElemental; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdGurad; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100; @@ -52,6 +54,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RotHeart; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RotLasher; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDHBLR; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.SRPDICLR; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Salamander; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Scorpio; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Senior; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Shaman; @@ -67,10 +70,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Warlock; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith; -import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG100; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.XTG200; import com.shatteredpixel.shatteredpixeldungeon.custom.dict.DictSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAnmy; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -112,8 +116,8 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Growing.class); eliteBuffs.add(ChampionEnemy.Projecting.class); eliteBuffs.add(ChampionEnemy.Halo.class); - eliteBuffs.add(ChampionEnemy.King.class); eliteBuffs.add(ChampionEnemy.DelayMob.class); + eliteBuffs.add(WandOfAnmy.AllyToRestartOK.class); eliteBuffs.add(ChampionEnemy.Small.class); eliteBuffs.add(ChampionEnemy.Bomber.class); @@ -121,6 +125,7 @@ public class MobPlacer extends TestItem{ eliteBuffs.add(ChampionEnemy.Big.class); eliteBuffs.add(ChampionEnemy.Sider.class); eliteBuffs.add(ChampionEnemy.LongSider.class); + } @Override @@ -186,8 +191,8 @@ public class MobPlacer extends TestItem{ case 4: return DataPack.ELE_CHAOS.ordinal() - DataPack.DM201.ordinal() - 1; case 5: return DataPack.ACIDIC.ordinal() - DataPack.ELE_CHAOS.ordinal() - 1; case 6: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1; - case 7: return DataPack.ZSLS.ordinal() - DataPack.NQHZ.ordinal() - 1; - case 8: default: return DataPack.SLXJ.ordinal() - DataPack.IAS.ordinal() - 1; + case 7: return DataPack.NQHZ.ordinal() - DataPack.PIRANHA.ordinal() - 1; + case 8: default: return DataPack.IAS.ordinal() - DataPack.NQHZ.ordinal() - 1; } } private int dataThreshold(int tier){ @@ -205,9 +210,9 @@ public class MobPlacer extends TestItem{ case 6: return DataPack.ACIDIC.ordinal()+1; case 7: - return DataPack.ZSLS.ordinal()+1; + return DataPack.PIRANHA.ordinal()+1; case 8: - return DataPack.SLXJ.ordinal()+1; + return DataPack.NQHZ.ordinal()+1; } } @@ -247,12 +252,12 @@ public class MobPlacer extends TestItem{ resize(WIDTH, HEIGHT); - RedButton lhs = new RedButton("<<<", 8){ + RedButton lhs = new RedButton("上一页", 6){ @Override public void onClick(){ mobTier--; - if(mobTier < 1 || mobTier>6){ - mobTier = 6; + if(mobTier < 1 || mobTier>8){ + mobTier = 8; } mobIndex = Math.min(mobIndex, maxMobIndex(mobTier)); refreshImage(); @@ -262,11 +267,11 @@ public class MobPlacer extends TestItem{ lhs.setRect(GAP, GAP, 24, 18); add(lhs); - RedButton rhs = new RedButton(">>>", 8){ + RedButton rhs = new RedButton("下一页", 6){ @Override public void onClick(){ mobTier++; - if(mobTier < 1 || mobTier > 6){ + if(mobTier < 1 || mobTier > 8){ mobTier = 1; } mobIndex = Math.min(mobIndex, maxMobIndex(mobTier)); @@ -299,23 +304,25 @@ public class MobPlacer extends TestItem{ */ float pos = 92; - for (int i = 0; i < 15; ++i) { - CheckBox cb = new CheckBox(M.L(MobPlacer.class, "elite_name" + Integer.toString(i))); + int column = 0; + for (int i = 0; i < 15 && column < 3; ++i) { + CheckBox cb = new CheckBox(M.L(MobPlacer.class, "elite_name" + i)); cb.active = true; - cb.checked((elite & (1 << i)) > 0); + cb.checked((elite_op & (1<0); add(cb); eliteOptions.add(cb); - int row = i / 3; // 计算当前复选框所在的行数 - int column = i % 3; // 计算当前复选框所在的列数 + if (column == 0) { + cb.setRect((WIDTH/3f - GAP)/3f * column, pos, (WIDTH/3f - GAP), 16); + } else if (column == 1) { + cb.setRect((WIDTH/3f - GAP)/3f * column+35, pos, (WIDTH/3f - GAP), 16); + } else { + cb.setRect((WIDTH/3f - GAP)/3f * column+70, pos, (WIDTH/3f - GAP), 16); + column = -1; // 重置column的值,使其在下一次循环时为0(即第一列) + pos += 16 + GAP; // 换行 + } - float columnWidth = WIDTH / 3f - GAP * 4f / 3f; - float rowHeight = 16 + GAP; - - float columnOffset = (WIDTH - columnWidth * 3f - GAP * 2f) / 2f; - float rowOffset = pos + row * rowHeight; // 根据行数计算当前行的垂直偏移量 - - cb.setRect(columnOffset + column * (columnWidth + GAP), rowOffset, columnWidth, 16); + column++; } @@ -480,15 +487,17 @@ public class MobPlacer extends TestItem{ Flame(FlameB01.class, DictSpriteSheet.FLAME), NQHZ(OGPDNQHZ.class, DictSpriteSheet.OGPDNQHZ), - //REDBS(RedNecromancer.class, DictSpriteSheet.REDBS), + CLEARS(ClearElemental.class, DictSpriteSheet.CLEARS), SLXJ(SpectralNecromancer.class, DictSpriteSheet.SLXJ), BMHR(ShieldHuntsman.class, DictSpriteSheet.BMHR), - XTG(XTG100.class, DictSpriteSheet.XTG), + STX(Salamander.class, DictSpriteSheet.STX), XHDD(RedMurderer.class, DictSpriteSheet.XHDD), IAX(Ice_Scorpio.class, DictSpriteSheet.IAX), FAX(Fire_Scorpio.class, DictSpriteSheet.FAX), CAX(SRPDICLR.class, DictSpriteSheet.CAX), - BRT(BruteBot.class, DictSpriteSheet.BRT), + GOO(XTG200.class,DictSpriteSheet.GOO), + IKS(ColdGurad.class,DictSpriteSheet.GKS), + BRTX(BruteBot.class, DictSpriteSheet.BRTX), IAS(IceGolem.class, DictSpriteSheet.IAS); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java index 6d794a975..c209669c4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/books/bookslist/TestBooks.java @@ -3,9 +3,12 @@ package com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AnkhInvulnerability; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.InvisibilityRing; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import java.util.ArrayList; @@ -32,9 +35,15 @@ public class TestBooks extends Item { super.execute(hero, action); if (action.equals( Read )) { if ( Dungeon.hero.buff(AnkhInvulnerability.class) == null ) { + GLog.p("上帝模式已开启!"); Buff.prolong(hero, AnkhInvulnerability.class, AnkhInvulnerability.DURATION*1000000f); + Buff.affect(hero, InvisibilityRing.class, InvisibilityRing.DURATION*1000000f); + Buff.affect( hero, MindVision.class, MindVision.DURATION*1000000f ); } else { + GLog.n("上帝模式已关闭!"); Buff.detach( hero, AnkhInvulnerability.class ); + Buff.detach( hero, InvisibilityRing.class ); + Buff.detach( hero, MindVision.class ); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java index 5504883e8..49640d456 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfAnmy.java @@ -1,13 +1,18 @@ package com.shatteredpixel.shatteredpixeldungeon.items.wands; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AllyBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PinCushion; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -49,6 +54,70 @@ public class WandOfAnmy extends DamageWand { return 0; } + public static class AllyToRestartOK extends ChampionEnemy { + + @Override + public boolean attachTo(Char target) { + if (super.attachTo(target)){ + target.alignment = Char.Alignment.ALLY; + if (target.buff(PinCushion.class) != null){ + target.buff(PinCushion.class).detach(); + } + return true; + } else { + return false; + } + } + + //for when applying an ally buff should also cause that enemy to give exp/loot as if they had died + //consider that chars with the ally alignment do not drop items or award exp on death + public static void affectAndLoot(Mob enemy, Hero hero, Class buffCls){ + boolean droppingLoot = enemy.alignment != Char.Alignment.ALLY; + Buff.affect(enemy, buffCls); + + if (enemy.buff(buffCls) != null){ + if (droppingLoot) enemy.rollToDropLoot(); + Statistics.enemiesSlain++; + Badges.validateMonstersSlain(); + Statistics.qualifiedForNoKilling = false; + if (enemy.EXP > 0 && hero.lvl <= enemy.maxLvl) { + hero.sprite.showStatus(CharSprite.POSITIVE, Messages.get(enemy, "exp", enemy.EXP)); + hero.earnExp(enemy.EXP, enemy.getClass()); + } else { + hero.earnExp(0, enemy.getClass()); + } + } + } + @Override + public String toString() { + return Messages.get(AllyToRestart.class, "name"); + } + + @Override + public String desc() { + return Messages.get(AllyToRestart.class, "desc"); + } + + @Override + public void fx(boolean on) { + if (on) { + target.sprite.add(CharSprite.State.SHIELDED); + //Statistics.TryUsedAnmy = true; + } + else + target.sprite.remove(CharSprite.State.SHIELDED); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0x66bbcc); + } + + public int icon() { + return BuffIndicator.HEX; + } + } + public static class AllyToRestart extends AllyBuff { @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java index d48655272..989073346 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java @@ -147,6 +147,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WashCrime; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Whip; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.legend.DiedCrossBow; import com.watabou.utils.Bundle; import java.util.ArrayList; @@ -210,6 +211,7 @@ public enum Catalog { WEAPONS.seen.put( Greataxe.class, false); WEAPONS.seen.put( Greatshield.class, false); WEAPONS.seen.put( Gauntlet.class, false); + WEAPONS.seen.put( DiedCrossBow.class, false); WEAPONS.seen.put( LockSword.class, false); WEAPONS.seen.put( SkyShield.class, false); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java index c760ec50f..94b28338f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LaveCavesBossLevel.java @@ -1,12 +1,205 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap; +import com.watabou.noosa.Tilemap; +/*** + * TODO LIST + * 熔岩地块-【5层-EX子层】-火龙巢穴 + * 先决条件:在新版本不击败任何纯晶元素,在第五层解救纯晶意识集合体,与之对话,进入火龙的巢穴。 + * + * Boss档案: + * 名称:熔岩火龙 血量:300 常规攻击:9-14 + * 防御力:8 魔法防御:0 移速:正常 攻速:正常 + * 特性:每次攻击最多造成15伤害,至少需要20次攻击。 + * 性质:飞行单位 异常抗性:免疫腐化,燃烧,鬼磷,霜火 + * + * 区块描述: + * 丛林曾经没有如此的死寂,直到火龙的到来改变了这一切。它污染了曾经的森林核心“奥克拉赫”之花, + * 导致这里的守护者纯晶元素失去能量,而森林核心也成为了现在的“毒瘤”。如今我们受纯晶智能集合体的委托, + * 前往森林最底部的熔岩地块,寻找一切的罪魁祸首,熔岩火龙! + * + * Boss技能描述: + * 普攻:每3回合发射一次熔岩冲击波,造成一次烈焰区域范围。 + * + * 定向进化-毒雾缠绕: + * 若场上存在缠绕元素,火龙可在后续定向进化获得免疫毒气的能力,并且场上地图毒雾弥漫。 + * + * 定向进化-烈焰吐息: + * 若场上存在纯晶元素,火龙可在后续定向进化中获得烈焰强化冲击波,强化普通攻击 + * 定向进化-暗影行踪: + * 若场上存在暗影元素,火龙可在后续定向进化中获得暗影袭击, + * 在攻击前发起警告,并立刻隐身数回合。隐身时玩家无法攻击火龙,火龙对玩家的伤害减半。 + * + * 定向进化-集结号令: + * 若场上存在赤红元素,火龙可在后续定向进化中获得集结号令。 + * 此时火龙召唤两个分身。并且移速提升。分身仅获得本体的25%伤害。 + * + * 定向进化-狂野攻击: + * 若场上存在紫晶元素,火龙可在后续定向进化中获得狂野攻击。此时火龙每隔10回合立刻尝试锁定玩家, + * 该技能有30%失败,一旦成功,玩家会失去3回合,并且受到普攻3次伤害+3级流血伤害 + * + * 阶段说明: + * + * 第一阶段:(300-200) + * 火龙进行常规性攻击,在此期间会每隔7回合随机召唤各种元素。 + * 元素没有任何攻击能力,但会周期性攻击玩家赋予Debuff, + * 当场上高于4个元素时,火龙会随机污染一个元素获得对应的定向进化。 + * + * 第二阶段:(<200-100) + * 火龙立刻失去全部定向进化,进入短暂无敌时间。 + * 火龙的攻击在无敌时间频率更加频繁,且无敌时间结束后直接随机定向进化两个词条。赋予玩家极度燃烧的Debuff,在燃烧阈值满后,立刻造成25%的玩家最大血量伤害。 + * + * 第三阶段(<100) + * 火龙立刻获得1000护盾,但失去攻击能力。火龙试图逃离丛林,利用纯晶集合体给的物品击中火龙四次,火龙将被彻底击败,并使用火龙之心净化丛林,整场战斗结束。 + * + * + * 成就徽章: + * 屠龙勇士—击败丛林的真正罪魁祸首“熔岩火龙” + * 丛林英雄—击败熔岩火龙并净化丛林 + * + * 加密徽章: + * 熔岩审判-在岩浆地块下给予火龙最后一击! + * + * 后续剧情: + * 1.纯晶元素将在后续丛林新档中变为中立,不会主动攻击玩家 + * 2.在下半段更新中,会有额外剧情 + * 3.在今后的旅程中, + * 毒苹果将有概率变成奥克拉赫之花考验冒险者的意志。 + * */ public class LaveCavesBossLevel extends Level{ + private static final short W = Terrain.WALL; + + private static final short R = Terrain.WATER; + + private static final short Y = Terrain.EMPTY; + + private static final short X = Terrain.ENTRANCE; + + private static final short G = Terrain.HIGH_GRASS; + + private static final short D = Terrain.SECRET_DOOR; + private static final short M = Terrain.WELL; + private static final short L= Terrain.PEDESTAL; + private static final int[] codedMap = { + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,Y,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,Y,W,W,W,W,W,W,W, + W,W,W,W,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,R,R,R,R,W,W,W,W,W,W,W, + W,W,W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,R,R,Y,R,R,R,R,R,Y,W,W,W,W,W,W,W, + W,W,W,R,R,R,R,R,R,R,R,R,R,Y,G,Y,Y,Y,Y,R,R,R,R,Y,R,W,W,W,W,W,W,W, + W,W,W,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,W,W,W,W,W,W,W, + W,W,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,R,R,Y,Y,R,R,R,Y,R,W,W,W,W,W,W, + W,W,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,Y,R,R,W,W,W,W, + W,W,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, + W,R,Y,Y,Y,Y,R,R,Y,Y,Y,Y,Y,Y,L,Y,Y,Y,R,R,Y,Y,Y,Y,Y,R,R,R,Y,Y,W,W, + W,R,Y,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,Y,R,R,Y,Y,R,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,Y,Y,R,R,W,W, + W,Y,R,R,R,R,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,R,R,Y,Y,Y,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,Y,Y,R,R,R,Y,Y,Y,Y,Y,R,R,R,R,Y,R,R,R,R,R,Y,Y,R,W,W, + W,Y,R,R,R,R,R,R,Y,Y,R,R,Y,Y,Y,R,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,R,W,W, + W,Y,Y,R,R,R,R,R,R,R,R,Y,Y,R,R,R,R,R,R,R,R,R,R,R,R,R,Y,Y,Y,Y,W,W, + W,R,Y,R,R,R,R,Y,R,R,R,R,R,R,R,R,R,R,Y,R,R,R,R,R,R,Y,Y,Y,R,W,W,W, + W,R,Y,Y,R,R,Y,Y,Y,R,R,R,R,R,R,Y,Y,Y,Y,R,R,R,R,R,Y,Y,Y,R,R,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,R,R,Y,R,R,Y,R,R,R,R,Y,R,R,R,Y,Y,Y,R,R,R,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,R,Y,Y,Y,R,R,R,W,W,W,W,W, + W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,R,Y,Y,R,R,R,R,W,W,W,W,W, + W,W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,W,W,W,W,W, + W,W,W,R,R,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,W,W,W,W,W,W,W,W,W, + W,W,W,R,R,R,Y,Y,R,R,Y,Y,Y,X,Y,Y,Y,Y,W,W,W,W,D,W,W,W,W,W,W,W,W,W, + W,W,W,W,R,R,Y,Y,R,R,R,R,Y,Y,Y,Y,Y,Y,W,W,W,W,Y,Y,G,G,Y,R,R,G,W,W, + W,W,W,W,W,R,R,Y,R,R,R,R,R,Y,Y,Y,Y,W,W,W,W,W,Y,G,Y,G,Y,Y,Y,Y,W,W, + W,W,W,W,W,W,R,R,Y,R,R,R,R,R,Y,Y,Y,W,W,W,W,W,Y,Y,R,R,R,Y,M,Y,W,W, + W,W,W,W,W,W,W,W,W,R,Y,R,R,R,Y,Y,Y,W,W,W,W,W,Y,Y,Y,Y,Y,Y,Y,Y,W,W, + W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, + + }; + + /** * @return */ @Override protected boolean build() { - return false; + + setSize(32, 32); + + map = codedMap.clone(); + + CustomTilemap vis = new townBehind(); + vis.pos(0, 0); + customTiles.add(vis); + //((GameScene) RPD.scene()).addCustomTile(vis); + + + + buildFlagMaps(); + cleanWalls(); + + + entrance = 32*15 + 23; + + return true; + } + + public static class townBehind extends CustomTilemap { + + { + texture = Assets.Environment.LAVACAVE_OP; + + tileW = 32; + tileH = 32; + } + + final int TEX_WIDTH = 32*16; + + @Override + public Tilemap create() { + + Tilemap v = super.create(); + + int[] data = mapSimpleImage(0, 0, TEX_WIDTH); + + v.map(data, tileW); + return v; + } + + } + + public static class townAbove extends CustomTilemap { + + { + texture = Assets.Environment.LAVACAVE_PO; + + tileW = 32; + tileH = 32; + } + + final int TEX_WIDTH = 32*16; + + @Override + public Tilemap create() { + + Tilemap v = super.create(); + + int[] data = mapSimpleImage(0, 0, TEX_WIDTH); + + v.map(data, tileW); + return v; + } + + } + + @Override + public String tilesTex() { + return Assets.Environment.TILES_FIRE; + } + + @Override + public String waterTex() { + return Assets.Environment.WATER_HALLS; } /** diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 3e12ed3bd..8013b60f9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Conducts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress; +import com.shatteredpixel.shatteredpixeldungeon.PaswordBadges; import com.shatteredpixel.shatteredpixeldungeon.Rankings; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; @@ -766,7 +767,7 @@ public class GameScene extends PixelScene { scene = null; Badges.saveGlobal(); Journal.saveGlobal(); - + PaswordBadges.saveGlobal(); super.destroy(); } @@ -797,6 +798,7 @@ public class GameScene extends PixelScene { try { Dungeon.saveAll(); Badges.saveGlobal(); + PaswordBadges.saveGlobal(); Journal.saveGlobal(); } catch (IOException e) { ShatteredPixelDungeon.reportException(e); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java new file mode 100644 index 000000000..2d6db95bc --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FireDragonSprite.java @@ -0,0 +1,28 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class FireDragonSprite extends MobSprite { + public FireDragonSprite() { + super(); + + texture( Assets.Sprites.FRDG ); + + TextureFilm frames = new TextureFilm( texture, 24, 24 ); + + idle = new Animation( 8, true ); + idle.frames( frames, 4,5,9,10,11 ); + + run = new Animation( 8, true ); + run.frames( frames, 1, 2, 1, 2 ); + + attack = new Animation( 15, false ); + attack.frames( frames, 3, 4, 3, 4 ); + + die = new Animation( 7, false ); + die.frames( frames, 10,11,12); + + play( idle ); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java index b3d9d0653..a237e43ab 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java @@ -84,7 +84,7 @@ public class MenuPane extends Component { add(depthIcon); if(Dungeon.depth < 0){ - depthText = new BitmapText( "S", PixelScene.pixelFont); + depthText = new BitmapText( "?", PixelScene.pixelFont); } else { depthText = new BitmapText(Integer.toString(Dungeon.depth), PixelScene.pixelFont); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index a5be52f13..425955975 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -20,6 +20,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.DM720Sprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite; 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.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; @@ -119,7 +120,7 @@ public class vM0_6_7_X_Changes { } public static void add_v0_6_56_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha3", true, ""); + ChangeInfo changes = new ChangeInfo("Coming Soon V0.6.5.0-Alpha7", true, ""); changes.hardlight(Window.CBLACK); changeInfos.add(changes); @@ -141,6 +142,37 @@ public class vM0_6_7_X_Changes { changes.addButton(new ChangeButton(i, ("熔岩火龙"), ("丛林暴乱的真相"))); + changes = new ChangeInfo("v0.6.5.0-Alpha3", 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(Icons.get(Icons.CHALLENGE_ON), ("开发者模式更新"), + ("添加了更多开发者选项,优化了一些问题,怪物放置器支持电子斗蛐蛐"))); + + Image dragonSprite = new FireDragonSprite(); + dragonSprite.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(dragonSprite, ("熔岩火龙资源预载"), + ("丛林额外Boss-熔岩火龙资源预载,预计将在Alpha7加入。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DIEDCROSSBOW), ("重型弩炮"), + ("现在不需要飞镖作为弹药,但有装填时间。"))); + + Image xa = new SakaFishBossSprites(); + xa.scale.set(PixelScene.align(0.72f)); + changes.addButton(new ChangeButton(xa, "萨卡班甲鱼", + "初始防御调为35,常规伤害降低。")); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X84"))); + changes = new ChangeInfo("v0.6.5.0-Alpha1-2", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes);