From f3e15c2262e312da92e447de1fb256c846b8a33e Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Apr 2021 22:33:45 -0400 Subject: [PATCH] v0.9.3: Balance changes to the Mage's talents: - backup barrier shield down to 3/5 from 4/6 - energizing upgrade chare granted up to 3/5 from 2/3 - empowering scrolls no longer has a timer - Ally warp range down to 2/4/6 from 3/6/9 - Empowered strike damage bonus up to 25/50/75% from 20/40/60% - Soul siphon effectiveness down to 13/27/40% from 15/30/45% - Necromancer's minions proc chance up to 13/27/40% from 10/20/30% --- .../assets/messages/actors/actors.properties | 16 ++++++++-------- .../shatteredpixeldungeon/actors/Char.java | 2 +- .../actors/buffs/ScrollEmpower.java | 9 ++------- .../actors/hero/Talent.java | 2 +- .../shatteredpixeldungeon/actors/mobs/Mob.java | 4 ++-- .../items/scrolls/Scroll.java | 2 +- .../shatteredpixeldungeon/items/wands/Wand.java | 6 +++--- .../items/weapon/melee/MagesStaff.java | 2 +- 8 files changed, 19 insertions(+), 24 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 4c2fb7d59..c3d353182 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -282,7 +282,7 @@ actors.buffs.roots.heromsg=You can't move! actors.buffs.roots.desc=Roots (magical or natural) grab at the feet, forcing them down to the ground.\n\nRoots lock a target in place, making it impossible for them to move, but other actions are not affected.\n\nTurns of root remaining: %s. actors.buffs.scrollempower.name=Scroll Empower -actors.buffs.scrollempower.desc=The energy from the Mage's recently read scroll is empowering his wands! His next wand zap within %1$d turns will gain +%2$d levels. +actors.buffs.scrollempower.desc=The energy from the Mage's recently read scroll is empowering his wands! His next wand zap will gain +%1$d levels. actors.buffs.shadows.name=Shadowmelded actors.buffs.shadows.desc=You are blended into the shadows around you, granting you invisibility and slowing your metabolism.\n\nWhile you are invisible enemies are unable to attack or follow you. Most physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility. Additionally, while shadowmelded, your rate of hunger is slowed.\n\nYou will remain shadowmelded until you leave the shadows or an enemy comes into contact with you. @@ -496,12 +496,12 @@ actors.hero.talent.scholars_intuition.desc=_+1:_ The Mage identifies wands _3x f actors.hero.talent.tested_hypothesis.title=tested hypothesis actors.hero.talent.tested_hypothesis.desc=_+1:_ Whenever the Mage identifies an item, he gains _2 turns of wand recharging_.\n\n_+2:_ Whenever the Mage identifies an item, he gains _3 turns of wand recharging_. actors.hero.talent.backup_barrier.title=backup barrier -actors.hero.talent.backup_barrier.desc=_+1:_ The Mage gains _4 shielding_ whenever he spends the last charge in his staff.\n\n_+2:_ The Mage gains _6 shielding_ whenever he spends the last charge in his staff. +actors.hero.talent.backup_barrier.desc=_+1:_ The Mage gains _3 shielding_ whenever he spends the last charge in his staff.\n\n_+2:_ The Mage gains _5 shielding_ whenever he spends the last charge in his staff. actors.hero.talent.energizing_meal.title=energizing meal actors.hero.talent.energizing_meal.desc=_+1:_ Eating food takes the Mage 1 turn and grants him _5 turns of wand recharging_.\n\n_+2:_ Eating food takes the Mage 1 turn and grants him _8 turns of wand recharging_. actors.hero.talent.energizing_upgrade.title=energizing upgrade -actors.hero.talent.energizing_upgrade.desc=_+1:_ Using a scroll of upgrade instantly recharges the Mage's staff _for 2 charges_, this can put it above its current charge cap.\n\n_+2:_ Using a scroll of upgrade instantly recharges the Mage's staff _for 3 charges_, this can put it above its current charge cap.\n\nThis talent also triggers when using scrolls or spells based on scrolls of upgrade. +actors.hero.talent.energizing_upgrade.desc=_+1:_ Using a scroll of upgrade instantly recharges the Mage's staff _for 3 charges_, this can put it above its current charge cap.\n\n_+2:_ Using a scroll of upgrade instantly recharges the Mage's staff _for 5 charges_, this can put it above its current charge cap.\n\nThis talent also triggers when using scrolls or spells based on scrolls of upgrade. actors.hero.talent.wand_preservation.title=wand preservation actors.hero.talent.wand_preservation.desc=_+1:_ When the Mage imbues a new wand into his staff, the old wand has a _67% chance_ of being returned at +0.\n\n_+2:_ When the Mage imbues a new wand into his staff, the old wand has a _100% chance_ of being returned at +0.\n\nThis talent can preserve a wand up to three times. actors.hero.talent.arcane_vision.title=arcane vision @@ -510,23 +510,23 @@ actors.hero.talent.shield_battery.title=shield battery actors.hero.talent.shield_battery.desc=_+1:_ The Mage can self-target with a wand to convert its charges into shielding at a rate of _5% max HP per charge_.\n\n_+2:_ The Mage can self-target with a wand to convert its charges into shielding at a rate of _7.5% max HP per charge_. actors.hero.talent.empowering_scrolls.title=empowering scrolls -actors.hero.talent.empowering_scrolls.desc=_+1:_ When the Mage reads a scroll, his next wand zap within 20 turns will get _+1 level_.\n\n_+2:_ When the Mage reads a scroll, his next wand zap within 20 turns will get _+2 levels_.\n\n_+3:_ When the Mage reads a scroll, his next wand zap within 20 turns will get _+3 levels_. +actors.hero.talent.empowering_scrolls.desc=_+1:_ When the Mage reads a scroll, his next wand zap will get _+1 level_.\n\n_+2:_ When the Mage reads a scroll, his next wand zap will get _+2 levels_.\n\n_+3:_ When the Mage reads a scroll, his next wand zap will get _+3 levels_. actors.hero.talent.ally_warp.title=ally warp -actors.hero.talent.ally_warp.desc=_+1:_ The Mage can tap an ally to instantly swap places with them, with a _3 tile range_.\n\n_+2:_ The Mage can tap an ally to instantly swap places with them, with a _6 tile range_.\n\n_+3:_ The Mage can tap an ally to instantly swap places with them, with a _9 tile range_.\n\nThe Mage cannot swap places with immobile allies. +actors.hero.talent.ally_warp.desc=_+1:_ The Mage can tap an ally to instantly swap places with them, with a _2 tile range_.\n\n_+2:_ The Mage can tap an ally to instantly swap places with them, with a _4 tile range_.\n\n_+3:_ The Mage can tap an ally to instantly swap places with them, with a _6 tile range_.\n\nThe Mage cannot swap places with immobile allies. actors.hero.talent.empowered_strike.title=empowered strike -actors.hero.talent.empowered_strike.desc=_+1:_ The Battlemage's first melee strike with his staff after zapping with it deals _+20% damage_.\n\n_+2:_ The Battlemage's first melee strike with his staff after zapping with it deals _+40% damage_.\n\n_+3:_ The Battlemage's first melee strike with his staff after zapping with it deals _+60% damage_. +actors.hero.talent.empowered_strike.desc=_+1:_ The Battlemage's first melee strike with his staff after zapping with it deals _+25% damage_.\n\n_+2:_ The Battlemage's first melee strike with his staff after zapping with it deals _+50% damage_.\n\n_+3:_ The Battlemage's first melee strike with his staff after zapping with it deals _+75% damage_. actors.hero.talent.mystical_charge.title=mystical charge actors.hero.talent.mystical_charge.desc=_+1:_ Striking with his staff grants the Battlemage _0.5 turns_ worth of artifact recharging.\n\n_+2:_ Striking with his staff grants the Battlemage _1 turn_ worth of artifact recharging.\n\n_+3:_ Striking with his staff grants the Battlemage _1.5 turns_ worth of artifact recharging. actors.hero.talent.excess_charge.title=excess charge actors.hero.talent.excess_charge.desc=_+1:_ When the Battlemage's staff is fully charged, he has a _20% chance_ to gain 2 shielding per level of the staff when he strikes with it.\n\n_+2:_ When the Battlemage's staff is fully charged, he has a _40% chance_ to gain 2 shielding per level of the staff when he strikes with it.\n\n_+3:_ When the Battlemage's staff is fully charged, he has a _60% chance_ to gain 2 shielding per level of the staff when he strikes with it. actors.hero.talent.soul_siphon.title=soul siphon -actors.hero.talent.soul_siphon.desc=_+1:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _15% effectiveness_.\n\n_+2:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _30% effectiveness_.\n\n_+3:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _45% effectiveness_. +actors.hero.talent.soul_siphon.desc=_+1:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _13% effectiveness_.\n\n_+2:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _27% effectiveness_.\n\n_+3:_ Melee damage dealt by other characters triggers the Warlock's soul mark at _40% effectiveness_. actors.hero.talent.soul_eater.title=soul eater actors.hero.talent.soul_eater.desc=_+1:_ Soul mark grants _0.33 turns_ of satiety for each physical damage dealt. Soul marked enemies have a _10% chance_ to trigger on-eat effects when they die.\n\n_+2:_ Soul mark grants _0.67 turns_ of satiety for each physical damage dealt. Soul marked enemies have a _20% chance_ to trigger on-eat effects when they die.\n\n_+3:_ Soul mark grants _1 turn_ of satiety for each physical damage dealt. Soul marked enemies have a _30% chance_ to trigger on-eat effects when they die. actors.hero.talent.necromancers_minions.title=necromancer's minions -actors.hero.talent.necromancers_minions.desc=_+1:_ When a soul marked enemy dies, the Warlock has a _10% chance_ to raise them as a corrupted wraith.\n\n_+2:_ When a soul marked enemy dies, the Warlock has a _20% chance_ to raise them as a corrupted wraith.\n\n_+3:_ When a soul marked enemy dies, the Warlock has a _30% chance_ to raise them as a corrupted wraith. +actors.hero.talent.necromancers_minions.desc=_+1:_ When a soul marked enemy dies, the Warlock has a _13% chance_ to raise them as a corrupted wraith.\n\n_+2:_ When a soul marked enemy dies, the Warlock has a _27% chance_ to raise them as a corrupted wraith.\n\n_+3:_ When a soul marked enemy dies, the Warlock has a _40% chance_ to raise them as a corrupted wraith. actors.hero.talent.molten_earth_1.title=TODO NAME actors.hero.talent.molten_earth_1.desc=TODO DESC diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java index e550bc605..9870c1c2a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -164,7 +164,7 @@ public abstract class Char extends Actor { return true; } else if (c instanceof Hero && alignment == Alignment.ALLY - && Dungeon.level.distance(pos, c.pos) <= 3*Dungeon.hero.pointsInTalent(Talent.ALLY_WARP)){ + && Dungeon.level.distance(pos, c.pos) <= 2*Dungeon.hero.pointsInTalent(Talent.ALLY_WARP)){ return true; } else { return false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ScrollEmpower.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ScrollEmpower.java index 894a421f8..06a2b6b7f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ScrollEmpower.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ScrollEmpower.java @@ -28,7 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.watabou.noosa.Image; -public class ScrollEmpower extends FlavourBuff { +public class ScrollEmpower extends Buff { { type = buffType.POSITIVE; @@ -50,11 +50,6 @@ public class ScrollEmpower extends FlavourBuff { icon.hardlight(1, 1, 0); } - @Override - public float iconFadePercent() { - return Math.max(0, (20-visualcooldown()) / 20f); - } - @Override public String toString() { return Messages.get(this, "name"); @@ -62,7 +57,7 @@ public class ScrollEmpower extends FlavourBuff { @Override public String desc() { - return Messages.get(this, "desc", (int)visualcooldown(), Dungeon.hero.pointsInTalent(Talent.EMPOWERING_SCROLLS)); + return Messages.get(this, "desc", Dungeon.hero.pointsInTalent(Talent.EMPOWERING_SCROLLS)); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java index 6b55d55d1..238691c2a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java @@ -317,7 +317,7 @@ public enum Talent { if (hero.hasTalent(ENERGIZING_UPGRADE)){ MagesStaff staff = hero.belongings.getItem(MagesStaff.class); if (staff != null){ - staff.gainCharge(1 + hero.pointsInTalent(ENERGIZING_UPGRADE), true); + staff.gainCharge(1 + 2*hero.pointsInTalent(ENERGIZING_UPGRADE), true); ScrollOfRecharging.charge( Dungeon.hero ); SpellSprite.show( hero, SpellSprite.CHARGE ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 15485373f..f12205095 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -597,7 +597,7 @@ public abstract class Mob extends Char { //physical damage that doesn't come from the hero is less effective if (enemy != Dungeon.hero){ - restoration = Math.round(restoration * 0.15f*Dungeon.hero.pointsInTalent(Talent.SOUL_SIPHON)); + restoration = Math.round(restoration * 0.4f*Dungeon.hero.pointsInTalent(Talent.SOUL_SIPHON)/3f); } if (restoration > 0) { Buff.affect(Dungeon.hero, Hunger.class).affectHunger(restoration*Dungeon.hero.pointsInTalent(Talent.SOUL_EATER)/3f); @@ -692,7 +692,7 @@ public abstract class Mob extends Char { if (!(this instanceof Wraith) && soulMarked - && Random.Int(10) < Dungeon.hero.pointsInTalent(Talent.NECROMANCERS_MINIONS)){ + && Random.Float() < (0.4f*Dungeon.hero.pointsInTalent(Talent.NECROMANCERS_MINIONS)/3f)){ Wraith w = Wraith.spawnAt(pos); if (w != null) { Buff.affect(w, Corruption.class); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java index edddcc47c..0fff5e7f9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java @@ -187,7 +187,7 @@ public abstract class Scroll extends Item { ((HeroSprite)curUser.sprite).read(); if (curUser.hasTalent(Talent.EMPOWERING_SCROLLS)){ - Buff.affect(curUser, ScrollEmpower.class, 20f); + Buff.affect(curUser, ScrollEmpower.class); updateQuickslot(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java index e67973da2..1c9d3a499 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java @@ -377,11 +377,11 @@ public abstract class Wand extends Item { && charger.target == Dungeon.hero && !Dungeon.hero.belongings.contains(this)) { if (curCharges == 0 && Dungeon.hero.hasTalent(Talent.BACKUP_BARRIER)) { - //grants 4/6 shielding - Buff.affect(Dungeon.hero, Barrier.class).setShield(2 + 2 * Dungeon.hero.pointsInTalent(Talent.BACKUP_BARRIER)); + //grants 3/5 shielding + Buff.affect(Dungeon.hero, Barrier.class).setShield(1 + 2 * Dungeon.hero.pointsInTalent(Talent.BACKUP_BARRIER)); } if (Dungeon.hero.hasTalent(Talent.EMPOWERED_STRIKE)){ - Buff.prolong(Dungeon.hero, Talent.EmpoweredStrikeTracker.class, 5f); + Buff.prolong(Dungeon.hero, Talent.EmpoweredStrikeTracker.class, 10f); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java index e70445726..6f32ebea1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java @@ -150,7 +150,7 @@ public class MagesStaff extends MeleeWeapon { public int proc(Char attacker, Char defender, int damage) { if (attacker.buff(Talent.EmpoweredStrikeTracker.class) != null){ attacker.buff(Talent.EmpoweredStrikeTracker.class).detach(); - damage = Math.round( damage * (1f + Dungeon.hero.pointsInTalent(Talent.EMPOWERED_STRIKE)/5f)); + damage = Math.round( damage * (1f + Dungeon.hero.pointsInTalent(Talent.EMPOWERED_STRIKE)/4f)); } if (wand.curCharges >= wand.maxCharges && attacker instanceof Hero && Random.Int(5) < ((Hero) attacker).pointsInTalent(Talent.EXCESS_CHARGE)){