|
@ -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
|
||||
|
||||
|
|
|
@ -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=我说了我需要镐子沾上蝙蝠血。赶紧!
|
||||
|
|
|
@ -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=你的护符能量不足,你无法使用任何能力。
|
||||
|
|
|
@ -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=荒芜之地
|
||||
|
|
|
@ -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=目前为止还没有已经结束的游戏。
|
||||
|
|
|
@ -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//
|
|
@ -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=挑战
|
||||
|
|
BIN
core/src/main/assets/sprites/boss/DiedElement.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
|
@ -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";
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -76,16 +76,6 @@ public class FlameB01 extends Mob {
|
|||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
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;
|
||||
}
|
||||
if(buff(Burning.class) != null){
|
||||
new Bomb().explode(this.pos);
|
||||
this.die(Burning.class);
|
||||
|
|
|
@ -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) );
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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 );
|
||||
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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
@ -57,6 +59,11 @@ public class Torch extends Item {
|
|||
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 );
|
||||
|
|
|
@ -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,9 +456,14 @@ public class Armor extends EquipableItem {
|
|||
|
||||
@Override
|
||||
public String name() {
|
||||
if(hero.belongings.armor instanceof CustomArmor){
|
||||
return super.name();
|
||||
} else {
|
||||
return glyph != null && (cursedKnown || !glyph.curse()) ? glyph.name( super.name() ) : super.name();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String info() {
|
||||
String info = desc();
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -486,7 +497,12 @@ public class Armor extends EquipableItem {
|
|||
info += " " + glyph.desc();
|
||||
}
|
||||
|
||||
if (cursed && isEquipped( Dungeon.hero )) {
|
||||
if (alowglyph != null && (cursedKnown || !alowglyph.curse())) {
|
||||
info += "\n\n" + Messages.get(Armor.class, "inscribed", alowglyph.name());
|
||||
info += " " + alowglyph.desc();
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
//
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
|
@ -28,7 +28,6 @@ public class LeatherArmor extends Armor {
|
|||
{
|
||||
image = ItemSpriteSheet.ARMOR_LEATHER;
|
||||
}
|
||||
|
||||
public LeatherArmor() {
|
||||
super( 2 );
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"));
|
||||
|
|
|
@ -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,7 +97,8 @@ public class OilLantern extends Item {
|
|||
}
|
||||
|
||||
public void execute(Hero hero, String action) {
|
||||
if (action.equals(AC_LIGHT)) {
|
||||
switch (action) {
|
||||
case AC_LIGHT:
|
||||
if (hero.buff(LostInventory.class) == null) {
|
||||
if (this.charge > 0) {
|
||||
activate(hero, true);
|
||||
|
@ -106,18 +110,27 @@ public class OilLantern extends Item {
|
|||
} else {
|
||||
GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯");
|
||||
}
|
||||
} else if (action.equals(AC_REFILL)) {
|
||||
break;
|
||||
case AC_REFILL:
|
||||
if (this.flasks > 0) {
|
||||
refill(hero);
|
||||
} else {
|
||||
GLog.w(Messages.get(OilLantern.class, "lanterneed"));
|
||||
}
|
||||
} else if (action.equals(AC_SNUFF)) {
|
||||
|
||||
if (this.plingks > 0) {
|
||||
refills(hero);
|
||||
}
|
||||
|
||||
break;
|
||||
case AC_SNUFF:
|
||||
if (isActivated()) {
|
||||
deactivate(hero, true);
|
||||
}
|
||||
} else {
|
||||
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) {
|
||||
|
|
|
@ -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:
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.proc(attacker, defender, damage);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -161,8 +161,8 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
L,R,R,W,W,R,W,W,W,R,R,R,R,R,R,R,R,R,W,W,W,R,W,W,R,R,L,
|
||||
L,R,R,R,W,R,R,W,R,R,R,R,R,R,R,R,R,R,R,W,R,R,W,R,R,R,L,
|
||||
L,L,L,L,W,W,R,R,R,R,R,R,R,R,R,R,R,R,R,R,K,D,W,L,L,L,L,
|
||||
L,R,R,L,L,W,E,C,R,R,R,R,R,R,R,R,R,R,R,C,E,W,L,L,R,R,L,
|
||||
L,R,R,R,L,W,W,D,R,R,R,R,R,A,R,R,R,R,R,D,W,W,L,R,R,R,L,
|
||||
L,R,R,L,L,W,E,C,R,R,R,R,W,W,W,R,R,R,R,C,E,W,L,L,R,R,L,
|
||||
L,R,R,R,L,W,W,D,R,R,R,R,W,A,W,R,R,R,R,D,W,W,L,R,R,R,L,
|
||||
L,R,L,R,L,W,W,W,W,W,W,W,W,G,W,W,W,W,W,W,W,W,L,R,L,R,L,
|
||||
L,R,R,R,L,R,R,W,L,R,R,R,E,L,E,R,R,R,R,W,R,R,L,R,R,R,L,
|
||||
L,L,R,L,L,R,W,W,W,L,R,S,S,L,S,S,R,L,W,W,W,R,L,L,R,L,L,
|
||||
|
@ -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));
|
||||
|
@ -254,6 +254,10 @@ public class AncientMysteryCityBossLevel extends Level{
|
|||
GameScene.updateMap( getBossDoor );
|
||||
set( 688, Terrain.LOCKED_DOOR );
|
||||
GameScene.updateMap( 688 );
|
||||
|
||||
set( 634, Terrain.WATER );
|
||||
GameScene.updateMap( 634 );
|
||||
|
||||
Dungeon.observe();
|
||||
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])){
|
||||
if (mob instanceof SakaFishBoss){
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() );
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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专武保底机制,连续三局未获得,下次必定获得")));
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
|
@ -214,6 +218,10 @@ public class WndHero extends WndTabbed {
|
|||
statSlot( Messages.get(this, "depth"), Statistics.deepestFloor );
|
||||
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 );
|
||||
|
|
|
@ -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);
|
||||
|
|