v0.4.1: rebalanced several artifacts
This commit is contained in:
parent
cc1c156428
commit
669e0bb87b
|
@ -63,6 +63,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key;
|
||||
|
@ -1129,6 +1130,10 @@ public class Hero extends Char {
|
|||
|
||||
EtherealChains.chainsRecharge chains = buff(EtherealChains.chainsRecharge.class);
|
||||
if (chains != null) chains.gainExp(percent);
|
||||
|
||||
HornOfPlenty.hornRecharge horn = buff(HornOfPlenty.hornRecharge.class);
|
||||
if (horn != null) horn.gainCharge(percent);
|
||||
|
||||
if (subClass == HeroSubClass.BERSERKER) Buff.affect(this, Berserk.class).recover(percent);
|
||||
|
||||
boolean levelUp = false;
|
||||
|
|
|
@ -37,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfPsionicBlast;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
|
||||
|
@ -201,7 +202,7 @@ public class DriedRose extends Artifact {
|
|||
|
||||
LockedFloor lock = target.buff(LockedFloor.class);
|
||||
if (charge < chargeCap && !cursed && (lock == null || lock.regenOn())) {
|
||||
partialCharge += 10/75f;
|
||||
partialCharge += 1/5f; //500 turns to a full charge
|
||||
if (partialCharge > 1){
|
||||
charge++;
|
||||
partialCharge--;
|
||||
|
@ -292,11 +293,11 @@ public class DriedRose extends Artifact {
|
|||
|
||||
public GhostHero(int roseLevel){
|
||||
this();
|
||||
HP = HT = 10+roseLevel*3;
|
||||
HP = HT = 10+roseLevel*4;
|
||||
}
|
||||
|
||||
public void saySpawned(){
|
||||
if (!name.equals("sad ghost")) return; //don't say anything if not on english
|
||||
if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english
|
||||
int i = (Dungeon.depth - 1) / 5;
|
||||
if (chooseEnemy() == null)
|
||||
yell( Random.element( VOICE_AMBIENT[i] ) );
|
||||
|
@ -311,13 +312,13 @@ public class DriedRose extends Artifact {
|
|||
}
|
||||
|
||||
public void sayDefeated(){
|
||||
if (!name.equals("sad ghost")) return; //don't say anything if not on english
|
||||
if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english
|
||||
yell( Random.element( VOICE_DEFEATED[ Dungeon.bossLevel() ? 1 : 0 ] ) );
|
||||
Sample.INSTANCE.play( Assets.SND_GHOST );
|
||||
}
|
||||
|
||||
public void sayHeroKilled(){
|
||||
if (!name.equals("sad ghost")) return; //don't say anything if not on english
|
||||
if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english
|
||||
yell(Random.element(VOICE_HEROKILLED));
|
||||
Sample.INSTANCE.play( Assets.SND_GHOST );
|
||||
}
|
||||
|
@ -371,7 +372,6 @@ public class DriedRose extends Artifact {
|
|||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
//equivalent to N/2 to 5+N, where N is rose level.
|
||||
int lvl = (HT-10)/3;
|
||||
return Random.NormalIntRange( lvl/2, 5+lvl);
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
|
@ -165,19 +164,18 @@ public class HornOfPlenty extends Artifact {
|
|||
|
||||
public class hornRecharge extends ArtifactBuff{
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
LockedFloor lock = target.buff(LockedFloor.class);
|
||||
if (charge < chargeCap && !cursed && (lock == null || lock.regenOn())) {
|
||||
public void gainCharge(float levelPortion) {
|
||||
if (charge < chargeCap) {
|
||||
|
||||
//generates 0.25 food value every round, +0.015 value per level
|
||||
//to a max of 0.70 food value per round (0.25+0.5, at level 30)
|
||||
partialCharge += 0.25f + (0.015f*level());
|
||||
//generates 0.25x max hunger value every hero level, +0.025x max value per horn level
|
||||
//to a max of exactly max hunger value per hero level (0.25+0.75, at horn level 30)
|
||||
//This means that a standard ration will be recovered in 10 hero levels
|
||||
partialCharge += Hunger.STARVING * levelPortion * (0.25f + (0.025f*level()));
|
||||
|
||||
//charge is in increments of 36 food value.
|
||||
if (partialCharge >= 36) {
|
||||
//charge is in increments of 1/10 max hunger value.
|
||||
while (partialCharge >= Hunger.STARVING/10) {
|
||||
charge++;
|
||||
partialCharge -= 36;
|
||||
partialCharge -= Hunger.STARVING/10;
|
||||
|
||||
if (charge == chargeCap)image = ItemSpriteSheet.ARTIFACT_HORN4;
|
||||
else if (charge >= 7) image = ItemSpriteSheet.ARTIFACT_HORN3;
|
||||
|
@ -193,10 +191,6 @@ public class HornOfPlenty extends Artifact {
|
|||
}
|
||||
} else
|
||||
partialCharge = 0;
|
||||
|
||||
spend( TICK );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -80,17 +80,16 @@ public class MasterThievesArmband extends Artifact {
|
|||
exp += value;
|
||||
}
|
||||
}
|
||||
while(exp >= 600 && level() < levelCap) {
|
||||
exp -= 600;
|
||||
while(exp >= (250 + 50*level()) && level() < levelCap) {
|
||||
exp -= (250 + 50*level());
|
||||
upgrade();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public float stealChance(int value){
|
||||
//get lvl*100 gold or lvl*5% item value of free charge, whichever is less.
|
||||
int chargeBonus = Math.min(level()*100, (value*level())/20);
|
||||
|
||||
//get lvl*50 gold or lvl*3.33% item value of free charge, whichever is less.
|
||||
int chargeBonus = Math.min(level()*50, (value*level())/30);
|
||||
return (((float)charge + chargeBonus)/value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -176,7 +176,7 @@ public class SandalsOfNature extends Artifact {
|
|||
Sample.INSTANCE.play( Assets.SND_PLANT );
|
||||
hero.busy();
|
||||
hero.spend( 2f );
|
||||
if (seeds.size() >= 5+(level()*2)){
|
||||
if (seeds.size() >= 3+(level()*3)){
|
||||
seeds.clear();
|
||||
upgrade();
|
||||
if (level() >= 1 && level() <= 3) {
|
||||
|
|
|
@ -75,8 +75,13 @@ public class TimekeepersHourglass extends Artifact {
|
|||
if (action.equals(AC_ACTIVATE)){
|
||||
|
||||
if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") );
|
||||
else if (activeBuff != null) GLog.i( Messages.get(this, "in_use") );
|
||||
else if (charge <= 1) GLog.i( Messages.get(this, "no_charge") );
|
||||
else if (activeBuff != null) {
|
||||
if (activeBuff instanceof timeStasis) { //do nothing
|
||||
} else {
|
||||
activeBuff.detach();
|
||||
GLog.i( Messages.get(this, "deactivate") );
|
||||
}
|
||||
} else if (charge <= 1) GLog.i( Messages.get(this, "no_charge") );
|
||||
else if (cursed) GLog.i( Messages.get(this, "cursed") );
|
||||
else GameScene.show(
|
||||
new WndOptions( Messages.get(this, "name"),
|
||||
|
@ -220,16 +225,18 @@ public class TimekeepersHourglass extends Artifact {
|
|||
public boolean attachTo(Char target) {
|
||||
|
||||
if (super.attachTo(target)) {
|
||||
|
||||
int usedCharge = Math.min(charge, 5);
|
||||
//buffs always act last, so the stasis buff should end a turn early.
|
||||
spend(charge - 1);
|
||||
((Hero) target).spendAndNext(charge);
|
||||
spend(usedCharge - 1);
|
||||
((Hero) target).spendAndNext(usedCharge);
|
||||
|
||||
//shouldn't punish the player for going into stasis frequently
|
||||
Hunger hunger = target.buff(Hunger.class);
|
||||
if (hunger != null && !hunger.isStarving())
|
||||
hunger.satisfy(charge);
|
||||
hunger.satisfy(usedCharge);
|
||||
|
||||
charge = 0;
|
||||
charge -= usedCharge;
|
||||
|
||||
target.invisible++;
|
||||
|
||||
|
@ -310,7 +317,6 @@ public class TimekeepersHourglass extends Artifact {
|
|||
mob.sprite.remove(CharSprite.State.PARALYSED);
|
||||
GameScene.freezeEmitters = false;
|
||||
|
||||
charge = 0;
|
||||
updateQuickslot();
|
||||
super.detach();
|
||||
activeBuff = null;
|
||||
|
|
|
@ -269,14 +269,14 @@ items.artifacts.talismanofforesight$foresight.desc=You feel very nervous, as if
|
|||
|
||||
items.artifacts.timekeepershourglass.name=timekeeper's hourglass
|
||||
items.artifacts.timekeepershourglass.ac_activate=ACTIVATE
|
||||
items.artifacts.timekeepershourglass.in_use=Your hourglass is already in use.
|
||||
items.artifacts.timekeepershourglass.deactivate=You deactive the time freeze.
|
||||
items.artifacts.timekeepershourglass.no_charge=Your hourglass hasn't recharged enough to be usable yet.
|
||||
items.artifacts.timekeepershourglass.cursed=You cannot use a cursed hourglass.
|
||||
items.artifacts.timekeepershourglass.onstasis=The world seems to shift around you in an instant.
|
||||
items.artifacts.timekeepershourglass.onfreeze=Everything around you suddenly freezes.
|
||||
items.artifacts.timekeepershourglass.stasis=Put myself in stasis
|
||||
items.artifacts.timekeepershourglass.freeze=Freeze time around me
|
||||
items.artifacts.timekeepershourglass.prompt=How would you like to use the hourglass's magic?\n\nWhile in stasis, time will move normally while you are frozen and completely invulnerable.\n\nWhen time is frozen, you can move as if your actions take no time. Note that attacking will break this.
|
||||
items.artifacts.timekeepershourglass.prompt=How would you like to use the hourglass's magic?\n\nWhile in stasis, time will move normally while you are frozen and completely invulnerable, consumes up to 5 charge at a timea.\n\nWhen time is frozen, you can move as if your actions take no time. This can be deactivated at any time by using the hourglass or attacking.
|
||||
items.artifacts.timekeepershourglass.desc=This large ornate hourglass looks fairly unassuming, but you feel a great power in its finely carved frame. As you rotate the hourglass and watch the sand pour you can feel its magic tugging at you, surely using this magic would give you some control over time.
|
||||
items.artifacts.timekeepershourglass.desc_hint=The hourglass seems to have lost some sand, if only you could find some...
|
||||
items.artifacts.timekeepershourglass.desc_cursed=The cursed hourglass is locked to your side, you can feel it trying to manipulate your flow of time.
|
||||
|
|
Loading…
Reference in New Issue
Block a user