Complete 20.785

Update Version 20.785 Beta
This commit is contained in:
LingASDJ 2022-09-10 19:29:41 +08:00
parent b9410d1945
commit 36608726c9
32 changed files with 1136 additions and 199 deletions

View File

@ -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 = 饥饿

View File

@ -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=小吃一口

View File

@ -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=你确定要跳入洞口中?从这么高的地方摔下去一定很疼。

View File

@ -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控制终端[尚未完成]

View File

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

View File

@ -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这在预示着什么

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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), ("黑狗爪"),
("移除黑狗爪,它已不再有当年的威风")));

View File

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

View File

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

View File

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

View File

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