Update 0.6.4.0-Beta6
|
@ -18,8 +18,8 @@ allprojects {
|
|||
appName = 'Magic Ling Pixel Dungeon'
|
||||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =901300
|
||||
appVersionName = '0.6.4.0-Beta4'
|
||||
appVersionCode =901500
|
||||
appVersionName = '0.6.4.0-Beta6'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_11
|
||||
|
||||
|
|
BIN
core/src/main/assets/environment/tiles_water_challenge.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
core/src/main/assets/interfaces/dlc/Test.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
core/src/main/assets/interfaces/mapname/caves.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
core/src/main/assets/interfaces/mapname/dwarf.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
core/src/main/assets/interfaces/mapname/forest.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
core/src/main/assets/interfaces/mapname/halls.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
core/src/main/assets/interfaces/mapname/prison.png
Normal file
After Width: | Height: | Size: 17 KiB |
|
@ -295,8 +295,8 @@ actors.mobs.npcs.nulldiedto.talk_f=祝你好运,冒险家。我这里也提供
|
|||
actors.mobs.npcs.nulldiedto.talk_g=冒险家,我们又见面了。我担心你接下来的路程,所以又来帮助你了。
|
||||
actors.mobs.npcs.nulldiedto.talk_h=祝你好运,冒险家。我这里也提供一点帮助你压制不明力量的东西——当然,是得花钱的。
|
||||
|
||||
actors.mobs.npcs.nulldiedto.talk_i=冒险家,正如我之前所说。有一股邪恶,阴冷却强大的力量正在向外溢出,而能量点就在这扭曲裂缝的下方。而其实水晶之心一直在你的背包里面
|
||||
actors.mobs.npcs.nulldiedto.talk_j=现在的选择权在你,冒险家。继续还是妥协这一切,通过水晶离开这里,还是斩草除根,一切选择权已经交给你了!
|
||||
actors.mobs.npcs.nulldiedto.talk_i=冒险家,正如我之前所说。有一股邪恶,阴冷却强大的力量正在向外溢出,而能量点就在这更深的下方。
|
||||
actors.mobs.npcs.nulldiedto.talk_j=但是由于某位的到来,你现在还不能前往那里找死,所以你先暂时别急着去那里……
|
||||
|
||||
actors.mobs.npcs.nulldiedto.talk_k=DMZERO已经彻底被摧毁了,冒险家,干的不错。
|
||||
actors.mobs.npcs.nulldiedto.talk_l=冒险家,或许你真的是衪的救世主。
|
||||
|
|
|
@ -235,11 +235,13 @@ items.books.bookslist.hellfirebooks.desc=燃尽了一切,真理在何处显存
|
|||
items.books.bookslist.hellfirebooks.author=--圣火魔女
|
||||
items.books.bookslist.hellfirebooks.ac_read=尚未完成
|
||||
|
||||
items.weapon.melee.icefishsword.name=尚方宝剑
|
||||
items.weapon.melee.icefishsword.name=寒冷的尚方宝剑
|
||||
items.weapon.melee.icefishsword.desc=神秘的鱼类,来源未知。\n\n对可视敌人造成冻伤和流血效果,但是似乎有些腥。
|
||||
items.weapon.melee.icefishsword.cook=%s经过寒冷的肆虐再次变回冰冷的尚方宝剑……
|
||||
|
||||
items.weapon.melee.firefishsword.name=煮熟的尚方宝剑
|
||||
items.weapon.melee.firefishsword.desc=神秘的鱼类,来源未知。\n\n对可视敌人造成燃烧和幻惑效果,闻起来挺好吃的。
|
||||
items.weapon.melee.firefishsword.resetling=%s经过烈焰的烘烤变熟了, 但是似乎有点糊了...,不过剑身看起来更加锋利了。
|
||||
|
||||
items.scrolls.scroll.agesx=你不能在抢劫时阅读任何卷轴!击败守卫首领以获得解除!
|
||||
items.spells.beaconofreturning.zerobuy=你企图使用返回晶柱逃离本层!!!
|
||||
|
@ -408,7 +410,7 @@ items.bags.herbbag.name=食物袋
|
|||
items.bags.herbbag.desc=一个小袋子装你的食物。
|
||||
items.bags.kingbag.name=红宝石魔袋
|
||||
items.bags.kingbag.desc=矮人国王的€定制背包€,好东西,就要齐分享!
|
||||
items.scrolls.scrollofupgrade.ac_upgrade=使用所有升级
|
||||
|
||||
|
||||
items.weapon.melee.runicblade.name=贤者之剑
|
||||
items.weapon.melee.runicblade.stats_desc=这把武器可以在战斗中获得更多的伤害!
|
||||
|
@ -422,7 +424,7 @@ items.weapon.melee.runicblade.desc=这把武器据说曾经是300年前贤者使
|
|||
据说这把武器的主人现在早已销声匿迹\n那么,你能被它认可吗?
|
||||
|
||||
items.weapon.melee.locksword.name=归溯钥剑
|
||||
items.weapon.melee.locksword.desc=来自神秘国度的一把失落神剑,形态像是巨大化的钥匙。据说这把剑能够通过战斗的积累而改变外貌,或许还能在一些特别的地方开启东西,不知道是否真实。该武器无法升级,但可以在战斗中渐渐变强。\n\n武器的战斗经验:
|
||||
items.weapon.melee.locksword.desc=来自神秘国度的一把失落神剑,形态像是巨大化的钥匙。据说这把剑能够通过战斗的积累而改变外貌,或许还能在一些特别的地方开启东西,不知道是否真实。该武器无法升级,但可以在战斗中通过猎杀敌人渐渐变强,据说还能通过吸收钥匙获得更多经验。\n\n经验值:
|
||||
items.weapon.melee.locksword.stats_desc=这把武器会在攻击时不断积累经验,到达一定阶段时会变化造型,并赋予或加强紊乱附魔的效果与增加固定伤害值。
|
||||
items.weapon.melee.locksword.ac_interlevel_tp=远古遗迹
|
||||
items.weapon.melee.locksword.go_interlevel=探索之外
|
||||
|
@ -1483,6 +1485,11 @@ items.scrolls.scrollofupgrade.inv_title=选择一件要升级的物品
|
|||
items.scrolls.scrollofupgrade.weaken_curse=升级卷轴减弱了物品上的诅咒。
|
||||
items.scrolls.scrollofupgrade.remove_curse=升级卷轴净化了物品上的诅咒!
|
||||
items.scrolls.scrollofupgrade.desc=这张卷轴可以升级一件物品,提升其品质。法杖的魔力及充能数会获得提升,武器和护甲可以造成或吸收更多的伤害,戒指的效果将会增强。\n\n这张卷轴甚至偶尔能减弱甚至驱散诅咒效果,不过不如祛邪卷轴那么稳定。\n\n卷轴的魔力也会影响甚至消除武器的附魔或护甲的刻印。从+4开始升级装备可能会消除附魔或刻印,在+8或者更高等级则会必定消除。
|
||||
items.scrolls.scrollofupgrade.ac_upgrade=使用所有升级
|
||||
items.scrolls.scrollofupgrade.upgradeall_title=三思而后行!!!
|
||||
items.scrolls.scrollofupgrade.upgradeall_desc=你确定要使用所有升级卷轴吗?这将会消耗你背包所有的升级卷轴来升级你选定的物品。
|
||||
items.scrolls.scrollofupgrade.upgradeall_confirm=是的,我要升级!
|
||||
items.scrolls.scrollofupgrade.upgradeall_cancel=不,我再想想。
|
||||
|
||||
|
||||
|
||||
|
@ -2038,7 +2045,7 @@ items.weapon.melee.sai.attacker=迅猛一击,回血成功!
|
|||
items.weapon.melee.scimitar.name=弯刀
|
||||
items.weapon.melee.scimitar.stats_desc=这是一把比较快的武器。
|
||||
items.weapon.melee.scimitar.desc=一把厚重的弯刀。它的形状能让它进行更快但不甚强力的攻击。
|
||||
|
||||
f
|
||||
items.weapon.melee.spear.name=长矛
|
||||
items.weapon.melee.spear.stats_desc=这是一件相当缓慢的武器。\n这把武器有额外的攻击距离。
|
||||
items.weapon.melee.spear.desc=这是一根装着锋锐铁刺的细长木杆。
|
||||
|
|
|
@ -236,7 +236,7 @@ badges$badge.drawf_head.title=“旧时代”的终结
|
|||
badges$badge.drawf_head.desc=击败矮人将军,让他从诅咒中解脱。
|
||||
|
||||
badges$badge.brcler.title=起始归一
|
||||
badges$badge.brcler.desc=尽管死灵法师创造了这个恐怖的机器,但你已经粉碎了DM-ZERO的阴谋,现在是时候回归正常生活了。\n[完成首领对决]
|
||||
badges$badge.brcler.desc=尽管死灵法师创造了这个恐怖的机器,但你已经粉碎了DM-ZERO的阴谋,现在是时候回归正常生活了。\n[击败最终兵器-DM-ZERO(未实装)]
|
||||
|
||||
badges$badge.take_item.title=宝藏探索者
|
||||
badges$badge.take_item.desc=获得宝藏迷宫的三个隐藏宝藏,切记,对决不是拟态王的本意。
|
||||
|
|
|
@ -550,6 +550,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x80=1.修复灯火值不扣减的错
|
|||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x81=1.优化灯火体验\n其他错误修复。
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题\n6.修复部分成就无法获得的问题\n7.改善部分房间不会在1层生成为隐藏层\n7.修复商人的一些错误\n8.修复部分怪物掉落问题
|
||||
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -150,19 +150,9 @@ windows.bosssettingwindows.boss_3 = 救赎寒冰公主
|
|||
windows.bosssettingwindows.boss_4 = 对峙矮人将军
|
||||
windows.bosssettingwindows.boss_5 = 直面水晶意志
|
||||
|
||||
windows.bosssettingwindows.boss_unselect = 该领袖正在调查中
|
||||
|
||||
windows.bosssettingwindows.bossattack=支付金币挑战该领袖?
|
||||
windows.bosssettingwindows.bossgold=在游戏中,随着你探索的深度,你可能遇到一些突发事件,从而走向不同的路线。\n\n如果你不想去调查,可以支付一笔资金来强制挑战,当你不想要的时候,金币随时可以完全返还给你。但如果你已经进行了挑战,金币将不能返还给你。\n\n染血金币控制终端---霜落帝国出品。\n\n本次需要支付的金币:_
|
||||
windows.bosssettingwindows.bug=购买通行证
|
||||
windows.bosssettingwindows.not_yet=取消
|
||||
windows.bosssettingwindows.no_money=ERROR:你的金币不够,无法购买通行证。
|
||||
|
||||
windows.bosssettingwindows.no_level=ERROR:不能在交界处退还金币。
|
||||
|
||||
windows.bosssettingwindows.getboss=染血金币控制终端已经为你打开一条秘密通道,其路径通往:
|
||||
windows.bosssettingwindows.takenotapplic=你已取消挑战此领袖,已返还金币:
|
||||
windows.bosssettingwindows.cancal=ERROR:用户取消购买,已自动关闭。
|
||||
windows.bosssettingwindows.boss_unselect_0 = 深入熔岩洞穴(未实装)
|
||||
windows.bosssettingwindows.boss_unselect_1 = 探寻宝藏迷宫(调查中)
|
||||
windows.bosssettingwindows.boss_unselect_4 = 直面水晶意志(未实装)
|
||||
|
||||
windows.bosssettingwindows.dm300=DM-300
|
||||
windows.bosssettingwindows.ice=冰雪魔女
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon;
|
||||
|
||||
public class DLC {
|
||||
|
||||
public static final int BOSSRUSH = 1;
|
||||
public static final int BACKGO = 2;
|
||||
|
||||
public static final int MAX_VALUE = 4;
|
||||
|
||||
public static final String[] NAME_IDS = {
|
||||
"bossrush",
|
||||
"kling"
|
||||
};
|
||||
|
||||
public static final int[] MASKS = {
|
||||
BOSSRUSH,BACKGO
|
||||
};
|
||||
|
||||
public String name;
|
||||
}
|
|
@ -5,6 +5,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero.badLante
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero.goodLanterFire;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene.cure;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
|
||||
|
@ -33,12 +34,10 @@ public class Nyctophobia extends Buff implements Hero.Doom {
|
|||
public boolean act() {
|
||||
|
||||
if(hero.lanterfire == 90){
|
||||
cure( Dungeon.hero );
|
||||
goodLanterFire();
|
||||
spend(20f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (hero.lanterfire < 51 && hero.lanterfire>31) {
|
||||
cure( Dungeon.hero );
|
||||
badLanterFire();
|
||||
|
@ -80,8 +79,8 @@ public class Nyctophobia extends Buff implements Hero.Doom {
|
|||
return true;
|
||||
}
|
||||
if (hero.lanterfire >= 0 ) {
|
||||
hero.damageLantern(1+Dungeon.depth/8);
|
||||
spend(10f+(float) Dungeon.depth/8);
|
||||
hero.damageLantern(1+Challenges.activeChallenges()/5);
|
||||
spend(20f-(float) Dungeon.depth/5);
|
||||
} else {
|
||||
spend(STEP);
|
||||
}
|
||||
|
|
|
@ -89,11 +89,13 @@ 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.WandOfAnmy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost;
|
||||
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.wands.hightwand.WandOfHightHunderStorm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BloodthirstyThorn;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger;
|
||||
|
@ -162,11 +164,12 @@ public enum HeroClass {
|
|||
//new Amulet().quantity(1).identify().collect();
|
||||
new TengusMask().quantity(1).identify().collect();
|
||||
new TimekeepersHourglass().quantity(1).identify().collect();
|
||||
|
||||
new WandOfAnmy().quantity(1).identify().collect();
|
||||
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
|
||||
new WraithAmulet().quantity(1).identify().collect();
|
||||
new BloodthirstyThorn().quantity(1).identify().collect();
|
||||
new PotionOfLightStromCloud().quantity(10).identify().collect();
|
||||
new WandOfHightHunderStorm().quantity(1).identify().collect();
|
||||
new WashCrime().quantity(1).identify().collect();
|
||||
new MagicTorch().quantity(1).identify().collect();
|
||||
new LamellarArmor().quantity(1).identify().collect();
|
||||
|
|
|
@ -16,7 +16,6 @@ import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GooSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimePrincessSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -88,7 +87,7 @@ public class SlimePrincess extends Mob {
|
|||
}
|
||||
if (HP*2 > HT) {
|
||||
BossHealthBar.bleed(false);
|
||||
((GooSprite)sprite).spray(false);
|
||||
//((GooSprite)sprite).spray(false);
|
||||
HP = Math.min(HP, HT);
|
||||
}
|
||||
} else {
|
||||
|
@ -135,7 +134,7 @@ public class SlimePrincess extends Mob {
|
|||
super.updateSpriteState();
|
||||
|
||||
if (pumpedUp > 0){
|
||||
((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
//((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,7 +142,7 @@ public class SlimePrincess extends Mob {
|
|||
protected boolean doAttack( Char enemy ) {
|
||||
if (pumpedUp == 1) {
|
||||
pumpedUp++;
|
||||
((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
//((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
|
||||
spend( attackDelay() );
|
||||
|
||||
|
@ -154,13 +153,13 @@ public class SlimePrincess extends Mob {
|
|||
|
||||
if (visible) {
|
||||
if (pumpedUp >= 2) {
|
||||
((GooSprite) sprite).pumpAttack();
|
||||
//((GooSprite) sprite).pumpAttack();
|
||||
} else {
|
||||
sprite.attack(enemy.pos);
|
||||
}
|
||||
} else {
|
||||
if (pumpedUp >= 2){
|
||||
((GooSprite)sprite).triggerEmitters();
|
||||
// ((GooSprite)sprite).triggerEmitters();
|
||||
}
|
||||
attack( enemy );
|
||||
spend( attackDelay() );
|
||||
|
@ -175,7 +174,7 @@ public class SlimePrincess extends Mob {
|
|||
pumpedUp++;
|
||||
}
|
||||
|
||||
((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
//((GooSprite)sprite).pumpUp( pumpedUp );
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "!!!") );
|
||||
|
@ -215,7 +214,7 @@ public class SlimePrincess extends Mob {
|
|||
if ((HP*2 <= HT) && !bleeding){
|
||||
BossHealthBar.bleed(true);
|
||||
sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "enraged"));
|
||||
((GooSprite)sprite).spray(true);
|
||||
//((GooSprite)sprite).spray(true);
|
||||
yell(Messages.get(this, "gluuurp"));
|
||||
}
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.AQUAPHOBIA;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.EXSG;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
|
@ -478,6 +484,22 @@ public class YogDzewa extends Mob {
|
|||
}
|
||||
}
|
||||
|
||||
if(Dungeon.isChallenged(RLPT)){
|
||||
Badges.GOODRLPT();
|
||||
}
|
||||
|
||||
if(Dungeon.isChallenged(AQUAPHOBIA)){
|
||||
Badges.CLEARWATER();
|
||||
}
|
||||
|
||||
if(Dungeon.isChallenged(SBSG)){
|
||||
Badges.BIGX();
|
||||
}
|
||||
|
||||
if(Dungeon.isChallenged(EXSG)){
|
||||
Badges.EXSG();
|
||||
}
|
||||
|
||||
updateVisibility(Dungeon.level);
|
||||
|
||||
GameScene.bossSlain();
|
||||
|
|
|
@ -87,9 +87,10 @@ public class SakaFishBoss extends Boss {
|
|||
if (!Dungeon.level.mobs.contains(this)){
|
||||
return;
|
||||
}
|
||||
|
||||
if (dmg >= 25){
|
||||
//takes 5/6/7/8/9/10 dmg at 5/7/10/14/19/25 incoming dmg
|
||||
AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro();
|
||||
if (level==AncientMysteryCityBossLevel.State.FALL_BOSS){
|
||||
dmg = 10 + (int)(Math.sqrt(2*(dmg - 4) + 1) - 1)/2;
|
||||
} else if (dmg >= 20){
|
||||
dmg = 14 + (int)(Math.sqrt(8*(dmg - 4) + 1) - 1)/2;
|
||||
}
|
||||
|
||||
|
@ -109,7 +110,7 @@ public class SakaFishBoss extends Boss {
|
|||
lock.addTime(dmg*3f);
|
||||
}
|
||||
|
||||
AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro();
|
||||
|
||||
//phase 1 of the fight is over
|
||||
if (HP <= HT/2 && level==AncientMysteryCityBossLevel.State.TWO_BOSS){
|
||||
HP = (HT/2);
|
||||
|
@ -144,14 +145,11 @@ public class SakaFishBoss extends Boss {
|
|||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
int min = 20;
|
||||
int max = (HP*2 <= HT) ? 20 : 10;
|
||||
if (pumpedUp > 0) {
|
||||
pumpedUp = 0;
|
||||
return Random.NormalIntRange( min*3, max*3 );
|
||||
} else {
|
||||
return Random.NormalIntRange( min, max );
|
||||
}
|
||||
AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro();
|
||||
if(level==AncientMysteryCityBossLevel.State.FALL_BOSS)
|
||||
return Random.NormalIntRange(40, 75);
|
||||
else
|
||||
return Random.NormalIntRange(30, 40);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -170,7 +168,7 @@ public class SakaFishBoss extends Boss {
|
|||
@Override
|
||||
public int drRoll() {
|
||||
AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro();
|
||||
return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 5 : 15;
|
||||
return level == AncientMysteryCityBossLevel.State.FALL_BOSS ? 10 : 45;
|
||||
}
|
||||
|
||||
|
||||
|
@ -263,8 +261,6 @@ public class SakaFishBoss extends Boss {
|
|||
|
||||
Dungeon.level.unseal();
|
||||
|
||||
GetBossLoot();
|
||||
|
||||
GameScene.bossSlain();
|
||||
Dungeon.level.drop( new CrystalKey( Dungeon.depth ), pos ).sprite.drop();
|
||||
|
||||
|
@ -278,9 +274,9 @@ public class SakaFishBoss extends Boss {
|
|||
Dungeon.level.drop( new SakaMeat(), pos + ofs ).sprite.drop( pos );
|
||||
}
|
||||
|
||||
Dungeon.level.drop( new WaterSoul(), pos-1 ).sprite.drop();
|
||||
Dungeon.level.drop( new WaterSoul(), pos ).sprite.drop();
|
||||
Dungeon.level.drop( new SakaFishSketon(), pos ).sprite.drop();
|
||||
Dungeon.level.drop( new WaterSoul(), pos+1 ).sprite.drop();
|
||||
Dungeon.level.drop( new WaterSoul(), pos ).sprite.drop();
|
||||
|
||||
Badges.KILLSAKA();
|
||||
|
||||
|
@ -455,7 +451,7 @@ public class SakaFishBoss extends Boss {
|
|||
public void call() {
|
||||
AncientMysteryCityBossLevel.State level = ((AncientMysteryCityBossLevel)Dungeon.level).pro();
|
||||
if (leapVictim != null && alignment != leapVictim.alignment){
|
||||
enemy.damage( Random.NormalIntRange( 20, 40 ), this );
|
||||
enemy.damage( Random.NormalIntRange( 40, 60 ), this );
|
||||
if(level == AncientMysteryCityBossLevel.State.FALL_BOSS){
|
||||
//三阶段 魔法风暴
|
||||
FishStorm(sprite.ch);
|
||||
|
@ -540,7 +536,7 @@ public class SakaFishBoss extends Boss {
|
|||
int oldPos = pos;
|
||||
if (target != -1 && getCloser( target )) {
|
||||
|
||||
spend( 6f );
|
||||
spend( 1f );
|
||||
return moveSprite( oldPos, pos );
|
||||
|
||||
} else {
|
||||
|
@ -582,7 +578,7 @@ public class SakaFishBoss extends Boss {
|
|||
}
|
||||
|
||||
if (hit( this, ch, true )) {
|
||||
ch.damage( Random.NormalIntRange( 20, 40 ), new DeathGaze() );
|
||||
ch.damage( Random.NormalIntRange( 30, 60 ), new DeathGaze() );
|
||||
if(level == AncientMysteryCityBossLevel.State.FALL_BOSS){
|
||||
dropRocks(enemy);
|
||||
}
|
||||
|
@ -626,7 +622,7 @@ public class SakaFishBoss extends Boss {
|
|||
ray.path.get(ray.dist),
|
||||
null
|
||||
);
|
||||
if( Dungeon.level.water[ray.path.get(ray.dist)]){
|
||||
if( Dungeon.level.water[ray.path.get(ray.dist)] || Random.Int(10)==0){
|
||||
GameScene.add(Blob.seed(ray.path.get(ray.dist), 30, FrostFire.class));
|
||||
Level.set(ray.path.get(ray.dist), Terrain.EMPTY);
|
||||
GameScene.updateMap( ray.path.get(ray.dist) );
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
|
@ -69,7 +70,6 @@ public class ImpShopkeeper extends Shopkeeper {
|
|||
heap.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
destroy();
|
||||
|
||||
sprite.emitter().burst( Speck.factory( Speck.WOOL ), 15 );
|
||||
|
@ -78,7 +78,8 @@ public class ImpShopkeeper extends Shopkeeper {
|
|||
|
||||
@Override
|
||||
public void destroy() {
|
||||
super.destroy();
|
||||
HP = 0;
|
||||
Actor.remove( this );
|
||||
for (Heap heap: Dungeon.level.heaps.valueList()) {
|
||||
if (heap.type == Heap.Type.FOR_SALE) {
|
||||
if (ShatteredPixelDungeon.scene() instanceof GameScene) {
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.NxhySprite;
|
||||
|
||||
public class Nxhy extends Shopkeeper {
|
||||
|
@ -39,6 +45,11 @@ public class Nxhy extends Shopkeeper {
|
|||
flee();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int defenseSkill( Char enemy ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add( Buff buff ) {
|
||||
flee();
|
||||
|
@ -48,16 +59,22 @@ public class Nxhy extends Shopkeeper {
|
|||
public void flee() {
|
||||
destroy();
|
||||
Notes.remove(Notes.Landmark.SHOP);
|
||||
CellEmitter.get(pos).burst(ElmoParticle.FACTORY, 6);
|
||||
hero.sprite.burst(15597568, 9);
|
||||
sprite.killAndErase();
|
||||
CellEmitter.get( pos ).burst( ElmoParticle.FACTORY, 6 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
super.destroy();
|
||||
Actor.remove( this );
|
||||
HP = 0;
|
||||
for (Heap heap: Dungeon.level.heaps.valueList()) {
|
||||
if (heap.type == Heap.Type.FOR_SALE) {
|
||||
CellEmitter.get( heap.pos ).burst( ElmoParticle.FACTORY, 4 );
|
||||
if (ShatteredPixelDungeon.scene() instanceof GameScene) {
|
||||
CellEmitter.get(heap.pos).burst(ElmoParticle.FACTORY, 4);
|
||||
}
|
||||
if (heap.size() == 1) {
|
||||
heap.destroy();
|
||||
} else {
|
||||
|
|
|
@ -64,7 +64,7 @@ public class Shopkeeper extends NPC {
|
|||
properties.add(Property.IMMOVABLE);
|
||||
}
|
||||
|
||||
public static int MAX_BUYBACK_HISTORY = 4;
|
||||
public static int MAX_BUYBACK_HISTORY = 3;
|
||||
public ArrayList<Item> buybackItems = new ArrayList<>();
|
||||
public static boolean seenBefore = false;
|
||||
@Override
|
||||
|
|
|
@ -40,14 +40,18 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.journal.DocumentPage;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.journal.Guidebook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.FireFishSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundlable;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -93,6 +97,8 @@ public class Heap implements Bundlable {
|
|||
break;
|
||||
case WHITETOMB:
|
||||
ScrollOfTeleportation.appear( hero,hero.pos+5 );
|
||||
new PotionOfLiquidFlame().quantity(1).identify().collect();
|
||||
GLog.n("你在探索的时候,你发现了一瓶液态火焰药水,你收集了它,但同时被传入了墓穴的中央……");
|
||||
break;
|
||||
case TELECRYSTL:
|
||||
ScrollOfTeleportation.appear( hero,level.entrance );
|
||||
|
@ -222,6 +228,9 @@ public class Heap implements Bundlable {
|
|||
} else if (item instanceof Dewdrop) {
|
||||
items.remove( item );
|
||||
evaporated = true;
|
||||
} else if (item instanceof IceFishSword) {
|
||||
replace( item, FireFishSword.resetling( (IceFishSword) item ) );
|
||||
evaporated = true;
|
||||
} else if (item instanceof MysteryMeat || item instanceof FrozenCarpaccio) {
|
||||
replace( item, ChargrilledMeat.cook( item.quantity ) );
|
||||
burnt = true;
|
||||
|
@ -320,7 +329,10 @@ public class Heap implements Bundlable {
|
|||
boolean frozen = false;
|
||||
for (Item item : items.toArray( new Item[0] )) {
|
||||
if (item instanceof MysteryMeat) {
|
||||
replace( item, FrozenCarpaccio.cook( (MysteryMeat)item ) );
|
||||
replace(item, FrozenCarpaccio.cook((MysteryMeat) item));
|
||||
frozen = true;
|
||||
} else if (item instanceof FireFishSword) {
|
||||
replace(item, IceFishSword.cook((FireFishSword) item));
|
||||
frozen = true;
|
||||
} else if (item instanceof Potion && !item.unique) {
|
||||
items.remove(item);
|
||||
|
|
|
@ -76,7 +76,7 @@ public class Item implements Bundlable {
|
|||
|
||||
public int flasks;
|
||||
|
||||
protected int quantity = 1;
|
||||
protected int quantity = 1;
|
||||
public boolean dropsDownHeap = false;
|
||||
|
||||
public int level = 0;
|
||||
|
|
|
@ -22,10 +22,13 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.keys;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LockSword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -54,6 +57,13 @@ public abstract class Key extends Item {
|
|||
Sample.INSTANCE.play( Assets.Sounds.ITEM );
|
||||
hero.spendAndNext( TIME_TO_PICK_UP );
|
||||
GameScene.updateKeyDisplay();
|
||||
|
||||
if(hero.belongings.weapon instanceof LockSword){
|
||||
LockSword weapon = (LockSword)hero.belongings.weapon;
|
||||
weapon.lvl += 15*(Dungeon.depth/5);
|
||||
hero.sprite.showStatus(0x123456ff, String.valueOf(15*(Dungeon.depth/5)));
|
||||
GLog.p("归溯钥剑吸收了地牢钥匙中的残余魔力,你感觉它似乎变得更加强大了。");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.lightblack;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS;
|
||||
|
@ -37,7 +38,7 @@ public class OilLantern extends Item {
|
|||
|
||||
private static final String TXT_STATUS = "%d%%";
|
||||
private boolean active = false;
|
||||
private int charge = 100;
|
||||
private int charge = 100+Challenges.activeChallenges()/5*50;
|
||||
public int flasks = 0;
|
||||
|
||||
public OilLantern() {
|
||||
|
|
|
@ -5,9 +5,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -37,7 +38,8 @@ public class SakaFishSketon extends Item {
|
|||
GLog.w(Messages.get(this,"cannot_send"));
|
||||
return;
|
||||
}
|
||||
GameScene.show(new BackGoKey.WndSelectLevel());
|
||||
InterlevelScene.mode = InterlevelScene.Mode.RETURN;
|
||||
Game.switchScene(InterlevelScene.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public abstract class InventoryScroll extends Scroll {
|
|||
GameScene.selectItem( itemSelector );
|
||||
}
|
||||
|
||||
private void confirmCancelation() {
|
||||
void confirmCancelation() {
|
||||
GameScene.show( new WndOptions(new ItemSprite(this),
|
||||
Messages.titleCase(name()),
|
||||
Messages.get(this, "warning"),
|
||||
|
@ -70,7 +70,7 @@ public abstract class InventoryScroll extends Scroll {
|
|||
} );
|
||||
}
|
||||
|
||||
private String inventoryTitle(){
|
||||
String inventoryTitle(){
|
||||
return Messages.get(this, "inv_title");
|
||||
}
|
||||
|
||||
|
|
|
@ -21,10 +21,13 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
|
||||
|
||||
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.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
|
@ -32,15 +35,26 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.UnstableSpellbook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ScrollOfUpgrade extends InventoryScroll {
|
||||
|
||||
|
||||
public static final String AC_UPGRADE = "UPGRADE";
|
||||
|
||||
{
|
||||
icon = ItemSpriteSheet.Icons.SCROLL_UPGRADE;
|
||||
preferredBag = Belongings.Backpack.class;
|
||||
|
@ -53,11 +67,54 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||
return item.isUpgradable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Hero hero, String action) {
|
||||
super.execute(hero, action);
|
||||
|
||||
if (action.equals(AC_UPGRADE)){
|
||||
if (hero.buff(MagicImmune.class) != null){
|
||||
GLog.w( Messages.get(this, "no_magic") );
|
||||
} else if (hero.buff( Blindness.class ) != null) {
|
||||
GLog.w( Messages.get(this, "blinded") );
|
||||
} else if (hero.buff(UnstableSpellbook.bookRecharge.class) != null
|
||||
&& hero.buff(UnstableSpellbook.bookRecharge.class).isCursed()){
|
||||
GLog.n( Messages.get(this, "cursed") );
|
||||
} else {
|
||||
GameScene.show(new WndOptions(Icons.get(Icons.WARNING),
|
||||
Messages.get(this, "upgradeall_title"),
|
||||
Messages.get(this, "upgradeall_desc"),
|
||||
Messages.get(this, "upgradeall_confirm"),
|
||||
Messages.get(this, "upgradeall_cancel") ){
|
||||
@Override
|
||||
protected void onSelect(int index) {
|
||||
if (index == 0){
|
||||
curUser = hero;
|
||||
curItem = detachAll( hero.belongings.backpack );
|
||||
GameScene.selectItem( itemSelector2);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions(Hero hero) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
if (isIdentified() && !anonymous) actions.add(AC_UPGRADE);
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onItemSelected( Item item ) {
|
||||
|
||||
upgrade( curUser );
|
||||
|
||||
upgradeItem(item);
|
||||
Talent.onUpgradeScrollUsed( Dungeon.hero );
|
||||
}
|
||||
|
||||
private void upgradeItem(Item item) {
|
||||
Degrade.detach( curUser, Degrade.class );
|
||||
|
||||
//logic for telling the user when item properties change from upgrades
|
||||
|
@ -109,13 +166,11 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||
item.upgrade();
|
||||
}
|
||||
|
||||
Talent.onUpgradeScrollUsed( Dungeon.hero );
|
||||
|
||||
Badges.validateItemLevelAquired( item );
|
||||
Badges.validateItemLevelAquired(item);
|
||||
Statistics.upgradesUsed++;
|
||||
Badges.validateMageUnlock();
|
||||
}
|
||||
|
||||
|
||||
public static void upgrade( Hero hero ) {
|
||||
hero.sprite.emitter().start( Speck.factory( Speck.UP ), 0.2f, 3 );
|
||||
}
|
||||
|
@ -129,7 +184,7 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||
GLog.p( Messages.get(ScrollOfUpgrade.class, "remove_curse") );
|
||||
hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int value() {
|
||||
return isKnown() ? 50 * quantity : super.value();
|
||||
|
@ -139,4 +194,94 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||
public int energyVal() {
|
||||
return isKnown() ? 8 * quantity : super.energyVal();
|
||||
}
|
||||
}
|
||||
|
||||
protected WndBag.ItemSelector itemSelector2 = new WndBag.ItemSelector() {
|
||||
|
||||
@Override
|
||||
public String textPrompt() {
|
||||
return inventoryTitle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Bag> preferredBag() {
|
||||
return preferredBag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean itemSelectable(Item item) {
|
||||
return usableOnItem(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelect( Item item ) {
|
||||
|
||||
//FIXME this safety check shouldn't be necessary
|
||||
//it would be better to eliminate the curItem static variable.
|
||||
if (!(curItem instanceof InventoryScroll)){
|
||||
return;
|
||||
}
|
||||
|
||||
if (item != null) {
|
||||
// time for some copypaste
|
||||
Degrade.detach( curUser, Degrade.class );
|
||||
|
||||
if (item instanceof Weapon){
|
||||
Weapon w = (Weapon) item;
|
||||
boolean wasCursed = w.cursed;
|
||||
boolean hadCursedEnchant = w.hasCurseEnchant();
|
||||
|
||||
for (int i = 0; i < curItem.quantity(); i++)
|
||||
w.upgrade();
|
||||
|
||||
if (w.cursedKnown && hadCursedEnchant && !w.hasCurseEnchant()){
|
||||
removeCurse( Dungeon.hero );
|
||||
} else if (w.cursedKnown && wasCursed && !w.cursed){
|
||||
weakenCurse( Dungeon.hero );
|
||||
}
|
||||
|
||||
} else if (item instanceof Armor){
|
||||
Armor a = (Armor) item;
|
||||
boolean wasCursed = a.cursed;
|
||||
boolean hadCursedGlyph = a.hasCurseGlyph();
|
||||
|
||||
for (int i = 0; i < curItem.quantity(); i++)
|
||||
a.upgrade();
|
||||
|
||||
if (a.cursedKnown && hadCursedGlyph && !a.hasCurseGlyph()){
|
||||
removeCurse( Dungeon.hero );
|
||||
} else if (a.cursedKnown && wasCursed && !a.cursed){
|
||||
weakenCurse( Dungeon.hero );
|
||||
}
|
||||
|
||||
} else if (item instanceof Wand || item instanceof Ring) {
|
||||
boolean wasCursed = item.cursed;
|
||||
|
||||
for (int i = 0; i < curItem.quantity(); i++)
|
||||
item.upgrade();
|
||||
|
||||
if (item.cursedKnown && wasCursed && !item.cursed){
|
||||
removeCurse( Dungeon.hero );
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < curItem.quantity(); i++)
|
||||
item.upgrade();
|
||||
}
|
||||
((InventoryScroll)curItem).readAnimation();
|
||||
|
||||
Sample.INSTANCE.play( Assets.Sounds.READ );
|
||||
Badges.validateItemLevelAquired(item);
|
||||
Statistics.upgradesUsed += curItem.quantity();
|
||||
Badges.validateMageUnlock();
|
||||
|
||||
} else if (identifiedByUse && !((Scroll)curItem).anonymous) {
|
||||
|
||||
((InventoryScroll)curItem).confirmCancelation();
|
||||
|
||||
} else if (!((Scroll)curItem).anonymous) {
|
||||
|
||||
curItem.collect( curUser.belongings.backpack );
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
|
@ -2,7 +2,6 @@ package com.shatteredpixel.shatteredpixeldungeon.items.wands;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
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;
|
||||
|
@ -35,9 +34,19 @@ public class WandOfAnmy extends DamageWand {
|
|||
bones = true;
|
||||
}
|
||||
|
||||
public ArrayList<String> actions( Hero hero ) {
|
||||
ArrayList<String> actions = new ArrayList<>();
|
||||
if (curCharges > 0 || !curChargeKnown) {
|
||||
actions.add( AC_ZAP );
|
||||
}
|
||||
actions.remove(AC_DROP);
|
||||
actions.remove(AC_THROW);
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions(Hero hero) {
|
||||
return new ArrayList<>(); //yup, no dropping this one
|
||||
public int value() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static class AllyToRestart extends AllyBuff {
|
||||
|
@ -56,7 +65,7 @@ public class WandOfAnmy extends DamageWand {
|
|||
public void fx(boolean on) {
|
||||
if (on) {
|
||||
target.sprite.add(CharSprite.State.SHIELDED);
|
||||
Statistics.TryUsedAnmy = true;
|
||||
//Statistics.TryUsedAnmy = true;
|
||||
}
|
||||
else
|
||||
target.sprite.remove(CharSprite.State.SHIELDED);
|
||||
|
@ -129,10 +138,10 @@ public class WandOfAnmy extends DamageWand {
|
|||
ch.damage(damage, this);
|
||||
Sample.INSTANCE.play( Assets.Sounds.HIT_MAGIC, 1, 1.1f * Random.Float(0.87f, 1.15f) );
|
||||
|
||||
if (ch.isAlive() && !Statistics.TryUsedAnmy && (!ch.properties().contains(Char.Property.BOSS) || !ch.properties().contains(Char.Property.MINIBOSS))){
|
||||
if (ch.isAlive() && (!ch.properties().contains(Char.Property.BOSS))){
|
||||
Buff.affect(ch, AllyToRestart.class);
|
||||
} else {
|
||||
GLog.n("不能影响Boss和精英怪,也不能在使用后继续在本层使用,每层仅限一次使用。");
|
||||
GLog.n("不能影响Boss。");
|
||||
}
|
||||
} else {
|
||||
Dungeon.level.pressCell(bolt.collisionPos);
|
||||
|
|
|
@ -9,9 +9,13 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex;
|
|||
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.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class FireFishSword extends MeleeWeapon{
|
||||
|
||||
|
@ -22,22 +26,38 @@ public class FireFishSword extends MeleeWeapon{
|
|||
tier = 6;
|
||||
ACC = 2.90f; //20% boost to accuracy
|
||||
DLY = 1.6f; //2x speed
|
||||
cursed = true;
|
||||
enchant(Enchantment.randomCurse());
|
||||
}
|
||||
|
||||
public static Weapon resetling(IceFishSword ingredient ) {
|
||||
FireFishSword result = new FireFishSword();
|
||||
result.quantity = ingredient.quantity();
|
||||
result.identify();
|
||||
result.level = ingredient.level;
|
||||
if(ingredient.customName != null){
|
||||
result.customName = ingredient.customName;
|
||||
}
|
||||
GLog.n(Messages.get( FireFishSword.class, "resetling"),result.name());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int max(int lvl) {
|
||||
return 3*(tier+1) + //45 base, up from 30
|
||||
lvl*(tier+1); //scaling unchanged
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int min(int lvl) {
|
||||
return 1*(tier+5) + //45 base, up from 30
|
||||
lvl*(tier+1); //scaling unchanged
|
||||
return (tier + 1)+ + //10 base, down from 20
|
||||
lvl*Math.round(1.0f*(tier+1)); //scaling unchanged
|
||||
}
|
||||
|
||||
@Override
|
||||
public int max(int lvl) {
|
||||
return 2*(tier+2) + //10 base, down from 20
|
||||
lvl*Math.round(1.0f*(tier+1)); //scaling unchanged
|
||||
}
|
||||
|
||||
|
||||
public void bolt(Integer target, final Mob mob){
|
||||
if (target != null) {
|
||||
|
||||
|
@ -71,7 +91,7 @@ public class FireFishSword extends MeleeWeapon{
|
|||
}
|
||||
|
||||
public int proc(Char attacker, Char defender, int damage) {
|
||||
if(attacker instanceof Hero){
|
||||
if(attacker instanceof Hero && Random.Int(10)==3){
|
||||
for(Mob mob : ((Hero) attacker).visibleEnemiesList()){
|
||||
bolt(mob.pos, mob);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
|
@ -34,6 +35,20 @@ public class IceFishSword extends Weapon {
|
|||
enchant(Enchantment.randomCurse());
|
||||
}
|
||||
|
||||
public static Weapon cook(FireFishSword ingredient ) {
|
||||
IceFishSword result = new IceFishSword();
|
||||
/** 传递数量,链接等级 自动鉴定 */
|
||||
result.quantity = ingredient.quantity();
|
||||
result.level = ingredient.level;
|
||||
result.identify();
|
||||
//双形态武器测试 如果有自定义名字 需要传递名字
|
||||
if(ingredient.customName != null){
|
||||
result.customName = ingredient.customName;
|
||||
}
|
||||
GLog.b(Messages.get( IceFishSword.class, "cook",result.name()));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item upgrade() {
|
||||
return upgrade(false);
|
||||
|
@ -132,20 +147,20 @@ public class IceFishSword extends Weapon {
|
|||
|
||||
@Override
|
||||
public int min(int lvl) {
|
||||
return (Dungeon.depth / 5 + tier + 1)+ + //10 base, down from 20
|
||||
return (tier + 2)+ + //10 base, down from 20
|
||||
lvl*Math.round(1.0f*(tier+1)); //scaling unchanged
|
||||
}
|
||||
|
||||
@Override
|
||||
public int max(int lvl) {
|
||||
return 2*(Dungeon.depth/5+tier+1) + //10 base, down from 20
|
||||
return 2*(tier+3) + //10 base, down from 20
|
||||
lvl*Math.round(1.0f*(tier+1)); //scaling unchanged
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int proc(Char attacker, Char defender, int damage) {
|
||||
if(attacker instanceof Hero && Random.Float()<0.2f){
|
||||
if(attacker instanceof Hero && Random.Int(10)==3){
|
||||
for(Mob mob : ((Hero) attacker).visibleEnemiesList()){
|
||||
bolt(mob.pos, mob);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import java.util.ArrayList;
|
|||
|
||||
public class LockSword extends MeleeWeapon {
|
||||
|
||||
private int lvl = 0;
|
||||
public int lvl = 0;
|
||||
|
||||
public LockSword() {
|
||||
super.image = ItemSpriteSheet.DG3;
|
||||
|
@ -67,7 +67,7 @@ public class LockSword extends MeleeWeapon {
|
|||
if (index == 0) {
|
||||
InterlevelScene.mode = InterlevelScene.Mode.ANCITYBOSS;
|
||||
Game.switchScene(InterlevelScene.class);
|
||||
lvl -= 500;
|
||||
lvl -= 300;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -124,18 +124,18 @@ public class LockSword extends MeleeWeapon {
|
|||
public int proc(Char attacker, Char defender, int damage ) {
|
||||
|
||||
int dmg;
|
||||
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lvl >= 1000) {
|
||||
lvl += 1;
|
||||
} else if (defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage && lvl <= 1000) {
|
||||
//目标Boss血量小于实际伤害判定为死亡,+100
|
||||
lvl += 50;
|
||||
} else if (defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage && lvl <= 1000) {
|
||||
//目标迷你Boss血量小于实际伤害判定为死亡,+30
|
||||
lvl += 20;
|
||||
} else if (defender.HP <= damage && lvl <= 1000) {
|
||||
//目标血量小于实际伤害判定为死亡,+15
|
||||
lvl += 10;
|
||||
} else if (defender.properties().contains(Char.Property.BOSS) && defender.HP <= damage && lvl <= 1000 && lock == null) {
|
||||
//目标Boss血量小于实际伤害判定为死亡,+9
|
||||
lvl += 9;
|
||||
} else if (defender.properties().contains(Char.Property.MINIBOSS) && defender.HP <= damage && lvl <= 1000 && lock == null) {
|
||||
//目标迷你Boss血量小于实际伤害判定为死亡,+7
|
||||
lvl += 7;
|
||||
} else if (defender.HP <= damage && lvl <= 1000 && lock == null) {
|
||||
//目标血量小于实际伤害判定为死亡,+5
|
||||
lvl += 5;
|
||||
}
|
||||
|
||||
if (lvl>= 900) {
|
||||
|
|
|
@ -61,7 +61,7 @@ public class Sai extends MeleeWeapon {
|
|||
//50x0.1+7x0.5+1=10+3.5+1=15
|
||||
if(attacker.HP >= attacker.HT){
|
||||
GLog.p("血量已满!无法回血");
|
||||
} else if (Random.Float()<0.35f) {
|
||||
} else if (Random.Int(10)==2) {
|
||||
R = (int) (attacker.HT * 0.1 + (buffedLvl() * 0.5) + 1.5);
|
||||
attacker.HP +=attacker.HT * 0.1 + (buffedLvl()) + 1.5;
|
||||
attacker.sprite.showStatus(CharSprite.POSITIVE, ("+" + R + "HP"));
|
||||
|
@ -75,7 +75,13 @@ public class Sai extends MeleeWeapon {
|
|||
@Override
|
||||
public int max(int lvl) {
|
||||
return Math.round(1.2f*(tier+1)) + //10 base, down from 20
|
||||
lvl*Math.round(0.8f*(tier+1)); //+2 per level, down from +4
|
||||
lvl*Math.round(1.2f*(tier+1)); //+2 per level, down from +4
|
||||
}
|
||||
|
||||
@Override
|
||||
public int min(int lvl) {
|
||||
return Math.round(0.74f*(tier+1)) + //10 base, down from 20
|
||||
lvl*Math.round(0.65f*(tier+1)); //+2 per level, down from +4
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,8 +38,8 @@ public class WarHammer extends MeleeWeapon {
|
|||
hitSoundPitch = 1f;
|
||||
|
||||
tier = 5;
|
||||
ACC = 1.90f; //20% boost to accuracy
|
||||
DLY = 1.50f; //2x speed
|
||||
ACC = 1.90f; //90% boost to accuracy
|
||||
DLY = 1.50f; //1.5x speed
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.AncientMysteryCityBossLevel.State.END_BOSS;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.AncientMysteryCityBossLevel.State.FALL_BOSS;
|
||||
|
@ -134,6 +135,8 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
|
||||
private static final short S = Terrain.BOOKSHELF;
|
||||
|
||||
private static final short A = Terrain.EXIT;
|
||||
|
||||
private static final int[] WorldRoomShort = {
|
||||
L,L,L,L,L,L,L,L,L,L,L,L,W,W,W,L,L,L,L,L,L,L,L,L,L,L,L,
|
||||
L,R,R,R,R,R,R,L,R,R,R,D,E,R,E,W,R,R,R,L,R,R,R,R,R,R,L,
|
||||
|
@ -159,7 +162,7 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
L,R,R,R,W,R,R,W,R,R,R,R,R,R,R,R,R,R,R,W,R,R,W,R,R,R,L,
|
||||
L,L,L,L,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,K,D,W,L,L,L,L,
|
||||
L,R,R,L,L,W,E,C,R,R,R,R,R,R,R,R,R,R,R,C,E,W,L,L,R,R,L,
|
||||
L,R,R,R,L,W,W,D,R,R,R,R,R,R,R,R,R,R,R,D,W,W,L,R,R,R,L,
|
||||
L,R,R,R,L,W,W,D,R,R,R,R,R,A,R,R,R,R,R,D,W,W,L,R,R,R,L,
|
||||
L,R,L,R,L,W,W,W,W,W,W,W,W,G,W,W,W,W,W,W,W,W,L,R,L,R,L,
|
||||
L,R,R,R,L,R,R,W,L,R,R,R,E,L,E,R,R,R,R,W,R,R,L,R,R,R,L,
|
||||
L,L,R,L,L,R,W,W,W,L,R,S,S,L,S,S,R,L,W,W,W,R,L,L,R,L,L,
|
||||
|
@ -221,7 +224,7 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
|
||||
super.occupyCell( ch );
|
||||
|
||||
boolean isTrue = ch.pos == LDBossDoor && ch == Dungeon.hero && Dungeon.level.distance(ch.pos, entrance) >= 2;
|
||||
boolean isTrue = ch.pos == LDBossDoor && ch == hero && Dungeon.level.distance(ch.pos, entrance) >= 2;
|
||||
|
||||
//如果有生物来到BossDoor的下一个坐标,且生物是玩家,那么触发seal() .
|
||||
if (map[getBossDoor] == Terrain.DOOR && isTrue || map[getBossDoor] == Terrain.EMBERS && isTrue) {
|
||||
|
@ -239,7 +242,7 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
}
|
||||
}
|
||||
|
||||
//GLog.w(String.valueOf(hero.pos));
|
||||
GLog.w(String.valueOf(hero.pos));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ public class AncityLevel extends Level {
|
|||
case 85:
|
||||
return Terrain.LOCKED_EXIT;
|
||||
case 17:
|
||||
return Dungeon.depth == 27 ? Terrain.CHASM : Terrain.EXIT;
|
||||
return Terrain.EXIT;
|
||||
case 83:
|
||||
return Dungeon.depth == 17 || Dungeon.depth == 27 ? Terrain.ENTRANCE : 14;
|
||||
case 99:
|
||||
|
|
|
@ -109,7 +109,7 @@ public class LevelRules {
|
|||
if ((Statistics.boss_enhance & 0x4) != 0) {
|
||||
return new CavesGirlDeadLevel();
|
||||
} else {
|
||||
return Random.Float() <= 0.4f ? new CaveTwoBossLevel() : new CaveTwoBossLevel();
|
||||
return Random.Float() <= 0.4f ? new CaveTwoBossLevel() : new NewCavesBossLevel();
|
||||
}
|
||||
case 16:
|
||||
case 17:
|
||||
|
|
|
@ -5,6 +5,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
|
@ -29,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilPotion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
|
||||
|
@ -144,7 +146,12 @@ public class NxhyShopRoom extends SpecialRoom {
|
|||
itemsToSpawn2.add(Generator.randomUsingDefaults(Generator.Category.WAND));
|
||||
|
||||
if(lanterfireactive) {
|
||||
itemsToSpawn2.add(new OilPotion());
|
||||
if(Challenges.activeChallenges() > 6){
|
||||
itemsToSpawn2.add(new OilPotion());
|
||||
itemsToSpawn2.add(new OilPotion());
|
||||
} else {
|
||||
itemsToSpawn2.add(new OilPotion());
|
||||
}
|
||||
}
|
||||
|
||||
itemsToSpawn2.add(new ScrollOfIdentify());
|
||||
|
@ -158,8 +165,8 @@ public class NxhyShopRoom extends SpecialRoom {
|
|||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
itemsToSpawn2.add(new YellowSunBooks());
|
||||
itemsToSpawn2.add(new GrassKingBooks());
|
||||
itemsToSpawn2.add(new YellowSunBooks().quantity(3));
|
||||
itemsToSpawn2.add(new GrassKingBooks().quantity(3));
|
||||
break;
|
||||
case 5:
|
||||
itemsToSpawn2.add(new MeatPie());
|
||||
|
@ -174,7 +181,7 @@ public class NxhyShopRoom extends SpecialRoom {
|
|||
}
|
||||
itemsToSpawn2.add(item);
|
||||
}
|
||||
itemsToSpawn2.add(new SmallRation());
|
||||
itemsToSpawn2.add(new PotionOfHealing());
|
||||
itemsToSpawn2.add(new SmallRation());
|
||||
int Int = Random.Int(4);
|
||||
if (Int == 0) {
|
||||
|
@ -190,13 +197,13 @@ public class NxhyShopRoom extends SpecialRoom {
|
|||
int bags = 0;
|
||||
int i3 = Dungeon.depth;
|
||||
if (i3 == 6) {
|
||||
bags = (int) Math.ceil((double) (((float) (5 - hourglass.sandBags)) * 0.2f));
|
||||
bags = (int) Math.ceil(((float) (5 - hourglass.sandBags)) * 0.2f);
|
||||
} else if (i3 == 11) {
|
||||
bags = (int) Math.ceil((double) (((float) (3 - hourglass.sandBags)) * 0.25f));
|
||||
bags = (int) Math.ceil(((float) (3 - hourglass.sandBags)) * 0.25f);
|
||||
} else if (i3 == 16) {
|
||||
bags = (int) Math.ceil((double) (((float) (5 - hourglass.sandBags)) * 0.5f));
|
||||
bags = (int) Math.ceil(((float) (5 - hourglass.sandBags)) * 0.5f);
|
||||
} else if (i3 == 20 || i3 == 21) {
|
||||
bags = (int) Math.ceil((double) (((float) (5 - hourglass.sandBags)) * 0.8f));
|
||||
bags = (int) Math.ceil(((float) (5 - hourglass.sandBags)) * 0.8f);
|
||||
}
|
||||
for (int i4 = 1; i4 <= bags; i4++) {
|
||||
itemsToSpawn2.add(new TimekeepersHourglass.sandBag());
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
|
@ -211,9 +212,15 @@ public class ShopRoom extends SpecialRoom {
|
|||
itemsToSpawn.add( Generator.randomUsingDefaults( Generator.Category.POTION ) );
|
||||
|
||||
if(lanterfireactive) {
|
||||
itemsToSpawn.add(new OilPotion());
|
||||
if(Challenges.activeChallenges() > 6){
|
||||
itemsToSpawn.add(new OilPotion());
|
||||
itemsToSpawn.add(new OilPotion());
|
||||
} else {
|
||||
itemsToSpawn.add(new OilPotion());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
itemsToSpawn.add( new ScrollOfIdentify() );
|
||||
itemsToSpawn.add( new ScrollOfRemoveCurse() );
|
||||
itemsToSpawn.add( new ScrollOfMagicMapping() );
|
||||
|
|
|
@ -79,6 +79,8 @@ public class EyeRoom extends SpecialRoom {
|
|||
// 绘制眼瞳
|
||||
Painter.set(level, doorX, doorY - 3, Terrain.PEDESTAL);
|
||||
|
||||
Painter.set(level, doorX, doorY,Terrain.BARRICADE);
|
||||
|
||||
int chestPos = (top + 6) * level.width() + left + 6;
|
||||
|
||||
/** 套五个宝箱 */
|
||||
|
|
|
@ -117,7 +117,12 @@ public class YinYangRoom extends SpecialRoom {
|
|||
Painter.set(level,right - 1,bottom - 1,Terrain.WALL);
|
||||
|
||||
for (Door door : connected.values()) {
|
||||
door.set(Door.Type.HIDDEN);
|
||||
if(Dungeon.depth == 1){
|
||||
door.set(Door.Type.REGULAR);
|
||||
} else {
|
||||
door.set(Door.Type.HIDDEN);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
level.addItemToSpawn( new CrystalKey( Dungeon.depth ) );
|
||||
|
|
|
@ -495,18 +495,25 @@ public class GameScene extends PixelScene {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
Banner mapnameSlain = new Banner( BannerSprites.get( BannerSprites.Type.NULL ) );
|
||||
switch (Dungeon.depth) {
|
||||
case 0:
|
||||
WndStory.showChapter( WndStory.ID_FOREST );
|
||||
break;
|
||||
case 1:
|
||||
WndStory.showChapter( WndStory.ID_SEWERS );
|
||||
mapnameSlain.texture( "interfaces/mapname/forest.png" );
|
||||
mapnameSlain.show( 0x00FF00, 0.6f, 3f );
|
||||
scene.showBanner( mapnameSlain );
|
||||
break;
|
||||
case 5:
|
||||
WndStory.showChapter( WndStory.ID_SEWERSBOSS );
|
||||
break;
|
||||
case 6:
|
||||
WndStory.showChapter( WndStory.ID_PRISON );
|
||||
mapnameSlain.texture( "interfaces/mapname/prison.png" );
|
||||
mapnameSlain.show( Window.MLPD_COLOR, 0.6f, 3f );
|
||||
scene.showBanner( mapnameSlain );
|
||||
break;
|
||||
case 10:
|
||||
if((Statistics.boss_enhance & 0x2) != 0 || Statistics.mimicking) {
|
||||
|
@ -517,12 +524,21 @@ public class GameScene extends PixelScene {
|
|||
break;
|
||||
case 11:
|
||||
WndStory.showChapter( WndStory.ID_CAVES );
|
||||
mapnameSlain.texture( "interfaces/mapname/caves.png" );
|
||||
mapnameSlain.show( Window.Pink_COLOR, 0.6f, 3f );
|
||||
scene.showBanner( mapnameSlain );
|
||||
break;
|
||||
case 16:
|
||||
WndStory.showChapter( WndStory.ID_CITY );
|
||||
mapnameSlain.texture( "interfaces/mapname/dwarf.png" );
|
||||
mapnameSlain.show( Window.CBLACK, 0.6f, 3f );
|
||||
scene.showBanner( mapnameSlain );
|
||||
break;
|
||||
case 21:
|
||||
WndStory.showChapter( WndStory.ID_HALLS );
|
||||
mapnameSlain.texture( "interfaces/mapname/halls.png" );
|
||||
mapnameSlain.show( Window.RED_COLOR, 0.6f, 3f );
|
||||
scene.showBanner( mapnameSlain );
|
||||
break;
|
||||
case 26:
|
||||
WndStory.showChapter( WndStory.ID_CHAPTONEEND );
|
||||
|
|
|
@ -115,7 +115,7 @@ public class vM0_6_7_X_Changes {
|
|||
}
|
||||
|
||||
public static void add_v0_6_55_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-4", true, "");
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-6", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
|
@ -123,9 +123,18 @@ public class vM0_6_7_X_Changes {
|
|||
changes.hardlight(Window.GREEN_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.FIREFISHSWORD), ("尚方宝剑"),
|
||||
("尚方宝剑属性重新优化,并且拥有两个形态的弱切换。具体怎么切换,看你们自己探索了")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.LANTERNB), ("深度调查"),
|
||||
("娱乐模式改名为深度调查,并且追加黄金时代新娱乐模式。")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SCROLL_LAGUZ), ("升级卷轴"),
|
||||
("现在追加一个使用全部升级卷轴的按钮")));
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.DISPLAY), ("游戏内区域文本"),
|
||||
("现在每个大区有区域文本,给各位更加身临其境的感觉")));
|
||||
|
||||
Image a = new SakaFishBossSprites();
|
||||
a.scale.set(PixelScene.align(0.72f));
|
||||
changes.addButton(new ChangeButton(a, "新Boss:萨卡班甲鱼",
|
||||
|
@ -135,12 +144,24 @@ public class vM0_6_7_X_Changes {
|
|||
changes.hardlight(Window.CYELLOW);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_KCX), ("再生法杖"),
|
||||
("修复一些问题,并且可以持续使用。")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CHALLANEESICON_15), ("挑战加成"),
|
||||
("在高挑中,提灯的容量更多,商店售卖更多灯油,但灯火的每次减少可能会加剧!")));
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("支离破碎"),
|
||||
("支离破碎进行了一些怪组优化")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.GREATSHIELD), ("5阶武器"),
|
||||
("现在5阶武器生成平均化")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SAI), ("吸血鬼刀"),
|
||||
("优化数值,调整吸血权重。")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG3), ("归溯钥剑"),
|
||||
("现在只能在怪物那里获得极少经验,更多经验应该通过装备此武器后拾取钥匙吸收能量。")));
|
||||
|
||||
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_06X82")));
|
||||
|
||||
|
|
|
@ -1,21 +1,14 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.depth;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.CheckBox;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.OptionSlider;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -48,34 +41,6 @@ public class BossSettingWindows extends Window {
|
|||
icon.copy( Icons.get( checked ? Icons.CHECKED : Icons.UNCHECKED ) );
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected void onClick() {
|
||||
if(!checked){
|
||||
ShatteredPixelDungeon.scene().add(new WndOptions(new ItemSprite(ItemSpriteSheet.GOLD),
|
||||
Messages.get(BossSettingWindows.class,"bossattack"),
|
||||
Messages.get(BossSettingWindows.class,"bossgold")+((finalI+1) * (Math.max(depth / 5,
|
||||
1)) * 200 ),
|
||||
Messages.get(BossSettingWindows.class,"bug"),Messages.get(BossSettingWindows.class,
|
||||
"not_yet")) {
|
||||
@Override
|
||||
protected void onSelect(int index) {
|
||||
if (index == 0 && Dungeon.gold >= ((finalI+1) * (Math.max(depth / 5, 1)) * 200 )) {
|
||||
checked( !checked );
|
||||
Dungeon.gold -= ((finalI+1) * (Math.max(depth / 5, 1)) * 200 );
|
||||
GLog.w(Messages.get(BossSettingWindows.class,"getboss")+Messages.get(BossSettingWindows.class, "boss_"+ (finalI + 1)));
|
||||
} else if (index == 1) {
|
||||
GLog.w(Messages.get(BossSettingWindows.class, "cancal"));
|
||||
} else if (Dungeon.gold < ((finalI + 1) * (Math.max(depth / 10, 1)) * 200)) {
|
||||
GLog.w(Messages.get(BossSettingWindows.class, "no_money"));
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
checked(false);
|
||||
GLog.b(Messages.get(BossSettingWindows.class,"takenotapplic")+((finalI+1) * (Math.max(depth / 5, 1)) * 200 ));
|
||||
Dungeon.gold += ((finalI+1) * (Math.max(depth / 5, 1)) * 200 );
|
||||
}
|
||||
}
|
||||
};
|
||||
cb.setRect(GAP, pos, WIDTH - GAP * 2, BOX_HEIGHT);
|
||||
|
||||
|
@ -84,12 +49,11 @@ public class BossSettingWindows extends Window {
|
|||
cbs.add(cb);
|
||||
pos += BOX_HEIGHT + GAP;
|
||||
|
||||
//1 拟态王
|
||||
if(i == 1 && !Badges.isUnlocked(Badges.Badge.KILL_SM) || i == 0 || i==4){
|
||||
cb.alpha(0.4f);
|
||||
cb.active=false;
|
||||
cb.checked(false);
|
||||
cb.text(Messages.get(this, "boss_unselect"));
|
||||
cb.text(Messages.get(this, "boss_unselect_"+i));
|
||||
} else {
|
||||
cb.checked((Statistics.boss_enhance & (1<<i)) >0);
|
||||
cb.enable(Statistics.deepestFloor < (5+i*5));
|
||||
|
|