Update v0.6.4.0-Beta9

This commit is contained in:
LingASDJ 2023-08-13 17:32:32 +08:00
parent c66cec96f1
commit b32d132cb0
50 changed files with 889 additions and 144 deletions

View File

@ -18,8 +18,8 @@ allprojects {
appName = 'Magic Ling Pixel Dungeon'
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
appVersionCode =901600
appVersionName = '0.6.4.0-Beta7'
appVersionCode =903000
appVersionName = '0.6.4.0-Beta9'
appJavaCompatibility = JavaVersion.VERSION_11

View File

@ -340,6 +340,7 @@ text.herostat.real_time = 总时间
text.herostat.seed_dungeon = 种子序列号
text.herostat.seed_custom_no =
text.textchallenges.seed_custom_title = 种子
text.herostat.seed_type = 种子类型
text.textchallenges.hint =
text.textchallenges.delete_seed_input = 清除
@ -1770,6 +1771,8 @@ actors.hero.talent.ratforcements.desc=_+1_以自身为目标使用鼠化术
actors.mobs.npcs.blacksmith.name=巨魔铁匠
actors.mobs.npcs.blacksmith.gold_1=人类不想当个没用的废物对吗拿着那个镐子然后给我挖点_暗金矿15块_就够了。什么要我如何报答你真贪心...\n好吧好吧我没钱付给你但我可以给你打打铁。想想你运气有多好吧我可是这附近唯一的铁匠。
actors.mobs.npcs.blacksmith.blood_1=人类不想当个没用的废物对吗拿着那个镐子然后用它_杀只蝙蝠_我需要镐头上沾着的血。什么要我如何报答你真贪心...\n\n好吧好吧我没钱付给你但我可以给你打打铁。想想你运气有多好吧我可是这附近唯一的铁匠。
actors.mobs.npcs.blacksmith.blood_a=人类不想当个没用的废物对吗拿着那个镐子然后用它_杀只蝙蝠_我需要镐头上沾着的血。什么要我如何报答你真贪心...\n\n好吧好吧我没钱付给你但我可以给你打打铁。想想你运气有多好吧我可是这附近唯一的铁匠。\n\n顺带一提近期由于神秘魔力的感染蝙蝠变得更加危险小心别被蝙蝠杀死了……不然我可不会来给你收尸。
actors.mobs.npcs.blacksmith.lost_pick=你在逗我?我的镐子呢?!
actors.mobs.npcs.blacksmith.gold_2=_暗金矿_。15块。说真的有那么难
actors.mobs.npcs.blacksmith.blood_2=我说了我需要镐子沾上蝙蝠血。赶紧!

View File

@ -580,6 +580,14 @@ items.armor.warriorarmor.name=英雄铠甲
items.armor.warriorarmor.desc=这套铠甲看起来很有份量,但战士能借助它施展一项绝技。
### custom armor
items.armor.custom.ancityarmor.name=板鲎甲
items.armor.custom.ancityarmor.desc=从巨大底栖顶级掠食者的身上剥离的铠甲,看着非常厚重,实际上非常轻盈\n\n_这件护甲擅长闪避_这件武器属于特殊护甲无法被皇冠改造。
items.armor.custom.ancityarmor.ac_custom=毒雾释放
items.armor.glyphs.alowglyph.ancitystone.name=远古印记
items.armor.glyphs.alowglyph.ancitystone.desc=这个强大的独有印记能够让使用它的人免疫毒雾,酸蚀,中毒效果。\n\n印记是一种强大的祝福刻印可与刻印共存。
items.armor.glyphs.alowglyph.ancitystone.alowglyph=印记
items.armor.custom.ancityarmor.no_charge=护甲没有足够的能量释放战技!
###artifacts
items.artifacts.alchemiststoolkit.name=炼金工具箱
@ -899,7 +907,7 @@ items.artifacts.unstablespellbook.desc_empowered=被你放进书中的卷轴闪
items.artifacts.unstablespellbook.read_empowered=被你放入魔典的卷轴都充满了魔法能量。你可以自主选择导引出该卷轴的正常或秘卷能力。\n\n如果选择释放秘卷能力则会消耗2点魔典充能。
items.artifacts.wraithamulet.name=暗金宝石护符
items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候你还可以对敌人实行一次暗夜突袭对目标造成{真实即死{伤害,并立刻瞬移到指定目标位置。\n\n如果是首领则受到_最大生命值的10%伤害_。护符能量将会随着时间自动恢复所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符自从她在地牢中失踪后这个护符就一直被遗弃在这里……
items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候你还可以对敌人实行一次暗夜突袭对目标造成{真实即死{伤害,并立刻瞬移到指定目标位置。\n\n如果是首领则受到_最大生命值的25%伤害_。护符能量将会随着时间自动恢复所有技能使用都会扣除能量并进入冷却状态。\n\n这个护符曾经是一个少女来探险的护身符自从她在地牢中失踪后这个护符就一直被遗弃在这里……
items.artifacts.wraithamulet.ghost=你遁入了虚无,你的身体变得透明了。
items.artifacts.wraithamulet.cooddown=你的护符能量正在冷却,你暂时无法使用任何能力。
items.artifacts.wraithamulet.nochareup=你的护符能量不足,你无法使用任何能力。

View File

@ -290,7 +290,7 @@ badges$badge.reset_day.desc=携带神秘生物的遗物离开地牢,完成它
challenges.no_food=缩餐节食
challenges.no_food_desc=食物本就稀缺,但你还需要注意节食!\n\n・使用各类食物与丰饶之角的饱腹效果为原本的三分之一。\n・其他恢复饥饿的机制不受影响。
challenges.no_armor=无甲之身
challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。\n\n_地牢环境已发生改变请小心应对。(种子物品有生成变动)_
challenges.no_armor_desc=要相信自己,因为不能相信护甲了!\n\n・布甲之外所有常规护甲被禁止生成。\n・布甲被升级时增长的防御力大幅降低。\n・灵壤守护者的防御力大幅降低。\n\n_地牢环境已发生改变请小心应对。(种子物品有生成变动)_
challenges.no_healing=恐药异症
challenges.no_healing_desc=治疗药水真是种好东西,可惜你对它过敏!\n\n・治疗药水以及使用治疗药水炼制的道具将无法治愈英雄反而会使英雄中毒。\n・炼金催化剂不会随机到治愈英雄或使英雄中毒的效果。\n・这些道具对其他角色依然发挥正常效果。
challenges.no_herbalism=荒芜之地

View File

@ -204,6 +204,9 @@ scenes.gamenewsscene$articlebutton.force_download=点我下载正版并关闭游
scenes.gamenewsscene$articlebutton.okay=继续游玩
scenes.gamenewsscene$newsinfo.metered_network=当连接到一个流量计费的网络,比如移动数据时,为了保证你的话费,我们不会发送更新数据给你。\n\n请连接WIFI后再次尝试现在可以点击下方继续游玩继续游戏。
scenes.gamenewsscene.not_inter=无网络连接
scenes.gamenewsscene.not_desc=无法连接到更新服务器,遇到这种情况可能是服务器节点维护或者是你尚未开启网络。\n\n您仍可继续游玩游戏但若想要检查最新版本你需要开启网络后重启程序以获取服务器数据。
scenes.rankingsscene.title=最高纪录
scenes.rankingsscene.total=游戏次数:
scenes.rankingsscene.no_games=目前为止还没有已经结束的游戏。

View File

@ -550,6 +550,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x80=1.修复灯火值不扣减的错
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x81=1.优化灯火体验\n其他错误修复。
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题\n6.修复部分成就无法获得的问题\n7.改善部分房间不会在1层生成为隐藏层\n7.修复商人的一些错误\n8.修复部分怪物掉落问题
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x82=1.修复商店抢劫的一些错误\n2.修复部分崩溃错误\n3.修复Beta2古神无限循环的错误\n4.修复黄金时代的一些错误\n5.修复部分徽章获取错误问题\n6.修复部分成就无法获得的问题\n7.改善部分房间不会在1层生成为隐藏层\n7.修复商人的一些错误\n8.修复部分怪物掉落问题\n8.修复部分错误
//ui.changelist.mlpd.vm0_5_x_changes.xxx//

View File

@ -137,7 +137,7 @@ windows.wndblacksmith.select=选择要重铸的物品
windows.wndblacksmith.reforge=重铸物品
windows.wndsettings$extendtab.title=额外设置
windows.wndsettings$extendtab.dark_ui=经典界面
windows.wndsettings$extendtab.dark_ui=魔绫主题
windows.wndsettings$extendtab.pc_ui=实验功能应用PC端界面)
windows.pagewindows$pagewindowstab.title=左侧快捷栏设置
@ -204,7 +204,7 @@ windows.wndgameinprogress.gamegold=游戏金币:
windows.wndgameinprogress.gamenayzi=奈亚大亨:
windows.wndgameinprogress.gamenayzis=\n一局游戏内购买7次终端的物品即可永久让奈亚入驻0层。
windows.wndgameinprogress.gamemimic=拟态猎杀:
windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n-_B类_为开启_独挡一面_挑战后的种子。
windows.wndgameinprogress.gameinof=注:类型不同的种子所生成的地牢物品规则将有所不同。\n_B类_为开启_独挡一面_挑战后的种子。\n_C类_支离破碎&基因突变\n_D类_BossRush\n\n(种子判定优先级D>B>C>A)
windows.wndgameinprogress.title=%1$d级%2$s
windows.wndgameinprogress.challenges=挑战

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -84,7 +84,7 @@ public class Assets {
public static final String CITY_BOSS = "environment/custom_tiles/city_boss.png";
public static final String HALLS_SP = "environment/custom_tiles/halls_special.png";
public static final String TILES_COLD = "environment/tiles_fire.png";
public static final String TILES_COLD = "environment/Reload.png";
public static final String TILES_DIED = "environment/tiles_died.png";
public static final String TILES_GOLD = "environment/tiles_gold.png";

View File

@ -24,11 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.amuletObtained;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.chalMultiplier;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.A_SCORE;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.B_SCORE;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SSSP_SCORE;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SSS_SCORE;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.SS_SCORE;
import static com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker.*;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;

View File

@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty;
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
@ -97,7 +98,7 @@ public class Challenges {
}
if (Dungeon.isChallenged(NO_ARMOR)) {
if (item instanceof Armor && !(item instanceof ClothArmor || item instanceof ClassArmor)) {
if (item instanceof Armor && !(item instanceof ClothArmor || item instanceof ClassArmor|| item instanceof CustomArmor)) {
//GLog.n("这片大地吃布甲之外的护甲从不挑食,侦查到作弊行为,已移除"+item);
GLog.n(Messages.get(Challenges.class, "no_armorx"), item);
return true;

View File

@ -45,9 +45,9 @@ public class Chrome {
public static NinePatch get( Type type ) {
String Asset;
if (SPDSettings.ClassUI()) {
Asset = Assets.Interfaces.CHROME_DARK;
} else {
Asset = Assets.Interfaces.CHROME;
} else {
Asset = Assets.Interfaces.CHROME_DARK;
}
switch (type) {
case WINDOW:

View File

@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AdrenalineSurge;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AnkhInvulnerability;
@ -65,6 +66,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessMobDied;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessNoMoney;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.DeadSoul;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread;
@ -91,6 +93,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Nyctophobia;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Regeneration;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SnipersMark;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
@ -119,6 +122,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph.AncityStone;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Brimstone;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
@ -2315,6 +2319,20 @@ public class Hero extends Char {
if (effect == HalomethaneBurning.class && belongings.armor() != null && belongings.armor().hasGlyph(Brimstone.class, this)){
return true;
}
//远古免疫
if (effect == ToxicGas.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class,
this)){
return true;
}
if (effect == Corrosion.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class, this)){
return true;
}
if (effect == Poison.class && belongings.armor() != null && belongings.armor().hasAlowGlyph(AncityStone.class,
this)){
return true;
}
return super.isImmune(effect);
}

View File

@ -54,6 +54,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.LamellarArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.MailArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
@ -90,7 +94,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMysticalEnergy;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAnmy;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorruption;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning;
@ -162,11 +165,12 @@ public enum HeroClass {
new LockSword().quantity(1).identify().collect();
new IceFishSword().quantity(1).identify().collect();
new PotionOfInvisibility().quantity(45).identify().collect();
//new Amulet().quantity(1).identify().collect();
//new CommRelay().quantity(1).identify().collect();
new AncityArmor().quantity(1).identify().collect();
new TengusMask().quantity(1).identify().collect();
new RingOfWealth().quantity(1).identify().collect();
new TimekeepersHourglass().quantity(1).identify().collect();
new WandOfAnmy().quantity(1).identify().collect();
//new WandOfAnmy().quantity(1).identify().collect();
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
new WraithAmulet().quantity(1).identify().collect();
new BloodthirstyThorn().quantity(1).identify().collect();
@ -175,6 +179,7 @@ public enum HeroClass {
new WashCrime().quantity(1).identify().collect();
new MagicTorch().quantity(1).identify().collect();
new LamellarArmor().quantity(1).identify().collect();
new MobPlacer().quantity(1).identify().collect();
new CrivusFruitsFlake().quantity(50).identify().collect();
new PotionOfHealing().quantity(50).identify().collect();
@ -218,7 +223,10 @@ public enum HeroClass {
new IceCityBooks().quantity(12).identify().collect();
new ScrollOfFlameCursed().quantity(44).identify().collect();
new MailArmor().quantity(1).identify().collect();
new LeatherArmor().quantity(1).identify().collect();
new ScaleArmor().quantity(1).identify().collect();
new PlateArmor().quantity(1).identify().collect();
Dungeon.gold = 600000000;
hero.STR = 27;

View File

@ -67,7 +67,7 @@ public class DM200 extends Mob {
@Override
public int drRoll() {
return Random.NormalIntRange(0, 8);
return super.drRoll() + Random.NormalIntRange(0, 8);
}
@Override
@ -81,7 +81,7 @@ public class DM200 extends Mob {
Dungeon.LimitedDrops.DM200_EQUIP.count++;
//uses probability tables for dwarf city
if (loot == Generator.Category.WEAPON){
return Generator.randomWeapon(4);
return Generator.randomWeapon(4, true);
} else {
return Generator.randomArmor(4);
}
@ -127,7 +127,7 @@ public class DM200 extends Mob {
}
private boolean canVent(int target){
protected boolean canVent(int target){
if (ventCooldown > 0) return false;
PathFinder.buildDistanceMap(target, BArray.not(Dungeon.level.solid, null), Dungeon.level.distance(pos, target)+1);
//vent can go around blocking terrain, but not through it
@ -180,4 +180,4 @@ public class DM200 extends Mob {
}
}
}
}

View File

@ -81,16 +81,6 @@ public class FlameB01 extends Mob {
this.die(Burning.class);
return true;
}
if(buff(Burning.class) != null){
new Bomb().explode(this.pos);
this.die(Burning.class);
return true;
}
if(buff(Burning.class) != null) {
new Bomb().explode(this.pos);
this.die(Burning.class);
return true;
}
return super.act();
}

View File

@ -22,6 +22,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
import com.shatteredpixel.shatteredpixeldungeon.effects.TargetedCell;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.RainbowParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.food.SakaMeat;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.WaterSoul;
@ -263,7 +264,7 @@ public class SakaFishBoss extends Boss {
GameScene.bossSlain();
Dungeon.level.drop( new CrystalKey( Dungeon.depth ), pos ).sprite.drop();
Dungeon.level.drop( new AncityArmor(), pos ).sprite.drop();
//60% chance of 2 blobs, 30% chance of 3, 10% chance for 4. Average of 2.5
int meets = Random.chances(new float[]{0, 0, 6, 3, 1});
for (int i = 0; i < meets; i++){
@ -622,7 +623,7 @@ public class SakaFishBoss extends Boss {
ray.path.get(ray.dist),
null
);
if( Dungeon.level.water[ray.path.get(ray.dist)] || Random.Int(10)==0){
if( Dungeon.level.water[pos] || Random.Int(10)==0){
GameScene.add(Blob.seed(ray.path.get(ray.dist), 30, FrostFire.class));
Level.set(ray.path.get(ray.dist), Terrain.EMPTY);
GameScene.updateMap( ray.path.get(ray.dist) );

View File

@ -21,12 +21,18 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
@ -73,7 +79,7 @@ public class Blacksmith extends NPC {
sprite.turnTo( pos, c.pos );
if (c != Dungeon.hero){
if (c != hero){
return true;
}
@ -83,7 +89,9 @@ public class Blacksmith extends NPC {
@Override
public void call() {
GameScene.show( new WndQuest( Blacksmith.this,
Quest.alternative ? Messages.get(Blacksmith.this, "blood_1") : Messages.get(Blacksmith.this, "gold_1") ) {
Quest.alternative ? Messages.get(Blacksmith.this, Dungeon.isChallenged(RLPT)?"blood_a":
"blood_1") :
Messages.get(Blacksmith.this, "gold_1") ) {
@Override
public void onBackPressed() {
@ -94,10 +102,40 @@ public class Blacksmith extends NPC {
Notes.add( Notes.Landmark.TROLL );
Pickaxe pick = new Pickaxe();
if (pick.doPickUp( Dungeon.hero )) {
GLog.i( Messages.get(Dungeon.hero, "you_now_have", pick.name() ));
if (pick.doPickUp( hero )) {
GLog.i( Messages.get(hero, "you_now_have", pick.name() ));
if(Dungeon.isChallenged(RLPT)){
Mob questBoss;
questBoss = new Bat();
Class<?extends ChampionEnemy> buffCls;
switch (Random.NormalIntRange(0,6)){
case 0: default:
buffCls = ChampionEnemy.Small.class;
break;
case 1:
buffCls = ChampionEnemy.Bomber.class;
break;
case 2:
buffCls = ChampionEnemy.Middle.class;
break;
case 3:
buffCls = ChampionEnemy.Big.class;
break;
case 4:
buffCls = ChampionEnemy.Sider.class;
break;
case 5:
buffCls = ChampionEnemy.LongSider.class;
break;
}
Buff.affect( questBoss, buffCls);
questBoss.pos = Dungeon.level.randomRespawnCell(questBoss);
GameScene.add(questBoss);
}
} else {
Dungeon.level.drop( pick, Dungeon.hero.pos ).sprite.drop();
Dungeon.level.drop( pick, hero.pos ).sprite.drop();
}
}
} );
@ -107,16 +145,16 @@ public class Blacksmith extends NPC {
} else if (!Quest.completed) {
if (Quest.alternative) {
Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class );
Pickaxe pick = hero.belongings.getItem( Pickaxe.class );
if (pick == null) {
tell( Messages.get(this, "lost_pick") );
} else if (!pick.bloodStained) {
tell( Messages.get(this, "blood_2") );
} else {
if (pick.isEquipped( Dungeon.hero )) {
pick.doUnequip( Dungeon.hero, false );
if (pick.isEquipped( hero )) {
pick.doUnequip( hero, false );
}
pick.detach( Dungeon.hero.belongings.backpack );
pick.detach( hero.belongings.backpack );
tell( Messages.get(this, "completed") );
Statistics.questScores[2] += 3000;
Quest.completed = true;
@ -125,18 +163,18 @@ public class Blacksmith extends NPC {
} else {
Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class );
DarkGold gold = Dungeon.hero.belongings.getItem( DarkGold.class );
Pickaxe pick = hero.belongings.getItem( Pickaxe.class );
DarkGold gold = hero.belongings.getItem( DarkGold.class );
if (pick == null) {
tell( Messages.get(this, "lost_pick") );
} else if (gold == null || gold.quantity() < 15) {
tell( Messages.get(this, "gold_2") );
} else {
if (pick.isEquipped( Dungeon.hero )) {
pick.doUnequip( Dungeon.hero, false );
if (pick.isEquipped( hero )) {
pick.doUnequip( hero, false );
}
pick.detach( Dungeon.hero.belongings.backpack );
gold.detachAll( Dungeon.hero.belongings.backpack );
pick.detach( hero.belongings.backpack );
gold.detachAll( hero.belongings.backpack );
tell( Messages.get(this, "completed") );
Statistics.questScores[2] += 3000;
Quest.completed = true;
@ -149,7 +187,7 @@ public class Blacksmith extends NPC {
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
GameScene.show( new WndBlacksmith( Blacksmith.this, Dungeon.hero ) );
GameScene.show( new WndBlacksmith( Blacksmith.this, hero ) );
}
});
@ -216,18 +254,18 @@ public class Blacksmith extends NPC {
}
Sample.INSTANCE.play( Assets.Sounds.EVOKE );
ScrollOfUpgrade.upgrade( Dungeon.hero );
Item.evoke( Dungeon.hero );
ScrollOfUpgrade.upgrade( hero );
Item.evoke( hero );
if (second.isEquipped( Dungeon.hero )) {
((EquipableItem)second).doUnequip( Dungeon.hero, false );
if (second.isEquipped( hero )) {
((EquipableItem)second).doUnequip( hero, false );
}
second.detach( Dungeon.hero.belongings.backpack );
second.detach( hero.belongings.backpack );
if (second instanceof Armor){
BrokenSeal seal = ((Armor) second).checkSeal();
if (seal != null){
Dungeon.level.drop( seal, Dungeon.hero.pos );
Dungeon.level.drop( seal, hero.pos );
}
}
@ -239,7 +277,7 @@ public class Blacksmith extends NPC {
} else {
first.upgrade();
}
Dungeon.hero.spendAndNext( 2f );
hero.spendAndNext( 2f );
Badges.validateItemLevelAquired( first );
Item.updateQuickslot();

View File

@ -1,6 +1,7 @@
package com.shatteredpixel.shatteredpixeldungeon.custom.dict;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteBotSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ColdRatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.FireAcidicSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite;
@ -152,6 +153,8 @@ public class DictSpriteSheet {
return new Image(Assets.Sprites.DM200, 0, 18, 21, 18);
case PYLON:
return new Image(Assets.Sprites.PYLON, 10, 0, 10, 20);
case BRT:
return new BruteBotSprite();
case GHOUL:
return new Image(Assets.Sprites.GHOUL, 0, 0, 12, 14);
@ -312,6 +315,8 @@ public class DictSpriteSheet {
public static final int DM201 = 406 + 10000;
public static final int PYLON = 407 + 10000;
public static final int BRT = 2007 + 10000;
public static final int GHOUL = 500 + 10000;
public static final int ELEMENTAL_FIRE = 501 + 10000;
public static final int ELEMENTAL_FROST = 502 + 10000;

View File

@ -14,6 +14,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bandit;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BlackHost;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Brute;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.BruteBot;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CausticSlime;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.ColdMagicRat;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab;
@ -184,7 +185,9 @@ public class MobPlacer extends TestItem{
case 3: return DataPack.DM201.ordinal() - DataPack.NEW_FIRE_ELE.ordinal() - 1;
case 4: return DataPack.ELE_CHAOS.ordinal() - DataPack.DM201.ordinal() - 1;
case 5: return DataPack.ACIDIC.ordinal() - DataPack.ELE_CHAOS.ordinal() - 1;
case 6: default: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1;
case 6: return DataPack.PIRANHA.ordinal() - DataPack.ACIDIC.ordinal() - 1;
case 7: return DataPack.ZSLS.ordinal() - DataPack.NQHZ.ordinal() - 1;
case 8: default: return DataPack.SLXJ.ordinal() - DataPack.IAS.ordinal() - 1;
}
}
private int dataThreshold(int tier){
@ -201,6 +204,10 @@ public class MobPlacer extends TestItem{
return DataPack.ELE_CHAOS.ordinal()+1;
case 6:
return DataPack.ACIDIC.ordinal()+1;
case 7:
return DataPack.ZSLS.ordinal()+1;
case 8:
return DataPack.SLXJ.ordinal()+1;
}
}
@ -329,7 +336,7 @@ public class MobPlacer extends TestItem{
private void updateSelectedMob(){
int selected = mobTier;
StringBuilder sb = new StringBuilder();
for(int i=1;i<=6;++i){
for(int i=1;i<=8;++i){
sb.append((i==selected? "* ":"- "));
}
selectedPage.text(sb.toString());
@ -481,6 +488,7 @@ public class MobPlacer extends TestItem{
IAX(Ice_Scorpio.class, DictSpriteSheet.IAX),
FAX(Fire_Scorpio.class, DictSpriteSheet.FAX),
CAX(SRPDICLR.class, DictSpriteSheet.CAX),
BRT(BruteBot.class, DictSpriteSheet.BRT),
IAS(IceGolem.class, DictSpriteSheet.IAS);

View File

@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
@ -55,7 +56,10 @@ public class KingsCrown extends Item {
@Override
public ArrayList<String> actions( Hero hero ) {
ArrayList<String> actions = super.actions( hero );
actions.add( AC_WEAR );
if(!(hero.belongings.armor instanceof CustomArmor)){
actions.add( AC_WEAR );
}
return actions;
}
@ -104,13 +108,10 @@ public class KingsCrown extends Item {
ClassArmor classArmor = ClassArmor.upgrade(hero, armor);
if (hero.belongings.armor == armor) {
hero.belongings.armor = classArmor;
((HeroSprite) hero.sprite).updateArmor();
classArmor.activate(hero);
} else {
armor.detach(hero.belongings.backpack);
classArmor.collect(hero.belongings.backpack);

View File

@ -23,11 +23,13 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@ -56,6 +58,11 @@ public class Torch extends Item {
actions.add( AC_LIGHT );
return actions;
}
public void Refill(OilLantern torch) {
torch.plingks++;
detach(Dungeon.hero.belongings.backpack);
}
@Override
public void execute( Hero hero, String action ) {
@ -64,7 +71,11 @@ public class Torch extends Item {
if (action.equals( AC_LIGHT )) {
if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) {
if(Statistics.lanterfireactive){
OilLantern lantern = Dungeon.hero.belongings.getItem(OilLantern.class);
Refill(lantern);
GLog.p("在提灯的照耀下你的火把被提灯汲取你可以通过装填添加由火把提供的20%的燃料。");
} else if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) {
GLog.n("你已有其他光芒效果,在这些效果取消或主动失效前,暂时无法使用火把。");
} else {
hero.spend( TIME_TO_LIGHT );

View File

@ -21,6 +21,8 @@
package com.shatteredpixel.shatteredpixeldungeon.items.armor;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
@ -43,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Metabolism;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Multiplicity;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Overgrowth;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Stench;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.CustomArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Affection;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Brimstone;
@ -101,6 +104,9 @@ public class Armor extends EquipableItem {
public Augment augment = Augment.NONE;
public Glyph glyph;
public AlowGlyph alowglyph;
public boolean curseInfusionBonus = false;
public boolean masteryPotionBonus = false;
@ -244,8 +250,8 @@ public class Armor extends EquipableItem {
if (seal.getGlyph() != null){
inscribe(seal.getGlyph());
}
if (isEquipped(Dungeon.hero)){
Buff.affect(Dungeon.hero, BrokenSeal.WarriorShield.class).setArmor(this);
if (isEquipped(hero)){
Buff.affect(hero, BrokenSeal.WarriorShield.class).setArmor(this);
}
}
@ -385,7 +391,7 @@ public class Armor extends EquipableItem {
//other things can equip these, for now we assume only the hero can be affected by levelling debuffs
@Override
public int buffedLvl() {
if (isEquipped( Dungeon.hero ) || Dungeon.hero.belongings.contains( this )){
if (isEquipped( hero ) || hero.belongings.contains( this )){
return super.buffedLvl();
} else {
return level();
@ -425,8 +431,8 @@ public class Armor extends EquipableItem {
damage = glyph.proc( this, attacker, defender, damage );
}
if (!levelKnown && defender == Dungeon.hero) {
float uses = Math.min( availableUsesToID, Talent.itemIDSpeedFactor(Dungeon.hero, this) );
if (!levelKnown && defender == hero) {
float uses = Math.min( availableUsesToID, Talent.itemIDSpeedFactor(hero, this) );
availableUsesToID -= uses;
usesLeftToID -= uses;
if (usesLeftToID <= 0) {
@ -450,7 +456,12 @@ public class Armor extends EquipableItem {
@Override
public String name() {
return glyph != null && (cursedKnown || !glyph.curse()) ? glyph.name( super.name() ) : super.name();
if(hero.belongings.armor instanceof CustomArmor){
return super.name();
} else {
return glyph != null && (cursedKnown || !glyph.curse()) ? glyph.name( super.name() ) : super.name();
}
}
@Override
@ -460,13 +471,13 @@ public class Armor extends EquipableItem {
if (levelKnown) {
info += "\n\n" + Messages.get(Armor.class, "curr_absorb", DRMin(), DRMax(), STRReq());
if (STRReq() > Dungeon.hero.STR()) {
if (STRReq() > hero.STR()) {
info += " " + Messages.get(Armor.class, "too_heavy");
}
} else {
info += "\n\n" + Messages.get(Armor.class, "avg_absorb", DRMin(0), DRMax(0), STRReq(0));
if (STRReq(0) > Dungeon.hero.STR()) {
if (STRReq(0) > hero.STR()) {
info += " " + Messages.get(Armor.class, "probably_too_heavy");
}
}
@ -485,8 +496,13 @@ public class Armor extends EquipableItem {
info += "\n\n" + Messages.get(Armor.class, "inscribed", glyph.name());
info += " " + glyph.desc();
}
if (alowglyph != null && (cursedKnown || !alowglyph.curse())) {
info += "\n\n" + Messages.get(Armor.class, "inscribed", alowglyph.name());
info += " " + alowglyph.desc();
}
if (cursed && isEquipped( Dungeon.hero )) {
if (cursed && isEquipped( hero )) {
info += "\n\n" + Messages.get(Armor.class, "cursed_worn");
} else if (cursedKnown && cursed) {
info += "\n\n" + Messages.get(Armor.class, "cursed");
@ -599,6 +615,10 @@ public class Armor extends EquipableItem {
return glyph != null && glyph.getClass() == type && owner.buff(MagicImmune.class) == null;
}
public boolean hasAlowGlyph(Class<?extends AlowGlyph> type, Char owner) {
return alowglyph != null && alowglyph.getClass() == type && owner.buff(MagicImmune.class) == null;
}
//these are not used to process specific glyph effects, so magic immune doesn't affect them
public boolean hasGoodGlyph(){
return glyph != null && !glyph.curse();
@ -724,4 +744,39 @@ public class Armor extends EquipableItem {
}
}
public static abstract class AlowGlyph implements Bundlable {
public abstract int proc( Armor armor, Char attacker, Char defender, int damage );
public String name() {
if (!curse())
return name( Messages.get(this, "alowglyph") );
else
return name( Messages.get(Item.class, "curse"));
}
public String name( String armorName ) {
return Messages.get(this, "name", armorName);
}
public String desc() {
return Messages.get(this, "desc");
}
public boolean curse() {
return false;
}
@Override
public void restoreFromBundle( Bundle bundle ) {
}
@Override
public void storeInBundle( Bundle bundle ) {
}
//public abstract ItemSprite.Glowing glowing();
}
}

View File

@ -49,13 +49,11 @@ abstract public class ClassArmor extends Armor {
bones = false;
}
private int armorTier;
private Charger charger;
public float charge = 0;
public ClassArmor() {
super( 6 );
super( 7 );
}
@Override

View File

@ -12,4 +12,33 @@ public class LamellarArmor extends Armor {
super( 6 );
}
// @Override
// public boolean doEquip( Hero hero ) {
//
// detach(hero.belongings.backpack);
//
// if (hero.belongings.armor == null || hero.belongings.armor.doUnequip( hero, true, false )) {
//
// hero.belongings.armor = this;
//
// cursedKnown = true;
// if (cursed) {
// equipCursed( hero );
// GLog.n( Messages.get(Armor.class, "equip_cursed") );
// }
//
// ((HeroSprite)hero.sprite).updateArmor();
// activate(hero);
// Talent.onItemEquipped(hero, this);
// hero.spendAndNext( time2equip( hero ) );
// return true;
//
// } else {
//
// collect( hero.belongings.backpack );
// return false;
//
// }
// }
}

View File

@ -28,7 +28,6 @@ public class LeatherArmor extends Armor {
{
image = ItemSpriteSheet.ARMOR_LEATHER;
}
public LeatherArmor() {
super( 2 );
}

View File

@ -0,0 +1,208 @@
package com.shatteredpixel.shatteredpixeldungeon.items.armor.custom;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Momentum;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph.AncityStone;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Stone;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;
public class AncityArmor extends CustomArmor{
{
image = ItemSpriteSheet.ARMOR_ANCITY;
tier = 8;
alowglyph = new AncityStone();
icon = ItemSpriteSheet.Icons.POTION_PARAGAS;
charge = 50;
}
@Override
public int STRReq(int lvl){
return STRReq(4, lvl)-1;
}
@Override
public void execute( Hero hero, String action ) {
super.execute( hero, action );
if (action.equals( AC_CUSTOM )) {
if(charge>39){
curUser = hero;
curItem = this;
GameScene.selectCell( zapper );
} else {
GLog.w(Messages.get(AncityArmor.class,"no_charge"));
}
}
}
public void fxs(Ballistica beam, Callback callback) {
MagicMissile.boltFromChar( curUser.sprite.parent,
MagicMissile.TOXIC_VENT,
curUser.sprite,
beam.collisionPos,
callback);
Sample.INSTANCE.play( Assets.Sounds.ZAP );
//buildBeams(beam);
callback.call();
}
protected int collisionProperties = Ballistica.MAGIC_BOLT;
public int collisionProperties(int target){
return collisionProperties;
}
public void wandUsed() {
curUser.spendAndNext( 1f );
}
protected static CellSelector.Listener zapper = new CellSelector.Listener() {
@Override
public void onSelect( Integer target ) {
if (target != null) {
final AncityArmor curWand;
if (curItem instanceof AncityArmor) {
curWand = (AncityArmor) AncityArmor.curItem;
} else {
return;
}
final Ballistica shot = new Ballistica( curUser.pos, target, curWand.collisionProperties(target));
int cell = shot.collisionPos;
if (target == curUser.pos || cell == curUser.pos) {
GLog.i( Messages.get(Wand.class, "self_target") );
return;
}
curUser.sprite.zap(cell);
if (curWand.tryToZap(curUser)) {
curUser.busy();
curWand.fxs(shot, new Callback() {
public void call() {
curWand.onZap(shot);
curWand.wandUsed();
}
});
curWand.cursedKnown = true;
}
}
}
@Override
public String prompt() {
return Messages.get(Wand.class, "prompt");
}
};
public boolean tryToZap( Hero owner ){
if (owner.buff(MagicImmune.class) != null){
GLog.w( Messages.get(Wand.class, "no_magic") );
return false;
}
return true;
}
public void onZap( Ballistica beam ) {
Char ch = Actor.findChar(beam.collisionPos);
if (ch != null){
if (!(ch instanceof Mob)){
return;
}
Mob enemy = (Mob) ch;
GameScene.add(Blob.seed(enemy.pos, 200, ToxicGas.class));
GameScene.add(Blob.seed(enemy.pos, 200, CorrosiveGas.class));
charge -= 40;
Sample.INSTANCE.play( Assets.Sounds.GAS, 1, 0.8f * Random.Float(0.87f, 1.15f) );
}
}
@Override
public float evasionFactor(Char owner, float evasion ){
if (hasGlyph(Stone.class, owner) && !((Stone)glyph).testingEvasion()){
return 0;
}
if (owner instanceof Hero){
int aEnc = STRReq() - ((Hero) owner).STR();
if (aEnc > 0) evasion /= Math.pow(2.5, aEnc);
Momentum momentum = owner.buff(Momentum.class);
if (momentum != null){
evasion += momentum.evasionBonus(((Hero) owner).lvl, Math.max(0, -aEnc));
}
}
return evasion*1.35f + augment.evasionFactor(buffedLvl());
}
@Override
public int DRMin(int lvl){
if (Dungeon.isChallenged(Challenges.NO_ARMOR)){
return 0;
}
int max = DRMax(lvl);
if (lvl >= max){
return (lvl - max);
} else {
return lvl*2;
}
}
@Override
public int DRMax(int lvl){
int max = 3 * (2 + lvl ) + (lvl > 0 ? 1 : 0 ) + augment.defenseFactor(lvl);
if (Dungeon.isChallenged(Challenges.NO_ARMOR)){
return 3 + augment.defenseFactor(lvl);
}
if (lvl > max){
return ((lvl - max)+1)/2;
} else {
return max;
}
}
}

View File

@ -0,0 +1,93 @@
package com.shatteredpixel.shatteredpixeldungeon.items.armor.custom;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import java.util.ArrayList;
/**自定义护甲是除开地牢之外的独立护甲
* 但同时拥有自己的能力无法使用皇冠的能力
* 为此使用抽象类作为模板 */
public abstract class CustomArmor extends Armor {
private Charger charger;
public float charge = 0;
public class Charger extends Buff {
@Override
public boolean act() {
LockedFloor lock = target.buff(LockedFloor.class);
if (lock == null || lock.regenOn()) {
charge += 100 / 500f; //500 turns to full charge
updateQuickslot();
if (charge > 100) {
charge = 100;
}
}
spend(TICK);
return true;
}
}
@Override
public boolean doUnequip( Hero hero, boolean collect, boolean single ) {
if (super.doUnequip( hero, collect, single )) {
if (charger != null){
charger.detach();
charger = null;
}
return true;
} else {
return false;
}
}
protected static final String AC_CUSTOM = "CUSTOM";
{
image = ItemSpriteSheet.ARMOR_ANCITY;
}
//自定义护甲从8开始计算
public CustomArmor() {
super( 0 );
}
@Override
public String status() {
return Messages.format( "%.0f%%", Math.floor(charge) );
}
@Override
public void activate(Char ch) {
super.activate(ch);
charger = new Charger();
charger.attachTo(ch);
}
/**默认情况下需要武器等级大于等于2级才能被使用*/
@Override
public ArrayList<String> actions(Hero hero) {
ArrayList<String> actions = super.actions(hero);
if(this.level()>=2){
actions.add(AC_CUSTOM);
}
return actions;
}
/**通过检测图像,在大于目标等级后添加快捷按钮*/
@Override
public int image() {
super.image();
if (level() >= 2) {
defaultAction = AC_CUSTOM;
}
return image;
}
}

View File

@ -0,0 +1,15 @@
package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AlowGlyph;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
public class AncityStone extends Armor.AlowGlyph {
@Override
public int proc(Armor armor, Char attacker, Char defender, int damage) {
//no proc effect, see Hero.isImmune and GhostHero.isImmune and ArmoredStatue.isImmune
return damage;
}
}

View File

@ -0,0 +1,202 @@
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage;
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
import java.util.ArrayList;
public class CommRelay extends Artifact {
{
image = ItemSpriteSheet.DG25;
level = 0;
levelCap = 5;
defaultAction=AC_MERC;
}
private static final int NIMAGES = 1;
//private static final String AC_SUPP = "SUPPORT PACKAGE";
//private static final String AC_MERC = "HIRE MERCENARY";
//private static final String TXT_MERC = "A mercenary teleports adjacent to you!";
//private static final String TXT_BOSS = "Strong magic aura of this place prevents the guilds from teleporting
// you supplies!";
private static final String AC_SUPP = "补给物";
private static final String AC_MERC = "呼唤雇佣兵";
private static final String TXT_MERC = "雇佣兵传送到你附近!";
private static final String TXT_BOSS = "这里强大的魔力流阻止了地牢国际安全委员公会预传送给你的东西!";
@Override
public ArrayList<String> actions(Hero hero) {
ArrayList<String> actions = super.actions(hero);
if (isEquipped(hero))
actions.add(AC_MERC);
actions.add(AC_SUPP);
return actions;
}
@Override
protected ArtifactBuff passiveBuff() {
return new Collection();
}
protected boolean useable(){
return true;
}
@Override
public void execute(Hero hero, String action) {
super.execute(hero, action);
if (action.equals(AC_MERC)) {
if(!cursed){
if (!isEquipped(hero))
GLog.i("你需要先装备神器才能使用!");
else if(!useable())
GLog.i("你想做什么?");
else if (!(Dungeon.gold >= 3500))//TODO adjust the gold cost based on current level.
GLog.w("你穷困潦倒,不能使用神器的该技能!");
else {
ArrayList<Integer> respawnPoints = new ArrayList<Integer>();
for (int i = 0; i < PathFinder.NEIGHBOURS8.length; i++) {
int p = curUser.pos + PathFinder.NEIGHBOURS8[i];
if (Actor.findChar(p) == null) {
respawnPoints.add(p);
}
}
int nImages = NIMAGES;
while (nImages > 0 && respawnPoints.size() > 0) {
int index = Random.index(respawnPoints);
MirrorImage mob = new MirrorImage();
mob.duplicate( hero );
GameScene.add(mob);
ScrollOfTeleportation.appear(mob, respawnPoints.get(index));
respawnPoints.remove(index);
nImages--;
}
Sample.INSTANCE.play(Assets.Sounds.READ);
Invisibility.dispel();
Dungeon.gold -= 3500;
GLog.p(TXT_MERC);
}
} else {
GLog.i("我们不会服从你!");
//GLog.i("The item will not obey you!");
}
} else if (action.equals(AC_SUPP)) {
if (!(Dungeon.gold >= 5000)){//TODO adjust the gold cost based on current level.
GLog.w("你穷困潦倒,不能使用神器的该技能!");
} else if(Dungeon.bossLevel()){
GLog.i(TXT_BOSS);
} else{
GameScene.selectCell(listener);
}
}
}
@Override
public String desc() {
String desc = "你惊讶的在地牢里发现了一个正在工作的通讯中继器!这还有一份说明书,";
desc += "加上一点阅读时的相互参照,你搞明白了它的功能。\n\n" +
"似乎它连接着雇佣兵协会的数据库。你很确定你可以和协会做个交易,当然是以一些金钱作为交换。";
if(isEquipped(Dungeon.hero)){
desc += "\n\n";
if(cursed){
desc += "中继器在你背包里自己打开了,并发出了一道响亮的静电在地牢中回荡。";
} else if(level < 2){
desc += "你用无线电联系上了一个雇佣兵协会,他们很乐意给你提供一些帮助,只要你花一些钱来启动他们的物质传送器,";
} else if (level < 10){
desc += "有人远程在你的通讯中继器上添加了一个大大的红色按钮上面写着“补给包5000金币 和 雇佣兵3500金币“你当然知道这会花你一大笔钱但你不禁对它的用处浮想联翩。";
} else {
desc += "你和电台上的协会很熟了,他们愿意为你提供跟好的服务,并收取更低费用。";
}
}
return desc;
}
protected static CellSelector.Listener listener = new CellSelector.Listener() {
@Override
public void onSelect(Integer pos) {
if (pos != null) {
Dungeon.level.drop(Generator.random(Generator.Category.FOOD), pos).type = Heap.Type.CHEST;
int loot = Random.Int(3);
if (loot == 0) {
Dungeon.level.drop(Generator.random(Generator.Category.RING), pos);
} else if (loot == 1) {
Dungeon.level.drop(Generator.random(Generator.Category.WAND), pos);
} else {
Dungeon.level.drop(Generator.random(Random.oneOf(Generator.Category.WEAPON,
Generator.Category.ARMOR)), pos);
}
Dungeon.level.drop(new Ankh(), pos);
Dungeon.level.drop(Generator.random(Generator.Category.POTION), pos);
Dungeon.level.drop(Generator.random(Generator.Category.SCROLL), pos);
Dungeon.gold -= 5000;
Sample.INSTANCE.play(Assets.Sounds.TELEPORT);
GameScene.updateMap(pos);
Dungeon.observe();
GLog.p("地牢国际安全委员公会为你带来了补给箱!\n祝冒险愉快--地牢国际安全委员公会");
} else {
GLog.n("你已经取消补给包发送申请!!!");
}
}
@Override
public String prompt() {
return "选择补给物的位置";
}
};
public class Collection extends ArtifactBuff{
public void collectGold(int gold){
exp += gold / 4;
}
@Override
public boolean act(){
if(isCursed()&& level < levelCap){
exp -= (500 * level);
upgrade();
}
spend(TICK);
if(exp >= (500 * level) && level < levelCap){
exp -= (500 * level);
upgrade();
}
updateQuickslot();
return true;
}
public void checkUpgrade(){
while (exp >= 1000 && level < levelCap){
exp -= 1000;
upgrade();
}
}
}
}

View File

@ -64,7 +64,7 @@ public class WraithAmulet extends Artifact {
@Override
public int visiblyUpgraded() {
return levelKnown ? Math.round((level()*8)/(float)levelCap): 0;
return levelKnown ? Math.round((level()*10)/(float)levelCap): 0;
}
@ -77,10 +77,10 @@ public class WraithAmulet extends Artifact {
} else if(useableBasic()) {
if(this.isEquipped(Dungeon.hero)){
if(this.charge > 0) {
exp += 5;
exp += level()>5 ? 20 : 40;
Buff.affect(Dungeon.hero, Invisibility.class, Invisibility.DURATION/2);
GLog.p(Messages.get(this,"ghost"));
cooldown = 30 - (level / 2);
cooldown = 20 - (level);
charge--;
} else {
GLog.i(Messages.get(this,"nochareup"));
@ -211,10 +211,10 @@ public class WraithAmulet extends Artifact {
if (hero.rooted || Dungeon.level.distance(hero.pos, target) < 3) {
if(enemy != null && !(enemy instanceof NPC)){
final WraithAmulet amulet = (WraithAmulet) Item.curItem;
amulet.exp += 10;
amulet.exp += 40;
hero.pos = target;
if (enemy.properties().contains(Char.Property.BOSS)) {
enemy.damage(enemy.HT/10, WraithAmulet.class);
enemy.damage(enemy.HT/4, WraithAmulet.class);
GLog.i(Messages.get(this, "killboss"));
enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this,"koss"));
} else {
@ -225,7 +225,7 @@ public class WraithAmulet extends Artifact {
ScrollOfTeleportation.appear(hero, target);
Dungeon.observe();
hero.sprite.emitter().start(ShadowParticle.UP, 0.05f, 10);
amulet.cooldown = 300;
amulet.cooldown = 150 / (amulet.level() / 2);
amulet.charge -= 6;
} else {
GLog.w(Messages.get(this, "notnpc"));

View File

@ -34,6 +34,7 @@ public class OilLantern extends Item {
private static final String FLASKS = "flasks";
private static final int MAX_CHARGE = 60;
private static final int MIX_CHARGE = 20;
private static final float TIME_TO_USE = 2.0f;
private static final String TXT_STATUS = "%d%%";
@ -41,6 +42,8 @@ public class OilLantern extends Item {
private int charge = 100+Challenges.activeChallenges()/5*50;
public int flasks = 0;
public int plingks = 0;
public OilLantern() {
this.image = ItemSpriteSheet.LANTERNA;
this.unique = true;
@ -94,30 +97,40 @@ public class OilLantern extends Item {
}
public void execute(Hero hero, String action) {
if (action.equals(AC_LIGHT)) {
if (hero.buff(LostInventory.class) == null) {
if (this.charge > 0) {
activate(hero, true);
} else if (this.flasks > 0) {
GLog.w(Messages.get(OilLantern.class, "lanterneedsxs"));
switch (action) {
case AC_LIGHT:
if (hero.buff(LostInventory.class) == null) {
if (this.charge > 0) {
activate(hero, true);
} else if (this.flasks > 0) {
GLog.w(Messages.get(OilLantern.class, "lanterneedsxs"));
} else {
GLog.w(Messages.get(OilLantern.class, "lanterneedsx"));
}
} else {
GLog.w(Messages.get(OilLantern.class, "lanterneedsx"));
GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯");
}
} else {
GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯");
}
} else if (action.equals(AC_REFILL)) {
if (this.flasks > 0) {
refill(hero);
} else {
GLog.w(Messages.get(OilLantern.class, "lanterneed"));
}
} else if (action.equals(AC_SNUFF)) {
if (isActivated()) {
deactivate(hero, true);
}
} else {
GLog.w(Messages.get(OilLantern.class, "lanterneeds"));
break;
case AC_REFILL:
if (this.flasks > 0) {
refill(hero);
} else {
GLog.w(Messages.get(OilLantern.class, "lanterneed"));
}
if (this.plingks > 0) {
refills(hero);
}
break;
case AC_SNUFF:
if (isActivated()) {
deactivate(hero, true);
}
break;
default:
GLog.w(Messages.get(OilLantern.class, "lanterneeds"));
break;
}
}
@ -132,6 +145,17 @@ public class OilLantern extends Item {
updateQuickslot();
}
public void refills(Hero hero) {
this.flasks--;
this.charge += Math.min(MIX_CHARGE,100);
hero.spend(TIME_TO_USE);
hero.busy();
Sample.INSTANCE.play(Assets.Sounds.DRINK, TIME_TO_USE, TIME_TO_USE, 1.2f);
hero.sprite.operate(hero.pos);
GLog.i(Messages.get(OilLantern.class, "lanterreload"));
updateQuickslot();
}
public void activate(Hero hero, boolean voluntary) {
if (voluntary) {
if (Dungeon.hero.buff(Light.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) {
@ -152,23 +176,6 @@ public class OilLantern extends Item {
}
// if (voluntary && hero.lanterfire > 0) {
// hero.spend(TIME_TO_USE);
// hero.busy();
// GLog.i(Messages.get(OilLantern.class, "lanteron"));
// hero.sprite.operate(hero.pos);
// this.active = true;
// updateSprite();
// Buff.affect(hero, LighS.class);
// hero.search(false);
// Sample.INSTANCE.play("sounds/snd_click.mp3");
// updateQuickslot();
// Dungeon.observe();
// } else {
// GameScene.flash(0x880000);
// GLog.n(Messages.get(OilLantern.class, "black"));
// }
}
public void deactivate(Hero hero, boolean voluntary) {

View File

@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Chill;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Blazing;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.HaloBlazing;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.utils.Random;
@ -47,14 +50,17 @@ public class Whip extends MeleeWeapon {
@Override
public int proc(Char attacker, Char defender, int damage ) {
switch (Random.Int(2)) {
case 0:
default:
return Random.NormalIntRange( 1, 6 );
case 1:
Buff.prolong(defender, Chill.class, Chill.DURATION);
return super.proc(attacker, defender, damage);
if (Random.Int(2) == 1) {
//如果寻找到鬼磷/烈焰附魔 则换为2级流血概率20%
if (Random.Int(10) == 2) {
if (enchantment instanceof HaloBlazing || enchantment instanceof Blazing) {
Buff.affect(defender, Bleeding.class).set(2);
} else {
Buff.prolong(defender, Chill.class, Chill.DURATION);
}
}
}
return super.proc(attacker, defender, damage);
}
}

View File

@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.RogueArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.WarriorArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.custom.AncityArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
@ -227,6 +228,7 @@ public enum Catalog {
ARMOR.seen.put( ScaleArmor.class, false);
ARMOR.seen.put( PlateArmor.class, false);
ARMOR.seen.put( LamellarArmor.class, false);
ARMOR.seen.put( AncityArmor.class, false);
ARMOR.seen.put( WarriorArmor.class, false);
ARMOR.seen.put( MageArmor.class, false);
ARMOR.seen.put( RogueArmor.class, false);

View File

@ -231,7 +231,7 @@ public class AncientMysteryCityBossLevel extends Level{
progress();
}
if(ch == hero){
if(ch == hero && Dungeon.level.locked){
//指定区域
if(MAIN_PORTAL.containsKey(ch.pos)) {
ScrollOfTeleportation.appear(ch, IF_MAIN_PORTAL.get(ch.pos));

View File

@ -148,7 +148,7 @@ public class DwarfMasterBossLevel extends Level {
}
private static final String IMP_SHOP = "imp_shop";
private void spawnShop(){
while (impShop.itemCount() >= 10*(impShop.height()-2)){
while (impShop.itemCount() >= 8*(impShop.height()-2)){
impShop.bottom++;
}
impShop.spawnShop(this);

View File

@ -278,9 +278,10 @@ public abstract class Level implements Bundlable {
addItemToSpawn( new PotionOfStrength() );
Dungeon.LimitedDrops.STRENGTH_POTIONS.count++;
}
if (Dungeon.souNeeded()) {
if (Dungeon.souNeeded() && Dungeon.depth>0) {
addItemToSpawn( new ScrollOfUpgrade() );
Dungeon.LimitedDrops.UPGRADE_SCROLLS.count++;
//GLog.i("好好好");
}
if (Dungeon.asNeeded()) {
addItemToSpawn( new Stylus() );

View File

@ -361,6 +361,8 @@ public class ItemSpriteSheet {
public static final int ARMOR_MAGE = ARMOR+7;
public static final int ARMOR_ROGUE = ARMOR+8;
public static final int ARMOR_HUNTRESS = ARMOR+9;
public static final int ARMOR_ANCITY = ARMOR+10;
static{
assignItemRect(ARMOR_CLOTH, 14, 14);
assignItemRect(ARMOR_LEATHER, 15, 15);
@ -372,6 +374,7 @@ public class ItemSpriteSheet {
assignItemRect(ARMOR_MAGE, 13, 13);
assignItemRect(ARMOR_ROGUE, 11, 13);
assignItemRect(ARMOR_HUNTRESS, 13, 13);
assignItemRect(ARMOR_ANCITY, 15,14);
}
//16 free slots

View File

@ -391,9 +391,9 @@ public class StatusPane extends Component {
int max = Dungeon.hero.HT;
if (SPDSettings.ClassUI()) {
bg.texture = TextureCache.get(Assets.Interfaces.STATUS_DARK);
} else {
bg.texture = TextureCache.get(Assets.Interfaces.STATUS);
} else {
bg.texture = TextureCache.get(Assets.Interfaces.STATUS_DARK);
}
if(SPDSettings.TimeLimit()) {
@ -444,6 +444,7 @@ public class StatusPane extends Component {
Date date = new Date();
String strDateFormat = "yyyy-MM-dd HH:mm";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat, Locale.getDefault());
Calendar cal=Calendar.getInstance();
int s=cal.get(Calendar.SECOND);
if(s<20) {

View File

@ -85,9 +85,9 @@ public class TalentButton extends Button {
add(fill);
if (SPDSettings.ClassUI()) {
bg = new Image(Assets.Interfaces.TALENT_BUTTON_DARK);
} else {
bg = new Image(Assets.Interfaces.TALENT_BUTTON);
} else {
bg = new Image(Assets.Interfaces.TALENT_BUTTON_DARK);
}
add(bg);
}

View File

@ -417,9 +417,9 @@ public class Toolbar extends Component {
public void update() {
super.update();
if (SPDSettings.ClassUI()) {
base.texture = TextureCache.get(Assets.Interfaces.TOOLBARDRAK);
} else {
base.texture = TextureCache.get(Assets.Interfaces.TOOLBAR);
} else {
base.texture = TextureCache.get(Assets.Interfaces.TOOLBARDRAK);
}
}

View File

@ -143,7 +143,7 @@ public class vM0_6_7_X_Changes {
}
public static void add_v0_6_55_Changes( ArrayList<ChangeInfo> changeInfos ) {
ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-7", true, "");
ChangeInfo changes = new ChangeInfo("v0.6.4.0-Beta2-9", true, "");
changes.hardlight(Window.TITLE_COLOR);
changeInfos.add(changes);
@ -165,6 +165,12 @@ public class vM0_6_7_X_Changes {
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ALCH_PAGE), ("炼金界面优化"),
("炼金指南进行优化。")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.TORCH), ("火把调整"),
("现在火把会在灯火中成为燃料。")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARMOR_ANCITY), ("板鳖甲"),
("来自远古的护甲,你是想现在使用,亦或者是收入囊中等待合适的时机?")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.RING_DIAMOND), ("财富之戒"),
("财富戒指同步为破碎。")));
@ -189,6 +195,12 @@ public class vM0_6_7_X_Changes {
changes.hardlight(Window.CYELLOW);
changeInfos.add(changes);
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WRALIPS), ("暗金宝石护符"),
("现在最高上限+10并调整优化了一些问题")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SCROLL_ODAL), ("升级卷轴"),
("现在修复升级卷轴可能丢失的问题并且采用平衡算法。例如你在1区摸到了4个升级在监狱只有两个。总量不变。")));
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WAND_KCX), ("再生法杖"),
("修复一些问题,并且可以持续使用。")));
@ -196,7 +208,7 @@ public class vM0_6_7_X_Changes {
("在高挑中,提灯的容量更多,商店售卖更多灯油,但灯火的每次减少可能会加剧!")));
changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("支离破碎"),
("支离破碎进行了一些怪组优化")));
("支离破碎进行了一些怪组优化,并且调整了巨魔铁匠任务")));
changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("杂项修改"),
("添加Boss专武保底机制连续三局未获得下次必定获得")));

View File

@ -20,7 +20,7 @@ public class LevelChecker {
boolean amuletObtained = Statistics.amuletObtained;
String level;
if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 5)) {
if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 1.5 : 5)) {
level = "_SSS+_";
} else if (totalScore >= SSS_SCORE * chalMultiplier/2 * (amuletObtained ? 1 : 4)) {
level = "SSS";

View File

@ -21,11 +21,15 @@
package com.shatteredpixel.shatteredpixeldungeon.windows;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.NO_ARMOR;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT;
import static com.shatteredpixel.shatteredpixeldungeon.Challenges.SBSG;
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
import static com.shatteredpixel.shatteredpixeldungeon.SPDSettings.HelpSettings;
import static com.shatteredpixel.shatteredpixeldungeon.Statistics.lanterfireactive;
import com.shatteredpixel.shatteredpixeldungeon.Conducts;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
@ -212,7 +216,11 @@ public class WndHero extends WndTabbed {
statSlot( Messages.get(this, "gold"), Statistics.goldCollected );
statSlot( Messages.get(this, "depth"), Statistics.deepestFloor );
statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed) );
statSlot( Messages.get(HeroStat.class, "seed_dungeon"), DungeonSeed.convertToCode(Dungeon.seed));
statSlot(Messages.get(HeroStat.class, "seed_type"), seedType());
if(lanterfireactive){
RestatSlot( Messages.get(this, "lanterfire"), (hero.lanterfire) + "/" + 100 );
@ -280,6 +288,20 @@ public class WndHero extends WndTabbed {
pos += GAP + txt.height();
}
private String seedType(){
String seed;
if (Dungeon.isDLC(Conducts.Conduct.BOSSRUSH)) {
seed = "BossRush";
}else if(Dungeon.isChallenged(NO_ARMOR)){
seed = "B";
} else if (Dungeon.isChallenged(RLPT)&&Dungeon.isChallenged(SBSG)) {
seed = "C";
} else {
seed = "A";
}
return seed;
}
private void IcestatSlot( String label, String value ) {
RenderedTextBlock txt = PixelScene.renderTextBlock( label, 7 );

View File

@ -287,7 +287,7 @@ public class WndInfoMob extends WndTitledMessage {
public void createChildren() {
super.createChildren();
colorBlock = new ColorBlock(1,1, SPDSettings.ClassUI() ? 0xFF555555 : 0xFF462d00);
colorBlock = new ColorBlock(1,1, SPDSettings.ClassUI() ? 0xFF462d00 : 0xFF555555);
add(colorBlock);
image1 = new BuffIcon(68, false);