Update V0.6.2.0-Beta4
This commit is contained in:
parent
faa8a6e789
commit
267bb84c1f
|
@ -17,8 +17,8 @@ allprojects {
|
|||
appName = 'Magic Ling Pixel Dungeon'
|
||||
appPackageName = 'com.ansdomagiclingpixeldungeon.ling'
|
||||
|
||||
appVersionCode =900871
|
||||
appVersionName = '0.6.2.0-Beta3'
|
||||
appVersionCode =900872
|
||||
appVersionName = '0.6.2.0-Beta4'
|
||||
|
||||
appJavaCompatibility = JavaVersion.VERSION_11
|
||||
|
||||
|
|
|
@ -89,11 +89,6 @@ items.bombs.laserpython.name=激光十字晶柱召唤器
|
|||
items.bombs.laserpython.desc=这枚召唤器会在爆炸后立刻生成一个十字晶柱。
|
||||
items.bombs.laserpython.didnot_pick=你无法拾取该物品……
|
||||
|
||||
items.artifacts.wraithamulet.name=暗金宝石护符
|
||||
items.artifacts.wraithamulet.desc=来自于异世界的产物,能使自己进入虚无化。当护符能量足够多的时候,你还可以对敌人实行一次暗夜袭击,护符能量将会随着时间自动恢复。\n\n这个护符是证明给强者之人用的,冰雪魔女已经输的心服口服,现在她将此护身符给予给你。
|
||||
items.artifacts.wraithamulet.ac_ghost=遁入虚无
|
||||
items.artifacts.wraithamulet.ac_darkkill=暗夜袭击
|
||||
|
||||
items.food.pasty.moon=月饼
|
||||
items.food.pasty.moonling=月饼的味道让你回味无穷,你感到十分畅快。
|
||||
items.food.pasty.moon_desc=月饼象征着团圆美满,吃下这佳节诞生的产物,危险的地牢也在中秋节洋溢着快乐的气氛。中秋节快乐,%s!
|
||||
|
@ -172,7 +167,7 @@ items.weapon.melee.endingblade.ac_diedghost=✦死亡宣告✦
|
|||
items.weapon.melee.endingblade.ac_healreset=_千里追魂_
|
||||
|
||||
items.weapon.melee.washcrime.name=涤罪
|
||||
items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的Γ血迹Γ已然生锈。\n命中有几率释放✦未安息的亡魂✦助战,并给敌人施加✦餐费✦效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_
|
||||
items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的Γ血迹Γ已然生锈。\n命中有几率释放✦未安息的亡魂✦助战,并给敌人施加✦残废✦效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_
|
||||
|
||||
items.weapon.melee.washcrime$diedghost.name=未安息的亡魂
|
||||
items.weapon.melee.washcrime$diedghost.desc=肉身已然逝去,灵魂尚未得到安息,脑海遵照主人的意愿,直到真正的死亡降临。
|
||||
|
@ -848,8 +843,30 @@ items.artifacts.unstablespellbook.desc_index=这本魔典的目录并不完整
|
|||
items.artifacts.unstablespellbook.desc_empowered=被你放进书中的卷轴闪耀着魔力的微光。你能够利用魔典进一步激发卷轴能力,展现出秘卷效果,但这样也会消耗你额外的充能。
|
||||
items.artifacts.unstablespellbook.read_empowered=被你放入魔典的卷轴都充满了魔法能量。你可以自主选择导引出该卷轴的正常或秘卷能力。\n\n如果选择释放秘卷能力,则会消耗2点魔典充能。
|
||||
|
||||
items.artifacts.wraithamulet.name=暗金宝石护符
|
||||
items.artifacts.wraithamulet.desc=来自于不属于这个世界的产物,能使自己进入虚无化。\n\n当护符能量足够多的时候,你还可以对敌人实行一次暗夜突袭,对目标造成_最大生命值x4的伤害_。\n\n如果是首领,则受到_最大生命值的50%伤害_。护符能量将会随着时间自动恢复。\n\n这个护符曾经是一个少女来探险的护身符,自从她在地牢中失踪后,这个护符就一直被遗弃在这里……
|
||||
items.artifacts.wraithamulet.ghost=你遁入了虚无,你的身体变得透明了。
|
||||
items.artifacts.wraithamulet.cooddown=你的护符能量正在冷却,你暂时无法使用任何能力。
|
||||
items.artifacts.wraithamulet.nochareup=你的护符能量不足,你无法使用任何能力。
|
||||
items.artifacts.wraithamulet.cursed=少女的怨念与诅咒魔力在此凝聚,你的灵魂被束缚在这里,你无法使用护符的能力。\n\n_被诅咒的暗金宝石护符将抑制饮用药水的能力,并且周期性吸取穿戴者的生命精华_
|
||||
|
||||
items.artifacts.wraithamulet.ac_ghost=遁入虚无
|
||||
items.artifacts.wraithamulet.ac_darkkill=暗夜突袭
|
||||
items.artifacts.wraithamulet.noequip=你必须装备此神器才能使用它的能力。
|
||||
items.artifacts.wraithamulet.must_nocursed=你必须净化护符的诅咒才能使用它的能力。
|
||||
items.artifacts.wraithamulet.drink_cursed=就当你准备饮用药水时,被诅咒的暗金宝石护符发射出一道无形的结界阻止了你饮用药水。
|
||||
|
||||
items.artifacts.wraithamulet$wraithrecharge.ondeath=你的灵魂被护符吸食殆尽了……
|
||||
items.artifacts.wraithamulet$wraithrecharge.cursed=我会让你的灵魂永远留在这里……
|
||||
items.artifacts.wraithamulet$wraithrecharge.rankings_desc=被暗金护符吸食殆尽……
|
||||
items.artifacts.wraithamulet$wraithrecharge.ghoststong=你的暗金护符变得更加强大了。
|
||||
|
||||
items.artifacts.wraithamulet$1.selectkill=选择刺杀目标
|
||||
items.artifacts.wraithamulet$1.far=刺杀目标太远,无法进行刺杀。
|
||||
items.artifacts.wraithamulet$1.rooted=你的身体被束缚在这里,无法进行刺杀。
|
||||
items.artifacts.wraithamulet$1.notthere=那里没有任何目标
|
||||
items.artifacts.wraithamulet$1.killmobs=该生物成功被暗夜突袭处决!
|
||||
items.artifacts.wraithamulet$1.killboss=该首领成功被暗夜突袭重创!
|
||||
###bags
|
||||
items.bags.bag.name=背包
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ badges$badge.yasd.title=另类死亡爱好者
|
|||
badges$badge.yasd.desc=解锁所有关于死因的徽章
|
||||
|
||||
badges$badge.boss_slain_1.title=丛林之熵
|
||||
badges$badge.boss_slain_1.desc=击败丛尽头的任意Boss
|
||||
badges$badge.boss_slain_1.desc=击败丛林尽头的任意Boss
|
||||
badges$badge.boss_slain_2.title=冰狱噩梦
|
||||
badges$badge.boss_slain_2.desc=击败监狱尽头的任意Boss
|
||||
badges$badge.boss_slain_3.title=冰雪诅咒
|
||||
|
|
|
@ -523,4 +523,6 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x67=-V0.6.2-Beta2\n1.修复提灯,
|
|||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x68=-V0.6.2-Beta3\n1.修复嗜血荆棘的一些错误\n2.修复快捷栏在遗物状态下仍然可以使用的Bug
|
||||
|
||||
ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x69=-V0.6.2-Beta4\n1.修复快捷栏的初始配置问题\n2.修复徽章的一些错误\n3.矫正部分错误文案
|
||||
|
||||
//ui.changelist.mlpd.vm0_5_x_changes.xxx//
|
|
@ -1072,7 +1072,7 @@ public class Badges {
|
|||
if (global.contains( badge )) {
|
||||
|
||||
if (!badge.meta) {
|
||||
GLog.h( Messages.get(Badges.class, "endorsed", badge.desc()) );
|
||||
GLog.h( Messages.get(Badges.class, "endorsed", badge.title()) );
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -1081,9 +1081,9 @@ public class Badges {
|
|||
saveNeeded = true;
|
||||
|
||||
if (badge.meta) {
|
||||
GLog.h( Messages.get(Badges.class, "new_super", badge.desc()) );
|
||||
GLog.h( Messages.get(Badges.class, "new_super", badge.title()) );
|
||||
} else {
|
||||
GLog.h( Messages.get(Badges.class, "new", badge.desc()) );
|
||||
GLog.h( Messages.get(Badges.class, "new", badge.title()) );
|
||||
}
|
||||
PixelScene.showBadge( badge );
|
||||
}
|
||||
|
|
|
@ -114,4 +114,10 @@ public class Invisibility extends FlavourBuff {
|
|||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", dispTurns());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ public enum HeroClass {
|
|||
}
|
||||
|
||||
public void initHero( Hero hero ) {
|
||||
|
||||
//new WraithAmulet().quantity(1).identify().collect();
|
||||
if (Dungeon.isChallenged(Challenges.RLPT)) {
|
||||
new Ankh().quantity(1).identify().collect();
|
||||
}
|
||||
|
@ -166,6 +166,7 @@ public enum HeroClass {
|
|||
new MysteryMeat().quantity(100).identify().collect();
|
||||
|
||||
Buff.affect(hero, ChampionHero.AntiMagic.class, 50000f);
|
||||
//new WraithAmulet().quantity(1).identify().collect();
|
||||
|
||||
new BloodthirstyThorn().quantity(1).identify().collect();
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
|
||||
|
@ -362,7 +363,7 @@ public class RedDragon extends NPC {
|
|||
|
||||
Item item = randomArtifact();
|
||||
if(item != null) {
|
||||
switch (Random.Int(6)){
|
||||
switch (Random.NormalIntRange(1,7)){
|
||||
case 1:
|
||||
armor = new CapeOfThorns(); break;
|
||||
case 2:
|
||||
|
@ -375,6 +376,8 @@ public class RedDragon extends NPC {
|
|||
armor = new SandalsOfNature(); break;
|
||||
case 6:
|
||||
armor = new TimekeepersHourglass(); break;
|
||||
case 7:
|
||||
armor = new WraithAmulet(); break;
|
||||
}
|
||||
} else {
|
||||
switch (Random.chances(new float[]{0, 0, 10, 6, 3, 1})){
|
||||
|
|
|
@ -43,6 +43,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.UnstableSpellbook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty;
|
||||
|
@ -491,9 +492,10 @@ public class Generator {
|
|||
AlchemistsToolkit.class,
|
||||
DriedRose.class,
|
||||
LloydsBeacon.class,
|
||||
EtherealChains.class
|
||||
EtherealChains.class,
|
||||
WraithAmulet.class,
|
||||
};
|
||||
ARTIFACT.defaultProbs = new float[]{ 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1};
|
||||
ARTIFACT.defaultProbs = new float[]{ 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1,1};
|
||||
ARTIFACT.probs = ARTIFACT.defaultProbs.clone();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,41 +1,54 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
||||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
|
||||
public class WraithAmulet extends Artifact {
|
||||
|
||||
{
|
||||
image = ItemSpriteSheet.WRALIPS;
|
||||
cooldown = 0;
|
||||
charge = Math.min(level()+3, 10);
|
||||
charge = Math.min(level()+1, 10);
|
||||
partialCharge = 0;
|
||||
chargeCap = Math.min(level()+3, 10);
|
||||
chargeCap = Math.min(level()+1, 10);
|
||||
level = 0;
|
||||
levelCap = 10;
|
||||
defaultAction = AC_GHOST;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean doEquip(Hero hero) {
|
||||
if (super.doEquip(hero)){
|
||||
if (cursed) {
|
||||
Buff.affect(hero, CursedAmulet.class).set( (100), 1 );
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String AC_GHOST = "ghost";
|
||||
private static final String AC_ASSASSINATE = "darkkill";
|
||||
|
@ -55,16 +68,16 @@ public class WraithAmulet extends Artifact {
|
|||
@Override
|
||||
public void execute(Hero hero, String action) {
|
||||
super.execute(hero, action);
|
||||
if(action.equals(AC_GHOST)){
|
||||
if(action.equals(AC_GHOST) && !cursed){
|
||||
if (cooldown > 0) {
|
||||
GLog.i(Messages.get(this,"cooddown"));
|
||||
GLog.w(Messages.get(this,"cooddown"));
|
||||
} else if(useableBasic()) {
|
||||
if(this.isEquipped(Dungeon.hero)){
|
||||
if(this.charge > 0) {
|
||||
exp += 5;
|
||||
Buff.affect(Dungeon.hero, Invisibility.class, Invisibility.DURATION);
|
||||
GLog.i(Messages.get(this,"ghost"));
|
||||
cooldown = 12 - (level / 2);
|
||||
GLog.p(Messages.get(this,"ghost"));
|
||||
cooldown = 34 - (level / 2);
|
||||
charge--;
|
||||
} else {
|
||||
GLog.i(Messages.get(this,"nochareup"));
|
||||
|
@ -73,15 +86,16 @@ public class WraithAmulet extends Artifact {
|
|||
GLog.i(Messages.get(this,"noequip"));
|
||||
}
|
||||
} else {
|
||||
GLog.i(Messages.get(this,"whoareyou"));
|
||||
GLog.n(Messages.get(this,"whoareyou"));
|
||||
}
|
||||
} else if (action.equals(AC_ASSASSINATE)) {
|
||||
} else if (action.equals(AC_ASSASSINATE) && !cursed) {
|
||||
if(this.charge >= 5){
|
||||
GameScene.selectCell(porter);
|
||||
charge-=5;
|
||||
} else {
|
||||
GLog.i(Messages.get(this,"nochareup"));
|
||||
}
|
||||
} else if(cursed) {
|
||||
GLog.i(Messages.get(this,"must_nocursed"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,16 +103,12 @@ public class WraithAmulet extends Artifact {
|
|||
return true;
|
||||
}
|
||||
|
||||
protected boolean useable(){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions(Hero hero) {
|
||||
ArrayList<String> actions = super.actions(hero);
|
||||
if (isEquipped(hero))
|
||||
if (isEquipped(hero) && !cursed)
|
||||
actions.add(AC_GHOST);
|
||||
if (isEquipped(hero) && charge >= 7)
|
||||
if (isEquipped(hero) && charge >= 7 && !cursed)
|
||||
actions.add(AC_ASSASSINATE);
|
||||
return actions;
|
||||
}
|
||||
|
@ -111,6 +121,7 @@ public class WraithAmulet extends Artifact {
|
|||
public class WraithRecharge extends ArtifactBuff{
|
||||
@Override
|
||||
public boolean act() {
|
||||
|
||||
if (charge < chargeCap && !cursed && useableBasic()) {
|
||||
partialCharge += 1 / (150f - (chargeCap - charge) * 15f);
|
||||
|
||||
|
@ -123,9 +134,14 @@ public class WraithAmulet extends Artifact {
|
|||
}
|
||||
}
|
||||
} else if(cursed){
|
||||
if(Random.Int(40) == 0){
|
||||
GLog.i(Messages.get(this,"cursed"));
|
||||
int level = level() == 0 ? 1 : level();
|
||||
hero.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this,"cursed"));
|
||||
hero.damage(Random.Int(4*level, 6*level), this);
|
||||
if (!hero.isAlive()) {
|
||||
Dungeon.fail(getClass());
|
||||
GLog.n(Messages.get(this, "ondeath"));
|
||||
}
|
||||
spend(90f);
|
||||
}
|
||||
|
||||
if(exp > level * 50){
|
||||
|
@ -151,7 +167,16 @@ public class WraithAmulet extends Artifact {
|
|||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc");
|
||||
String result = Messages.get(this, "desc");
|
||||
|
||||
if (isEquipped(Dungeon.hero)) {
|
||||
if (cursed) {
|
||||
Buff.affect(hero, CursedAmulet.class).set( (100), 1 );
|
||||
result += "\n\n" + Messages.get(this, "cursed");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
public int getCharge(){
|
||||
return this.charge;
|
||||
|
@ -163,7 +188,7 @@ public class WraithAmulet extends Artifact {
|
|||
}
|
||||
@Override
|
||||
public void onSelect(Integer target) {
|
||||
HashSet<Mob> victim = new HashSet<Mob>();
|
||||
|
||||
if (target != null ) {
|
||||
|
||||
if (target == curUser.pos) {
|
||||
|
@ -172,26 +197,121 @@ public class WraithAmulet extends Artifact {
|
|||
}
|
||||
|
||||
QuickSlotButton.target(Actor.findChar(target));
|
||||
if(Actor.findChar(target) != null){
|
||||
if(Level.distancex(Dungeon.hero.pos, target) == 1) {
|
||||
Char enemy = Actor.findChar(target);
|
||||
if (enemy != null && !(enemy instanceof NPC)) {
|
||||
if (hero.rooted || Dungeon.level.distance(hero.pos, target) < 3) {
|
||||
final WraithAmulet amulet = (WraithAmulet) Item.curItem;
|
||||
amulet.charge--;
|
||||
amulet.exp += 10;
|
||||
Objects.requireNonNull(Actor.findChar(target)).damage(Objects.requireNonNull(Actor.findChar(target)).HT, WraithAmulet.class);
|
||||
Dungeon.hero.pos = target;
|
||||
Dungeon.hero.sprite.emitter().start(ShadowParticle.UP, 0.05f, 10);
|
||||
ScrollOfTeleportation.appear(Dungeon.hero, target);
|
||||
Dungeon.observe();
|
||||
hero.pos = target;
|
||||
if (enemy.properties().contains(Char.Property.BOSS)) {
|
||||
enemy.damage(enemy.HT / 2, WraithAmulet.class);
|
||||
GLog.i(Messages.get(this, "killboss"));
|
||||
} else {
|
||||
enemy.damage(enemy.HT * 4, WraithAmulet.class);
|
||||
GLog.i(Messages.get(this, "killmobs"));
|
||||
}
|
||||
} else {
|
||||
hero.sprite.emitter().start(ShadowParticle.UP, 0.05f, 10);
|
||||
ScrollOfTeleportation.appear(hero, target);
|
||||
Dungeon.observe();
|
||||
|
||||
amulet.charge -= 5;
|
||||
} else if(Dungeon.level.distance(hero.pos, target) < 3) {
|
||||
GLog.i(Messages.get(this, "far"));
|
||||
} else if (hero.rooted) {
|
||||
GLog.i(Messages.get(this, "rooted"));
|
||||
}
|
||||
} else {
|
||||
GLog.i(Messages.get(this, "notthere"));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static class CursedAmulet extends Buff {
|
||||
|
||||
{
|
||||
type = buffType.POSITIVE;
|
||||
}
|
||||
|
||||
public static int level = 0;
|
||||
private int interval = 1;
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
if (target.isAlive()) {
|
||||
|
||||
spend(interval);
|
||||
if (level <= 0) {
|
||||
detach();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int level() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void set( int value, int time ) {
|
||||
//decide whether to override, preferring high value + low interval
|
||||
if (Math.sqrt(interval)*level <= Math.sqrt(time)*value) {
|
||||
level = value;
|
||||
interval = time;
|
||||
spend(time - cooldown() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float iconFadePercent() {
|
||||
if (target instanceof Hero){
|
||||
float max = ((Hero) target).lvl;
|
||||
return Math.max(0, (max-level)/max);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", level, dispTurns(visualcooldown()));
|
||||
}
|
||||
|
||||
private static final String LEVEL = "level";
|
||||
private static final String INTERVAL = "interval";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
super.storeInBundle( bundle );
|
||||
bundle.put( INTERVAL, interval );
|
||||
bundle.put( LEVEL, level );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
super.restoreFromBundle( bundle );
|
||||
interval = bundle.getInt( INTERVAL );
|
||||
level = bundle.getInt( LEVEL );
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void tintIcon(Image icon) {
|
||||
// icon.hardlight(0x990000);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.BLESS;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.ItemStatusHandler;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Recipe;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||
|
@ -236,7 +237,9 @@ public class Potion extends Item {
|
|||
|
||||
} else if (action.equals( AC_DRINK )) {
|
||||
|
||||
if (isKnown() && mustThrowPots.contains(getClass())) {
|
||||
if(Dungeon.hero.buff(WraithAmulet.CursedAmulet.class) != null) {
|
||||
GLog.n(Messages.get(WraithAmulet.class, "drink_cursed"));
|
||||
} else if (isKnown() && mustThrowPots.contains(getClass())) {
|
||||
|
||||
GameScene.show(
|
||||
new WndOptions(new ItemSprite(this),
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
|
|||
|
||||
import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
|
@ -31,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.EndingBlade;
|
||||
|
@ -95,7 +97,11 @@ public class ScrollOfRemoveCurse extends InventoryScroll {
|
|||
for (Item item : items) {
|
||||
if (item != null) {
|
||||
item.cursedKnown = true;
|
||||
if (item instanceof EndingBlade) {
|
||||
if (item instanceof WraithAmulet) {
|
||||
Buff.detach(hero, WraithAmulet.CursedAmulet.class);
|
||||
procced = true;
|
||||
item.cursed = false;
|
||||
} else if (item instanceof EndingBlade) {
|
||||
item.cursed = true;
|
||||
} else {
|
||||
if (item.cursed) {
|
||||
|
|
|
@ -34,6 +34,7 @@ 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.artifacts.AlchemistsToolkit;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
|
@ -44,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.UnstableSpellbook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.WraithAmulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.BrokenBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.DeepBloodBooks;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.books.bookslist.GrassKingBooks;
|
||||
|
@ -260,7 +262,8 @@ public enum Catalog {
|
|||
RINGS.seen.put( RingOfWealth.class, false);
|
||||
|
||||
ARTIFACTS.seen.put( AlchemistsToolkit.class, false);
|
||||
//ARTIFACTS.seen.put( CapeOfThorns.class, false);
|
||||
ARTIFACTS.seen.put( CapeOfThorns.class, false);
|
||||
ARTIFACTS.seen.put( WraithAmulet.class, false);
|
||||
ARTIFACTS.seen.put( ChaliceOfBlood.class, false);
|
||||
ARTIFACTS.seen.put( CloakOfShadows.class, false);
|
||||
ARTIFACTS.seen.put( DriedRose.class, false);
|
||||
|
|
|
@ -232,30 +232,7 @@ public class Toolbar extends Component {
|
|||
*/
|
||||
float wMin = Game.width / PixelScene.MIN_WIDTH_FULL;
|
||||
float hMin = Game.height / PixelScene.MIN_HEIGHT_FULL;
|
||||
final int maxHorizontalQuickslots =
|
||||
/** 中文
|
||||
* 如果是竖屏,那么最多显示12个快捷栏
|
||||
* 如果是竖屏且>=5x缩放,那么下方最多显示4个快捷栏
|
||||
* 如果是竖屏且>=4x缩放,那么下方最多显示5个快捷栏
|
||||
* 如果是竖屏且>=3x缩放,那么下方最多显示8个快捷栏
|
||||
* 如果是横屏,那么所有快捷栏在游戏界面底部生成布局
|
||||
*/
|
||||
|
||||
/**English
|
||||
//If it is a vertical screen, then at most 12 quick slots are displayed below
|
||||
//If it is a vertical screen and >=5x zoom, then at most 4 quick slots are displayed below
|
||||
//If it is a vertical screen and >=4x zoom, then at most 5 quick slots are displayed below
|
||||
//If it is a vertical screen and >=3x zoom, then at most 8 quick slots are displayed below
|
||||
//If it is a horizontal screen, then all quick slots are generated at the bottom of the game interface
|
||||
*/
|
||||
|
||||
PixelScene.landscape() ? 12 :
|
||||
|
||||
SPDSettings.scale() >= 5 ? 4 :
|
||||
|
||||
SPDSettings.scale() >= 4 ? 5 :
|
||||
|
||||
SPDSettings.scale() >= 3 ? 8 : 12;
|
||||
final int maxHorizontalQuickslots = PixelScene.landscape() ? 8 : 4;
|
||||
float right = width;
|
||||
if (SPDSettings.interfaceSize() > 0){
|
||||
btnInventory.setPos(right - btnInventory.width(), y);
|
||||
|
|
|
@ -51,6 +51,7 @@ import java.util.ArrayList;
|
|||
public class vM0_6_7_X_Changes {
|
||||
|
||||
public static void addAllChanges(ArrayList<ChangeInfo> changeInfos) {
|
||||
add_v0_6_40_Changes(changeInfos);
|
||||
add_v0_6_39_Changes(changeInfos);
|
||||
add_v0_6_38_Changes(changeInfos);
|
||||
add_v0_6_37_Changes(changeInfos);
|
||||
|
@ -93,6 +94,31 @@ public class vM0_6_7_X_Changes {
|
|||
add_v0_6_0_Changes(changeInfos);
|
||||
}
|
||||
|
||||
public static void add_v0_6_40_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta4", true, "");
|
||||
changes.hardlight(Window.TITLE_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes = new ChangeInfo("新内容", false, null);
|
||||
changes.hardlight(Window.GREEN_COLOR);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WRALIPS), "新神器:暗金宝石护符",
|
||||
"曾经是一位与你一样是一名冒险家的少女的护身符,而如今已是物是人非。"));
|
||||
|
||||
changes = new ChangeInfo("改动", false, null);
|
||||
changes.hardlight(Window.CYELLOW);
|
||||
changeInfos.add(changes);
|
||||
|
||||
changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("徽章改进"),
|
||||
("修复了徽章的一些错误。")));
|
||||
|
||||
changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16),
|
||||
Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X69")));
|
||||
|
||||
}
|
||||
|
||||
public static void add_v0_6_39_Changes( ArrayList<ChangeInfo> changeInfos ) {
|
||||
|
||||
ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta3", true, "");
|
||||
|
|
|
@ -665,7 +665,7 @@ public class WndSettings extends WndTabbed {
|
|||
if (width > 200){
|
||||
ClassUI.setRect(0, bottom, width, SLIDER_HEIGHT);
|
||||
optSplashScreen.setRect(0, ClassUI.bottom() + GAP, width, SLIDER_HEIGHT);
|
||||
optFPSLimit.setRect(0, optSplashScreen.bottom() + GAP, width, SLIDER_HEIGHT);
|
||||
optFPSLimit.setRect(0, optSplashScreen.bottom() + GAP, width/2, SLIDER_HEIGHT);
|
||||
if(Game.scene()!=null && Game.scene().getClass() == GameScene.class) {
|
||||
quickslots.setRect(optFPSLimit.right(), optFPSLimit.top(), width/2, SLIDER_HEIGHT);
|
||||
wxts.visible = false;
|
||||
|
|
Loading…
Reference in New Issue
Block a user