Update 0.6.0.0-Beta16

Fixed Bug And Commit
This commit is contained in:
LingASDJ 2022-07-29 10:19:15 +08:00
parent 1e1287937e
commit 003ff37de5
18 changed files with 108 additions and 722 deletions

View File

@ -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=伙伴们,想想你们的价值!

View File

@ -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=该药剂融合了闪电花和电的综合化学效应,能在一段时间内。为玩家完全免疫电击伤害。

View File

@ -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=这个书架塞满了没用的成功学书籍。烧掉怎么样?

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 <http://www.gnu.org/licenses/>
*/
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<DwarfKing.Summoning> summons = king.buffs(DwarfKing.Summoning.class);
ArrayList<Integer> 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;
}
}
}

View File

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

View File

@ -18,10 +18,31 @@ import java.util.ArrayList;
public class vM0_6_7_X_Changes {
public static void addAllChanges(ArrayList<ChangeInfo> 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<ChangeInfo> 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<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.0.0-BetaXV", true, "");
changes.hardlight(Window.TITLE_COLOR);

View File

@ -203,6 +203,8 @@ public class WndChallenges extends Window {
pane.scrollTo(0, 0);
}
@Override
public void onBackPressed() {

View File

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

View File

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