From 12d7b9199104bd8b771e3a03481d2efb4c5b4bf2 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 20 May 2019 20:53:08 -0400 Subject: [PATCH] v0.7.3: balance adjustments to new enchants: - increased the rate that corrupting enchant scales with upgrades - kinetic now loses preserved damage more quickly --- .../items/weapon/enchantments/Corrupting.java | 6 +- .../items/weapon/enchantments/Kinetic.java | 55 +++++++++++++++++-- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Corrupting.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Corrupting.java index e2b042c2e..faa071a59 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Corrupting.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Corrupting.java @@ -48,11 +48,11 @@ public class Corrupting extends Weapon.Enchantment { int level = Math.max( 0, weapon.level() ); // lvl 0 - 10% - // lvl 1 ~ 12% - // lvl 2 ~ 14% + // lvl 1 ~ 13% + // lvl 2 ~ 16% if (damage >= defender.HP && !defender.isImmune(Corruption.class) - && Random.Int( level + 40 ) >= 36){ + && Random.Int( level + 30 ) >= 27){ Mob enemy = (Mob) defender; Hero hero = (attacker instanceof Hero) ? (Hero) attacker : Dungeon.hero; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Kinetic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Kinetic.java index 3889ee0fb..0a824031d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Kinetic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/enchantments/Kinetic.java @@ -28,6 +28,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; public class Kinetic extends Weapon.Enchantment { @@ -45,7 +47,7 @@ public class Kinetic extends Weapon.Enchantment { if (damage > defender.HP){ int extraDamage = damage - defender.HP; - Buff.affect(attacker, ConservedDamage.class, extraDamage*10); + Buff.affect(attacker, ConservedDamage.class).setBonus(extraDamage); } return damage + conservedDamage; @@ -56,13 +58,44 @@ public class Kinetic extends Weapon.Enchantment { return YELLOW; } - public static class ConservedDamage extends FlavourBuff { + public static class ConservedDamage extends Buff { @Override public int icon() { return BuffIndicator.WEAPON; } + @Override + public void tintIcon(Image icon) { + if (preservedDamage >= 10){ + icon.hardlight(1f, 0f, 0f); + } else if (preservedDamage >= 5) { + icon.hardlight(1f, 1f - (preservedDamage - 5f)*.2f, 0f); + } else { + icon.hardlight(1f, 1f, 1f - preservedDamage*.2f); + } + } + + private float preservedDamage; + + public void setBonus(int bonus){ + preservedDamage = bonus; + } + + public int damageBonus(){ + return (int)Math.ceil(preservedDamage); + } + + @Override + public boolean act() { + preservedDamage -= Math.max(preservedDamage*.025f, 0.1f); + if (preservedDamage <= 0) detach(); + else if (preservedDamage <= 10) BuffIndicator.refreshHero(); + + spend(TICK); + return true; + } + @Override public String toString() { return Messages.get(this, "name"); @@ -73,9 +106,23 @@ public class Kinetic extends Weapon.Enchantment { return Messages.get(this, "desc", damageBonus()); } - public int damageBonus(){ - return (int)Math.ceil(cooldown()/10f); + private static final String PRESERVED_DAMAGE = "preserve_damage"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put(PRESERVED_DAMAGE, preservedDamage); } + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + if (bundle.contains(PRESERVED_DAMAGE)){ + preservedDamage = bundle.getFloat(PRESERVED_DAMAGE); + } else { + preservedDamage = cooldown()/10; + spend(cooldown()); + } + } } }