update 0.6.5.0-Alpha3
-1.开发者模式重大更新 -2.修复一些bug,详见游戏更新记录 -3.熔岩地块资源预载
This commit is contained in:
parent
a46398bb00
commit
c18ac269d0
|
@ -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
|
||||
|
||||
|
|
BIN
core/src/main/assets/environment/custom_tiles/lavecave_above.png
Normal file
BIN
core/src/main/assets/environment/custom_tiles/lavecave_above.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
BIN
core/src/main/assets/environment/custom_tiles/town_above.png
Normal file
BIN
core/src/main/assets/environment/custom_tiles/town_above.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
BIN
core/src/main/assets/environment/custom_tiles/town_behind.png
Normal file
BIN
core/src/main/assets/environment/custom_tiles/town_behind.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 108 KiB |
|
@ -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=爆炸体
|
||||
|
|
|
@ -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=必须装备重型弩炮才能使用它。
|
||||
|
||||
|
|
|
@ -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你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。
|
||||
|
|
|
@ -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 |
|
@ -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";
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -114,26 +114,30 @@ public abstract class ChampionEnemy extends Buff {
|
|||
|
||||
Class<?extends ChampionEnemy> 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<?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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 ) {
|
||||
}
|
||||
|
|
|
@ -278,6 +278,8 @@ public class DiamondKnight extends Boss {
|
|||
|
||||
Badges.KILL_SMK();
|
||||
|
||||
|
||||
|
||||
if(Statistics.dimandchestmazeCollected>=3){
|
||||
PaswordBadges.validateOMP();
|
||||
Statistics.bossScores[1] += 1000;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user