diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties
index d125de096..1014a8a98 100644
--- a/core/src/main/assets/messages/actors/actors.properties
+++ b/core/src/main/assets/messages/actors/actors.properties
@@ -11,11 +11,13 @@ text.textchallenges.hint = 不输入即为随机种子
text.textchallenges.delete_seed_input = 清除
actors.mobs.bloodbat$bloodbatrecharge.name=血影充能
-actors.mobs.bloodbat$bloodbatrecharge.desc=小血影正在充能,等待下一次和主人并肩作战的时候!
+actors.mobs.bloodbat$bloodbatrecharge.desc=小血影正在充能,等待下一次和主人并肩作战的时候!\n\n剩余充能时长:%s回合.
actors.mobs.bloodbat.name=血影蝙蝠
actors.mobs.bloodbat.desc=极影铃虹的随身伙伴,为了主人的安全将会让一切试图伤害主人的家伙万劫不复。\n\n它的能力和主人紧密相连,主人的成长也会让小血影成长!
+actors.mobs.dimandking$sacrificesubjectlistener.rankings_desc=被钻石宝箱王说教至死
+
actors.buffs.halomethaneburning.name=磷火缠身
actors.buffs.halomethaneburning.heromsg=磷火像恶魔一样缠在了你的身上!
actors.buffs.halomethaneburning.burnsup=%s被烧的渣都不剩了!
@@ -25,7 +27,6 @@ actors.buffs.halomethaneburning.desc=没什么比被磷火缠身更痛苦了。
actors.buffs.halofireimblue.name=磷火审判
actors.buffs.halofireimblue.desc=你被灌注了磷火的力量!\n\n所有物理攻击都可以使敌人磷火缠身。与此同时你对磷火,火焰完全免疫。\n\n剩余磷火审判效果时长:%s回合
-
actors.mobs.slimeprincess.name=史莱姆公主
actors.mobs.slimeprincess.notice=站住!入侵者!
actors.mobs.slimeprincess.defeated=你的行为会被世人铭记!
@@ -175,6 +176,7 @@ actors.mobs.dimandking.teleport_1=立刻,驱赶此人!
actors.mobs.dimandking.teleport_2=立即,拖住此人!
actors.mobs.dimandking.buff_all=立刻解决此人!
actors.mobs.dimandking.sacrifice=光荣的自爆吧!
+actors.mobs.dimandking.waring=钻石宝箱王正在使怪物激素上升,他们随时可能自爆,离他们远点!
actors.mobs.dimandking.death_rattle=伙伴们,守住这里!
actors.mobs.dimandking.more_summon=伙伴们,一起上!
actors.mobs.dimandking.wave_1=伙伴们,想想你们的价值!
diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties
index f7ec6a3b8..a3bc01a2b 100644
--- a/core/src/main/assets/messages/items/items.properties
+++ b/core/src/main/assets/messages/items/items.properties
@@ -2,6 +2,16 @@
items.scrolls.exotic.scrollofpolymorph.name=羊化秘卷
items.scrolls.exotic.scrollofpolymorph.desc=这张秘卷富含强大的转换能力。当使用时,所有在使用者视野范围内的单位都将变形成一只魔法绵羊!\n\n这种变形过程是不可逆的,但不是所有敌人都会被影响。强大的敌人将抵抗这种魔法。同时变形后目标敌人身上的物品将会消失。
+items.food.lightfood.name=闪电饭团
+items.food.lightfood.eat_msg=这个食物的味道棒极了!
+items.food.lightfood.desc=闪电饭团是冻肉和闪电种子加上口粮的综合产物。不仅可以使英雄获得治疗,还能立刻回满饥饿值,同时还能获得饭团的雷霆祝福。
+
+items.weapon.missiles.darts.halodart.name=磷焰飞镖
+items.weapon.missiles.darts.halodart.desc=这些飞镖上涂着一种由磷焰花制成的药物,命中后会燃起磷焰。
+
+items.weapon.missiles.darts.lightdart.name=辉耀飞镖
+items.weapon.missiles.darts.lightdart.desc=这些飞镖上涂着一种由闪电花制成的药物,命中目标后会激发目标的潜能。
+
items.stones.stoneofdeepenedsleep.name=沉睡符石
items.stones.stoneofdeepenedsleep.desc=这颗符石被扔出后会对附近睡眠中的敌人施加魔法睡眠。陷入魔法睡眠的敌人会永远沉睡下去,除非受到外界打扰。
@@ -30,6 +40,7 @@ items.potions.elixirs.elixirofdragonking.desc=饮用后,这瓶秘药会使饮
items.potions.potionofliquidflamex.name=磷火药剂
items.potions.potionofliquidflamex.desc=该药瓶里装着一种超级不稳定的化合物,一旦暴露在空气中就会猛烈地燃烧起来。\n\n_相比于一般的液火药剂,这个更加危险且更加致命!
items.food.blandfruit.halofruit=磷火果
+items.food.blandfruit.lightfruit=闪电果
items.potions.potionoflightningshiledx.name=闪电药剂
items.potions.potionoflightningshiledx.desc=该药剂融合了闪电花和电的综合化学效应,能在一段时间内。为玩家完全免疫电击伤害。
diff --git a/core/src/main/assets/messages/levels/levels.properties b/core/src/main/assets/messages/levels/levels.properties
index c571df2bc..3bfc3bfdc 100644
--- a/core/src/main/assets/messages/levels/levels.properties
+++ b/core/src/main/assets/messages/levels/levels.properties
@@ -6,7 +6,8 @@ levels.features.chasm.jump=你确定要跳入洞口中?从这么高的地方
levels.features.chasm.ondeath=你落地过猛摔死了……
levels.features.chasm.rankings_desc=死于撞击
-
+levels.prisonlevel.statue=树
+levels.prisonlevel.statue_desc=地牢里面怎么会有树的存在?这令人匪夷所思!
###rooms
levels.rooms.special.magicalfireroom$eternalfire.desc=这里树立着一面致密的魔法火墙。它是如此炽热,会点燃任何过于靠近的物体,你无法穿过它。它没有任何会自然熄灭的迹象,你只能另想办法来熄灭它。
@@ -225,9 +226,12 @@ levels.level.alchemy_desc=这口炼金釜中充满了魔力之水。物品可以
levels.level.empty_well_desc=这座井已经枯竭了。
levels.prisonlevel.water_name=黯冷水潭
+levels.prisonlevel.water_desc=进入水潭中可熄灭身上的火焰。\n显然,这里危机四伏,但好在仍_有人在保护我们_。\n但是在一些魔力聚焦的地方无法影响到你。
levels.prisonlevel.empty_deco_desc=其上仍残留着干涸的血迹。
levels.prisonlevel.bookshelf_desc=这个书架可能是监狱图书馆的残留物。烧掉怎么样?
-levels.sewerlevel.water_name=浑浊水潭
-levels.sewerlevel.empty_deco_desc=潮湿且发黄的苔藓覆盖其上。
+levels.sewerlevel.water_name=圣境水池
+levels.sewerlevel.water_desc=进入水潭中可熄灭身上的火焰。\n显然,这里的邪恶魔力十分微弱,你踩在水上面甚至有_圣境的力量_保护你前行。\n但是在一些魔力聚焦的地方无法影响到你。
+
+levels.sewerlevel.empty_deco_desc=幽蓝且神秘的菌菇长在了这里。
levels.sewerlevel.bookshelf_desc=这个书架塞满了没用的成功学书籍。烧掉怎么样?
diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties
index d04864a8b..c3529c989 100644
--- a/core/src/main/assets/messages/ui/ui.properties
+++ b/core/src/main/assets/messages/ui/ui.properties
@@ -450,6 +450,8 @@ ui.changelist.mlpd.vm0_5_x_changes.frlogs=尚待调查……
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x20=-1.支离破碎bug已修复\n2.部分符石文本缺失已修复\n3.0层饱食度问题已修复\n4.炼金移植有问题已修复\n5.药水文本缺失已修复\n6.钥匙材质有问题已修复\n7.怨灵血量异常已修复\n8.种子显示问题已修复\n9.快捷栏优化问题已修复\n10.初始升级卷轴,以及初始物品已修复\n12.奈亚子初始奖励异常已修复\n13.由于V1.2.3楼层名字导致部分BOSS超类闪退已修复\n14.精英强敌鬼磷文本缺失已修复\n15.炼金合成表已移植\n16.风行水上部分buff已经重做\n17.部分原始Java类已合并\n18.英雄类逻辑楼层应该为0已修复\n19.光Buff有问题已修复\n20.恶魔层贴图有问题已修复\n21.部分buff尚未定义在破碎123英雄类里面已修复\n22.尚方宝剑属性问题已修复
-ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x21=-1.修复了矮人国王的闪退问题\n-2.游戏性能优化\n-3.修复了钻石宝箱王的错误刷怪\n-去除了重生十字架的金色光环。
+ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x21=-1.修复了矮人国王的闪退问题,但旧存档无法同步\n-2.游戏性能优化\n-3.修复了钻石宝箱王的错误刷怪\n-去除了重生十字架的金色光环。
+
+ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x22=-1.修复了两个种子缺失飞镖的问题\n-2.修复了小血影的闪退问题\n-3.修复了嬗变卷轴的崩溃问题\n-4.修复了新植物未刷新的问题
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
\ No newline at end of file
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java
index b87e5675b..8ed678484 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java
@@ -119,13 +119,13 @@ public class ShatteredPixelDungeon extends Game {
com.shatteredpixel.shatteredpixeldungeon.levels.CavesBossLevel.EntranceOverhang.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.NewCavesBossLevel$EntranceOverhang" );
com.watabou.utils.Bundle.addAlias(
- com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.class,
+ com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel" );
com.watabou.utils.Bundle.addAlias(
- com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.CustomGroundVisuals.class,
+ com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.CustomGroundVisuals.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel$CustomGroundVisuals" );
com.watabou.utils.Bundle.addAlias(
- com.shatteredpixel.shatteredpixeldungeon.levels.CityBossLevel.CustomWallVisuals.class,
+ com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel.CustomWallVisuals.class,
"com.shatteredpixel.shatteredpixeldungeon.levels.NewCityBossLevel$CustomWallVisuals" );
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.levels.HallsBossLevel.class,
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java
index 9a12a8275..9a08d7cce 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/BloodBat.java
@@ -10,6 +10,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Marked;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
+import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
+import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlueBatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
@@ -39,6 +41,15 @@ public class BloodBat extends Mob implements Callback {
next();
}
+ @Override
+ protected boolean canAttack( Char enemy ) {
+ if(level >= 10) {
+ return new Ballistica(pos, enemy.pos, MagicMissile.WARD).collisionPos == enemy.pos;
+ } else {
+ return super.canAttack(enemy);
+ }
+ }
+
@Override
public void call() {
next();
@@ -57,7 +68,7 @@ public class BloodBat extends Mob implements Callback {
Sample.INSTANCE.play( Assets.Sounds.DEBUFF );
}
- int dmg = Random.NormalIntRange( 2, 4 );
+ int dmg = Random.NormalIntRange( (4+level)*Dungeon.depth/5, (5+level)*Dungeon.depth/5 );
enemy.damage( dmg, new BloodBat.DarkBolt() );
if (enemy == Dungeon.hero && !enemy.isAlive()) {
@@ -79,12 +90,7 @@ public class BloodBat extends Mob implements Callback {
@Override
public int damageRoll() {
- if (Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN)){
- int i = Random.NormalIntRange(0, level * 2);
- if (enemy.buff(Marked.class) != null) i *= enemy.buff(Marked.class).bonusDamage();
- return i;
- }
- return Random.NormalIntRange( level, 1 + level * 2 );
+ return Random.NormalIntRange( (4+level)*Dungeon.depth/5, (5+level)*Dungeon.depth/5 );
}
@Override
@@ -93,47 +99,25 @@ public class BloodBat extends Mob implements Callback {
}
@Override
- public int attackSkill(Char target) {
+ public int attackSkill(Char targetd) {
return 4 + level * 2;
}
+
@Override
public int attackProc(Char enemy, int damage) {
- if(level >= 2){
zap();
- } else {
if (Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN)) Buff.affect(enemy, Marked.class).stack++;
- }
-
-
return super.attackProc(enemy, damage);
}
- @Override
- protected Char chooseEnemy() {
- Char enemy = super.chooseEnemy();
-
- int targetPos = Dungeon.hero.pos;
- int distance = Dungeon.hero.isSubclass(HeroSubClass.ASSASSIN) ? 99999 : 8;
-
- //will never attack something far from their target
- if (enemy != null
- && Dungeon.level.mobs.contains(enemy)
- && (Dungeon.level.distance(enemy.pos, targetPos) <= distance)){
- ((Mob)enemy).aggro(this);
- return enemy;
- }
-
- return null;
- }
-
public static void updateHP(){
level += 1;
if (Dungeon.level != null) {
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) {
if (mob instanceof BloodBat) {
- mob.HP = mob.HT = 18 + level * 2;
- ((BloodBat) mob).defenseSkill = 3 + level * 2;
+ mob.HP = mob.HT = 18 + level * 4;
+ ((BloodBat) mob).defenseSkill = 3 + level * 4;
}
}
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java
index f6e47e20c..4980049bb 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DimandKing.java
@@ -45,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
+import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
import com.watabou.utils.Bundle;
@@ -812,6 +813,7 @@ public class DimandKing extends Boss {
charge = target.sprite.emitter();
charge.autoKill = false;
charge.pour( HalomethaneFlameParticle.FACTORY, 0.06f );
+ GLog.n(Messages.get(DimandKing.class,"waring"));
//charge.on = false;
}else{
if(charge != null) {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java
index a8ac60796..6f6c9a491 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Elemental.java
@@ -21,6 +21,8 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
+import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.level;
+
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
@@ -29,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
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.Chill;
import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning;
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
@@ -196,32 +197,29 @@ public abstract class Elemental extends Mob {
setSummonedALly();
}
}
-
+
public static class FireElemental extends Elemental {
-
+
{
spriteClass = ElementalSprite.Fire.class;
-
+
loot = new PotionOfLiquidFlame();
lootChance = 1/8f;
-
+
properties.add( Property.FIERY );
-
- harmfulBuffs.add( com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost.class );
- harmfulBuffs.add( Chill.class );
}
-
+
@Override
protected void meleeProc( Char enemy, int damage ) {
- if (Random.Int( 2 ) == 0 && !Dungeon.level.water[enemy.pos]) {
+ if (Random.Int( 2 ) == 0 && !level.water[enemy.pos]) {
Buff.affect( enemy, Burning.class ).reignite( enemy );
if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5);
}
}
-
+
@Override
protected void rangedProc( Char enemy ) {
- if (!Dungeon.level.water[enemy.pos]) {
+ if (!level.water[enemy.pos]) {
Buff.affect( enemy, Burning.class ).reignite( enemy, 4f );
}
if (enemy.sprite.visible) Splash.at( enemy.sprite.center(), sprite.blood(), 5);
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java
index da505fbb3..36b5b315e 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java
@@ -128,6 +128,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatshield;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatsword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.GreenSword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.HandAxe;
+import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceDewVialSword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.IceFishSword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.LockSword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword;
@@ -288,7 +289,7 @@ public class Generator {
Dreamfoil.Seed.class,
Starflower.Seed.class,
AikeLaier.Seed.class,};
- SEED.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,1 };
+ SEED.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,3};
SEED.probs = SEED.defaultProbs.clone();
SCROLL.classes = new Class>[]{
@@ -399,9 +400,10 @@ public class Generator {
WEP_T5.probs = new float[]{ 6, 5, 5, 4, 4, 4 };
WEP_T6.classes = new Class>[]{
- IceFishSword.class
+ IceFishSword.class,
+ IceDewVialSword.class
};
- WEP_T6.probs = new float[]{ 1 };
+ WEP_T6.probs = new float[]{ 1,0 };
//see Generator.randomArmor
ARMOR.classes = new Class>[]{
@@ -584,7 +586,8 @@ public class Generator {
Category.WEP_T2,
Category.WEP_T3,
Category.WEP_T4,
- Category.WEP_T5
+ Category.WEP_T5,
+ Category.WEP_T6
};
public static MeleeWeapon randomWeapon(){
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java
index 9bdee99ee..b112b279c 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Blandfruit.java
@@ -21,7 +21,6 @@
package com.shatteredpixel.shatteredpixeldungeon.items.food;
-import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
@@ -34,7 +33,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHaste;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
+import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLightningShiledX;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
+import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlameX;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
@@ -43,7 +44,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant.Seed;
-import com.shatteredpixel.shatteredpixeldungeon.plants.Sungrass;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
@@ -123,6 +123,8 @@ public class Blandfruit extends Food {
if (potionAttrib instanceof PotionOfPurity) return Messages.get(this, "dreamfruit");
if (potionAttrib instanceof PotionOfExperience) return Messages.get(this, "starfruit");
if (potionAttrib instanceof PotionOfHaste) return Messages.get(this, "swiftfruit");
+ if (potionAttrib instanceof PotionOfLiquidFlameX) return Messages.get(this, "halofruit");
+ if (potionAttrib instanceof PotionOfLightningShiledX) return Messages.get(this, "lightfruit");
return super.name();
}
@@ -135,7 +137,8 @@ public class Blandfruit extends Food {
if (potionAttrib instanceof PotionOfFrost
|| potionAttrib instanceof PotionOfLiquidFlame
|| potionAttrib instanceof PotionOfToxicGas
- || potionAttrib instanceof PotionOfParalyticGas) {
+ || potionAttrib instanceof PotionOfParalyticGas
+ ||potionAttrib instanceof PotionOfLiquidFlameX) {
desc += Messages.get(this, "desc_throw");
} else {
desc += Messages.get(this, "desc_eat");
@@ -172,6 +175,8 @@ public class Blandfruit extends Food {
if (potionAttrib instanceof PotionOfPurity) potionGlow = new ItemSprite.Glowing( 0xC152AA );
if (potionAttrib instanceof PotionOfExperience) potionGlow = new ItemSprite.Glowing( 0x404040 );
if (potionAttrib instanceof PotionOfHaste) potionGlow = new ItemSprite.Glowing( 0xCCBB00 );
+ if (potionAttrib instanceof PotionOfLiquidFlameX) potionGlow = new ItemSprite.Glowing( 0x00ffff );
+ if (potionAttrib instanceof PotionOfLightningShiledX) potionGlow = new ItemSprite.Glowing( 0xFF4500 );
potionAttrib.setAction();
defaultAction = potionAttrib.defaultAction;
@@ -194,7 +199,8 @@ public class Blandfruit extends Food {
potionAttrib instanceof PotionOfParalyticGas ||
potionAttrib instanceof PotionOfFrost ||
potionAttrib instanceof PotionOfLevitation ||
- potionAttrib instanceof PotionOfPurity) {
+ potionAttrib instanceof PotionOfPurity
+ ||potionAttrib instanceof PotionOfLiquidFlameX) {
potionAttrib.shatter( cell );
Dungeon.level.drop(new Chunks(), cell).sprite.drop();
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java
index 13a79efbf..6570bf748 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/IceFishSword.java
@@ -127,13 +127,13 @@ public class IceFishSword extends Weapon {
@Override
public int min(int lvl) {
- return 4*(Dungeon.depth/5+tier+1) + //8 base, down from 10
+ return 2*(Dungeon.depth/5+tier+1) + //8 base, down from 10
lvl*(Dungeon.depth/5+tier+1); //scaling unchanged
}
@Override
public int max(int lvl) {
- return 6*(Dungeon.depth/5+tier+1) + //8 base, down from 10
+ return 3*(Dungeon.depth/5+tier+1) + //8 base, down from 10
lvl*(Dungeon.depth/5+tier+1); //scaling unchanged
}
@@ -149,6 +149,6 @@ public class IceFishSword extends Weapon {
@Override
public int STRReq(int lvl) {
- return Dungeon.depth/5+18;
+ return Dungeon.depth/5+16;
}
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java
index 9b9efc673..d2547d6e6 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/TippedDart.java
@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
+import com.shatteredpixel.shatteredpixeldungeon.plants.AikeLaier;
import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed;
import com.shatteredpixel.shatteredpixeldungeon.plants.Dreamfoil;
import com.shatteredpixel.shatteredpixeldungeon.plants.Earthroot;
@@ -39,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.plants.Firebloom;
import com.shatteredpixel.shatteredpixeldungeon.plants.Icecap;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
import com.shatteredpixel.shatteredpixeldungeon.plants.Rotberry;
+import com.shatteredpixel.shatteredpixeldungeon.plants.SkyBlueFireBloom;
import com.shatteredpixel.shatteredpixeldungeon.plants.Sorrowmoss;
import com.shatteredpixel.shatteredpixeldungeon.plants.Starflower;
import com.shatteredpixel.shatteredpixeldungeon.plants.Stormvine;
@@ -184,6 +186,8 @@ public abstract class TippedDart extends Dart {
types.put(Stormvine.Seed.class, ShockingDart.class);
types.put(Sungrass.Seed.class, HealingDart.class);
types.put(Swiftthistle.Seed.class, AdrenalineDart.class);
+ types.put(SkyBlueFireBloom.Seed.class, HaloDart.class);
+ types.put(AikeLaier.Seed.class, LightDart.class);
}
public static TippedDart getTipped( Plant.Seed s, int quantity ){
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java
deleted file mode 100644
index 243b3cb56..000000000
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
- * Pixel Dungeon
- * Copyright (C) 2012-2015 Oleg Dolya
- *
- * Shattered Pixel Dungeon
- * Copyright (C) 2014-2022 Evan Debenham
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- */
-
-package com.shatteredpixel.shatteredpixeldungeon.levels;
-
-import com.shatteredpixel.shatteredpixeldungeon.Assets;
-import com.shatteredpixel.shatteredpixeldungeon.Bones;
-import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
-import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
-import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
-import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DwarfKing;
-import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
-import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp;
-import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
-import com.shatteredpixel.shatteredpixeldungeon.items.Item;
-import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CityPainter;
-import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
-import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoom;
-import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
-import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
-import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
-import com.watabou.noosa.Game;
-import com.watabou.noosa.Group;
-import com.watabou.noosa.Tilemap;
-import com.watabou.noosa.audio.Music;
-import com.watabou.noosa.tweeners.AlphaTweener;
-import com.watabou.utils.Bundle;
-import com.watabou.utils.Callback;
-import com.watabou.utils.PathFinder;
-import com.watabou.utils.Point;
-import com.watabou.utils.Random;
-import com.watabou.utils.Rect;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-public class CityBossLevel extends Level {
-
- {
- color1 = 0x4b6636;
- color2 = 0xf2f2f2;
- }
-
- private static int WIDTH = 15;
- private static int HEIGHT = 48;
-
- private static final Rect entry = new Rect(1, 37, 14, 48);
- private static final Rect arena = new Rect(1, 25, 14, 38);
- private static final Rect end = new Rect(0, 0, 15, 22);
-
- private static final int bottomDoor = 7 + (arena.bottom-1)*15;
- private static final int topDoor = 7 + arena.top*15;
-
- public static final int throne;
- private static final int[] pedestals = new int[4];
-
- static {
- Point c = arena.center();
- throne = c.x + (c.y) * WIDTH;
- pedestals[0] = c.x-3 + (c.y-3) * WIDTH;
- pedestals[1] = c.x+3 + (c.y-3) * WIDTH;
- pedestals[2] = c.x+3 + (c.y+3) * WIDTH;
- pedestals[3] = c.x-3 + (c.y+3) * WIDTH;
- }
-
- private ImpShopRoom impShop;
-
- @Override
- public void playLevelMusic() {
- if (locked){
- Music.INSTANCE.play(Assets.Music.CITY_BOSS, true);
- //if top door isn't unlocked
- } else if (map[topDoor] == Terrain.LOCKED_DOOR){
- Music.INSTANCE.end();
- } else {
- Music.INSTANCE.playTracks(
- new String[]{Assets.Music.CITY_1, Assets.Music.CITY_2, Assets.Music.CITY_2},
- new float[]{1, 1, 0.5f},
- false);
- }
- }
-
- @Override
- public String tilesTex() {
- return Assets.Environment.TILES_CITY;
- }
-
- @Override
- public String waterTex() {
- return Assets.Environment.WATER_CITY;
- }
-
- private static final String IMP_SHOP = "imp_shop";
-
- @Override
- public void storeInBundle( Bundle bundle ) {
- super.storeInBundle( bundle );
- bundle.put( IMP_SHOP, impShop );
- }
-
- @Override
- public void restoreFromBundle( Bundle bundle ) {
- super.restoreFromBundle( bundle );
- impShop = (ImpShopRoom) bundle.get( IMP_SHOP );
- if (map[topDoor] != Terrain.LOCKED_DOOR && Imp.Quest.isCompleted() && !impShop.shopSpawned()){
- spawnShop();
- }
- }
-
- @Override
- protected boolean build() {
-
- setSize(WIDTH, HEIGHT);
-
- //entrance room
- Painter.fill(this, entry, Terrain.WALL);
- Painter.fill(this, entry, 1, Terrain.BOOKSHELF);
- Painter.fill(this, entry, 2, Terrain.EMPTY);
-
- Painter.fill(this, entry.left+3, entry.top+3, 1, 5, Terrain.BOOKSHELF);
- Painter.fill(this, entry.right-4, entry.top+3, 1, 5, Terrain.BOOKSHELF);
-
- Point c = entry.center();
-
- Painter.fill(this, c.x-1, c.y-2, 3, 1, Terrain.STATUE);
- Painter.fill(this, c.x-1, c.y, 3, 1, Terrain.STATUE);
- Painter.fill(this, c.x-1, c.y+2, 3, 1, Terrain.STATUE);
- Painter.fill(this, c.x, entry.top+1, 1, 6, Terrain.EMPTY_SP);
-
- Painter.set(this, c.x, entry.top, Terrain.DOOR);
-
- entrance = c.x + (c.y+2)*width();
- Painter.set(this, entrance, Terrain.ENTRANCE);
-
- //DK's throne room
- Painter.fillDiamond(this, arena, 1, Terrain.EMPTY);
-
- Painter.fill(this, arena, 5, Terrain.EMPTY_SP);
- Painter.fill(this, arena, 6, Terrain.SIGN);
-
- c = arena.center();
- Painter.set(this, c.x-3, c.y, Terrain.STATUE);
- Painter.set(this, c.x-4, c.y, Terrain.STATUE);
- Painter.set(this, c.x+3, c.y, Terrain.STATUE);
- Painter.set(this, c.x+4, c.y, Terrain.STATUE);
-
- Painter.set(this, pedestals[0], Terrain.PEDESTAL);
- Painter.set(this, pedestals[1], Terrain.PEDESTAL);
- Painter.set(this, pedestals[2], Terrain.PEDESTAL);
- Painter.set(this, pedestals[3], Terrain.PEDESTAL);
-
- Painter.set(this, c.x, arena.top, Terrain.LOCKED_DOOR);
-
- //exit hallway
- Painter.fill(this, end, Terrain.CHASM);
- Painter.fill(this, end.left+4, end.top+5, 7, 18, Terrain.EMPTY);
- Painter.fill(this, end.left+4, end.top+5, 7, 4, Terrain.EXIT);
- exit = end.left+7 + (end.top+8)*width();
-
- impShop = new ImpShopRoom();
- impShop.set(end.left+3, end.top+12, end.left+11, end.top+20);
- Painter.set(this, impShop.center(), Terrain.PEDESTAL);
-
- Painter.set(this, impShop.left+2, impShop.top, Terrain.STATUE);
- Painter.set(this, impShop.left+6, impShop.top, Terrain.STATUE);
-
- Painter.fill(this, end.left+5, end.bottom+1, 5, 1, Terrain.EMPTY);
- Painter.fill(this, end.left+6, end.bottom+2, 3, 1, Terrain.EMPTY);
-
- new CityPainter().paint(this, null);
-
- //pillars last, no deco on these
- Painter.fill(this, end.left+1, end.top+2, 2, 2, Terrain.WALL);
- Painter.fill(this, end.left+1, end.top+7, 2, 2, Terrain.WALL);
- Painter.fill(this, end.left+1, end.top+12, 2, 2, Terrain.WALL);
- Painter.fill(this, end.left+1, end.top+17, 2, 2, Terrain.WALL);
-
- Painter.fill(this, end.right-3, end.top+2, 2, 2, Terrain.WALL);
- Painter.fill(this, end.right-3, end.top+7, 2, 2, Terrain.WALL);
- Painter.fill(this, end.right-3, end.top+12, 2, 2, Terrain.WALL);
- Painter.fill(this, end.right-3, end.top+17, 2, 2, Terrain.WALL);
-
- CustomTilemap customVisuals = new CustomGroundVisuals();
- customVisuals.setRect(0, 0, width(), height());
- customTiles.add(customVisuals);
-
- customVisuals = new CustomWallVisuals();
- customVisuals.setRect(0, 0, width(), height());
- customWalls.add(customVisuals);
-
- return true;
- }
-
- //returns a random pedestal that doesn't already have a summon inbound on it
- public int getSummoningPos(){
- Mob king = getKing();
- HashSet summons = king.buffs(DwarfKing.Summoning.class);
- ArrayList positions = new ArrayList<>();
- for (int pedestal : pedestals) {
- boolean clear = true;
- for (DwarfKing.Summoning s : summons) {
- if (s.getPos() == pedestal) {
- clear = false;
- break;
- }
- }
- if (clear) {
- positions.add(pedestal);
- }
- }
- if (positions.isEmpty()){
- return -1;
- } else {
- return Random.element(positions);
- }
- }
-
- private Mob getKing(){
- for (Mob m : mobs){
- if (m instanceof DwarfKing) return m;
- }
- return null;
- }
-
- @Override
- protected void createMobs() {
- }
-
- public Actor addRespawner() {
- return null;
- }
-
- @Override
- protected void createItems() {
- Item item = Bones.get();
- if (item != null) {
- int pos;
- do {
- pos = randomRespawnCell(null);
- } while (pos == entrance);
- drop( item, pos ).setHauntedIfCursed().type = Heap.Type.REMAINS;
- }
- }
-
- @Override
- public int randomRespawnCell( Char ch ) {
- int cell;
- do {
- cell = entrance + PathFinder.NEIGHBOURS8[Random.Int(8)];
- } while (!passable[cell]
- || (Char.hasProp(ch, Char.Property.LARGE) && !openSpace[cell])
- || Actor.findChar(cell) != null);
- return cell;
- }
-
- @Override
- public void occupyCell( Char ch ) {
-
- super.occupyCell( ch );
-
- if (map[bottomDoor] != Terrain.LOCKED_DOOR && map[topDoor] == Terrain.LOCKED_DOOR
- && ch.pos < bottomDoor && ch == Dungeon.hero) {
-
- seal();
-
- }
- }
-
- @Override
- public void seal() {
- super.seal();
-
- //moves intelligent allies with the hero, preferring closer pos to entrance door
- int doorPos = pointToCell(new Point(arena.left + arena.width()/2, arena.bottom));
- Mob.holdAllies(this, doorPos);
- Mob.restoreAllies(this, Dungeon.hero.pos, doorPos);
-
- DwarfKing boss = new DwarfKing();
- boss.state = boss.WANDERING;
- boss.pos = pointToCell(arena.center());
- GameScene.add( boss );
- boss.beckon(Dungeon.hero.pos);
-
- if (heroFOV[boss.pos]) {
- boss.notice();
- boss.sprite.alpha( 0 );
- boss.sprite.parent.add( new AlphaTweener( boss.sprite, 1, 0.1f ) );
- }
-
- set( bottomDoor, Terrain.LOCKED_DOOR );
- GameScene.updateMap( bottomDoor );
- Dungeon.observe();
-
- Game.runOnRenderThread(new Callback() {
- @Override
- public void call() {
- Music.INSTANCE.play(Assets.Music.CITY_BOSS, true);
- }
- });
- }
-
- @Override
- public void unseal() {
- super.unseal();
-
- set( bottomDoor, Terrain.DOOR );
- GameScene.updateMap( bottomDoor );
-
- set( topDoor, Terrain.DOOR );
- GameScene.updateMap( topDoor );
-
- if (Imp.Quest.isCompleted()) {
- spawnShop();
- }
- Dungeon.observe();
-
- Game.runOnRenderThread(new Callback() {
- @Override
- public void call() {
- Music.INSTANCE.end();
- }
- });
- }
-
- private void spawnShop(){
- while (impShop.itemCount() >= 7*(impShop.height()-2)){
- impShop.bottom++;
- }
- impShop.spawnShop(this);
- }
-
- @Override
- public String tileName( int tile ) {
- switch (tile) {
- case Terrain.WATER:
- return Messages.get(CityLevel.class, "water_name");
- case Terrain.HIGH_GRASS:
- return Messages.get(CityLevel.class, "high_grass_name");
- default:
- return super.tileName( tile );
- }
- }
-
- @Override
- public String tileDesc(int tile) {
- switch (tile) {
- case Terrain.ENTRANCE:
- return Messages.get(CityLevel.class, "entrance_desc");
- case Terrain.EXIT:
- return Messages.get(CityLevel.class, "exit_desc");
- case Terrain.WALL_DECO:
- case Terrain.EMPTY_DECO:
- return Messages.get(CityLevel.class, "deco_desc");
- case Terrain.EMPTY_SP:
- return Messages.get(CityLevel.class, "sp_desc");
- case Terrain.STATUE:
- case Terrain.STATUE_SP:
- return Messages.get(CityLevel.class, "statue_desc");
- case Terrain.BOOKSHELF:
- return Messages.get(CityLevel.class, "bookshelf_desc");
- default:
- return super.tileDesc( tile );
- }
- }
-
- @Override
- public Group addVisuals( ) {
- super.addVisuals();
- CityLevel.addCityVisuals(this, visuals);
- return visuals;
- }
-
- public static class CustomGroundVisuals extends CustomTilemap {
-
- {
- texture = Assets.Environment.CITY_BOSS;
- tileW = 15;
- tileH = 48;
- }
-
- private static final int STAIR_ROWS = 7;
-
- @Override
- public Tilemap create() {
- Tilemap v = super.create();
- int[] data = new int[tileW*tileH];
-
- int[] map = Dungeon.level.map;
-
- int stairsTop = -1;
-
- //upper part of the level, mostly demon halls tiles
- for (int i = tileW; i < tileW*22; i++){
-
- if (map[i] == Terrain.EXIT && stairsTop == -1){
- stairsTop = i;
- }
-
- //pillars
- if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.CHASM){
- data[i] = 13*8 + 6;
- data[++i] = 13*8 + 7;
- } else if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.WALL){
- data[i] = 14*8 + 6;
- data[++i] = 14*8 + 7;
- } else if (i > tileW && map[i] == Terrain.CHASM && map[i-tileW] == Terrain.WALL) {
- data[i] = 15*8 + 6;
- data[++i] = 15*8 + 7;
-
- //imp's pedestal
- } else if (map[i] == Terrain.PEDESTAL) {
- data[i] = 12*8 + 5;
-
- //skull piles
- } else if (map[i] == Terrain.STATUE) {
- data[i] = 15*8 + 5;
-
- //ground tiles
- } else if (map[i] == Terrain.EMPTY || map[i] == Terrain.EMPTY_DECO
- || map[i] == Terrain.EMBERS || map[i] == Terrain.GRASS
- || map[i] == Terrain.HIGH_GRASS || map[i] == Terrain.FURROWED_GRASS){
-
- //final ground stiching with city tiles
- if (i/tileW == 21){
- data[i] = 11*8 + 0;
- data[++i] = 11*8 + 1;
- data[++i] = 11*8 + 2;
- data[++i] = 11*8 + 3;
- data[++i] = 11*8 + 4;
- data[++i] = 11*8 + 5;
- data[++i] = 11*8 + 6;
- } else {
-
- //regular ground tiles
- if (map[i - 1] == Terrain.CHASM) {
- data[i] = 12 * 8 + 1;
- } else if (map[i + 1] == Terrain.CHASM) {
- data[i] = 12 * 8 + 3;
- } else if (map[i] == Terrain.EMPTY_DECO) {
- data[i] = 12 * 8 + 4;
- } else {
- data[i] = 12 * 8 + 2;
- }
- }
-
- //otherwise no tile here
- } else {
- data[i] = -1;
- }
- }
-
- //custom for stairs
- for (int i = 0; i < STAIR_ROWS; i++){
- for (int j = 0; j < 7; j++){
- data[stairsTop+j] = (i+4)*8 + j;
- }
- stairsTop += tileW;
- }
-
- //lower part: statues, pedestals, and carpets
- for (int i = tileW*22; i < tileW * tileH; i++){
-
- //pedestal spawners
- if (map[i] == Terrain.PEDESTAL){
- data[i] = 13*8 + 4;
-
- //statues that should face left instead of right
- } else if (map[i] == Terrain.STATUE && i%tileW > 7) {
- data[i] = 15 * 8 + 4;
-
- //carpet tiles
- } else if (map[i] == Terrain.EMPTY_SP) {
- //top row of DK's throne
- if (map[i + 1] == Terrain.EMPTY_SP && map[i + tileW] == Terrain.EMPTY_SP) {
- data[i] = 13 * 8 + 1;
- data[++i] = 13 * 8 + 2;
- data[++i] = 13 * 8 + 3;
-
- //mid row of DK's throne
- }else if (map[i + 1] == Terrain.SIGN) {
- data[i] = 14 * 8 + 1;
- data[++i] = 14 * 8 + 2;
- data[++i] = 14 * 8 + 3;
-
- //bottom row of DK's throne
- } else if (map[i+1] == Terrain.EMPTY_SP && map[i-tileW] == Terrain.EMPTY_SP){
- data[i] = 15*8 + 1;
- data[++i] = 15*8 + 2;
- data[++i] = 15*8 + 3;
-
- //otherwise entrance carpet
- } else if (map[i-tileW] != Terrain.EMPTY_SP){
- data[i] = 13*8 + 0;
- } else if (map[i+tileW] != Terrain.EMPTY_SP){
- data[i] = 15*8 + 0;
- } else {
- data[i] = 14*8 + 0;
- }
-
- //otherwise no tile here
- } else {
- data[i] = -1;
- }
- }
-
- v.map( data, tileW );
- return v;
- }
-
- @Override
- public String name(int tileX, int tileY) {
- int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW;
-
- //demon halls tiles
- if (cell < Dungeon.level.width*22){
- if (Dungeon.level.map[cell] == Terrain.STATUE){
- return Messages.get(HallsLevel.class, "statue_name");
- }
-
- //DK arena tiles
- } else {
- if (Dungeon.level.map[cell] == Terrain.SIGN){
- return Messages.get(CityBossLevel.class, "throne_name");
- } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){
- return Messages.get(CityBossLevel.class, "summoning_name");
- }
- }
-
- return super.name(tileX, tileY);
- }
-
- @Override
- public String desc(int tileX, int tileY) {
- int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW;
-
- //demon halls tiles
- if (cell < Dungeon.level.width*22){
- if (Dungeon.level.map[cell] == Terrain.EXIT){
- return Messages.get(HallsLevel.class, "exit_desc");
- } else if (Dungeon.level.map[cell] == Terrain.STATUE){
- return Messages.get(HallsLevel.class, "statue_desc");
- } else if (Dungeon.level.map[cell] == Terrain.EMPTY_DECO){
- return "";
- }
-
- //DK arena tiles
- } else {
- if (Dungeon.level.map[cell] == Terrain.SIGN){
- return Messages.get(CityBossLevel.class, "throne_desc");
- } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){
- return Messages.get(CityBossLevel.class, "summoning_desc");
- }
- }
-
- return super.desc(tileX, tileY);
- }
- }
-
- public static class CustomWallVisuals extends CustomTilemap {
- {
- texture = Assets.Environment.CITY_BOSS;
- tileW = 15;
- tileH = 48;
- }
-
- @Override
- public Tilemap create() {
- Tilemap v = super.create();
- int[] data = new int[tileW*tileH];
-
- int[] map = Dungeon.level.map;
-
- int shadowTop = -1;
-
- //upper part of the level, mostly demon halls tiles
- for (int i = tileW; i < tileW*21; i++) {
-
- if (map[i] == Terrain.EXIT && shadowTop == -1){
- shadowTop = i - tileW*4;
- }
-
- //pillars
- if (map[i] == Terrain.CHASM && map[i+tileW] == Terrain.WALL) {
- data[i] = 12*8 + 6;
- data[++i] = 12*8 + 7;
- } else if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.CHASM) {
- data[i] = 13 * 8 + 6;
- data[++i] = 13 * 8 + 7;
-
- //skull tops
- } else if (map[i+tileW] == Terrain.STATUE) {
- data[i] = 14*8 + 5;
-
- //otherwise no tile here
- } else {
- data[i] = -1;
- }
- }
-
- //custom shadow for stairs
- for (int i = 0; i < 8; i++){
- if (i < 4){
- data[shadowTop] = i*8 + 0;
- data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] =
- data[shadowTop+5] = data[shadowTop+6] = i*8 + 1;
- data[shadowTop+7] = i*8 + 2;
- } else {
- int j = i - 4;
- data[shadowTop] = j*8 + 3;
- data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] =
- data[shadowTop+5] = data[shadowTop+6] = j*8 + 4;
- data[shadowTop+7] = j*8 + 5;
- }
-
- shadowTop += tileW;
- }
-
- //lower part. Statues and DK's throne
- for (int i = tileW*21; i < tileW * tileH; i++){
-
- //Statues that need to face left instead of right
- if (map[i] == Terrain.STATUE && i%tileW > 7){
- data[i-tileW] = 14*8 + 4;
- } else if (map[i] == Terrain.SIGN){
- data[i-tileW] = 13*8 + 5;
- }
-
- //always no tile here (as the above statements are modifying previous tiles)
- data[i] = -1;
- }
-
- v.map( data, tileW );
- return v;
- }
- }
-}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java
index a1d8bf68f..9dd3a2b99 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/BlueBatSprite.java
@@ -67,6 +67,8 @@ public class BlueBatSprite extends MobSprite {
die = new Animation( 12, false );
die.frames( frames, 4, 5, 6 );
+ zap = attack.clone();
+
play( idle );
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java
index 8b4a92b75..a9e07ddee 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java
@@ -18,10 +18,31 @@ import java.util.ArrayList;
public class vM0_6_7_X_Changes {
public static void addAllChanges(ArrayList changeInfos) {
+ add_v0_6_2_Changes(changeInfos);
add_v0_6_1_Changes(changeInfos);
add_v0_6_0_Changes(changeInfos);
}
+ public static void add_v0_6_2_Changes( ArrayList changeInfos ) {
+ ChangeInfo changes = new ChangeInfo("v0.6.0.0-BetaXVII", true, "");
+ changes.hardlight(Window.TITLE_COLOR);
+ changeInfos.add(changes);
+
+ changes = new ChangeInfo("改动", false, null);
+ changes.hardlight(Window.SKYBULE_COLOR);
+ 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_06X22")));
+
+ changes = new ChangeInfo("调整", false, null);
+ changes.hardlight(Window.CYELLOW);
+ changeInfos.add(changes);
+
+ changes.addButton(new ChangeButton(new BlueBatSprite(), ("小血影初始改动"),
+ ("小血影10级后将会开启远程攻击")));
+ }
+
public static void add_v0_6_1_Changes( ArrayList changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.0.0-BetaXV", true, "");
changes.hardlight(Window.TITLE_COLOR);
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java
index 3331069e2..e91e97091 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChallenges.java
@@ -203,6 +203,8 @@ public class WndChallenges extends Window {
pane.scrollTo(0, 0);
}
+
+
@Override
public void onBackPressed() {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
index 72de4ee15..3e803f2ea 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
@@ -188,8 +188,7 @@ public class WndHero extends WndTabbed {
statSlot( Messages.get(this, "gold"), Statistics.goldCollected );
statSlot( Messages.get(this, "depth"), Statistics.deepestFloor );
- statSlot( M.L(HeroStat.class,"seed_dungeon"), M.L(HeroStat.class, Statistics.isCustomSeed ?"seed_custom_yes":"seed_custom_no")
- + "-" + DungeonSeed.convertToCode(Dungeon.seed).toUpperCase());
+ statSlot( M.L(HeroStat.class,"seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed).toUpperCase());
pos += GAP;
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
index f609d8039..92a193443 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
@@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesGrid;
import com.shatteredpixel.shatteredpixeldungeon.ui.BadgesList;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot;
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
@@ -47,7 +48,6 @@ import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample;
-import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.noosa.ui.Component;
import java.util.Locale;