From fea918f2f15e2f4863282d6b0f3a4c1a59515f80 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 28 May 2022 21:10:49 -0400 Subject: [PATCH] v1.3.0: buffs to mage talents and armor abilities --- .../main/assets/messages/actors/actors.properties | 14 +++++++------- .../actors/hero/abilities/mage/ElementalBlast.java | 7 ++++--- .../actors/hero/abilities/mage/WildMagic.java | 8 ++++++-- .../shatteredpixeldungeon/items/wands/Wand.java | 6 +++--- .../items/weapon/melee/MagesStaff.java | 4 ++-- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 671199e00..30ef288af 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -378,7 +378,7 @@ actors.hero.abilities.mage.elementalblast.generic_desc=The effect of elemental b actors.hero.abilities.mage.wildmagic.name=wild magic actors.hero.abilities.mage.wildmagic.no_wands=You have no wands to zap with! actors.hero.abilities.mage.wildmagic.short_desc=The Mage unleashes the _Wild Magic_ contained in his wands, randomly firing them multiple times at a chosen target over a single turn. -actors.hero.abilities.mage.wildmagic.desc=The Mage unleashes the power in his wands, randomly firing them up to 4 times in a single turn. The Mage's staff is not included in this effect.\n\nEach wand also has its level boosted by 1, up to +2. This ability does consume wand charges, and no one wand can be fired more than 2 times. +actors.hero.abilities.mage.wildmagic.desc=The Mage unleashes the power in his wands, randomly firing them up to 4 times in a single turn. The Mage's staff is not included in this effect.\n\nEach wand also has its level boosted by 2, up to +3. This ability does consume wand charges, and no one wand can be fired more than 2 times. actors.hero.abilities.mage.warpbeacon.name=warp beacon actors.hero.abilities.mage.warpbeacon.depths=You can't warp between depths! actors.hero.abilities.mage.warpbeacon.locked_floor=You cannot leave a locked floor! @@ -587,7 +587,7 @@ 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 4 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 6 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.meta_desc=_If this talent is gained by a different hero_ it will instead grant 12 turns of wand recharging at +1, or 20 turns at +2. 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 an _50% chance_ of being returned at +0, otherwise it will be returned as 1 arcane resin.\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 wands a maximum of five times, afterward it will always grant 1 arcane resin. +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, otherwise it will be returned as 1 arcane resin.\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 wands a maximum of five times, afterward it will always grant 1 arcane resin. actors.hero.talent.arcane_vision.title=arcane vision actors.hero.talent.arcane_vision.desc=_+1:_ When the Mage zaps an enemy, he gains mind vision on them for _10 turns_.\n\n_+2:_ When the Mage zaps an enemy, he gains mind vision on them for _15 turns_. actors.hero.talent.shield_battery.title=shield battery @@ -615,16 +615,16 @@ actors.hero.talent.necromancers_minions.desc=_+1:_ When a soul marked enemy dies actors.hero.talent.blast_radius.title=blast radius actors.hero.talent.blast_radius.desc=_+1:_ Elemental blast's radius is increased to _5 tiles_, from 4.\n\n_+2:_ Elemental blast's radius is increased to _6 tiles_, from 4.\n\n_+3:_ Elemental blast's radius is increased to _7 tiles_, from 4.\n\n_+4:_ Elemental blast's radius is increased to _8 tiles_, from 4. actors.hero.talent.elemental_power.title=elemental power -actors.hero.talent.elemental_power.desc=_+1:_ The power of elemental blast is increased by _20%_.\n\n_+2:_ The power of elemental blast is increased by _40%_.\n\n_+3:_ The power of elemental blast is increased by _60%_.\n\n_+4:_ The power of elemental blast is increased by _80%_. +actors.hero.talent.elemental_power.desc=_+1:_ The power of elemental blast is increased by _25%_.\n\n_+2:_ The power of elemental blast is increased by _50%_.\n\n_+3:_ The power of elemental blast is increased by _75%_.\n\n_+4:_ The power of elemental blast is increased by _100%_. actors.hero.talent.reactive_barrier.title=reactive barrier -actors.hero.talent.reactive_barrier.desc=_+1:_ The Mage gains _2 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+2:_ The Mage gains _4 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+3:_ The Mage gains _6 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+4:_ The Mage gains _8 shielding_ for every character affected by elemental blast, to a max of 5 characters. +actors.hero.talent.reactive_barrier.desc=_+1:_ The Mage gains _2.5 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+2:_ The Mage gains _5 shielding_ for every character affected by elemental blast, to a max of 6 characters.\n\n_+3:_ The Mage gains _7.5 shielding_ for every character affected by elemental blast, to a max of 7 characters.\n\n_+4:_ The Mage gains _10 shielding_ for every character affected by elemental blast, to a max of 8 characters. actors.hero.talent.wild_power.title=wild power -actors.hero.talent.wild_power.desc=_+1:_ When using wild magic, wands will be boosted by either _1 or 2, up to +3_.\n\n_+2:_ When using wild magic, wands will be boosted by _2, up to +4_.\n\n_+3:_ When using wild magic, wands will be boosted by either _2 or 3, up to +5_.\n\n_+4:_ When using wild magic, wands will be boosted by _3, up to +6_. +actors.hero.talent.wild_power.desc=_+1:_ When using wild magic, wands will be boosted by either _2 or 3, up to +4_.\n\n_+2:_ When using wild magic, wands will be boosted by _3, up to +5_.\n\n_+3:_ When using wild magic, wands will be boosted by either _3 or 4, up to +6_.\n\n_+4:_ When using wild magic, wands will be boosted by _4, up to +7_. actors.hero.talent.fire_everything.title=fire everything -actors.hero.talent.fire_everything.desc=_+1:_ Wild magic now fires _5 times_, up from 4.\n\n_+2:_ Wild magic now fires _6 times_, up from 4.\n\n_+3:_ Wild magic now fires _7 times_, up from 4.\n\n_+4:_ Wild magic now fires _8 times_, up from 4. +actors.hero.talent.fire_everything.desc=_+1:_ Wild magic now fires _5 times_ up from 4, and each wand has a _25% chance_ to be usable 3 times.\n\n_+2:_ Wild magic now fires _6 times_ up from 4, and each wand has a _50% chance_ to be usable 3 times.\n\n_+3:_ Wild magic now fires _7 times_ up from 4, and each wand has a _75% chance_ to be usable 3 times.\n\n_+4:_ Wild magic now fires _8 times_ up from 4, and each wand has a _100% chance_ to be usable 3 times. actors.hero.talent.conserved_magic.title=conserved magic -actors.hero.talent.conserved_magic.desc=_+1:_ Each zap from wild magic now uses _0.67 charges_ instead of 1, and each wand has a _25% chance_ to be usable 3 times.\n\n_+2:_ Each zap from wild magic now uses _0.45 charges_ instead of 1, and each wand has a _50% chance_ to be usable 3 times.\n\n_+3:_ Each zap from wild magic now uses _0.3 charges_ instead of 1, and each wand has a _75% chance_ to be usable 3 times.\n\n_+4:_ Each zap from wild magic now uses _0.2 charges_ instead of 1, and each wand has a _100% chance_ to be usable 3 times. +actors.hero.talent.conserved_magic.desc=_+1:_ Each zap from wild magic now uses _0.67 charges_ instead of 1, and wild magic has a _25% chance_ to not spend a turn.\n\n_+2:_ Each zap from wild magic now uses _0.45 charges_ instead of 1, and wild magic has a _50% chance_ to not spend a turn.\n\n_+3:_ Each zap from wild magic now uses _0.3 charges_ instead of 1, and wild magic has a _75% chance_ to not spend a turn.\n\n_+4:_ Each zap from wild magic now uses _0.2 charges_ instead of 1, and wild magic has a _100% chance_ to not spend a turn. actors.hero.talent.telefrag.title=Telefrag actors.hero.talent.telefrag.desc=_+1:_ If the Mage warps into another character he deals _10-15 damage_ to it, but also takes _5 damage_.\n\n_+2:_ If the Mage warps into another character he deals _20-30 damage_ to it, but also takes _10 damage_.\n\n_+3:_ If the Mage warps into another character he deals _30-45 damage_ to it, but also takes _15 damage_.\n\n_+4:_ If the Mage warps into another character he deals _40-60 damage_ to it, but also takes _20 damage_.\n\nThe hero cannot be killed by this talent, the self damage can be reduced by magic resisting effects. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/ElementalBlast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/ElementalBlast.java index 465a09e15..210253214 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/ElementalBlast.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/ElementalBlast.java @@ -175,7 +175,7 @@ public class ElementalBlast extends ArmorAbility { ); } - final float effectMulti = 1f + 0.2f*hero.pointsInTalent(Talent.ELEMENTAL_POWER); + final float effectMulti = 1f + 0.25f*hero.pointsInTalent(Talent.ELEMENTAL_POWER); //cast a ray 2/3 the way, and do effects Class finalWandCls = wandCls; @@ -393,9 +393,10 @@ public class ElementalBlast extends ArmorAbility { } - charsHit = Math.min(5, charsHit); + charsHit = Math.min(4 + hero.pointsInTalent(Talent.REACTIVE_BARRIER), charsHit); if (charsHit > 0 && hero.hasTalent(Talent.REACTIVE_BARRIER)){ - Buff.affect(hero, Barrier.class).setShield(charsHit*2*hero.pointsInTalent(Talent.REACTIVE_BARRIER)); + int shielding = Math.round(charsHit*2.5f*hero.pointsInTalent(Talent.REACTIVE_BARRIER)); + Buff.affect(hero, Barrier.class).setShield(shielding); } hero.spendAndNext(Actor.TICK); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WildMagic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WildMagic.java index c91155733..028dffdd8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WildMagic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WildMagic.java @@ -90,7 +90,7 @@ public class WildMagic extends ArmorAbility { seconds.remove(w); } if (totalCharge < 3*chargeUsePerShot - || Random.Int(4) > Dungeon.hero.pointsInTalent(Talent.CONSERVED_MAGIC)){ + || Random.Int(4) >= Dungeon.hero.pointsInTalent(Talent.FIRE_EVERYTHING)){ thirds.remove(w); } } @@ -187,7 +187,11 @@ public class WildMagic extends ArmorAbility { } Item.updateQuickslot(); Invisibility.dispel(); - hero.spendAndNext(Actor.TICK); + if (Random.Int(4) >= hero.pointsInTalent(Talent.CONSERVED_MAGIC)) { + hero.spendAndNext(Actor.TICK); + } else { + hero.next(); + } } } 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 98f345b58..ccae7e270 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 @@ -325,11 +325,11 @@ public abstract class Wand extends Item { if (charger != null && charger.target != null) { if (charger.target.buff(WildMagic.WildMagicTracker.class) != null){ - int bonus = 2 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER); + int bonus = 4 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER); if (Random.Int(2) == 0) bonus++; - bonus /= 2; // +1/+1.5/+2/+2.5/+3 at 0/1/2/3/4 talent points + bonus /= 2; // +2/+2.5/+3/+3.5/+4 at 0/1/2/3/4 talent points - int maxBonusLevel = 2 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER); + int maxBonusLevel = 3 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER); if (lvl < maxBonusLevel) { lvl = Math.min(lvl + bonus, maxBonusLevel); } 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 15908ce96..3b0aec26e 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 @@ -212,7 +212,7 @@ public class MagesStaff extends MeleeWeapon { if (owner == Dungeon.hero && Dungeon.hero.hasTalent(Talent.WAND_PRESERVATION)){ Talent.WandPreservationCounter counter = Buff.affect(Dungeon.hero, Talent.WandPreservationCounter.class); - if (counter.count() < 5 && Random.Float() < 0.5f*Dungeon.hero.pointsInTalent(Talent.WAND_PRESERVATION)){ + if (counter.count() < 5 && Random.Float() < 0.34f + 0.33f*Dungeon.hero.pointsInTalent(Talent.WAND_PRESERVATION)){ counter.countUp(1); this.wand.level(0); if (!this.wand.collect()) { @@ -436,7 +436,7 @@ public class MagesStaff extends MeleeWeapon { preservesLeft -= Dungeon.hero.buff(Talent.WandPreservationCounter.class).count(); } if (Dungeon.hero.hasTalent(Talent.WAND_PRESERVATION)){ - int preserveChance = Dungeon.hero.pointsInTalent(Talent.WAND_PRESERVATION) == 1 ? 50 : 100; + int preserveChance = Dungeon.hero.pointsInTalent(Talent.WAND_PRESERVATION) == 1 ? 67 : 100; bodyText += "\n\n" + Messages.get(MagesStaff.class, "imbue_talent", preserveChance, preservesLeft); } else { bodyText += "\n\n" + Messages.get(MagesStaff.class, "imbue_lost");