update p2.910
This commit is contained in:
parent
73a4a79910
commit
fdd01311f1
|
@ -16,8 +16,8 @@ allprojects {
|
|||
appName = 'Magic Ling Pixel Dungeon'
|
||||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =700726
|
||||
appVersionName = '0.6.0.0-Beta21-p2.900'
|
||||
appVersionCode =700800
|
||||
appVersionName = '0.6.0.0-Beta21-p2.910-INDEV'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ text.herostat.item_wnd_cursed = 诅咒的
|
|||
text.herostat.item_basic = 常规:
|
||||
text.herostat.item_enter = 查看物品生成
|
||||
|
||||
|
||||
|
||||
actors.buffs.autorandombuff.name=?
|
||||
actors.buffs.autorandombuff.desc=还有:%s回合。
|
||||
|
||||
|
@ -13,7 +15,6 @@ actors.mobs.npcs.autoshoprebot.desc=一款可以售卖食物的自动售货机
|
|||
actors.mobs.npcs.autoshoprebot.greetings=自动食物售货机:侦测到附近有生命气息,系统开始初始化……
|
||||
actors.mobs.npcs.autoshoprebot.name=自动食物售货机
|
||||
|
||||
|
||||
actors.buffs.invisibilityring.name=
|
||||
actors.buffs.invisibilityring.desc=你和周围的地形完全融为一体,使你不可能被看到。同时,你将每10回合回复1滴血 \n\n当你在虚隐时敌人无法追踪或攻击你。大部分物理攻击和魔法(比如卷轴和法杖)会立即解除虚隐效果。 \n\n剩余的虚隐效果时长:%s回合
|
||||
|
||||
|
@ -99,7 +100,7 @@ actors.mobs.bosses.firemagicdied.life=命运轮回!
|
|||
actors.mobs.bosses.firemagicdied.dead=死驱影熵!
|
||||
actors.mobs.bosses.firemagicdied.losing=……
|
||||
actors.mobs.bosses.firemagicdied.enraged=很好,我也要拿出我的全部实力了!
|
||||
actors.mobs.bosses.firemagicdied.xslx=水晶的力量已经被完全激活,摧毁水晶!!!
|
||||
actors.mobs.bosses.firemagicdied.xslx=水晶的力量已经被完全激活,摧毁最中间的水晶!!!
|
||||
actors.mobs.bosses.firemagicdied.rankings_desc=在莲娜的试炼中不幸消逝……
|
||||
actors.mobs.bosses.firemagicdied$yogscanhalf.name=???
|
||||
actors.mobs.bosses.firemagicdied$yogscanhalf.rankings_desc=在莲娜的试炼中不幸消逝……
|
||||
|
@ -155,6 +156,7 @@ actors.mobs.coldgurad.def_verb=魔盾
|
|||
actors.mobs.coldgurad.desc=雪凛峡谷的守卫,保卫着雪凛峡谷的平衡!
|
||||
actors.mobs.coldgurad.colddown=守卫技能冷却时间:
|
||||
actors.mobs.coldgurad.cost=外来的访问者,我在尽头等着你!
|
||||
actors.mobs.coldgurad.bolt_kill=……
|
||||
|
||||
actors.mobs.npcs.shopking.name=???
|
||||
actors.mobs.npcs.shopking.desc=一位穿着神秘的人正在尽头等着你的到来……
|
||||
|
@ -640,14 +642,14 @@ actors.mobs.slime_sz.name=史莱姆-圣紫守护者
|
|||
actors.mobs.slime_sz.desc=史莱姆七大守护者中的_圣紫使者_\n它发出的攻击有几率让入侵者受到_迟缓效果_!
|
||||
|
||||
actors.mobs.slimeking.name=史莱姆王子
|
||||
actors.mobs.slimeking.desc=史莱姆王子,圣境密林的守护者,没有人能从它这里活着走过去。\n\n-机制说明:移动极其缓慢但有无限使用的锁链。血量低于一半后立刻呼唤_当前楼层至多3个怪物_前来支援(只可触发一次),并且移速恢复正常但_锁链功能失效_且_自身防御降为0_以及近战有概率造成_双倍伤害_。血量低于60后受到敌人的近战攻击将有45%的概率分裂成蚀化史莱姆,但分裂的血量/4。
|
||||
actors.mobs.slimeking.notice=你将会死在圣境密林!
|
||||
actors.mobs.slimeking.desc=史莱姆王子,圣境密林的守护者,没有人能从它这里活着走过去。你或许在质疑为什么圣境密林层会有它的存在,实际上,这也是史莱姆一族需要解决的问题。
|
||||
actors.mobs.slimeking.notice=你清楚你在与谁抗衡吗?
|
||||
actors.mobs.slimeking.defeated=不……这不可能……
|
||||
actors.mobs.slimeking.arise=我的史莱姆守卫们,快点出来支援本王!
|
||||
actors.mobs.slimeking.arise=无礼!朕为了一切什么都能付出
|
||||
actors.mobs.slimeking.rankings_desc=在史莱姆王子面前屈服
|
||||
actors.mobs.slimeking.scorpion=朕叫你走了吗?
|
||||
actors.mobs.slimeking$hunting.cus=不自量力的小鬼,让你见识下绝对审判!
|
||||
actors.mobs.slimeking.fuck=你算什么东西?!
|
||||
actors.mobs.slimeking.fuck=很好,我可能无法阻止你,但你接下来会遇到更恐怖的东西。
|
||||
|
||||
actors.mobs.xykl.name =红魔守卫
|
||||
actors.mobs.xykl.desc =这些若隐若现的傀儡是曾经的水晶之城的守卫,因为你的执着,他们现在与你并肩作战。\n现在你是他们的新主人,他们将誓死守卫你到消亡!
|
||||
|
@ -657,7 +659,7 @@ actors.mobs.shieldhuntsman.desc = 曾经去过_水晶之城_的他们,现在
|
|||
|
||||
actors.mobs.murderer.name=邪魔小偷
|
||||
actors.mobs.murderer.desc=穿着橘色的盗贼礼服的危险怪物,他们已经丧失了偷东西的本领,他们的黑魔法会让每一个冒险者有去无回。
|
||||
actors.mobs.murderer.bolt_kill=暗影能量使你的生命衰竭了……
|
||||
actors.mobs.murderer.bolt_kill=暗影能量使你的生命衰竭了……
|
||||
|
||||
actors.blobs.halomethanefire.desc=一团磷火正在这里肆虐。
|
||||
actors.blobs.superfire.desc=一团磷火正在这里肆虐。
|
||||
|
@ -1217,7 +1219,7 @@ actors.hero.hero.search=搜索
|
|||
actors.hero.hero.search_distracted=你没办法集中精力,探索周边异常费力。
|
||||
actors.hero.hero.pain_resist=疼痛使你得以抵抗睡意。
|
||||
actors.hero.hero.revive=重生十字章迸裂出苏生的能量!
|
||||
actors.hero.hero.died=这里的魔法力量抑制了十字架的祝福,你彻底死亡了……
|
||||
actors.hero.hero.died=你的十字架毫无用处……,你彻底死在了雪凛峡谷……
|
||||
|
||||
##classes
|
||||
actors.hero.heroclass.warrior=蕾零安洁
|
||||
|
|
|
@ -46,6 +46,7 @@ items.food.lightfood.desc=闪电饭团是冻肉和闪电种子加上口粮的综
|
|||
|
||||
items.food.cake.name=草莓奶油蛋糕
|
||||
items.food.cake.eat_good=这个食物的能量激发了你的潜能,你的力量+1!
|
||||
items.food.cake.eat_good2=这个食物的能量已经激发了你足够多的潜能,不过你仍可运用这股力量,你将它转换为了奥术护盾。
|
||||
items.food.cake.desc=蛋糕是地牢中最稀有的食物,吃掉它可以立刻清除所有负面效果,并且会让你充满活力,蛋糕还能有极小的概率激发你的潜能……
|
||||
|
||||
items.food.switch.name=魔法三明治
|
||||
|
|
|
@ -113,7 +113,7 @@ challenges.no_scrolls_desc=其中一种卷轴符文会变得更稀有。只不
|
|||
rankings$record.something=在黑暗中被击杀
|
||||
|
||||
challenges.aquaphobia=_污泥浊水_
|
||||
challenges.aquaphobia_desc=你已经尝试了被水神祝福后的逍遥自在。\n\n而接下来,当水神被亵渎后,诅咒也随之即将到来。\n\n(圣境层到矮人层踩水将会获得DeBuff,玩家在开局获得4瓶水灵药水,饮用可获得50回合的踩水不获得Debuff时间并获得祝福。同时,炼金新增水灵药水配方)
|
||||
challenges.aquaphobia_desc=你已经尝试了被水神祝福后的逍遥自在。\n\n而接下来,当水神被亵渎后,诅咒也随之即将到来。\n\n(圣境层到矮人层踩水将会获得DeBuff,玩家在开局获得4瓶水灵药水,饮用可获得100回合的踩水不获得Debuff时间并获得祝福。)
|
||||
challenges.champion_enemies=_精英战场_
|
||||
challenges.champion_enemies_desc=会升级的不止你一个!\n\n・普通敌人刷出时有 1/8 \
|
||||
的机率拥有特殊的精英属性。\n・精英敌人刷出时会立即醒来。\n・精英敌人免疫腐化效果。\n\n精英敌人有七种:\n_烈焰(橙色):_ 近战伤害 \
|
||||
|
|
|
@ -481,4 +481,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x35=-P2.875\n1.修复了回溯之书
|
|||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x36=-P2.9\n1.修复史莱姆王可能崩溃游戏的问题\n2.修复一些其他的弱性错误
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x37=-P2.910\n1.修复基因突变的怪物双倍攻速问题\n2.修复自动售货机被腐化的问题\n3.修复房间生成错误的问题\n4.部分文案描述错误修复
|
||||
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -5,7 +5,8 @@ windows.textchallenges.delete_seed_input = 清除
|
|||
windows.wndsettings$extendtab.fpsdisplay=显示帧率
|
||||
|
||||
windows.wndautoshop.welcome=自动食品售货机
|
||||
windows.wndautoshop.xwelcome=欢迎……客人……,请……自行……挑选购买……,全场_200_金币。
|
||||
windows.wndautoshop.xwelcome=欢迎……客人……,请……自行……挑选购买……,全场
|
||||
windows.wndautoshop.gold=金币
|
||||
windows.wndautoshop.buy=购买物品
|
||||
windows.wndautoshop.cancel=取消购买
|
||||
windows.wndautoshop.nomoney=金钱……不足,购买……失败……
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
@ -561,6 +561,11 @@ public abstract class Char extends Actor {
|
|||
if ( buff( Haste.class ) != null) speed *= 3f;
|
||||
if ( buff( HasteLing.class ) != null) speed *= 3f;
|
||||
if ( buff( Dread.class ) != null) speed *= 2f;
|
||||
|
||||
for (ChampionEnemy buff : buffs(ChampionEnemy.class)){
|
||||
speed *= buff.speedFactor();
|
||||
}
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ public class BeamTowerAdbility extends Buff {
|
|||
} else if (stateLoop == 4) {
|
||||
stateLoop++;
|
||||
FloatingText.show(p.x, p.y, "x", 0xFF8055);
|
||||
} else if (stateLoop == 5) {
|
||||
} else if (stateLoop == 8) {
|
||||
int w = Dungeon.level.width();
|
||||
int[] tile = {w + 1, w - 1, -w + 1, -w - 1};
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
|
@ -77,10 +77,10 @@ public class BeamTowerAdbility extends Buff {
|
|||
beamProc(b);
|
||||
}
|
||||
stateLoop++;
|
||||
} else if (stateLoop == 6) {
|
||||
} else if (stateLoop == 9) {
|
||||
stateLoop++;
|
||||
FloatingText.show(p.x, p.y, "S", 0x00ffff);
|
||||
} else if (stateLoop == 7) {
|
||||
} else if (stateLoop == 13) {
|
||||
int w = Dungeon.level.width();
|
||||
int[] tile = {w, w - 5, -w + 5, -w};
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
|
@ -90,10 +90,10 @@ public class BeamTowerAdbility extends Buff {
|
|||
beamProc(b);
|
||||
}
|
||||
stateLoop++;
|
||||
} else if (stateLoop == 10) {
|
||||
} else if (stateLoop == 16) {
|
||||
stateLoop++;
|
||||
FloatingText.show(p.x, p.y, "※", 0x00ffff);
|
||||
} else if (stateLoop == 11) {
|
||||
} else if (stateLoop == 18) {
|
||||
int w = Dungeon.level.width();
|
||||
int[] tile = {w + 1, w - 1, -w + 1, -w - 1};
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
|
@ -101,7 +101,7 @@ public class BeamTowerAdbility extends Buff {
|
|||
target.sprite.parent.add(new Beam.DeathRay(DungeonTilemap.raisedTileCenterToWorld(b.sourcePos), DungeonTilemap.raisedTileCenterToWorld(b.collisionPos)));
|
||||
beamProc(b);
|
||||
}
|
||||
if (stateLoop == 11) {
|
||||
if (stateLoop == 18) {
|
||||
int wx = Dungeon.level.width();
|
||||
int[] tilex = {w, -wx, 1, -1};
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
|
@ -112,7 +112,7 @@ public class BeamTowerAdbility extends Buff {
|
|||
}
|
||||
}
|
||||
stateLoop = 0;
|
||||
} else if (stateLoop == 0 || stateLoop == 3|| stateLoop == 8|| stateLoop == 9) {
|
||||
} else if (stateLoop == 0 || stateLoop >= 3 && stateLoop <= 17) {
|
||||
stateLoop++;
|
||||
} else {
|
||||
stateLoop = 0;
|
||||
|
|
|
@ -53,7 +53,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionHero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoRead;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessGoodSTR;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled;
|
||||
|
@ -255,6 +254,9 @@ public class Hero extends Char {
|
|||
|
||||
//TODO 灯火前行
|
||||
public int lanterfire;
|
||||
|
||||
//蛋糕
|
||||
public int CakeUsed;
|
||||
|
||||
public int HTBoost = 0;
|
||||
|
||||
|
@ -330,6 +332,8 @@ public class Hero extends Char {
|
|||
|
||||
private static final String LANTERFTR = "lanterfire";
|
||||
|
||||
private static final String CAKEUSED = "cakeused";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
|
||||
|
@ -350,7 +354,7 @@ public class Hero extends Char {
|
|||
bundle.put( EXPERIENCE, exp );
|
||||
bundle.put( HTBOOST, HTBoost );
|
||||
|
||||
|
||||
bundle.put( CAKEUSED, CakeUsed );
|
||||
|
||||
if (!this.name.equals("")) {
|
||||
bundle.put("name", this.name);
|
||||
|
@ -381,6 +385,8 @@ public class Hero extends Char {
|
|||
|
||||
STR = bundle.getInt( STRENGTH );
|
||||
|
||||
CakeUsed = bundle.getInt( CAKEUSED);
|
||||
|
||||
String name;
|
||||
if (bundle.contains("name")) {
|
||||
name = bundle.getString("name");
|
||||
|
@ -948,14 +954,12 @@ public class Hero extends Char {
|
|||
|
||||
switch (Random.Int(3)){
|
||||
case 0: default:
|
||||
Buff.affect(hero, BlessGoRead.class).set( (100), 1 );
|
||||
case 1:
|
||||
Buff.affect(hero, BlessMobDied.class).set( (100), 1 );
|
||||
break;
|
||||
case 2:
|
||||
case 1:
|
||||
Buff.affect(hero, BlessMixShiled.class).set( (100), 1 );
|
||||
break;
|
||||
case 3:
|
||||
case 2:
|
||||
Buff.affect(hero, BlessImmune.class).set( (100), 1 );
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.IceCityBoo
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.MagicGirlBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.NoKingMobBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.YellowSunBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Cake;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||
|
@ -180,6 +181,7 @@ public enum HeroClass {
|
|||
// Buff.affect(hero, ChampionHero.Giant.class, ChampionHero.DURATION);
|
||||
// Buff.affect(hero, ChampionHero.Growing.class, ChampionHero.DURATION);
|
||||
new Gauntlet().quantity(1).identify().collect();
|
||||
new Cake().quantity(100).identify().collect();
|
||||
new TengusMask().quantity(1).identify().collect();
|
||||
new KingsCrown().quantity(1).identify().collect();
|
||||
new ScrollOfIdentify().quantity(45).identify().collect();
|
||||
|
|
|
@ -41,7 +41,7 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class ColdMagicRat extends Mob implements Callback {
|
||||
|
||||
private static final float TIME_TO_ZAP = 1f;
|
||||
private static final float TIME_TO_ZAP = 3f;
|
||||
|
||||
{
|
||||
spriteClass = ColdRatSprite.class;
|
||||
|
@ -65,7 +65,7 @@ public class ColdMagicRat extends Mob implements Callback {
|
|||
|
||||
@Override
|
||||
public int attackSkill( Char target ) {
|
||||
return 1;
|
||||
return 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -109,7 +109,7 @@ public class ColdMagicRat extends Mob implements Callback {
|
|||
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
|
||||
}
|
||||
|
||||
int dmg = Random.NormalIntRange( 2, 4 );
|
||||
int dmg = Random.NormalIntRange( 10, 12 );
|
||||
enemy.damage( dmg, new DarkBolt() );
|
||||
|
||||
if (enemy == Dungeon.hero && !enemy.isAlive()) {
|
||||
|
|
|
@ -43,7 +43,7 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class IceGolem extends Mob implements Callback {
|
||||
|
||||
private static final float TIME_TO_ZAP = 1f;
|
||||
private static final float TIME_TO_ZAP = 5f;
|
||||
|
||||
{
|
||||
spriteClass = IceGolemSprite.class;
|
||||
|
|
|
@ -10,10 +10,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Boss;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Adrenaline;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArcaneArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
|
||||
|
@ -36,14 +34,13 @@ import com.shatteredpixel.shatteredpixeldungeon.custom.utils.GME;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.BeamCustom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Effects;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.MissileSpriteCustom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||
|
@ -68,6 +65,7 @@ import com.watabou.utils.PathFinder;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class MagicGirlDead extends Boss {
|
||||
{
|
||||
|
@ -80,7 +78,11 @@ public class MagicGirlDead extends Boss {
|
|||
HT=400;
|
||||
viewDistance = 18;
|
||||
}
|
||||
|
||||
//the actual affected cells
|
||||
private HashSet<Integer> affectedCells;
|
||||
//the cells to trace fire shots to, for visual effects.
|
||||
private HashSet<Integer> visualCells;
|
||||
private int direction = 0;
|
||||
{
|
||||
immunities.add(Sleep.class);
|
||||
|
||||
|
@ -146,6 +148,108 @@ public class MagicGirlDead extends Boss {
|
|||
yell(Messages.get(this, "damaged"));
|
||||
}
|
||||
|
||||
protected void onZap( Ballistica bolt ) {
|
||||
|
||||
for( int cell : affectedCells){
|
||||
|
||||
//ignore caster cell
|
||||
if (cell == bolt.sourcePos){
|
||||
continue;
|
||||
}
|
||||
|
||||
//only ignite cells directly near caster if they are flammable
|
||||
if (!Dungeon.level.adjacent(bolt.sourcePos, cell)
|
||||
|| Dungeon.level.flamable[cell]){
|
||||
GameScene.add( Blob.seed( cell, 1+2, Freezing.class ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void shoot(Char ch, int pos){
|
||||
final Ballistica shot = new Ballistica( ch.pos, pos, Ballistica.MAGIC_BOLT);
|
||||
fx(shot, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
onZap(shot);
|
||||
}
|
||||
}, ch);
|
||||
}
|
||||
|
||||
protected void fx(Ballistica bolt, Callback callback, Char ch ) {
|
||||
//need to perform flame spread logic here so we can determine what cells to put flames in.
|
||||
affectedCells = new HashSet<>();
|
||||
visualCells = new HashSet<>();
|
||||
|
||||
int maxDist = 4 + 4*4;
|
||||
int dist = Math.min(bolt.dist, maxDist);
|
||||
|
||||
for (int i = 0; i < PathFinder.CIRCLE8.length; i++){
|
||||
if (bolt.sourcePos+PathFinder.CIRCLE8[i] == bolt.path.get(1)){
|
||||
direction = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float strength = maxDist;
|
||||
for (int c : bolt.subPath(1, dist)) {
|
||||
strength--; //as we start at dist 1, not 0.
|
||||
affectedCells.add(c);
|
||||
if (strength > 1) {
|
||||
spreadFlames(c + PathFinder.CIRCLE8[left(direction)], strength - 1);
|
||||
spreadFlames(c + PathFinder.CIRCLE8[direction], strength - 1);
|
||||
spreadFlames(c + PathFinder.CIRCLE8[right(direction)], strength - 1);
|
||||
} else {
|
||||
visualCells.add(c);
|
||||
}
|
||||
}
|
||||
|
||||
//going to call this one manually
|
||||
visualCells.remove(bolt.path.get(dist));
|
||||
|
||||
for (int cell : visualCells){
|
||||
//this way we only get the cells at the tip, much better performance.
|
||||
((MagicMissile)ch.sprite.parent.recycle( MagicMissile.class )).reset(
|
||||
MagicMissile.FROST,
|
||||
ch.sprite,
|
||||
cell,
|
||||
null
|
||||
);
|
||||
}
|
||||
MagicMissile.boltFromChar( ch.sprite.parent,
|
||||
MagicMissile.FROST,
|
||||
ch.sprite,
|
||||
bolt.path.get(dist/2),
|
||||
callback );
|
||||
if(Dungeon.level.heroFOV[bolt.sourcePos] || Dungeon.level.heroFOV[bolt.collisionPos]){
|
||||
Sample.INSTANCE.play( Assets.Sounds.ZAP );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//burn... BURNNNNN!.....
|
||||
private void spreadFlames(int cell, float strength){
|
||||
if (strength >= 0 && (Dungeon.level.passable[cell] || Dungeon.level.flamable[cell])){
|
||||
affectedCells.add(cell);
|
||||
if (strength >= 1.5f) {
|
||||
visualCells.remove(cell);
|
||||
spreadFlames(cell + PathFinder.CIRCLE8[left(direction)], strength - 1.5f);
|
||||
spreadFlames(cell + PathFinder.NEIGHBOURS9[direction], strength - 1.5f);
|
||||
spreadFlames(cell + PathFinder.CIRCLE8[right(direction)], strength - 1.5f);
|
||||
} else {
|
||||
visualCells.add(cell);
|
||||
}
|
||||
} else if (!Dungeon.level.passable[cell])
|
||||
visualCells.add(cell);
|
||||
}
|
||||
|
||||
private int left(int direction){
|
||||
return direction == 0 ? 3 : direction-1;
|
||||
}
|
||||
|
||||
private int right(int direction){
|
||||
return direction == 7 ? 0 : direction+1;
|
||||
}
|
||||
private static final float TIME_TO_BURN = 6f;
|
||||
@Override
|
||||
public boolean act(){
|
||||
if(paralysed>0){
|
||||
|
@ -163,11 +267,15 @@ public class MagicGirlDead extends Boss {
|
|||
GLog.b("……你妄图使用这种方法来逃脱吗?");
|
||||
}
|
||||
}
|
||||
|
||||
if(buff(RageAndFire.class)!=null){
|
||||
//if target is locked, fire, target = -1
|
||||
if(lastTargeting != -1){
|
||||
//no spend, execute next act
|
||||
fireProc(lastTargeting);
|
||||
sprite.attack( enemy.pos );
|
||||
spend( attackDelay()*5f );
|
||||
shoot(this, enemy.pos);
|
||||
|
||||
return true;
|
||||
//else try to lock target
|
||||
}else if(findTargetLocation()) {
|
||||
|
@ -193,27 +301,14 @@ public class MagicGirlDead extends Boss {
|
|||
|
||||
if (Dungeon.level.map[step] == Terrain.WATER && state == HUNTING) {
|
||||
|
||||
if (Dungeon.level.heroFOV[step] && HP < 200) {
|
||||
if (buff(Haste.class) == null) {
|
||||
Buff.affect(this, Barrier.class).setShield( 20);
|
||||
Buff.affect(this, Haste.class, 5f);
|
||||
Buff.affect(this, ArcaneArmor.class).set(Dungeon.hero.lvl + 10, 10);
|
||||
Buff.affect(this, Healing.class).setHeal(10, 0f, 6);
|
||||
new SRPDICLRPRO().spawnAround(pos);
|
||||
Buff.affect(this, Adrenaline.class, 20f);
|
||||
yell( Messages.get(this, "arise2") );
|
||||
GLog.b(Messages.get(this, "shield2"));
|
||||
enemy.sprite.showStatus(0x00ffff, ("游戏开始!!!"));
|
||||
}
|
||||
sprite.emitter().start(SparkParticle.STATIC, 0.05f, 20);
|
||||
} else if (Dungeon.level.heroFOV[step]) {
|
||||
if (Dungeon.level.heroFOV[step]) {
|
||||
if (buff(Haste.class) == null) {
|
||||
Buff.affect(this, Haste.class, 10f);
|
||||
Buff.affect(this, Healing.class).setHeal(42, 0f, 6);
|
||||
new SRPDICLRPRO().spawnAround(pos);
|
||||
yell( Messages.get(this, "arise") );
|
||||
GLog.b(Messages.get(this, "shield"));
|
||||
enemy.sprite.showStatus(0x00ffff, ("不自量力!!!"));
|
||||
enemy.sprite.showStatus(0x00ffff, ("!!!"));
|
||||
}
|
||||
sprite.emitter().start(SparkParticle.STATIC, 0.05f, 20);
|
||||
}
|
||||
|
@ -572,36 +667,6 @@ public class MagicGirlDead extends Boss {
|
|||
}
|
||||
}
|
||||
|
||||
protected void fireProc(int targetCell){
|
||||
Ballistica ballistica = new Ballistica(pos, targetCell, Ballistica.PROJECTILE);
|
||||
((MissileSpriteCustom)sprite.parent.recycle(MissileSpriteCustom.class)).reset(
|
||||
sprite, ballistica.collisionPos, new Bomb(), 10f, 2.0f,
|
||||
new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
int[] cells = GME.NEIGHBOURS5();
|
||||
for(int i: cells){
|
||||
int c = i+ballistica.collisionPos;
|
||||
Char ch = findChar(c);
|
||||
if(ch!=null){
|
||||
if(ch.alignment != Alignment.ENEMY){
|
||||
int damage = Random.Int(14, 24);
|
||||
damage -= ch.drRoll();
|
||||
ch.damage(damage, this);
|
||||
if(ch == hero && !ch.isAlive()){
|
||||
Dungeon.fail(this.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
CellEmitter.center(c).burst(SnowParticle.FACTORY, 15);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
lastTargeting = -1;
|
||||
}
|
||||
|
||||
protected boolean findTargetLocation(){
|
||||
if(enemy!=null && enemySeen){
|
||||
lastTargeting = enemy.pos;
|
||||
|
|
|
@ -549,13 +549,13 @@ public abstract class Mob extends Char {
|
|||
public float attackDelay() {
|
||||
float delay = 1f;
|
||||
if ( buff(Adrenaline.class) != null) delay /= 1.5f;
|
||||
return super.attackDelay()*(Dungeon.isChallenged(Challenges.SBSG) ? (0.5f * scaleFactor) : delay);
|
||||
return super.attackDelay()*(delay);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc(Char enemy, int damage) {
|
||||
return super.attackProc(enemy,
|
||||
(int) (damage*(Dungeon.isChallenged(Challenges.SBSG) ? (0.6f * scaleFactor) : 1)));
|
||||
(int) (damage*(Dungeon.isChallenged(SBSG) ? (0.6f * scaleFactor) : 1)));
|
||||
}
|
||||
|
||||
protected boolean doAttack( Char enemy ) {
|
||||
|
@ -583,24 +583,11 @@ public abstract class Mob extends Char {
|
|||
if ( !surprisedBy(enemy)
|
||||
&& paralysed == 0
|
||||
&& !(alignment == Alignment.ALLY && enemy == hero)) {
|
||||
return (int) (this.defenseSkill/(Dungeon.isChallenged(Challenges.SBSG) ? (0.4f * scaleFactor) : 1));
|
||||
return (int) (this.defenseSkill/(Dungeon.isChallenged(SBSG) ? (0.4f * scaleFactor) : 1));
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float speed() {
|
||||
|
||||
if(Dungeon.isChallenged(SBSG)) {
|
||||
//移速控制
|
||||
for (ChampionEnemy buff : buffs(ChampionEnemy.class)) {
|
||||
baseSpeed = buff.speedFactor();
|
||||
}
|
||||
}
|
||||
|
||||
return super.speed() * (1);
|
||||
}
|
||||
|
||||
protected boolean hitWithRanged = false;
|
||||
|
||||
|
|
|
@ -25,8 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
|
@ -41,7 +40,7 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class RedSwarm extends Mob implements Callback {
|
||||
|
||||
private static final float TIME_TO_ZAP = 1f;
|
||||
private static final float TIME_TO_ZAP = 3f;
|
||||
|
||||
{
|
||||
spriteClass = RedSwarmSprite.class;
|
||||
|
@ -65,12 +64,12 @@ public class RedSwarm extends Mob implements Callback {
|
|||
|
||||
@Override
|
||||
public int attackSkill( Char target ) {
|
||||
return 1;
|
||||
return 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int drRoll() {
|
||||
return Random.NormalIntRange(0, 1);
|
||||
return Random.NormalIntRange(0, 5);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -105,7 +104,7 @@ public class RedSwarm extends Mob implements Callback {
|
|||
if (hit( this, enemy, true )) {
|
||||
//TODO would be nice for this to work on ghost/statues too
|
||||
if (enemy == Dungeon.hero && Random.Int( 2 ) == 0) {
|
||||
Buff.prolong( enemy, Frost.class, Degrade.DURATION );
|
||||
Buff.affect(enemy, Burning.class).reignite(enemy);
|
||||
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
|
||||
}
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ public class CrystalLingTower extends Mob {
|
|||
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) {
|
||||
if (mob instanceof FireMagicDied) {
|
||||
Viscosity.DeferedDamage deferred = Buff.affect( mob, Viscosity.DeferedDamage.class );
|
||||
deferred.prolong( 10000 );
|
||||
deferred.prolong( 1124 );
|
||||
GLog.n( Messages.get(FireMagicDied.class, "dixsdf" ));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,9 +82,9 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
private static final float TIME_TO_ZAP = 6f;
|
||||
|
||||
{
|
||||
HP = HT = 500;
|
||||
HP = HT = 400;
|
||||
EXP = 80;
|
||||
defenseSkill = 10;
|
||||
defenseSkill = 1;
|
||||
spriteClass = FireMagicGirlSprite.class;
|
||||
flying = true;
|
||||
properties.add(Property.BOSS);
|
||||
|
@ -127,35 +127,6 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
return (int)(super.defenseSkill(enemy) * ((HP*2 <= HT)? 1.5 : 1));
|
||||
}
|
||||
private float[] skillBalance = new float[]{100f, 100f, 100f};
|
||||
private void actScanning(){
|
||||
if(phase>0) {
|
||||
--beamCD;
|
||||
if (beamCD <= 0) {
|
||||
Buff.detach(this, FireMagicDied.YogScanHalf.class);
|
||||
int skill = Random.chances(skillBalance);
|
||||
if (skill == 0) {
|
||||
Char enemy = (this.enemy == null ? Dungeon.hero : this.enemy);
|
||||
int w = Dungeon.level.width();
|
||||
int dx = enemy.pos % w - pos % w;
|
||||
int dy = enemy.pos / w - pos / w;
|
||||
int direction = 2 * (Math.abs(dx) > Math.abs(dy) ? 0 : 1);
|
||||
direction += (direction > 0 ? (dy > 0 ? 1 : 0) : (dx > 0 ? 1 : 0));
|
||||
Buff.affect(this, FireMagicDied.YogScanHalf.class).setPos(pos, direction);
|
||||
skillBalance[skill] /= 1.75f;
|
||||
beamCD = 20 + 8 - (phase == 5 ? 19 : 0);
|
||||
Buff.affect(this, Healing.class).setHeal(5, 0f, 6);
|
||||
sprite.showStatus(0xff0000, Messages.get(this, "dead"));
|
||||
} else {
|
||||
Buff.affect(this, YogReal.YogScanRound.class).setPos(pos);
|
||||
skillBalance[skill] /= 2f;
|
||||
Buff.affect(this, Healing.class).setHeal(5, 0f, 6);
|
||||
beamCD = 20 + 10 - (phase == 5?19:0);
|
||||
sprite.showStatus(0x00ff00, Messages.get(this, "life"));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int drRoll() {
|
||||
|
@ -354,7 +325,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
@Override
|
||||
public boolean act() {
|
||||
if (phase == 1 && HP <= 350) {
|
||||
actScanning();
|
||||
//actScanning();
|
||||
if (Dungeon.level.water[pos] && HP < HT) {
|
||||
HP += healInc;
|
||||
|
||||
|
@ -502,10 +473,12 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
return Dungeon.level.distance(enemy.pos, pos) <= 2
|
||||
&& new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos
|
||||
&& new Ballistica( enemy.pos, pos, Ballistica.PROJECTILE).collisionPos == pos;
|
||||
} else if(HP > 400) {
|
||||
return super.canAttack(enemy);
|
||||
} else if(HP < 200) {
|
||||
return Dungeon.level.distance(enemy.pos, pos) <= 3
|
||||
&& new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos
|
||||
&& new Ballistica( enemy.pos, pos, Ballistica.PROJECTILE).collisionPos == pos;
|
||||
} else {
|
||||
return new Ballistica(pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
||||
return super.canAttack(enemy);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -578,18 +551,17 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
damage = super.attackProc( enemy, damage );
|
||||
if(HP > 450){
|
||||
if(HP > 300){
|
||||
if (Random.Int( 3 ) == 0) {
|
||||
Buff.affect( hero, HalomethaneBurning.class ).reignite( hero, 7f );
|
||||
enemy.sprite.burst( 0x000000, 5 );
|
||||
}
|
||||
} else if (HP > 400) {
|
||||
} else if (HP < 200) {
|
||||
if (Random.NormalFloat( 2, 9 ) == 4) {
|
||||
GLog.n( Messages.get(FireMagicDied.class, "died_kill",Dungeon.hero.name()) );
|
||||
}
|
||||
zap();
|
||||
} else {
|
||||
zap();
|
||||
//doYogLasers();
|
||||
if (Random.Int( 3 ) == 0) {
|
||||
Buff.affect( hero, HalomethaneBurning.class ).reignite( hero, 24f );
|
||||
|
@ -661,17 +633,17 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean getCloser(int target) {
|
||||
this.pumpedUp = 0;
|
||||
if (this.state != this.HUNTING) {
|
||||
return FireMagicDied.super.getCloser(target);
|
||||
}
|
||||
if (!this.enemySeen || !getFurther(target)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// @Override
|
||||
// protected boolean getCloser(int target) {
|
||||
// this.pumpedUp = 0;
|
||||
// if (this.state != this.HUNTING) {
|
||||
// return FireMagicDied.super.getCloser(target);
|
||||
// }
|
||||
// if (!this.enemySeen || !getFurther(target)) {
|
||||
// return false;
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void damage(int dmg, Object src) {
|
||||
|
@ -718,7 +690,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
} else if (phase == 2 && shielding() == 0 && HP <= 200) {
|
||||
actPhaseTwoSummon();
|
||||
yell( Messages.get(this, "enraged" ));
|
||||
GLog.n( Messages.get(this, "xslx") );
|
||||
GLog.pink( Messages.get(this, "xslx") );
|
||||
|
||||
//T3 阶段
|
||||
CrystalLingTower abc = new CrystalLingTower();
|
||||
|
@ -736,7 +708,7 @@ public class FireMagicDied extends Mob implements Callback {
|
|||
buff.detach();
|
||||
}
|
||||
}
|
||||
actScanning();
|
||||
//actScanning();
|
||||
phase = 3;
|
||||
summonsMade = 0;
|
||||
sprite.idle();
|
||||
|
|
|
@ -39,6 +39,20 @@ public class AutoShopReBot extends NPC {
|
|||
bundle.put(FIRST, first);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage( int dmg, Object src ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int defenseSkill( Char enemy ) {
|
||||
return INFINITE_EVASION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reset() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.watabou.utils.PathFinder;
|
||||
|
@ -49,4 +50,9 @@ public abstract class NPC extends Mob {
|
|||
public void beckon( int cell ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add( Buff buff ) {
|
||||
//lee();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.food;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
|
@ -43,13 +44,19 @@ public class Cake extends Food {
|
|||
@Override
|
||||
protected void satisfy(Hero hero) {
|
||||
Buff.prolong( hero, Haste.class, 10f);
|
||||
if(Random.Float()<0.45f) {
|
||||
if(Random.Float()<0.09f && hero.CakeUsed<2) {
|
||||
hero.STR++;
|
||||
hero.CakeUsed++;
|
||||
hero.sprite.showStatus(CharSprite.POSITIVE, "+1");
|
||||
GLog.p(Messages.get(this, "eat_good"));
|
||||
} else if (hero.CakeUsed==2 && Random.Float()<0.09f) {
|
||||
Buff.affect(hero, Barrier.class).setShield(((hero.HT/4)));
|
||||
GLog.p(Messages.get(this, "eat_good2"));
|
||||
} else {
|
||||
Buff.affect(hero, Healing.class).setHeal((int) (0.4f * hero.HT/5 ), 0.25f, 0);
|
||||
cure( hero );
|
||||
}
|
||||
Buff.affect(hero, Healing.class).setHeal((int) (0.4f * hero.HT/5), 0.25f, 0);
|
||||
cure( hero );
|
||||
|
||||
super.satisfy( hero );
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ public class Switch extends Food {
|
|||
|
||||
@Override
|
||||
protected void satisfy(Hero hero) {
|
||||
Buff.affect(hero, Barrier.class).setShield(((20 * Dungeon.depth/5)));
|
||||
Buff.affect(hero, Barrier.class).setShield(((20 + 20 * Dungeon.depth/5)));
|
||||
super.satisfy( hero );
|
||||
}
|
||||
|
||||
|
|
|
@ -29,10 +29,6 @@ public class CrystalKey extends Key {
|
|||
image = ItemSpriteSheet.CRYSTAL_KEY;
|
||||
}
|
||||
|
||||
public CrystalKey() {
|
||||
this( 0 );
|
||||
}
|
||||
|
||||
public CrystalKey( int depth ) {
|
||||
super();
|
||||
this.depth = depth;
|
||||
|
|
|
@ -91,16 +91,19 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlueFuck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorrosion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFireblast;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfGodIce;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLivingEarth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfMagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfPrismaticLight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfScale;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfTransfusion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.AssassinsBlade;
|
||||
|
@ -229,6 +232,9 @@ public enum Catalog {
|
|||
WANDS.seen.put( WandOfTransfusion.class, false);
|
||||
WANDS.seen.put( WandOfCorruption.class, false);
|
||||
WANDS.seen.put( WandOfRegrowth.class, false);
|
||||
WANDS.seen.put( WandOfGodIce.class, false);
|
||||
WANDS.seen.put( WandOfScale.class, false);
|
||||
WANDS.seen.put( WandOfBlueFuck.class, false);
|
||||
|
||||
RINGS.seen.put( RingOfAccuracy.class, false);
|
||||
RINGS.seen.put( RingOfEnergy.class, false);
|
||||
|
|
|
@ -1,14 +1,27 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.EXSG;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.Holiday.HWEEN;
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel.Holiday.XMAS;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.AutoShopReBot;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.features.Maze;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Point;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class AutoShopRoom extends SpecialRoom {
|
||||
|
||||
|
@ -16,34 +29,87 @@ public class AutoShopRoom extends SpecialRoom {
|
|||
}
|
||||
|
||||
public int minWidth() {
|
||||
return Math.max(8, (int) ( 3.0d));
|
||||
return 9;
|
||||
}
|
||||
|
||||
public int minHeight() {
|
||||
return Math.max(8, (int) (3.0d));
|
||||
return 9;
|
||||
}
|
||||
|
||||
private static RegularLevel.Holiday holiday;
|
||||
|
||||
public enum Holiday{
|
||||
NONE,
|
||||
ZQJ, //TBD
|
||||
HWEEN,//2nd week of october though first day of november
|
||||
XMAS //3rd week of december through first week of january
|
||||
}
|
||||
|
||||
static{
|
||||
|
||||
holiday = RegularLevel.Holiday.NONE;
|
||||
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
switch(calendar.get(Calendar.MONTH)){
|
||||
case Calendar.JANUARY:
|
||||
if (calendar.get(Calendar.WEEK_OF_MONTH) == 1)
|
||||
holiday = XMAS;
|
||||
break;
|
||||
//2022 9.10-10.1
|
||||
case Calendar.SEPTEMBER:
|
||||
if (calendar.get(Calendar.DAY_OF_MONTH) >= 10 ){
|
||||
holiday = RegularLevel.Holiday.ZQJ;
|
||||
} else {
|
||||
holiday = RegularLevel.Holiday.NONE;
|
||||
}
|
||||
break;
|
||||
case Calendar.OCTOBER:
|
||||
if (calendar.get(Calendar.DAY_OF_MONTH) == 1 ){
|
||||
holiday = RegularLevel.Holiday.ZQJ;
|
||||
} else {
|
||||
holiday = RegularLevel.Holiday.NONE;
|
||||
}
|
||||
break;
|
||||
case Calendar.DECEMBER:
|
||||
if (calendar.get(Calendar.WEEK_OF_MONTH) >= 3)
|
||||
holiday = XMAS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void paint(Level level) {
|
||||
Painter.fill(level, this, 4);
|
||||
Painter.fill(level, this, 1, 14);
|
||||
placeShopkeeper(level);
|
||||
boolean[] passable = new boolean[width()*height()];
|
||||
boolean[][] maze = Maze.generate(this);
|
||||
for (int x = 0; x < maze.length; x++) {
|
||||
for (int y = 0; y < maze[0].length; y++) {
|
||||
if (maze[x][y] == Maze.FILLED) {
|
||||
Painter.fill(level, x + left, y + top, 1, 1, Terrain.CHASM);
|
||||
}
|
||||
passable[x + width()*y] = maze[x][y] == Maze.EMPTY;
|
||||
|
||||
if(holiday == HWEEN || holiday == XMAS|| Dungeon.isChallenged(EXSG)) {
|
||||
placeShopkeeper(level);
|
||||
}
|
||||
|
||||
for (Room.Door door : this.connected.values()) {
|
||||
door.set(Door.Type.LOCKED);
|
||||
}
|
||||
Door entrance = entrance();
|
||||
entrance.set( Door.Type.LOCKED );
|
||||
level.addItemToSpawn( new IronKey( Dungeon.depth ) );
|
||||
int door = entrance.x + entrance.y * level.width();
|
||||
|
||||
//布局 x2 箱子 左
|
||||
addChest( level, (top + 2) * level.width() + right-2, door );
|
||||
addChestB( level, (bottom - 2) * level.width() + right-2, door );
|
||||
|
||||
//布局 x2 箱子 右
|
||||
addChestC( level, (top + 2) * level.width() + right-6, door );
|
||||
addChestD( level, (bottom - 2) * level.width() + right-6, door );
|
||||
|
||||
//7,17层---20%概率出金箱子 20% probability of gold chest
|
||||
if(Dungeon.depth == 7||Dungeon.depth == 17) {
|
||||
if (Random.Float() < 0.2f) {
|
||||
addChestE(level, (top + 5) * level.width() + right - 2, door);
|
||||
addChestF(level, (top + 5) * level.width() + right - 6, door);
|
||||
level.addItemToSpawn(new GoldenKey(Dungeon.depth));
|
||||
}
|
||||
}
|
||||
PathFinder.setMapSize(width(), height());
|
||||
Point entrance = entrance();
|
||||
int entrancePos = (entrance.x - left) + width()*(entrance.y - top);
|
||||
PathFinder.buildDistanceMap( entrancePos, passable );
|
||||
for (Room.Door door : this.connected.values()) {
|
||||
door.set(Room.Door.Type.REGULAR);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void placeShopkeeper(Level level) {
|
||||
|
@ -54,5 +120,95 @@ public class AutoShopRoom extends SpecialRoom {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private static void addChest( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Item prize = new Gold( Random.IntRange( 10, 25 ) );
|
||||
|
||||
level.drop( prize, pos ).type = Heap.Type.CHEST;
|
||||
}
|
||||
|
||||
private static void addChestB( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Item prize = Generator.randomUsingDefaults( Generator.Category.STONE );
|
||||
|
||||
level.drop( prize, pos ).type = Heap.Type.CHEST;
|
||||
}
|
||||
|
||||
private static void addChestC( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Item prize = Generator.randomUsingDefaults( Generator.Category.MISSILE );
|
||||
|
||||
level.drop( prize, pos ).type = Heap.Type.CHEST;
|
||||
}
|
||||
|
||||
private static void addChestD( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Item prize = Generator.randomUsingDefaults( Generator.Category.SEED );
|
||||
|
||||
level.drop( prize, pos ).type = Heap.Type.CHEST;
|
||||
}
|
||||
|
||||
private static void addChestE( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Wand mw = (Wand) Generator.randomUsingDefaults( Generator.Category.WAND );
|
||||
mw.level(Random.Int(0,3));
|
||||
mw.cursed = false;
|
||||
mw.identify();
|
||||
level.drop(mw, pos ).type = Heap.Type.LOCKED_CHEST;
|
||||
}
|
||||
|
||||
private static void addChestF( Level level, int pos, int door ) {
|
||||
|
||||
if (pos == door - 1 ||
|
||||
pos == door + 1 ||
|
||||
pos == door - level.width() ||
|
||||
pos == door + level.width()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Weapon mw = Generator.randomWeapon(11);
|
||||
mw.level(Random.Int(0,3));
|
||||
mw.cursed = false;
|
||||
mw.identify();
|
||||
level.drop(mw, pos ).type = Heap.Type.LOCKED_CHEST;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMixShiled;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayCursed;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayKill;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicGirlDebuff.MagicGirlSayMoneyMore;
|
||||
|
@ -1374,6 +1375,10 @@ public class GameScene extends PixelScene {
|
|||
cure( Dungeon.hero );
|
||||
}
|
||||
|
||||
if (Dungeon.hero.buff(LockedFloor.class) == null) {
|
||||
BGMPlayer.playBGMWithDepth();
|
||||
}
|
||||
|
||||
Sample.INSTANCE.play( Assets.Sounds.BOSS );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -435,6 +435,9 @@ public class InterlevelScene extends PixelScene {
|
|||
private void returnPO() throws IOException {
|
||||
Mob.holdAllies( Dungeon.level );
|
||||
hero.STR = 10;
|
||||
|
||||
hero.CakeUsed = 0;
|
||||
|
||||
hero.lvl = 1;
|
||||
InterlevelScene.returnDepth = Math.max(1, (Dungeon.depth - 1 - (Dungeon.depth-2)%5));
|
||||
InterlevelScene.returnPos = -1;
|
||||
|
|
|
@ -17,7 +17,6 @@ public class ColdRatSprite extends MobSprite {
|
|||
super();
|
||||
|
||||
texture( Assets.Sprites.COLDRAT );
|
||||
|
||||
TextureFilm frames = new TextureFilm( texture, 16, 15 );
|
||||
|
||||
idle = new Animation( 2, true );
|
||||
|
@ -32,6 +31,8 @@ public class ColdRatSprite extends MobSprite {
|
|||
die = new Animation( 10, false );
|
||||
die.frames( frames, 11, 12, 13, 14 );
|
||||
|
||||
zap = attack.clone();
|
||||
|
||||
play( idle );
|
||||
}
|
||||
public void zap( int cell ) {
|
||||
|
|
|
@ -3,13 +3,16 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses.FireMagicDied;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.watabou.noosa.TextureFilm;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.utils.Callback;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -45,7 +48,7 @@ public class FireMagicGirlSprite extends MobSprite {
|
|||
|
||||
die = new Animation( 10, false );
|
||||
die.frames( frames,2,3,4,5 );
|
||||
|
||||
zap = attack.clone();
|
||||
play(idle);
|
||||
|
||||
spray = centerEmitter();
|
||||
|
@ -121,6 +124,30 @@ public class FireMagicGirlSprite extends MobSprite {
|
|||
spray.visible = visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attack( int cell ) {
|
||||
if (!Dungeon.level.adjacent(cell, ch.pos)) {
|
||||
play( zap );
|
||||
MagicMissile.boltFromChar( parent,
|
||||
MagicMissile.FIRE,
|
||||
this,
|
||||
cell,
|
||||
new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
((FireMagicDied)ch).onZapComplete();
|
||||
}
|
||||
} );
|
||||
Sample.INSTANCE.play( Assets.Sounds.ZAP );
|
||||
turnTo( ch.pos , cell );
|
||||
|
||||
} else {
|
||||
|
||||
super.attack( cell );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete( Animation anim ) {
|
||||
super.onComplete(anim);
|
||||
|
|
|
@ -49,6 +49,8 @@ public class RedSwarmSprite extends MobSprite {
|
|||
die = new Animation( 15, false );
|
||||
die.frames( frames, 10, 11, 12, 13, 14 );
|
||||
|
||||
zap = attack.clone();
|
||||
|
||||
play( idle );
|
||||
}
|
||||
|
||||
|
|
|
@ -270,7 +270,7 @@ public class StatusPane extends Component {
|
|||
heroInfoOnBar.setRect(heroInfo.right(), y + 19, 130, 20);
|
||||
|
||||
if(SPDSettings.FPSLimit()) {
|
||||
fpsText.scale.set(PixelScene.align(0.9f));
|
||||
fpsText.scale.set(PixelScene.align(0.8f));
|
||||
fpsText.x = MenuPane.version.x - 15;
|
||||
fpsText.y = MenuPane.version.y - 10;
|
||||
PixelScene.align(fpsText);
|
||||
|
@ -323,7 +323,7 @@ public class StatusPane extends Component {
|
|||
buffs.setPos( x + 31, y + 12 );
|
||||
|
||||
if(SPDSettings.FPSLimit()) {
|
||||
fpsText.scale.set(PixelScene.align(0.9f));
|
||||
fpsText.scale.set(PixelScene.align(0.8f));
|
||||
fpsText.x = MenuPane.version.x - 15;
|
||||
fpsText.y = MenuPane.version.y - 10;
|
||||
PixelScene.align(fpsText);
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.sprites.AutoShopRoBotSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdGuardSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DM300Sprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite;
|
||||
|
@ -20,6 +21,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.MagicGirlSprite;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MolotovHuntsmanSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MurdererSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.RedSwarmSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.SRPDHBLRTT;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ShopkKingSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.SlimeKingSprite;
|
||||
|
@ -37,6 +39,8 @@ import java.util.ArrayList;
|
|||
public class vM0_6_7_X_Changes {
|
||||
|
||||
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
|
||||
add_v0_6_20_Changes(changeInfos);
|
||||
add_v0_6_19_Changes(changeInfos);
|
||||
add_v0_6_18_Changes(changeInfos);
|
||||
add_v0_6_17_Changes(changeInfos);
|
||||
add_v0_6_16_Changes(changeInfos);
|
||||
|
@ -58,6 +62,71 @@ public class vM0_6_7_X_Changes {
|
|||
add_v0_6_0_Changes(changeInfos);
|
||||
}
|
||||
|
||||
public static void add_v0_6_20_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("Coming Soon-Beta21--P3", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.AMULET), ("MLPD上半段-试炼与水晶之心"),
|
||||
("我们成功的拿到了水晶之心,然而我们在最终调查中得知YOG不是真正的罪魁祸首……" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG20), ("BossRush"),
|
||||
("常规的开局你可能已经有所厌倦,地牢中的首领也是如此。这一次,不为成败,只为实力而战" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ICEBOOK), ("新年活动"),
|
||||
("新年的钟声即将敲响,你接到了一份神秘的邀请……")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.FIREDVS), ("重构世界观"),
|
||||
("魔绫的像素地牢已经陪你走过一个春秋了,然而,魔绫的剧情,你是否清楚呢?")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SKELETONGOLD), ("部分Boss重做"),
|
||||
("为了让魔绫和底层破碎更能区分,部分boss会进行改进或者重做。敬请期待")));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ICEDVS), ("不止于此"),
|
||||
("P3的更新远远不止这些,而且这次我们会将一些想法和建议交给玩家,让我们一起制作P3吧,完善上半段旅程吧。")));
|
||||
}
|
||||
|
||||
public static void add_v0_6_19_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p2.910", 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 AutoShopRoBotSprite(), ("自动食品售货机新房间"),
|
||||
("房间会在游戏中生成,里面有固定四个普通补给宝箱,且有5%的概率出现两个金宝箱(二选一)。\n\n但售货机只会在节日期间" +
|
||||
"(万圣,圣诞,中秋,国庆)或开启药水癔症挑战后出现。且售货机随着地牢深度的增加,商品购买的金币会有所追加。" )));
|
||||
|
||||
changes = new ChangeInfo("修复", false, null);
|
||||
changes.hardlight(Window.CYELLOW);
|
||||
changeInfos.add(changes);
|
||||
|
||||
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_06X37")));
|
||||
|
||||
changes = new ChangeInfo("调整", false, null);
|
||||
changes.hardlight(Window.SKYBULE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new RedSwarmSprite(), ("血红苍蝇"),
|
||||
("数值调整,攻击动画加入,远程魔法攻击3回合一次,并且有概率造成目标燃烧。" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new ColdRatSprite(), ("寒冰魔鼠"),
|
||||
("数值调整,攻击动画加入,远程魔法攻击3回合一次" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new MagicGirlSprite(), ("寒冰魔女调整"),
|
||||
("攻击AI调整,攻击动画加入,加入新的攻击策略,自身低血量时踩水不再狂暴" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new IceStalSprites(), ("浊焰魔女调整"),
|
||||
("激光攻击延长,攻击AI调整,攻击动画加入。" )));
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.CAKE), ("草莓奶油芝士蛋糕"),
|
||||
("获得力量概率为9%,且每局游戏最多获得两次力量。之后触发将会转换为英雄血量25%的奥术护盾。" )));
|
||||
|
||||
}
|
||||
|
||||
public static void add_v0_6_18_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.0.0-Beta21-p2.9(圣诞)", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
|
@ -345,10 +414,10 @@ public class vM0_6_7_X_Changes {
|
|||
changes.addButton( new ChangeButton(new BuffIcon(BuffIndicator.GOBUFF_UPRD, true), "灯火专有-Gobuff",
|
||||
"追加了6种增益Buff\n\n" +
|
||||
"纯洁的赞歌:\n" +
|
||||
"前路 本大层内,饥饿高于90%的情况下,获得每回合+2的血量。\n" +
|
||||
"前路 本大层内,饥饿高于50%的情况下,获得每回合+2的血量。\n" +
|
||||
"富饶 本大层内,商店打3折!\n" +
|
||||
"守护 本大层内,满血可额外获得一些护盾值 冷却:300回合\n" +
|
||||
"安息 本大层内,玩家伤害x2倍\n" +
|
||||
"安息 本大层内,玩家物理伤害x2倍\n" +
|
||||
"隐没 本大层内,玩家免疫魔法效果和减免20%伤害\n" +
|
||||
"坚毅 本大层内,玩家力量+8"));
|
||||
|
||||
|
|
|
@ -40,9 +40,10 @@ public class WndAutoShop extends Window {
|
|||
IconTitle titlebar = new IconTitle();
|
||||
titlebar.setRect(0, 0, WIDTH, 0);
|
||||
titlebar.icon(new AutoShopRoBotSprite());
|
||||
titlebar.label(Messages.get(WndAutoShop.class,"welcome"));
|
||||
titlebar.label(Messages.get(WndAutoShop.class,"welcome") );
|
||||
add( titlebar );
|
||||
RenderedTextBlock message = PixelScene.renderTextBlock( (Messages.get(WndAutoShop.class,"xwelcome")), 6 );
|
||||
RenderedTextBlock message =
|
||||
PixelScene.renderTextBlock( (Messages.get(WndAutoShop.class,"xwelcome"))+ 200 * (Dungeon.depth / 5) +(Messages.get(WndAutoShop.class,"gold")), 6 );
|
||||
message.maxWidth(WIDTH);
|
||||
message.setPos(0, titlebar.bottom() + GAP);
|
||||
add( message );
|
||||
|
@ -143,8 +144,8 @@ public class WndAutoShop extends Window {
|
|||
buff.detach();
|
||||
}
|
||||
}
|
||||
} else if(Dungeon.gold > 200) {
|
||||
Dungeon.gold-=200* Random.Int(2)+hero.lvl/5+10;
|
||||
} else if(Dungeon.gold > 200 * (Dungeon.depth/5)) {
|
||||
Dungeon.gold-=200 * (Dungeon.depth/5);
|
||||
WndAutoShop.this.selectReward( item );
|
||||
if(Dungeon.hero.buff(AutoRandomBuff.class) != null) {
|
||||
AutoRandomBuff.level -= Random.Int(4);
|
||||
|
|
Loading…
Reference in New Issue
Block a user