update 0.6.5.0-Alpha3

-1.开发者模式重大更新
-2.修复一些bug,详见游戏更新记录
-3.熔岩地块资源预载
This commit is contained in:
LingASDJ 2023-09-22 12:30:31 +08:00
parent a46398bb00
commit c18ac269d0
31 changed files with 482 additions and 123 deletions

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -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=爆炸体

View File

@ -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=必须装备重型弩炮才能使用它。

View File

@ -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你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

View File

@ -748,15 +748,7 @@ public class Badges {
}
}
public static void validateAMZ() {
List<PaswordBadges.Badge> 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() {

View File

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

View File

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

View File

@ -114,27 +114,31 @@ public abstract class ChampionEnemy extends Buff {
Class<?extends ChampionEnemy> buffCls;
int randomNumber = Random.Int(100);
switch (Random.NormalIntRange(0,6)){
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.Bomber.class;
break;
case 2:
buffCls = ChampionEnemy.Middle.class;
break;
case 3:
case 2:
buffCls = ChampionEnemy.Big.class;
break;
case 4:
case 3:
buffCls = ChampionEnemy.Sider.class;
break;
case 5:
case 4:
buffCls = ChampionEnemy.LongSider.class;
break;
}
}
if (Dungeon.mobsToStateLing <= 0 && Dungeon.isChallenged(Challenges.SBSG)) {
Buff.affect(m, buffCls);
@ -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<?extends ChampionEnemy> 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)) {

View File

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

View File

@ -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<PaswordBadges.Badge> 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);

View File

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

View File

@ -278,6 +278,8 @@ public class DiamondKnight extends Boss {
Badges.KILL_SMK();
if(Statistics.dimandchestmazeCollected>=3){
PaswordBadges.validateOMP();
Statistics.bossScores[1] += 1000;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<?extends AllyBuff> 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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