Complete 20.785
Update Version 20.785 Beta
This commit is contained in:
parent
b9410d1945
commit
36608726c9
|
@ -2,18 +2,38 @@
|
|||
actors.mobs.bosses.firemagicdied.name=浊焰魔女
|
||||
actors.mobs.bosses.firemagicdied.desc=曾经是翼绫的护法之一,因为大火事件被地表三巨头怀疑,逃亡到了雪凛峡谷……\n\n被当时的商人领主给收养,现在,她是雪凛峡谷的守护之神……
|
||||
actors.mobs.bosses.firemagicdied.go=%s,吾乃浊焰的化身,你必将受到正义的审判……
|
||||
actors.mobs.bosses.firemagicdied.notice=你的行为,必将受到惩罚!
|
||||
actors.mobs.bosses.firemagicdied.died=%s,你究竟是谁……
|
||||
actors.mobs.bosses.firemagicdied.!!!=审判,降临!
|
||||
actors.mobs.bosses.firemagicdied.active=你自认为能拯救一切吗?
|
||||
actors.mobs.bosses.firemagicdied.died_kill=%s,你想逃去哪里呢?
|
||||
actors.mobs.bosses.firemagicdied.buff_all=……
|
||||
actors.mobs.bosses.firemagicdied.wave_1==打败%s,为雪凛峡谷铲除邪恶
|
||||
actors.mobs.bosses.firemagicdied.wave_2==%s,你还有两下子嘛
|
||||
actors.mobs.bosses.firemagicdied.wave_3==%s,我现在可要认真了!
|
||||
actors.mobs.bosses.firemagicdied.wave_1=打败%s,为雪凛峡谷铲除邪恶
|
||||
actors.mobs.bosses.firemagicdied.wave_2=%s,你还有两下子嘛
|
||||
actors.mobs.bosses.firemagicdied.wave_3=%s,我现在可要认真了!
|
||||
actors.mobs.bosses.firemagicdied.defeated=%s,你确实是被她选中的人,现在,我已经接受你了!
|
||||
actors.mobs.bosses.firemagicdied.life=命运轮回!
|
||||
actors.mobs.bosses.firemagicdied.dead=死驱影熵!
|
||||
actors.mobs.bosses.firemagicdied.losing=……
|
||||
actors.mobs.bosses.firemagicdied.enraged=现在,你的试炼才刚刚开始!
|
||||
actors.mobs.bosses.firemagicdied.rankings_desc=在莲娜的试炼中不幸消逝……
|
||||
actors.mobs.bosses.firemagicdied$yogscanhalf.name=???
|
||||
actors.mobs.bosses.firemagicdied$yogscanhalf.rankings_desc=在莲娜的试炼中不幸消逝……
|
||||
|
||||
|
||||
items.quest.backgokey.name=回溯之书
|
||||
items.quest.backgokey.desc=当你做好准备后,便要与雪凛峡谷告别了……
|
||||
items.quest.backgokey.ac_interlevel_tp=回到地牢
|
||||
items.quest.backgokey.dead=你放弃了挑战,本局你不能继续抢劫……
|
||||
items.quest.backgokey.not=回溯之书已经彻底失去了能量,尽管雪凛峡谷还有很多秘密。但现在你已经无法回头了……,这是你在那里的唯一的纪念品。
|
||||
|
||||
actors.mobs.npcs.firemagicdiednpc.name=浊焰魔女-莲娜
|
||||
actors.mobs.npcs.firemagicdiednpc.desc=曾经是翼绫的护法之一,因为大火事件被地表三巨头怀疑,逃亡到了雪凛峡谷……\n\n被当时的商人领主给收养,现在,她是雪凛峡谷的守护之神……
|
||||
actors.mobs.npcs.firemagicdiednpc.talk_1=%s,你的战斗技巧确实让我刮目相看。
|
||||
actors.mobs.npcs.firemagicdiednpc.talk_2=不过,抢劫商店这种事情,希望你下次不要再做了。
|
||||
actors.mobs.npcs.firemagicdiednpc.talk_3=对了,我记得我的姐姐冬铃在地牢里面。如果你见到了她,务必救救她……
|
||||
actors.mobs.npcs.firemagicdiednpc.talk_4=我的话已经说完了……,拿下这些礼品吧,它会让你在旅程上更加轻松的……
|
||||
actors.mobs.npcs.firemagicdiednpc.talk_5=%s,和你刚刚决斗过后,我有一点累了…… 接下来,商人领主会告诉你后续事宜……
|
||||
|
||||
actors.mobs.npcs.null.name=???
|
||||
actors.mobs.npcs.null.desc=???
|
||||
|
@ -34,6 +54,10 @@ actors.mobs.npcs.nulldied.talk_r=商人领主:%s,接下来,就靠你自己了!
|
|||
actors.mobs.npcs.nulldied.name=商人领主
|
||||
actors.mobs.npcs.nulldied.desc=雪凛峡谷的商人领主,正是他建立了商人这个势力。
|
||||
|
||||
actors.mobs.npcs.nulldiedto.talk_x=不错,现在,是你尽情挑选商品的时间,全场200金币!
|
||||
actors.mobs.npcs.nulldiedto.name=商人领主
|
||||
actors.mobs.npcs.nulldiedto.desc=雪凛峡谷的商人领主,正是他建立了商人这个势力。
|
||||
|
||||
actors.mobs.coldgurad.name=雪凛守卫
|
||||
actors.mobs.coldgurad.scorpion=给我过来!
|
||||
actors.mobs.coldgurad.def_verb=魔盾
|
||||
|
@ -52,8 +76,8 @@ actors.buffs.watersoulx.desc=水灵的祝福已经在你身上,现在你可以
|
|||
actors.mobs.lb.blacksoul.name=暗影
|
||||
actors.mobs.lb.blacksoul.desc=由于重生十字架的缘故,因此你再次重生了。但你先前的东西都被自己的暗影亡魂夺走了,杀死它,夺回自己的一切!
|
||||
|
||||
actors.mobs.bosses.crystaldiedtower.name=神秘结晶-寒冰形态
|
||||
actors.mobs.bosses.crystaldiedtower.desc_inactive=来自于雪凛峡谷商人总部的神秘结晶,据说拥有_冰_与Γ火Γ的两个形态。它会让不是属于这里的入侵者感受Γ冰火两重天的滋味Γ。\n\n当前神秘结晶尚未被激活,若激活后将持续攻击目标并施加✦寒冷✦损伤,寒冷阈值达到一定程度,目标将受到一定的✦百分比真实伤害✦
|
||||
actors.mobs.bosses.crystaldiedtower.name=神秘结晶
|
||||
actors.mobs.bosses.crystaldiedtower.desc=来自于雪凛峡谷商人总部的神秘结晶……,据说激活后十分危险!
|
||||
|
||||
|
||||
text.herostat.hunger = 饥饿
|
||||
|
|
|
@ -5,6 +5,7 @@ items.artifacts.wraithamulet.ac_ghost=遁入虚无
|
|||
items.artifacts.wraithamulet.ac_darkkill=暗夜袭击
|
||||
|
||||
items.food.pasty.moon=月饼
|
||||
items.food.pasty.moonling=月饼的味道让你回味无穷,你感到十分畅快。
|
||||
items.food.pasty.moon_desc=月饼象征着团圆美满,吃下这佳节诞生的产物,危险的地牢也在中秋节洋溢着快乐的气氛。中秋节快乐,%s!
|
||||
|
||||
items.scrolls.exotic.scrollofpolymorph.name=羊化秘卷
|
||||
|
@ -608,6 +609,7 @@ items.artifacts.etherealchains.desc=这些巨大但轻盈的锁链散发着灵
|
|||
items.artifacts.etherealchains.desc_cursed=被诅咒的锁链将自己锁在了你的身边,不断地在周围晃动,试图绊倒或绑住你。
|
||||
items.artifacts.etherealchains.desc_equipped=锁链围绕在你的身边,缓慢地收集被你击败者的精神能量。每一发充能都是锁链中的一环,每一个环节都能正好延长一格。
|
||||
items.artifacts.etherealchains$chainsrecharge.levelup=你的锁链变得更强大了!
|
||||
items.artifacts.etherealchains.strmagic=这里奇异的魔力流抑制了锁链的能力……
|
||||
|
||||
items.artifacts.hornofplenty.name=丰饶之角
|
||||
items.artifacts.hornofplenty.ac_snack=小吃一口
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
###features
|
||||
levels.features.chasm.chasm=深渊
|
||||
levels.features.chasm.name=深渊
|
||||
levels.features.chasm.yes=是的,我知道我在做什么
|
||||
levels.features.chasm.no=不,我改主意了
|
||||
levels.features.chasm.jump=你确定要跳入洞口中?从这么高的地方摔下去一定很疼。
|
||||
|
|
|
@ -112,7 +112,7 @@ challenges.champion_enemies_desc=会升级的不止你一个!\n\n・普通敌
|
|||
的机率拥有特殊的精英属性。\n・精英敌人刷出时会立即醒来。\n・精英敌人免疫腐化效果。\n\n精英敌人有七种:\n_烈焰(橙色):_ 近战伤害 \
|
||||
+25% 且带有点燃效果,免疫火焰,死亡时引燃周围。\n_索敌(紫色):_ 近战伤害 +25%,近战范围 +8。\n_敌法(绿色):_ 受到伤害 -25%,拥有魔法免疫。\n_巨型(蓝色):_ 受到伤害 -75%,近战范围 +1,无法进入门与过道。\n_祝福(黄色):_ 精准与躲避 +200%。\n_成长(红色):_ 精准、躲避、攻击伤害与有效生命值 +20%。每过 3 回合会再增长 1%。\n_鬼磷(天蓝色):_ 近战伤害 +65% 且带有磷火效果,免疫火焰与磷火,死亡时引燃周围。
|
||||
challenges.stronger_bosses=Π梦魇Boss
|
||||
challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_粘咕:_生命值 +20%\n_-_ 水中恢复量增长,每回合恢复 6 点生命\n_-_ 爆发攻击蓄力时间由 2 回合缩短至 1 回合\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_-_ 召唤更强大的随从\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
|
||||
challenges.stronger_bosses_desc=这项挑战让挑战 Boss 变得更有挑战性了!\n\n_粘咕:_生命值 +20%\n_-_ 水中恢复量增长,每回合恢复 6 点生命\n_-_ 爆发攻击蓄力时间由 2 回合缩短至 1 回合\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开局_几乎是全物品_!同时,你将无法通关!
|
||||
|
@ -139,3 +139,5 @@ dlc.bossrush_desc=被你击败过多次的首领们熟识了英雄的技能,
|
|||
dlc.back_go=逆流而上
|
||||
dlc.back_go_desc=颠倒的一次的冒险,你能顺利离开这里吗?5大固定Boss则是在最终楼层出现。
|
||||
|
||||
ld=\n_冰雪魔女:_\n_-_生命+25%\n_-_ 水中召唤的仆从更多\n-击败时必定掉落紫金宝石护符\n_矮人大师:_\n_-_ 致命技能更加频繁\n_-_ 生命值+50%\n-击败时必定掉落自然神圣护符\n_史莱姆王:_\n_-_ 生命值+100%\n_-_ 伤害更高,速度更快\n_-_ 在开局额外召唤豺狼诡术师,巨钳螃蟹,腐臭老鼠,蚀化史莱姆\n_-_ 击败时必定掉落凝胶手套\n_DM720:_\n_-_ 获得全新技能\n_-_ 击败时必定掉落DM150控制终端[尚未完成]
|
||||
|
||||
|
|
|
@ -461,4 +461,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x24=-1.修复了DM300闪退的问题\
|
|||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x25=-1.修复了DM720闪退的问题\n-2.修复了盗贼蝙蝠无限召唤的问题\n-3.修复了矮人大师召唤异常的问题\n-4.修复开发者模式降级变玩家的问题
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x26=-1.修复了影子盗贼的崩溃问题\n-2.修复了矮人大师楼层生成的问题
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x28=-1.修复了矮人大师的问题\n-2.修复了部分楼层的错误生成
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -2,6 +2,12 @@ windows.textchallenges.seed_custom_title = 种子
|
|||
windows.textchallenges.hint = 不输入即为随机种子
|
||||
windows.textchallenges.delete_seed_input = 清除
|
||||
|
||||
windows.wndkingshop.buy=购买
|
||||
windows.wndkingshop.cancel=取消
|
||||
windows.wndkingshop.king=商人领主
|
||||
windows.wndkingshop.select=干得漂亮,你已经让莲娜对你刮目相看。作为报答,全场200金币售价!(如果没有物品请随处走走,我补个货)
|
||||
windows.wndkingshop.sellmod=出售物品
|
||||
|
||||
windows.wndshopking.szo=商人领主
|
||||
windows.wndshopking.ary=你已经准备好直面我们的守护神了吗?
|
||||
windows.wndshopking.yes=是的
|
||||
|
@ -354,6 +360,7 @@ windows.wndstory.new=在击败了Yog古神后,似乎一切变得平静下来
|
|||
|
||||
windows.wndstory.forest=300年前,一场大火让这个地牢不复存在。地牢的创始人:翼绫也不见踪影。\n\n300年后,随着地牢原住民对地牢的维修和重建,地牢渐渐的有了生机。\n特别是和矮人他们共同从300年的灾难逃出来的古神YOG,是让地牢重新振兴的核心人员。\n随着时间的推移,YOG他们有了一个疯狂的想法,并将这个想法交给了地表三巨头。\n霜落女帝当即批准该建议,并发布猎杀的悬赏令。\n然而,人人都知道亵渎她的后果,可仍然顶风作案。\n你也是参与的一员,你现在来到了地牢的入口,现在,开始你的旅途了。
|
||||
windows.wndtradeitem.stole=抢劫商店
|
||||
windows.wndtradeitem.oks=进行对话
|
||||
windows.wndstory.dm920=Yog-Dzewa的陨落,其实背后有太多的秘密。\nYog的后面,是一个连Yog都害怕的一个DM终极实验品,\n它是造成矮人国度堕落的元凶,它是灾难的象征!!!\n它是曾经的死灵军团的杀手锏,它是死亡的代言词!!!\n它是连Yog-Dzewa都要敬畏它三分的DM920,\n你需直面,你不可逃避,你的路途就是为此而来。\n已经没有退路,唯有放手一搏,无论它是真是假!!!\n但你明白,不击败他,死的就只能是自己!!!
|
||||
|
||||
windows.wndgoshop.szo=地牢商人
|
||||
|
@ -361,6 +368,9 @@ windows.wndgoshop.ary=哦,我注意到你对我的东西蠢蠢欲动。如果
|
|||
windows.wndgoshop.yes=抢劫
|
||||
windows.wndgoshop.no=放弃
|
||||
windows.wndgoshop.notbad=好吧,我以为你想抢劫商店的……
|
||||
windows.wndgoshop.bad=商人:%s,你选择了逃离雪凛峡谷,因此你是失败者!
|
||||
windows.wndgoshop.ots=莲娜已经通过心灵感应告诉我一切了,现在这里的东西全部是你的了。\n\n不过,我要回雪凛峡谷一趟,后面的路程,我不会再次出现!
|
||||
windows.wndgoshop.ok=索取
|
||||
|
||||
windows.wndstory.drawfmaster=庄严的大厅,死寂的环境。\n\n这里曾经是矮人王国的最大议事厅,而如今的死寂恐怖气氛却令这里显得十分诡异。\n\n并且这里似乎机关重重……\n有一个破旧不堪的石碑依稀的写着不要踏入这里,裂缝会变为地板,大将将会醒来……\n这在预示着什么?
|
||||
|
||||
|
|
Binary file not shown.
|
@ -49,6 +49,10 @@ public class Statistics {
|
|||
public static boolean completedWithNoKilling = false;
|
||||
|
||||
public static boolean amuletObtained = false;
|
||||
|
||||
public static boolean fireGirlnoshopping = false;
|
||||
|
||||
public static boolean deadshoppingdied = false;
|
||||
|
||||
public static void reset() {
|
||||
|
||||
|
@ -71,6 +75,10 @@ public class Statistics {
|
|||
qualifiedForNoKilling = false;
|
||||
|
||||
amuletObtained = false;
|
||||
|
||||
fireGirlnoshopping = false;
|
||||
|
||||
deadshoppingdied = false;
|
||||
|
||||
}
|
||||
|
||||
|
@ -94,6 +102,11 @@ public class Statistics {
|
|||
|
||||
private static final String AMULET = "amuletObtained";
|
||||
|
||||
//浊焰契约
|
||||
private static final String NOSHOPPING = "fireGirlnoshopping";
|
||||
|
||||
private static final String SHOPPINGDIED = "deadshoppingdied";
|
||||
|
||||
private static final String EXLEVEL = "Exlevel";
|
||||
|
||||
public static void storeInBundle( Bundle bundle ) {
|
||||
|
@ -116,6 +129,10 @@ public class Statistics {
|
|||
bundle.put(NO_KILLING_QUALIFIED, qualifiedForNoKilling);
|
||||
|
||||
bundle.put( AMULET, amuletObtained );
|
||||
|
||||
bundle.put( NOSHOPPING, fireGirlnoshopping );
|
||||
|
||||
bundle.put( SHOPPINGDIED, deadshoppingdied );
|
||||
}
|
||||
|
||||
public static void restoreFromBundle( Bundle bundle ) {
|
||||
|
@ -138,6 +155,9 @@ public class Statistics {
|
|||
qualifiedForNoKilling = bundle.getBoolean( NO_KILLING_QUALIFIED );
|
||||
|
||||
amuletObtained = bundle.getBoolean( AMULET );
|
||||
|
||||
fireGirlnoshopping = bundle.getBoolean( NOSHOPPING );
|
||||
deadshoppingdied = bundle.getBoolean( SHOPPINGDIED );
|
||||
}
|
||||
|
||||
public static void preview( GamesInProgress.Info info, Bundle bundle ){
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
public class ShopLimitLock extends Buff {
|
||||
|
||||
{
|
||||
type = buffType.POSITIVE;
|
||||
}
|
||||
|
||||
public static int level = 0;
|
||||
private int interval = 1;
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
if (target.isAlive()) {
|
||||
|
||||
spend(interval);
|
||||
if (level == 0) {
|
||||
detach();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int level() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void set( int value, int time ) {
|
||||
//decide whether to override, preferring high value + low interval
|
||||
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
|
||||
level = value;
|
||||
interval = time;
|
||||
spend(time - cooldown() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float iconFadePercent() {
|
||||
if (target instanceof Hero){
|
||||
float max = ((Hero) target).lvl;
|
||||
return Math.max(0, (max-level)/max);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
|
||||
}
|
||||
|
||||
private static final String LEVEL = "level";
|
||||
private static final String INTERVAL = "interval";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
super.storeInBundle( bundle );
|
||||
bundle.put( INTERVAL, interval );
|
||||
bundle.put( LEVEL, level );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
super.restoreFromBundle( bundle );
|
||||
interval = bundle.getInt( INTERVAL );
|
||||
level = bundle.getInt( LEVEL );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1748,7 +1748,8 @@ public class Hero extends Char {
|
|||
ankh = i;
|
||||
}
|
||||
}
|
||||
if(Dungeon.isChallenged(LIGHTBLACK)){
|
||||
|
||||
if(Dungeon.isChallenged(LIGHTBLACK)) {
|
||||
BlackSoul s = new BlackSoul();
|
||||
s.pos = Dungeon.hero.pos;
|
||||
s.gold = Dungeon.gold;
|
||||
|
@ -1759,7 +1760,9 @@ public class Hero extends Char {
|
|||
Buff.affect(s, DeadSoul.class);
|
||||
GameScene.flash(0x80FF0000);
|
||||
}
|
||||
if (ankh != null) {
|
||||
if(Statistics.fireGirlnoshopping){
|
||||
reallyDie( cause );
|
||||
} else if (ankh != null) {
|
||||
interrupt();
|
||||
resting = false;
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.BookBag;
|
||||
|
@ -180,7 +181,7 @@ public enum HeroClass {
|
|||
new PotionOfPurity().quantity(45).identify().collect();
|
||||
Buff.affect(hero, ChampionHero.AntiMagic.class, 1234567890f);
|
||||
new AlchemicalCatalyst().quantity(45).identify().collect();
|
||||
|
||||
new EtherealChains().quantity(1).identify().collect();
|
||||
new ScrollOfIdentify().quantity(45).identify().collect();
|
||||
new ScrollOfTransmutation().quantity(45).identify().collect();
|
||||
new BeaconOfReturning().quantity(11).identify().collect();
|
||||
|
|
|
@ -155,7 +155,7 @@ public class MagicGirlDead extends Boss {
|
|||
for (Buff buff : hero.buffs()) {
|
||||
if (buff instanceof RoseShiled) {
|
||||
buff.detach();
|
||||
GLog.b("玫瑰结界的创始人是翼绫,你怎么敢用她的技能?/kill @e[type=RoseShiled] enemy!");
|
||||
GLog.b("玫瑰结界的创始人是翼绫,你怎么敢用她的技能?");
|
||||
}
|
||||
if (buff instanceof HaloFireImBlue ||buff instanceof FireImbue) {
|
||||
buff.detach();
|
||||
|
|
|
@ -20,7 +20,7 @@ public class CrystalDiedTower extends Mob {
|
|||
{
|
||||
spriteClass = IceStalSprites.class;
|
||||
|
||||
HP = HT = 150;
|
||||
HP = HT = 1;
|
||||
|
||||
properties.add(Property.MINIBOSS);
|
||||
properties.add(Property.INORGANIC);
|
||||
|
@ -30,6 +30,14 @@ public class CrystalDiedTower extends Mob {
|
|||
state = HUNTING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage( int dmg, Object src ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add( Buff buff ) {
|
||||
}
|
||||
|
||||
protected enum State{
|
||||
PREPARING, AIMING, SHOOTING
|
||||
}
|
||||
|
|
|
@ -9,22 +9,18 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArcaneArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.BeamTowerAdbility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HaloFireImBlue;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.HalomethaneBurning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LifeLink;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RoseShiled;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ShopLimitLock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdGurad;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FireGhost;
|
||||
|
@ -49,7 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EnergyParticle
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ScanningBeam;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.BackGoKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.ShopBossLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
|
@ -61,6 +57,7 @@ import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -88,6 +85,8 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
properties.add(Property.ACIDIC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private int pumpedUp = 0;
|
||||
private int healInc = 1;
|
||||
|
||||
|
@ -408,10 +407,10 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
|
||||
} else if (phase == 2){
|
||||
if (summonSubject(2)) summonsMade++;
|
||||
} else if (phase == 3 && buffs(DwarfMaster.Summoning.class).size() < 4){
|
||||
actPhaseTwoSummon();
|
||||
return true;
|
||||
} else if (phase == 3 && buffs(DwarfMaster.Summoning.class).size() < 4){
|
||||
if (summonSubject(2)) summonsMade++;
|
||||
}
|
||||
actScanning();
|
||||
if (Dungeon.level.water[pos] && HP < HT) {
|
||||
|
@ -468,7 +467,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
lastAbility = bundle.getInt( LAST_ABILITY );
|
||||
wave = bundle.getInt("wavePhase2");
|
||||
|
||||
if (phase == 2) properties.add(Property.IMMOVABLE);
|
||||
if (phase == 3) properties.add(Property.IMMOVABLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -557,7 +556,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
damage = super.attackProc( enemy, damage );
|
||||
if(HP > 400){
|
||||
if (Random.Int( 3 ) == 0) {
|
||||
Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
|
||||
Buff.affect( hero, HalomethaneBurning.class ).reignite( hero, 7f );
|
||||
enemy.sprite.burst( 0x000000, 5 );
|
||||
}
|
||||
} else {
|
||||
|
@ -618,10 +617,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "!!!") );
|
||||
}
|
||||
|
||||
if(HP > 520 && pumpedUp >= 3){
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "active") );
|
||||
}
|
||||
|
||||
spend( attackDelay() );
|
||||
|
||||
return true;
|
||||
|
@ -648,10 +643,9 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
public void damage(int dmg, Object src) {
|
||||
if (!BossHealthBar.isAssigned()){
|
||||
BossHealthBar.assignBoss( this );
|
||||
Dungeon.level.seal();
|
||||
}
|
||||
boolean bleeding = (HP*2 <= HT);
|
||||
super.damage(dmg, src);
|
||||
|
||||
if ((HP*2 <= HT) && !bleeding){
|
||||
BossHealthBar.bleed(true);
|
||||
///sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "enraged"));
|
||||
|
@ -661,21 +655,20 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.addTime(dmg*2);
|
||||
|
||||
if (phase == 1) {
|
||||
super.damage(dmg, src);
|
||||
|
||||
if (phase == 1) {
|
||||
int dmgTaken = preHP - HP;
|
||||
abilityCooldown -= dmgTaken/8f;
|
||||
summonCooldown -= dmgTaken/8f;
|
||||
if (HP <= 400 && phase == 1) {
|
||||
actPhaseTwoSummon();
|
||||
actScanning();
|
||||
sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable"));
|
||||
for (int i : CryStalPosition) {
|
||||
Buff.append(hero, BeamTowerAdbility.class).towerPos = i;
|
||||
}
|
||||
ScrollOfTeleportation.appear(this, ShopBossLevel.thronex);
|
||||
properties.add(Property.IMMOVABLE);
|
||||
sprite.centerEmitter().start( Speck.factory( Speck.SCREAM ), 0.4f, 2 );
|
||||
Sample.INSTANCE.play( Assets.Sounds.CHALLENGE );
|
||||
phase = 2;
|
||||
summonsMade = 0;
|
||||
sprite.idle();
|
||||
Buff.affect(this, DwarfMaster.DKBarrior.class).setShield(12*25);
|
||||
Char enemy = (this.enemy == null ? Dungeon.hero : this.enemy);
|
||||
int w = Dungeon.level.width();
|
||||
int dx = enemy.pos % w - pos % w;
|
||||
|
@ -687,16 +680,23 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
sprite.showStatus(0xff0000, Messages.get(this, "dead"));
|
||||
}
|
||||
} else if (phase == 2 && shielding() == 0 && HP <= 300) {
|
||||
for (int i : CryStalPosition) {
|
||||
Buff.append(hero, BeamTowerAdbility.class).towerPos = i;
|
||||
}
|
||||
ScrollOfTeleportation.appear(this, ShopBossLevel.throneling);
|
||||
properties.remove(Property.IMMOVABLE);
|
||||
sprite.centerEmitter().start( Speck.factory( Speck.SCREAM ), 0.4f, 2 );
|
||||
Sample.INSTANCE.play( Assets.Sounds.CHALLENGE );
|
||||
phase = 3;
|
||||
actPhaseTwoSummon();
|
||||
yell( Messages.get(this, "enraged", Dungeon.hero.name()) );
|
||||
Buff.detach(this, DwarfMaster.SacrificeSubjectListener.class);
|
||||
for (Buff buff : hero.buffs()) {
|
||||
if (buff instanceof FireMagicDied.KingDamager) {
|
||||
buff.detach();
|
||||
}
|
||||
}
|
||||
properties.remove(Property.IMMOVABLE);
|
||||
actScanning();
|
||||
sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable"));
|
||||
ScrollOfTeleportation.appear(this, ShopBossLevel.throneling);
|
||||
properties.add(Property.IMMOVABLE);
|
||||
phase = 3;
|
||||
summonsMade = 0;
|
||||
sprite.idle();
|
||||
Buff.affect(this, DwarfMaster.DKBarrior.class).setShield(12*25);
|
||||
Char enemy = (this.enemy == null ? Dungeon.hero : this.enemy);
|
||||
int w = Dungeon.level.width();
|
||||
int dx = enemy.pos % w - pos % w;
|
||||
|
@ -706,6 +706,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
Buff.affect(this, FireMagicDied.YogScanHalf.class).setPos(pos, direction);
|
||||
beamCD = 40 + 8 - (phase == 10 ? 38 : 0);
|
||||
sprite.showStatus(0xff0000, Messages.get(this, "dead"));
|
||||
|
||||
} else if (phase == 3 && preHP > 50 && HP <= 50){
|
||||
yell( Messages.get(this, "losing") );
|
||||
}
|
||||
|
@ -721,11 +722,11 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
public void die( Object cause ) {
|
||||
|
||||
super.die( cause );
|
||||
|
||||
Dungeon.level.drop(new BackGoKey().quantity(1).identify(), pos).sprite.drop();
|
||||
Dungeon.level.unseal();
|
||||
|
||||
Buff.affect(hero, ShopLimitLock.class).set((1), 1);
|
||||
for (Mob mob : (Iterable<Mob>)Dungeon.level.mobs.clone()) {
|
||||
if (mob != null) {
|
||||
if (mob instanceof FireMagicDied.ColdGuradA || mob instanceof MolotovHuntsman ||mob instanceof Skeleton||mob instanceof CrystalDiedTower||mob instanceof DM100) {
|
||||
mob.die( cause );
|
||||
}
|
||||
}
|
||||
|
@ -746,14 +747,10 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
@Override
|
||||
public void notice() {
|
||||
super.notice();
|
||||
if (!BossHealthBar.isAssigned()) {
|
||||
BossHealthBar.assignBoss(this);
|
||||
for (Char ch : Actor.chars()){
|
||||
if (ch instanceof DriedRose.GhostHero){
|
||||
((DriedRose.GhostHero) ch).sayBoss();
|
||||
}
|
||||
}
|
||||
}
|
||||
BossHealthBar.assignBoss(this);
|
||||
Music.INSTANCE.play(Assets.BGM_FRBOSS, true);
|
||||
yell( Messages.get(this, "notice") );
|
||||
//summon();
|
||||
}
|
||||
|
||||
private final String PUMPEDUP = "pumpedup";
|
||||
|
@ -870,7 +867,8 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
@Override
|
||||
public int onHitProc(Char ch) {
|
||||
if(ch.alignment == Alignment.ENEMY) return 0;
|
||||
ch.damage( Random.Int(10, 20), YogReal.class );
|
||||
ch.damage( Random.Int(15, 30), YogReal.class );
|
||||
Buff.affect( hero, HalomethaneBurning.class ).reignite( hero, 7f );
|
||||
if(ch == Dungeon.hero){
|
||||
Sample.INSTANCE.play(Assets.Sounds.BLAST, Random.Float(1.1f, 1.5f));
|
||||
if(!ch.isAlive()) Dungeon.fail(getClass());
|
||||
|
@ -889,7 +887,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
}
|
||||
|
||||
public static class Summoning extends Buff {
|
||||
public class Summoning extends Buff {
|
||||
|
||||
private int delay;
|
||||
private int pos;
|
||||
|
@ -905,20 +903,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
public boolean act() {
|
||||
delay--;
|
||||
if (delay <= 0){
|
||||
for (Buff buff : hero.buffs()) {
|
||||
if (buff instanceof RoseShiled) {
|
||||
buff.detach();
|
||||
GLog.b(Messages.get(FireMagicDied.class,"no_rose"));
|
||||
}
|
||||
if (buff instanceof HaloFireImBlue ||buff instanceof FireImbue) {
|
||||
buff.detach();
|
||||
GLog.w(Messages.get(FireMagicDied.class,"no_fire"));
|
||||
}
|
||||
if (buff instanceof Invisibility) {
|
||||
buff.detach();
|
||||
GLog.p(Messages.get(FireMagicDied.class,"no_inst"));
|
||||
}
|
||||
}
|
||||
if (summon == FireMagicDied.ColdGuradA.class){
|
||||
particles.burst(ShadowParticle.CURSE, 10);
|
||||
Sample.INSTANCE.play(Assets.Sounds.CURSED);
|
||||
|
@ -953,9 +937,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
Buff.affect(m, FireMagicDied.KingDamager.class);
|
||||
}
|
||||
} else {
|
||||
Char ch = Actor.findChar(pos);
|
||||
ch.damage(Random.NormalIntRange(20, 40), summon);
|
||||
if (((FireMagicDied)target).phase == 2){
|
||||
if (((FireMagicDied)target).phase == 2 && HP > 300){
|
||||
target.damage(20, new FireMagicDied.KingDamager());
|
||||
}
|
||||
}
|
||||
|
@ -1021,11 +1003,11 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
//4th summon is always a monk or warlock, otherwise ghoul
|
||||
//4 1n 13 are monks/warlocks
|
||||
if (summonsMade % 13 == 7 || summonsMade % 13 == 11) {
|
||||
return summonSubject(delay, DwarfMaster.DKMonk.class );
|
||||
return summonSubject(delay, FireMagicDied.ColdGuradA.class );
|
||||
} else if(summonsMade % 13 == 5 || summonsMade % 13 == 12) {
|
||||
return summonSubject(delay, DwarfMaster.DKWarlock.class);
|
||||
return summonSubject(delay, FireMagicDied.ColdGuradB.class);
|
||||
}else{
|
||||
return summonSubject(delay, DwarfMaster.DKGhoul.class);
|
||||
return summonSubject(delay, FireMagicDied.ColdGuradC.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1050,16 +1032,21 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
Buff.affect(this, FireMagicDied.YogScanHalf.class).setPos(pos, direction);
|
||||
beamCD = 20 + 8 - (phase == 5 ? 19 : 0);
|
||||
ScrollOfTeleportation.appear(hero, ShopBossLevel.throne);
|
||||
GLog.n(Messages.get(this, "active") );
|
||||
spend(TICK*12);
|
||||
}else if(wave == 2){
|
||||
summonSubject(1, FireMagicDied.ColdGuradA.class);
|
||||
summonSubject(2, FireMagicDied.ColdGuradC.class);
|
||||
summonSubject(6, FireMagicDied.ColdGuradA.class);
|
||||
summonSubject(6, FireMagicDied.ColdGuradA.class);
|
||||
ScrollOfTeleportation.appear(hero, ShopBossLevel.throne);
|
||||
GLog.n(Messages.get(this, "active") );
|
||||
++wave;
|
||||
spend(TICK*15);
|
||||
}else if(wave == 3){
|
||||
yell(Messages.get(this, "wave_2",Dungeon.hero.name()));
|
||||
ScrollOfTeleportation.appear(hero, ShopBossLevel.throne);
|
||||
GLog.n(Messages.get(this, "active") );
|
||||
//Eye.spawnAround(pos);
|
||||
summonSubject(1, FireMagicDied.ColdGuradA.class);
|
||||
summonSubject(2, FireMagicDied.ColdGuradC.class);
|
||||
|
@ -1085,11 +1072,12 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
spend(TICK*14);
|
||||
}else if(wave == 5){
|
||||
yell(Messages.get(this,"wave_3",Dungeon.hero.name()));
|
||||
ScrollOfTeleportation.appear(hero, ShopBossLevel.throne);
|
||||
GLog.n(Messages.get(this, "active") );
|
||||
summonSubject(2, FireMagicDied.ColdGuradA.class);
|
||||
summonSubject(2, FireMagicDied.ColdGuradB.class);
|
||||
summonSubject(2, FireMagicDied.ColdGuradC.class);
|
||||
Buff.affect(this, Haste.class, 5f);
|
||||
Buff.affect(this, Healing.class).setHeal(20, 0f, 6);
|
||||
Char enemy = (this.enemy == null ? Dungeon.hero : this.enemy);
|
||||
int w = Dungeon.level.width();
|
||||
int dx = enemy.pos % w - pos % w;
|
||||
|
@ -1106,10 +1094,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
summonSubject(3, FireMagicDied.ColdGuradB.class);
|
||||
summonSubject(3, FireMagicDied.ColdGuradB.class);
|
||||
summonSubject(2, FireMagicDied.ColdGuradC.class);
|
||||
Buff.affect(this, RoseShiled.class, 20f);
|
||||
Buff.affect(this, Haste.class, 5f);
|
||||
Buff.affect(this, ArcaneArmor.class).set(Dungeon.hero.lvl + 10, 10);
|
||||
Buff.affect(this, Healing.class).setHeal(20, 0f, 6);
|
||||
++wave;
|
||||
spend(TICK*12);
|
||||
}else{
|
||||
|
@ -1182,7 +1166,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
}
|
||||
}
|
||||
|
||||
public static class ColdGuradC extends MolotovHuntsman {
|
||||
public static class ColdGuradC extends SRPDICLRPRO {
|
||||
{
|
||||
state = HUNTING;
|
||||
immunities.add(Corruption.class);
|
||||
|
@ -1219,11 +1203,11 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
public void detach() {
|
||||
super.detach();
|
||||
for (Mob m : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if (m instanceof FireMagicDied){
|
||||
m.damage(20, this);
|
||||
}
|
||||
if (m instanceof FireMagicDied ){
|
||||
m.damage(20, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FireMagicGirlSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class FireMagicDiedNPC extends NTNPC {
|
||||
|
||||
private static final String FIRST = "first";
|
||||
private boolean xfirst=true;
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(FIRST, xfirst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
xfirst = bundle.getBoolean(FIRST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean interact(Char c) {
|
||||
sprite.turnTo( pos, hero.pos );
|
||||
if(xfirst){
|
||||
WndQuest.chating(this,chat);
|
||||
xfirst=false;
|
||||
}else {
|
||||
GLog.n( Messages.get(FireMagicDiedNPC.class, "talk_5", Dungeon.hero.name()) );
|
||||
//Buff.affect(hero, TestDwarfMasterLock.class).set((1), 1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
{
|
||||
spriteClass = FireMagicGirlSprite.class;
|
||||
|
||||
chat = new ArrayList<String>() {
|
||||
{
|
||||
add(Messages.get(FireMagicDiedNPC.class, "talk_1", Dungeon.hero.name()));
|
||||
add(Messages.get(FireMagicDiedNPC.class, "talk_2"));
|
||||
add(Messages.get(FireMagicDiedNPC.class, "talk_3"));
|
||||
add(Messages.get(FireMagicDiedNPC.class, "talk_4"));
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EnergyParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Firebomb;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FrostBomb;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHaste;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndKingShop;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class NullDiedTO extends NTNPC {
|
||||
|
||||
private static final String FIRST = "first";
|
||||
private boolean first=true;
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(FIRST, first);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
first = bundle.getBoolean(FIRST);
|
||||
}
|
||||
|
||||
public void flee() {
|
||||
destroy();
|
||||
Dungeon.level.seal();
|
||||
Music.INSTANCE.play(Assets.BGM_FRBOSS, true);
|
||||
GameScene.flash(0x8000FFFF);
|
||||
sprite.killAndErase();
|
||||
CellEmitter.get( pos ).burst(SnowParticle.FACTORY, 6 );
|
||||
CellEmitter.get( pos ).burst(EnergyParticle.FACTORY, 6 );
|
||||
}
|
||||
|
||||
|
||||
protected boolean act() {
|
||||
sprite.turnTo( pos, Dungeon.hero.pos );
|
||||
spend( TICK );
|
||||
|
||||
shop6 = Generator.randomUsingDefaults( Generator.Category.ARMOR );
|
||||
shop5 = Generator.randomUsingDefaults( Generator.Category.RING );
|
||||
shop4 = new MeatPie();
|
||||
shop3 = new Pasty();
|
||||
shop2 = new ScrollOfIdentify();
|
||||
shop1 = new PotionOfHealing();
|
||||
|
||||
shop7 = new PotionOfHaste();
|
||||
shop8 = new ScrollOfRemoveCurse();
|
||||
shop9 = Generator.randomUsingDefaults( Generator.Category.WEP_T5 );
|
||||
shop10 = Generator.randomUsingDefaults( Generator.Category.WEP_T3 );
|
||||
shop11 = (Bomb) new Firebomb().quantity(1);
|
||||
shop12 = (Bomb) new FrostBomb().quantity(1);
|
||||
throwItem();
|
||||
return NullDiedTO.super.act();
|
||||
}
|
||||
|
||||
public static Potion shop1;
|
||||
public static Scroll shop2;
|
||||
public static Food shop3;
|
||||
public static Food shop4;
|
||||
public static Item shop5;
|
||||
public static Item shop6;
|
||||
|
||||
public static Potion shop7;
|
||||
public static Scroll shop8;
|
||||
public static Item shop9;
|
||||
public static Item shop10;
|
||||
public static Bomb shop11;
|
||||
public static Bomb shop12;
|
||||
|
||||
@Override
|
||||
public boolean interact(Char c) {
|
||||
sprite.turnTo( pos, Dungeon.hero.pos );
|
||||
if(first){
|
||||
WndQuest.chating(this,chat);
|
||||
first=false;
|
||||
}else {
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
GameScene.show(new WndKingShop());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
{
|
||||
spriteClass = ShopkKingSprite.class;
|
||||
|
||||
chat = new ArrayList<String>() {
|
||||
{
|
||||
add(Messages.get(NullDiedTO.class, "talk_x"));
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -23,17 +23,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.MoloHR;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ShopGuard;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ShopGuardEye;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
|
@ -46,11 +37,8 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkeeperSprite;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class Shopkeeper extends NPC {
|
||||
|
||||
|
@ -155,53 +143,8 @@ public class Shopkeeper extends NPC {
|
|||
public void flee() {
|
||||
destroy();
|
||||
CellEmitter.get(pos).burst(ElmoParticle.FACTORY, 6);
|
||||
Sample.INSTANCE.play(Assets.Sounds.ALERT);
|
||||
Music.INSTANCE.play(Assets.RUN, true);
|
||||
hero.sprite.burst(15597568, 9);
|
||||
sprite.killAndErase();
|
||||
Buff.prolong(Dungeon.hero, Blindness.class, Blindness.DURATION * 4f);
|
||||
GameScene.flash(0x80FFFFFF);
|
||||
Buff.affect(hero, Burning.class).reignite(hero, 15f);
|
||||
Dungeon.level.seal();
|
||||
Mob moa = new MoloHR();
|
||||
moa.pos = pos;
|
||||
GameScene.add(moa);
|
||||
yell(Messages.get(this, "arise"));
|
||||
new ShopGuardEye().spawnAround(pos);
|
||||
new ShopGuard().spawnAround(pos);
|
||||
Buff.affect(moa, ChampionEnemy.Growing.class);
|
||||
Buff.affect(moa, ChampionEnemy.Projecting.class);
|
||||
Buff.affect(moa, ChampionEnemy.AntiMagic.class);
|
||||
Buff.affect(moa, ChampionEnemy.Giant.class);
|
||||
Buff.affect(moa, ChampionEnemy.Blessed.class);
|
||||
Buff.affect(moa, ChampionEnemy.Halo.class);
|
||||
for (Mob mob : Dungeon.level.mobs) {
|
||||
switch (Random.Int(7)) {
|
||||
case 0:
|
||||
default:
|
||||
Buff.affect(mob, ChampionEnemy.Blazing.class);
|
||||
break;
|
||||
case 1:
|
||||
Buff.affect(mob, ChampionEnemy.Projecting.class);
|
||||
break;
|
||||
case 2:
|
||||
Buff.affect(mob, ChampionEnemy.AntiMagic.class);
|
||||
break;
|
||||
case 3:
|
||||
Buff.affect(mob, ChampionEnemy.Giant.class);
|
||||
break;
|
||||
case 4:
|
||||
Buff.affect(mob, ChampionEnemy.Blessed.class);
|
||||
break;
|
||||
case 5:
|
||||
Buff.affect(mob, ChampionEnemy.Growing.class);
|
||||
break;
|
||||
case 6:
|
||||
Buff.affect(mob, ChampionEnemy.Halo.class);
|
||||
break;
|
||||
}
|
||||
}
|
||||
yell(Messages.get(this, "dead"));
|
||||
}
|
||||
private DriedRose.GhostHero ghost = null;
|
||||
public void destroy() {
|
||||
|
|
|
@ -145,7 +145,7 @@ public class LevelTeleporter extends TestItem {
|
|||
float xpos = (WIDTH - 5*BTN_SIZE - GAP*8)/2f;
|
||||
float ypos = 0;
|
||||
float each = GAP*2 + BTN_SIZE;
|
||||
for(int i=1; i< Constants.MAX_DEPTH; ++i){
|
||||
for(int i=0; i< Constants.MAX_DEPTH; ++i){
|
||||
int column = i % 5;
|
||||
int row = i / 5;
|
||||
final int j = i+1;
|
||||
|
|
|
@ -39,7 +39,6 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -97,7 +96,9 @@ public class EtherealChains extends Artifact {
|
|||
} else if (cursed) {
|
||||
GLog.w( Messages.get(this, "cursed") );
|
||||
usesTargeting = false;
|
||||
|
||||
} else if (Dungeon.depth < 0) {
|
||||
GLog.w( Messages.get(this, "strmagic") );
|
||||
usesTargeting = false;
|
||||
} else {
|
||||
usesTargeting = true;
|
||||
GameScene.selectCell(caster);
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.food;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging;
|
||||
|
@ -31,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
|
@ -123,8 +125,10 @@ public class Pasty extends Food {
|
|||
ScrollOfRecharging.charge( hero );
|
||||
break;
|
||||
case ZQJ:
|
||||
Buff.affect(hero, Healing.class).setHeal(10, 0f, 6);
|
||||
Buff.affect(hero, Healing.class).setHeal((int) (0.2f * hero.HT + 14), 0.25f, 0);
|
||||
Buff.affect(hero, Haste.class, 10f);
|
||||
ScrollOfRecharging.charge( hero );
|
||||
GLog.p(Messages.get(this, "moonling"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,269 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.quest;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||
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.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ShopLimitLock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.custom.messages.M;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.custom.testmode.LevelTeleporter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.custom.testmode.TestItem;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.custom.utils.Constants;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.ScrollPane;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.tweeners.AlphaTweener;
|
||||
import com.watabou.noosa.ui.Component;
|
||||
import com.watabou.utils.PathFinder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class BackGoKey extends TestItem {
|
||||
{
|
||||
image = ItemSpriteSheet.DG20;
|
||||
defaultAction = AC_INTER_TP;
|
||||
changeDefAct = true;
|
||||
}
|
||||
|
||||
private static final String AC_INTER_TP = "interlevel_tp";
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions(Hero hero ) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
actions.add(AC_INTER_TP);
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute( Hero hero, String action ) {
|
||||
super.execute( hero, action );
|
||||
if(action.equals(AC_INTER_TP)){
|
||||
if(Dungeon.hero.buff(LockedFloor.class) != null) {
|
||||
GLog.w(Messages.get(this,"cannot_send"));
|
||||
return;
|
||||
} else if (Statistics.deadshoppingdied) {
|
||||
GLog.w(Messages.get(this,"not"));
|
||||
return;
|
||||
}
|
||||
GameScene.show(new WndSelectLevel());
|
||||
}
|
||||
}
|
||||
|
||||
public static class WndSelectLevel extends Window {
|
||||
private static final int WIDTH = 120;
|
||||
private static final int GAP = 2;
|
||||
private static final int BTN_SIZE = 16;
|
||||
private static final int PANE_MAX_HEIGHT = 96;
|
||||
|
||||
private int selectedLevel = 0;
|
||||
private ArrayList<LevelTeleporter.DepthButton> btns = new ArrayList<>();
|
||||
private StyledButton icb;
|
||||
|
||||
public WndSelectLevel(){
|
||||
super();
|
||||
resize(WIDTH, 0);
|
||||
RenderedTextBlock ttl = PixelScene.renderTextBlock(8);
|
||||
ttl.text(M.L(LevelTeleporter.class, "interlevel_teleport_title"));
|
||||
add(ttl);
|
||||
ttl.setPos(WIDTH/2f-ttl.width()/2f, GAP);
|
||||
PixelScene.align(ttl);
|
||||
ScrollPane sp = new ScrollPane(new Component()){
|
||||
@Override
|
||||
public void onClick(float x, float y) {
|
||||
super.onClick(x, y);
|
||||
for(LevelTeleporter.DepthButton db: btns){
|
||||
if(db.click(x, y)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
add(sp);
|
||||
//sp.setRect(0, ttl.bottom() + GAP * 2, WIDTH, PANE_MAX_HEIGHT);
|
||||
//GLog.i("%f", ttl.bottom() + GAP * 2);
|
||||
Component content = sp.content();
|
||||
float xpos = (WIDTH - 5*BTN_SIZE - GAP*8)/2f;
|
||||
float ypos = 0;
|
||||
float each = GAP*2 + BTN_SIZE;
|
||||
for(int i = 0; i< Constants.MAX_DEPTH; ++i){
|
||||
int column = i % 5;
|
||||
int row = i / 5;
|
||||
final int j = i+1;
|
||||
LevelTeleporter.DepthButton db = new LevelTeleporter.DepthButton(j){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
super.onClick();
|
||||
setSelectedLevel(j);
|
||||
}
|
||||
};
|
||||
db.enable(!(j > Statistics.deepestFloor));
|
||||
db.setRect(xpos + column * each, ypos + row * each, BTN_SIZE, BTN_SIZE);
|
||||
PixelScene.align(db);
|
||||
content.add(db);
|
||||
btns.add(db);
|
||||
}
|
||||
|
||||
content.setSize(WIDTH, btns.get(btns.size() - 1).bottom());
|
||||
sp.setRect(0, ttl.bottom() + GAP * 2, WIDTH, Math.min(btns.get(btns.size()-1).bottom(), PANE_MAX_HEIGHT));
|
||||
|
||||
icb = new StyledButton(Chrome.Type.RED_BUTTON, M.L(LevelTeleporter.class, "interlevel_teleport_go", selectedLevel)){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
super.onClick();
|
||||
Buff buff = hero.buff(TimekeepersHourglass.timeFreeze.class);
|
||||
if (buff != null) buff.detach();
|
||||
buff = hero.buff(Swiftthistle.TimeBubble.class);
|
||||
if (buff != null) buff.detach();
|
||||
InterlevelScene.mode = InterlevelScene.Mode.RETURN;
|
||||
InterlevelScene.returnDepth = selectedLevel;
|
||||
InterlevelScene.returnPos = -1;
|
||||
Game.switchScene( InterlevelScene.class );
|
||||
//detach( hero.belongings.backpack );
|
||||
if(Dungeon.hero.buff(ShopLimitLock.class) != null) {
|
||||
for (Buff buffx : hero.buffs()) {
|
||||
if (buffx instanceof ShopLimitLock) {
|
||||
buffx.detach();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
GLog.n(Messages.get(BackGoKey.class,"dead"));
|
||||
Statistics.deadshoppingdied = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
add(icb);
|
||||
icb.icon(Icons.get(Icons.DEPTH));
|
||||
icb.setRect(0, sp.bottom() + GAP * 2, WIDTH, BTN_SIZE);
|
||||
setSelectedLevel(0);
|
||||
|
||||
sp.scrollTo(0, 0);
|
||||
|
||||
resize(WIDTH, (int) (icb.bottom()));
|
||||
|
||||
sp.setPos(0, ttl.bottom() + GAP * 2);
|
||||
}
|
||||
|
||||
private void setSelectedLevel(int lvl){
|
||||
this.selectedLevel = lvl;
|
||||
icb.text(M.L(LevelTeleporter.class, "interlevel_teleport_go", selectedLevel));
|
||||
icb.enable(selectedLevel > 0 && selectedLevel <= Constants.MAX_DEPTH);
|
||||
}
|
||||
}
|
||||
|
||||
public static class DepthButton extends StyledButton{
|
||||
private int depth;
|
||||
public DepthButton(int depth){
|
||||
super(Chrome.Type.GEM, String.valueOf(depth), 8);
|
||||
this.depth = depth;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void layout() {
|
||||
super.layout();
|
||||
hotArea.width = 0;
|
||||
hotArea.height = 0;
|
||||
}
|
||||
|
||||
public int getDepth() {
|
||||
return depth;
|
||||
}
|
||||
|
||||
public boolean click(float x, float y){
|
||||
if(active && x > left() && x < right() && y > top() && y < bottom()){
|
||||
onClick();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void empoweredRead() {
|
||||
|
||||
GameScene.selectCell(new CellSelector.Listener() {
|
||||
@Override
|
||||
public void onSelect(Integer target) {
|
||||
if (target != null) {
|
||||
//time isn't spent
|
||||
((HeroSprite)curUser.sprite).read();
|
||||
teleportToLocation(curUser, target);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String prompt() {
|
||||
return Messages.get(ScrollOfTeleportation.class, "prompt");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void teleportToLocation(Hero hero, int pos){
|
||||
PathFinder.buildDistanceMap(pos, BArray.or(Dungeon.level.passable, Dungeon.level.avoid, null));
|
||||
if (Dungeon.level.avoid[pos] || !Dungeon.level.passable[pos]
|
||||
|| Actor.findChar(pos) != null){
|
||||
GLog.w( Messages.get(ScrollOfTeleportation.class, "cant_reach") );
|
||||
return;
|
||||
}
|
||||
|
||||
appear( hero, pos );
|
||||
Dungeon.level.occupyCell(hero );
|
||||
Dungeon.observe();
|
||||
GameScene.updateFog();
|
||||
|
||||
}
|
||||
|
||||
public static void appear(Char ch, int pos ) {
|
||||
|
||||
ch.sprite.interruptMotion();
|
||||
|
||||
if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[ch.pos]){
|
||||
Sample.INSTANCE.play(Assets.Sounds.TELEPORT);
|
||||
}
|
||||
|
||||
ch.move( pos );
|
||||
if (ch.pos == pos) ch.sprite.place( pos );
|
||||
|
||||
if (ch.invisible == 0) {
|
||||
ch.sprite.alpha( 0 );
|
||||
ch.sprite.parent.add( new AlphaTweener( ch.sprite, 1, 0.4f ) );
|
||||
}
|
||||
|
||||
if (Dungeon.level.heroFOV[pos] || ch == hero ) {
|
||||
ch.sprite.emitter().start(Speck.factory(Speck.LIGHT), 0.2f, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -95,7 +95,7 @@ public class ScrollOfTeleportation extends Scroll {
|
|||
return teleportInNonRegularLevel( ch, false );
|
||||
}
|
||||
|
||||
if (Char.hasProp(ch, Char.Property.IMMOVABLE)){
|
||||
if (Char.hasProp(ch, Char.Property.IMMOVABLE)|| Dungeon.depth < 0){
|
||||
GLog.w( Messages.get(ScrollOfTeleportation.class, "no_tele") );
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.depth;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.EMPTY;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WALL;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.Terrain.WATER;
|
||||
|
@ -13,6 +12,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Null;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.ShopKing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.ShopKing_Two;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.BackGoKey;
|
||||
|
||||
public class LinkLevel extends Level {
|
||||
|
||||
|
@ -78,14 +78,15 @@ public class LinkLevel extends Level {
|
|||
setSize(WIDTH, HEIGHT);
|
||||
map = code_map.clone();
|
||||
|
||||
this.entrance = WIDTH*22 + 17;
|
||||
this.entrance = WIDTH*28 + 22;
|
||||
exit = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createItems() {
|
||||
drop( new IronKey(depth), this.width + 22 );
|
||||
drop( new BackGoKey(), this.width + 1 );
|
||||
drop( new IronKey(-5), this.width + 22 );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -26,6 +26,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
||||
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.buffs.Buff;
|
||||
|
@ -122,7 +123,7 @@ public abstract class RegularLevel extends Level {
|
|||
initRooms.add(s);
|
||||
}
|
||||
|
||||
if (Dungeon.shopOnLevel())
|
||||
if (Dungeon.shopOnLevel() && !Statistics.fireGirlnoshopping)
|
||||
initRooms.add(new ShopRoom());
|
||||
|
||||
if (Dungeon.aqiLevel() && (Dungeon.isChallenged(AQUAPHOBIA)))
|
||||
|
|
|
@ -11,7 +11,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.CrystalDiedTower;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.FireMagicDied;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.FireMagicDiedNPC;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NullDied;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NullDiedTO;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
@ -60,11 +62,12 @@ public class ShopBossLevel extends Level {
|
|||
GameScene.add(csp);
|
||||
}
|
||||
|
||||
//activateAll();
|
||||
FireMagicDied boss = new FireMagicDied();
|
||||
boss.pos = WIDTH*17 + 17;
|
||||
GameScene.add(boss);
|
||||
|
||||
//activateAll();
|
||||
|
||||
GLog.p(Messages.get(FireMagicDied.class,"go", hero.name()));
|
||||
Sample.INSTANCE.play(Assets.Sounds.DEATH);
|
||||
}
|
||||
|
@ -76,6 +79,18 @@ public class ShopBossLevel extends Level {
|
|||
WIDTH*17 + 22,
|
||||
};
|
||||
|
||||
@Override
|
||||
public void unseal() {
|
||||
super.unseal();
|
||||
FireMagicDiedNPC boss = new FireMagicDiedNPC();
|
||||
boss.pos = WIDTH*17 + 17;
|
||||
GameScene.add(boss);
|
||||
|
||||
NullDiedTO bossx = new NullDiedTO();
|
||||
bossx.pos = WIDTH*15 + 17;
|
||||
GameScene.add(bossx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void occupyCell( Char ch ) {
|
||||
super.occupyCell( ch );
|
||||
|
@ -151,20 +166,32 @@ public class ShopBossLevel extends Level {
|
|||
|
||||
private static final HashMap<Integer, Integer> MAIN_PORTAL = new HashMap<>(4);
|
||||
{
|
||||
MAIN_PORTAL.put(10+10*WIDTH, 3+5*WIDTH);
|
||||
MAIN_PORTAL.put(3+5*WIDTH, throne);
|
||||
MAIN_PORTAL.put(10+10*WIDTH, 2+2*WIDTH);
|
||||
MAIN_PORTAL.put(1+WIDTH, throne);
|
||||
|
||||
MAIN_PORTAL.put(24+10*WIDTH, 32+2*WIDTH);
|
||||
MAIN_PORTAL.put(33+WIDTH, throne);
|
||||
|
||||
MAIN_PORTAL.put(10+24*WIDTH, 2+32*WIDTH);
|
||||
MAIN_PORTAL.put(1+33*WIDTH, throne);
|
||||
|
||||
MAIN_PORTAL.put(24+24*WIDTH, 32+32*WIDTH);
|
||||
MAIN_PORTAL.put(33+33*WIDTH, throne);
|
||||
}
|
||||
|
||||
private static final HashMap<Integer, Integer> IF_MAIN_PORTAL = new HashMap<>(4);
|
||||
{
|
||||
IF_MAIN_PORTAL.put(10+10*WIDTH, 3+5*WIDTH);
|
||||
MAIN_PORTAL.put(3+5*WIDTH, throne);
|
||||
IF_MAIN_PORTAL.put(10+10*WIDTH, 2+2*WIDTH);
|
||||
IF_MAIN_PORTAL.put(1+WIDTH, throne);
|
||||
|
||||
IF_MAIN_PORTAL.put(24+10*WIDTH, 32+2*WIDTH);
|
||||
IF_MAIN_PORTAL.put(33+WIDTH, throne);
|
||||
|
||||
IF_MAIN_PORTAL.put(10+24*WIDTH, 2+32*WIDTH);
|
||||
IF_MAIN_PORTAL.put(1+33*WIDTH, throne);
|
||||
|
||||
IF_MAIN_PORTAL.put(24+24*WIDTH, 32+32*WIDTH);
|
||||
IF_MAIN_PORTAL.put(33+33*WIDTH, throne);
|
||||
}
|
||||
|
||||
|
||||
|
@ -181,17 +208,17 @@ public class ShopBossLevel extends Level {
|
|||
W,P,P,P,R,P,R,P,P,W,W,P,P,R,P,P,P,R,P,P,P,R,P,P,W,W,P,P,R,P,R,P,P,P,W,
|
||||
W,W,W,W,W,W,W,W,W,W,J,P,R,P,P,P,P,R,P,P,P,P,R,P,J,W,W,W,W,W,W,W,W,W,W,
|
||||
W,W,P,P,P,P,P,P,P,P,P,R,R,R,R,R,R,R,R,R,R,R,R,R,P,P,P,P,P,P,P,P,P,W,W,
|
||||
S,W,W,P,P,P,P,P,P,P,R,R,R,D,G,G,G,H,X,X,X,X,R,R,R,P,P,P,P,P,P,P,W,W,S,
|
||||
S,S,W,W,P,P,P,P,P,R,P,R,X,R,G,G,G,R,X,X,X,R,D,R,P,R,P,P,P,P,P,W,W,S,S,
|
||||
S,S,S,W,W,P,P,P,R,P,P,R,X,X,R,G,G,R,X,X,R,G,G,R,P,P,R,P,P,P,W,W,S,S,S,
|
||||
S,S,S,S,W,W,P,R,P,P,P,R,X,X,X,R,D,R,X,R,G,G,G,R,P,P,P,R,P,W,W,S,S,S,S,
|
||||
S,S,S,S,S,W,W,P,P,P,P,R,X,X,X,X,R,R,R,D,G,G,G,R,P,P,P,P,W,W,S,S,S,S,S,
|
||||
S,S,S,S,S,S,W,W,R,R,R,R,H,R,R,R,R,R,R,R,R,R,H,R,R,R,R,W,W,S,S,S,S,S,S,
|
||||
S,S,S,S,S,W,W,P,P,P,P,R,G,G,G,D,R,R,R,X,X,X,X,R,P,P,P,P,W,W,S,S,S,S,S,
|
||||
S,S,S,S,W,W,P,R,P,P,P,R,G,G,G,R,X,R,D,R,X,X,X,R,P,P,P,R,P,W,W,S,S,S,S,
|
||||
S,S,S,W,W,P,P,P,R,P,P,R,G,G,R,X,X,R,G,G,R,X,X,R,P,P,R,P,P,P,W,W,S,S,S,
|
||||
S,S,W,W,P,P,P,P,P,R,P,R,D,R,X,X,X,R,G,G,G,R,X,R,P,R,P,P,P,P,P,W,W,S,S,
|
||||
S,W,W,P,P,P,P,P,P,P,R,R,R,X,X,X,X,H,G,G,G,D,R,R,R,P,P,P,P,P,P,P,W,W,S,
|
||||
S,W,W,P,P,P,P,P,P,P,R,R,G,D,G,G,G,H,X,X,X,X,G,R,R,P,P,P,P,P,P,P,W,W,S,
|
||||
S,S,W,W,P,P,P,P,P,R,P,R,X,G,G,G,G,R,X,X,X,G,D,R,P,R,P,P,P,P,P,W,W,S,S,
|
||||
S,S,S,W,W,P,P,P,R,P,P,R,X,X,G,G,G,R,X,X,G,G,G,R,P,P,R,P,P,P,W,W,S,S,S,
|
||||
S,S,S,S,W,W,P,R,P,P,P,R,X,X,X,G,D,R,X,G,G,G,G,R,P,P,P,R,P,W,W,S,S,S,S,
|
||||
S,S,S,S,S,W,W,P,P,P,P,R,X,X,X,X,G,R,G,D,G,G,G,R,P,P,P,P,W,W,S,S,S,S,S,
|
||||
S,S,S,S,S,S,W,W,R,R,R,R,H,R,R,R,R,G,R,R,R,R,H,R,R,R,R,W,W,S,S,S,S,S,S,
|
||||
S,S,S,S,S,W,W,P,P,P,P,R,G,G,G,D,G,R,G,X,X,X,X,R,P,P,P,P,W,W,S,S,S,S,S,
|
||||
S,S,S,S,W,W,P,R,P,P,P,R,G,G,G,G,X,R,D,G,X,X,X,R,P,P,P,R,P,W,W,S,S,S,S,
|
||||
S,S,S,W,W,P,P,P,R,P,P,R,G,G,G,X,X,R,G,G,G,X,X,R,P,P,R,P,P,P,W,W,S,S,S,
|
||||
S,S,W,W,P,P,P,P,P,R,P,R,D,G,X,X,X,R,G,G,G,G,X,R,P,R,P,P,P,P,P,W,W,S,S,
|
||||
S,W,W,P,P,P,P,P,P,P,R,R,G,X,X,X,X,H,G,G,G,D,G,R,R,P,P,P,P,P,P,P,W,W,S,
|
||||
W,W,P,P,P,P,P,P,P,P,P,R,R,R,R,R,R,R,R,R,R,R,R,R,P,P,P,P,P,P,P,P,P,W,W,
|
||||
W,W,W,W,W,W,W,W,W,W,J,P,R,P,P,P,P,R,P,P,P,P,R,P,J,W,W,W,W,W,W,W,W,W,W,
|
||||
W,P,R,P,P,P,P,P,R,W,W,P,P,R,P,P,P,R,P,P,P,R,P,P,W,W,R,P,P,P,P,P,R,P,W,
|
||||
|
@ -226,15 +253,13 @@ public class ShopBossLevel extends Level {
|
|||
static {
|
||||
pedestals[0] = 10 + WIDTH * 10;
|
||||
|
||||
pedestals[1] = 14 + WIDTH * 14;
|
||||
pedestals[1] = 24 + WIDTH * 10;
|
||||
|
||||
pedestals[2] = 14 + WIDTH * 22;
|
||||
|
||||
pedestals[3] = 23 + WIDTH * 22;
|
||||
pedestals[2] = 10 + WIDTH * 24;
|
||||
|
||||
pedestals[3] = 32 + WIDTH * 32;
|
||||
}
|
||||
|
||||
|
||||
public Mob createMob() {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -182,7 +182,7 @@ public class InterlevelScene extends PixelScene {
|
|||
fadeTime += 0.9f; //adds 1 second total
|
||||
//speed up transition when debugging
|
||||
} else if (DeviceCompat.isDebug()){
|
||||
fadeTime = 0.1f;
|
||||
fadeTime = 0.9f;
|
||||
}
|
||||
|
||||
SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){
|
||||
|
|
|
@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
|
@ -197,11 +196,8 @@ public class StartScene extends PixelScene {
|
|||
classIcon.copy(Icons.get(info.heroClass));
|
||||
}
|
||||
|
||||
if(Dungeon.depth < 0) {
|
||||
depth.text("S");
|
||||
} else {
|
||||
depth.text(Integer.toString(info.depth));
|
||||
}
|
||||
|
||||
depth.text(Integer.toString(info.depth));
|
||||
depth.measure();
|
||||
|
||||
level.text(Integer.toString(info.level));
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.ChangesScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
|
@ -22,6 +23,7 @@ import java.util.ArrayList;
|
|||
public class vM0_6_7_X_Changes {
|
||||
|
||||
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
|
||||
add_v0_6_7_Changes(changeInfos);
|
||||
add_v0_6_6_Changes(changeInfos);
|
||||
add_v0_6_5_Changes(changeInfos);
|
||||
add_v0_6_4_Changes(changeInfos);
|
||||
|
@ -31,6 +33,32 @@ public class vM0_6_7_X_Changes {
|
|||
add_v0_6_0_Changes(changeInfos);
|
||||
}
|
||||
|
||||
public static void add_v0_6_7_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta20.785", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes = new ChangeInfo("新内容", false, null);
|
||||
changes.hardlight(Window.GREEN_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new ColdGuardSprite(), ("全新区域:雪凛峡谷"),
|
||||
("在雪凛峡谷中寻找300年前的支离破碎的线索……\n\n全新商店抢劫系统:V6.0")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG1), ("月饼"),
|
||||
("限时食物:9-10到10.1,中秋节特供")));
|
||||
|
||||
changes = new ChangeInfo("改动", false, null);
|
||||
changes.hardlight(Window.GREEN_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.INFO), ("杂项改动"),
|
||||
("-NPC对话文本改变\n-部分BGM升级更新")));
|
||||
|
||||
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_06X28")));
|
||||
}
|
||||
|
||||
public static void add_v0_6_6_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta20.75", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
|
@ -277,9 +305,6 @@ public class vM0_6_7_X_Changes {
|
|||
changes.addButton(new ChangeButton(new FlameBoiSprite(), ("火焰机器人"),
|
||||
("移除火焰机器人在常规局的出现,仅出现在支离破碎的精英怪概率里面")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG1), ("炸弹匕首"),
|
||||
("移除炸弹匕首,它实在没有太大的用处。")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.BlackDog), ("黑狗爪"),
|
||||
("移除黑狗爪,它已不再有当年的威风")));
|
||||
|
||||
|
|
|
@ -132,13 +132,12 @@ public class WndChallenges extends Window {
|
|||
cb.checked((checked & Challenges.MASKS[i]) != 0);
|
||||
cb.active = editable;
|
||||
|
||||
//if(Challenges.NAME_IDS[i].equals("no_food") && cb.active == editable){
|
||||
// if(boxes.get( 12 ).checked()){
|
||||
// cb.active = false;
|
||||
// cb.checked(false);
|
||||
// cb.alpha(0.5f);
|
||||
// }
|
||||
//}
|
||||
//Disable
|
||||
if(Challenges.NAME_IDS[i].equals("light&black")||Challenges.NAME_IDS[i].equals("exsg")||Challenges.NAME_IDS[i].equals("boss")){
|
||||
cb.active = false;
|
||||
cb.checked(false);
|
||||
cb.alpha(0.5f);
|
||||
}
|
||||
|
||||
|
||||
if (i > 0) {
|
||||
|
|
|
@ -2,8 +2,12 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Shopkeeper;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||
|
@ -26,19 +30,37 @@ public class WndGoShop extends Window {
|
|||
titlebar.icon(new ShopkeeperSprite());
|
||||
titlebar.label(Messages.get(this, "szo"));
|
||||
add(titlebar);
|
||||
RenderedTextBlock message = PixelScene.renderTextBlock((Messages.get(this, "ary")), 6);
|
||||
RenderedTextBlock message = PixelScene.renderTextBlock(Statistics.fireGirlnoshopping ? Messages.get(this,
|
||||
"ots"):(Messages.get(this, "ary")), 6);
|
||||
message.maxWidth(WIDTH);
|
||||
|
||||
message.setPos(0, titlebar.bottom() + GAP);
|
||||
add(message);
|
||||
|
||||
RedButton btnBuy = new RedButton( Messages.get(this, "yes") ) {
|
||||
RedButton btnBuy = new RedButton( Statistics.fireGirlnoshopping ? Messages.get(this, "ok"):Messages.get(this
|
||||
, "yes") ) {
|
||||
@Override
|
||||
protected void onClick() {
|
||||
hide();
|
||||
InterlevelScene.mode = InterlevelScene.Mode.EXBOSS;
|
||||
Buff.affect(hero, Cost.class).set( (6), 1 );
|
||||
Game.switchScene(InterlevelScene.class);
|
||||
if(Statistics.fireGirlnoshopping){
|
||||
//GLog.n(Messages.get(WndGoShop.class, "bad", Dungeon.hero.name()));
|
||||
for (Mob mob : Dungeon.level.mobs) {
|
||||
if (mob instanceof Shopkeeper) {
|
||||
((Shopkeeper) mob).flee();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(Statistics.deadshoppingdied){
|
||||
//GLog.n(Messages.get(WndGoShop.class, "bad", Dungeon.hero.name()));
|
||||
} else {
|
||||
InterlevelScene.mode = InterlevelScene.Mode.EXBOSS;
|
||||
Buff.affect(hero, Cost.class).set((6), 1);
|
||||
Game.switchScene(InterlevelScene.class);
|
||||
//商店抢劫
|
||||
Statistics.fireGirlnoshopping = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
btnBuy.setRect( (WIDTH - BTN_GAP) / 2 - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE, BTN_SIZE );
|
||||
|
|
|
@ -0,0 +1,329 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.RandomBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ReloadShop;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NullDiedTO;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Shopkeeper;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.NinePatch;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.ui.Component;
|
||||
import com.watabou.utils.Callback;
|
||||
|
||||
public class WndKingShop extends Window {
|
||||
private static final int WIDTH = 120;
|
||||
private static final int BTN_SIZE = 16;
|
||||
private static final int BTN_GAP = 3;
|
||||
private static final int GAP = 3;
|
||||
public WndKingShop() {
|
||||
IconTitle titlebar = new IconTitle();
|
||||
titlebar.setRect(0, 0, WIDTH, 0);
|
||||
titlebar.icon(new ShopkKingSprite());
|
||||
titlebar.label(Messages.get(WndKingShop.class,"king"));
|
||||
add( titlebar );
|
||||
RenderedTextBlock message = PixelScene.renderTextBlock( (Messages.get(WndKingShop.class,"select")), 6 );
|
||||
message.maxWidth(WIDTH);
|
||||
message.setPos(0, titlebar.bottom() + GAP);
|
||||
add( message );
|
||||
|
||||
WndKingShop.RewardButton shop1 = new WndKingShop.RewardButton( NullDiedTO.shop1 );
|
||||
shop1.setRect( (WIDTH - BTN_GAP) / 6 - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE,
|
||||
BTN_SIZE );
|
||||
add( shop1 );
|
||||
|
||||
WndKingShop.RewardButton shop2 = new WndKingShop.RewardButton( NullDiedTO.shop2 );
|
||||
shop2.setRect( shop1.right() + BTN_GAP, shop1.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(shop2);
|
||||
|
||||
WndKingShop.RewardButton shop3 = new WndKingShop.RewardButton( NullDiedTO.shop3 );
|
||||
shop3.setRect( shop2.right() + BTN_GAP, shop2.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(shop3);
|
||||
|
||||
WndKingShop.RewardButton shop4 = new WndKingShop.RewardButton( NullDiedTO.shop4 );
|
||||
shop4.setRect( shop3.right() + BTN_GAP, shop3.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(shop4);
|
||||
|
||||
WndKingShop.RewardButton shop5 = new WndKingShop.RewardButton( NullDiedTO.shop5 );
|
||||
shop5.setRect( shop4.right() + BTN_GAP, shop4.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(shop5);
|
||||
|
||||
WndKingShop.RewardButton shop6 = new WndKingShop.RewardButton( NullDiedTO.shop6 );
|
||||
shop6.setRect( shop5.right() + BTN_GAP, shop5.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(shop6);
|
||||
|
||||
WndKingShop.RewardButton2 bomb1 = new WndKingShop.RewardButton2( NullDiedTO.shop7 );
|
||||
bomb1.setRect( shop1.left() , shop1.bottom(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb1);
|
||||
|
||||
WndKingShop.RewardButton2 bomb2 = new WndKingShop.RewardButton2( NullDiedTO.shop8 );
|
||||
bomb2.setRect( bomb1.right()+ BTN_GAP , bomb1.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb2);
|
||||
|
||||
WndKingShop.RewardButton2 bomb3 = new WndKingShop.RewardButton2( NullDiedTO.shop9 );
|
||||
bomb3.setRect( bomb2.right()+ BTN_GAP , bomb2.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb3);
|
||||
|
||||
WndKingShop.RewardButton2 bomb4 = new WndKingShop.RewardButton2( NullDiedTO.shop10);
|
||||
bomb4.setRect( bomb3.right()+ BTN_GAP , bomb3.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb4);
|
||||
|
||||
WndKingShop.RewardButton2 bomb5 = new WndKingShop.RewardButton2( NullDiedTO.shop11 );
|
||||
bomb5.setRect( bomb4.right()+ BTN_GAP , bomb4.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb5);
|
||||
|
||||
WndKingShop.RewardButton2 bomb6 = new WndKingShop.RewardButton2( NullDiedTO.shop12 );
|
||||
bomb6.setRect( bomb5.right() + BTN_GAP, bomb5.top(), BTN_SIZE, BTN_SIZE );
|
||||
add(bomb6);
|
||||
|
||||
StyledButton btnSite = new StyledButton(Chrome.Type.WINDOW, Messages.get(this,"sellmod")){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
super.onClick();
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
sell();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
btnSite.icon(Icons.get(Icons.GOLD));
|
||||
btnSite.textColor(Window.CYELLOW);
|
||||
btnSite.setRect(56,-2, 65, 20 );
|
||||
add(btnSite);
|
||||
|
||||
resize(WIDTH, (int) bomb6.bottom());
|
||||
}
|
||||
|
||||
public static WndBag sell() {
|
||||
return GameScene.selectItem( itemSelector );
|
||||
}
|
||||
|
||||
public static boolean canSell(Item item){
|
||||
if (item.value() <= 0) return false;
|
||||
if (item.unique && !item.stackable) return false;
|
||||
if (item instanceof Armor && ((Armor) item).checkSeal() != null) return false;
|
||||
if (item.isEquipped(Dungeon.hero) && item.cursed) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static WndBag.ItemSelector itemSelector = new WndBag.ItemSelector() {
|
||||
@Override
|
||||
public String textPrompt() {
|
||||
return Messages.get(Shopkeeper.class, "sell");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean itemSelectable(Item item) {
|
||||
return Shopkeeper.canSell(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelect( Item item ) {
|
||||
if (item != null) {
|
||||
WndBag parentWnd = sell();
|
||||
GameScene.show( new WndTradeItem( item, parentWnd ) );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void tell(String text) {
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
GameScene.show(new WndQuest(new NullDiedTO(), text));
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private void selectReward( Item reward ) {
|
||||
|
||||
hide();
|
||||
|
||||
reward.identify();
|
||||
if (reward.doPickUp( hero )) {
|
||||
GLog.i( Messages.get(hero, "you_now_have", reward.name()) );
|
||||
}
|
||||
|
||||
//Ghost.Quest.complete();
|
||||
}
|
||||
|
||||
private class RewardWindow extends WndInfoItem {
|
||||
|
||||
public RewardWindow( Item item ) {
|
||||
super(item);
|
||||
|
||||
RedButton btnConfirm = new RedButton(Messages.get(WndKingShop.class, "buy")){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
if(Dungeon.gold > 200) {
|
||||
Dungeon.gold-=200;
|
||||
WndKingShop.this.selectReward( item );
|
||||
if (RandomBuff.level-- >= 0) {
|
||||
}
|
||||
Buff.prolong( hero, ReloadShop.class, 1f);
|
||||
//Statistics.naiyaziCollected += 1;
|
||||
WndKingShop.RewardWindow.this.hide();
|
||||
//Badges.nyzvalidateGoldCollected();
|
||||
} else {
|
||||
tell(Messages.get(WndKingShop.class,"nomoney"));
|
||||
WndKingShop.RewardWindow.this.hide();
|
||||
}
|
||||
}
|
||||
};
|
||||
btnConfirm.setRect(0, height+2, width/2-1, 16);
|
||||
add(btnConfirm);
|
||||
|
||||
RedButton btnCancel = new RedButton(Messages.get(WndKingShop.class, "cancel")){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
hide();
|
||||
}
|
||||
};
|
||||
btnCancel.setRect(btnConfirm.right()+2, height+2, btnConfirm.width(), 16);
|
||||
add(btnCancel);
|
||||
|
||||
resize(width, (int)btnCancel.bottom());
|
||||
}
|
||||
}
|
||||
|
||||
private class RewardWindow2 extends WndInfoItem {
|
||||
|
||||
public RewardWindow2( Item item ) {
|
||||
super(item);
|
||||
|
||||
RedButton btnConfirm = new RedButton(Messages.get(WndKingShop.class, "buy")){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
if(Dungeon.gold > 200) {
|
||||
Dungeon.gold-=200;
|
||||
Buff.prolong( hero, ReloadShop.class, 1f);
|
||||
WndKingShop.this.selectReward( item );
|
||||
if (RandomBuff.level-- >= 0) {
|
||||
}
|
||||
//Badges.nyzvalidateGoldCollected();
|
||||
//Statistics.naiyaziCollected += 1;
|
||||
WndKingShop.RewardWindow2.this.hide();
|
||||
} else {
|
||||
tell(Messages.get(WndKingShop.class,"nomoney"));
|
||||
}
|
||||
}
|
||||
};
|
||||
btnConfirm.setRect(0, height+2, width/2-1, 16);
|
||||
add(btnConfirm);
|
||||
|
||||
RedButton btnCancel = new RedButton(Messages.get(WndKingShop.class, "cancel")){
|
||||
@Override
|
||||
protected void onClick() {
|
||||
hide();
|
||||
}
|
||||
};
|
||||
btnCancel.setRect(btnConfirm.right()+2, height+2, btnConfirm.width(), 16);
|
||||
add(btnCancel);
|
||||
|
||||
resize(width, (int)btnCancel.bottom());
|
||||
}
|
||||
}
|
||||
|
||||
public class RewardButton2 extends Component {
|
||||
|
||||
protected NinePatch bg;
|
||||
protected ItemSlot slot;
|
||||
|
||||
public RewardButton2(Item item) {
|
||||
bg = Chrome.get(Chrome.Type.RED_BUTTON);
|
||||
add(bg);
|
||||
|
||||
slot = new ItemSlot(item) {
|
||||
@Override
|
||||
protected void onPointerDown() {
|
||||
bg.brightness(1.2f);
|
||||
Sample.INSTANCE.play(Assets.Sounds.CLICK);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPointerUp() {
|
||||
bg.resetColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick() {
|
||||
ShatteredPixelDungeon.scene().addToFront(new WndKingShop.RewardWindow2(item));
|
||||
}
|
||||
};
|
||||
add(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void layout() {
|
||||
super.layout();
|
||||
|
||||
bg.x = x;
|
||||
bg.y = y;
|
||||
bg.size(width, height);
|
||||
|
||||
slot.setRect(x + 2, y + 2, width - 4, height - 4);
|
||||
}
|
||||
}
|
||||
|
||||
public class RewardButton extends Component {
|
||||
|
||||
protected NinePatch bg;
|
||||
protected ItemSlot slot;
|
||||
|
||||
public RewardButton( Item item ){
|
||||
bg = Chrome.get( Chrome.Type.RED_BUTTON);
|
||||
add( bg );
|
||||
|
||||
slot = new ItemSlot( item ){
|
||||
@Override
|
||||
protected void onPointerDown() {
|
||||
bg.brightness( 1.2f );
|
||||
Sample.INSTANCE.play( Assets.Sounds.CLICK );
|
||||
}
|
||||
@Override
|
||||
protected void onPointerUp() {
|
||||
bg.resetColor();
|
||||
}
|
||||
@Override
|
||||
protected void onClick() {
|
||||
ShatteredPixelDungeon.scene().addToFront(new WndKingShop.RewardWindow(item));
|
||||
}
|
||||
};
|
||||
add(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void layout() {
|
||||
super.layout();
|
||||
|
||||
bg.x = x;
|
||||
bg.y = y;
|
||||
bg.size( width, height );
|
||||
|
||||
slot.setRect( x + 2, y + 2, width - 4, height - 4 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
|
|||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.shopOnLevel;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ShopGuardDead;
|
||||
|
@ -35,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FireMagicGirlSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
||||
|
@ -132,7 +134,8 @@ public class WndTradeItem extends WndInfoItem {
|
|||
|
||||
pos = btnBuy.bottom();
|
||||
|
||||
RedButton btnStole = new RedButton( Messages.get(this, "stole", price) ) {
|
||||
RedButton btnStole = new RedButton( Statistics.fireGirlnoshopping ? Messages.get(this,
|
||||
"oks"):Messages.get(this, "stole", price) ) {
|
||||
@Override
|
||||
protected void onClick() {
|
||||
hide();
|
||||
|
@ -145,7 +148,7 @@ public class WndTradeItem extends WndInfoItem {
|
|||
}
|
||||
};
|
||||
btnStole.setRect( 0, pos + GAP, width, BTN_HEIGHT );
|
||||
btnStole.icon(new ShopGuardDead.ShopGuardianRedSprite());
|
||||
btnStole.icon(Statistics.fireGirlnoshopping ? new FireMagicGirlSprite() :new ShopGuardDead.ShopGuardianRedSprite());
|
||||
add( btnStole );
|
||||
if(shopOnLevel()){
|
||||
pos = btnStole.bottom();
|
||||
|
|
Loading…
Reference in New Issue
Block a user