From 279ea21ac0f4851b698ec89ab8b626ac669d4ed2 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 10 May 2023 17:56:02 -0400 Subject: [PATCH] v2.1.0: balance changes to duelist subclasses --- .../assets/messages/actors/actors.properties | 10 +++--- .../shatteredpixeldungeon/actors/Char.java | 2 +- .../actors/buffs/MonkEnergy.java | 34 +++++++++++-------- .../items/weapon/Weapon.java | 4 --- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 8af7f59b5..f48537eb1 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -291,7 +291,7 @@ actors.buffs.monkenergy$monkability$dash.desc=An instant dash up to 3 tiles away actors.buffs.monkenergy$monkability$dragonkick.name=dragon kick actors.buffs.monkenergy$monkability$dragonkick.desc=A devastating kick that deals %1$d-%2$d damage and ignores armor. The kick knocks the target away and paralyzes them for each tile they travel. actors.buffs.monkenergy$monkability$meditate.name=meditate -actors.buffs.monkenergy$monkability$meditate.desc=The Monk focuses energy into her body for 5 turns. This clears most negative effects and grants her 10 turns of wand and artifact recharging. +actors.buffs.monkenergy$monkability$meditate.desc=The Monk focuses energy into her body for 5 turns. This clears most negative effects and grants her 8 turns of wand and artifact recharging. actors.buffs.ooze.name=caustic ooze actors.buffs.ooze.heromsg=Caustic ooze eats your flesh. Wash it away! @@ -893,14 +893,14 @@ actors.hero.talent.secondary_charge.desc=_+1:_ The Champion's secondary weapon c actors.hero.talent.twin_upgrades.title=twin upgrades actors.hero.talent.twin_upgrades.desc=_+1:_ If one of the Champion's two equipped weapons has a lower level and is _2 or more tiers lower_ than the other weapon, it will be boosted to the other weapon's level.\n\n_+2:_ If one of the Champion's two equipped weapons has a lower level and is _1 or more tiers lower_ than the other weapon, it will be boosted to the other weapon's level\n\n_+3:_ If one of the Champion's two equipped weapons has a lower level and is _the same tier or lower_ than the other weapon, it will be boosted to the other weapon's level actors.hero.talent.combined_lethality.title=combined lethality -actors.hero.talent.combined_lethality.desc=_+1:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 10% HP_.\n\n_+2:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 20% HP_.\n\n_+3:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 30% HP_.\n\nIf the second ability does not contain an attack, this talent will instead trigger on the Champion's next attack within 5 turns. +actors.hero.talent.combined_lethality.desc=_+1:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 13% HP_.\n\n_+2:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 27% HP_.\n\n_+3:_ If the Champion uses two different weapon abilities successively, the second ability will execute any non-boss enemy left at _below 40% HP_.\n\nIf the second ability does not contain an attack, this talent will instead trigger on the Champion's next attack within 5 turns. actors.hero.talent.unencumbered_spirit.title=unencumbered spirit -actors.hero.talent.unencumbered_spirit.desc=_+1:_ The Monk gains _33% more energy_ for each piece of _tier 3 or lower_ equipment she is using.\n\n_+2:_ The Monk gains _67% more energy_ for each piece of _tier 2 or lower_ equipment she is using.\n\n_+3:_ The Monk gains _100% more energy_ for each piece of _tier 1_ equipment she is using. She also gains _150% more energy_ if she has no weapon (or ring of force), and gains a free cloth armor and studded gloves. +actors.hero.talent.unencumbered_spirit.desc=_+1:_ The Monk gains _40% more energy_ for each piece of _tier 3 or lower_ equipment she is using.\n\n_+2:_ The Monk gains _80% more energy_ for each piece of _tier 2 or lower_ equipment she is using.\n\n_+3:_ The Monk gains _120% more energy_ for each piece of _tier 1_ equipment she is using. She also gains a free cloth armor and studded gloves.\n\nNote that this talent gives no benefit from being unarmed or attacking with a Ring of Force. actors.hero.talent.monastic_vigor.title=monastic vigor -actors.hero.talent.monastic_vigor.desc=_+1:_ If the Monk has _100% energy_, her abilities are empowered.\n\n_+2:_ If the Monk has _80% or more energy_, her abilities are empowered.\n\n_+3:_ If the Monk has _60% or more energy_, her abilities are empowered.\n\nWhen empowered:\n- Flurry applies enchantments at 75% power\n- Focus is instantaneous\n- Dash gains +2 range\n- Dragon Kick deals +33% damage and applies its knock back and stun effect to all adjacent enemies\n- Meditate slowly heals 20% of missing HP and grants 80% damage resistance. +actors.hero.talent.monastic_vigor.desc=_+1:_ If the Monk has _100% energy_, her abilities are empowered.\n\n_+2:_ If the Monk has _80% or more energy_, her abilities are empowered.\n\n_+3:_ If the Monk has _60% or more energy_, her abilities are empowered.\n\nWhen empowered:\n- Flurry applies your weapon's enchantment\n- Focus is instantaneous\n- Dash gains +3 range\n- Dragon Kick deals +50% damage and applies its knock back and stun effect to all adjacent enemies\n- Meditate slowly heals 20% of missing HP and grants 80% damage resistance. actors.hero.talent.combined_energy.title=combined energy -actors.hero.talent.combined_energy.desc=_+1:_ If the Monk uses a weapon ability and a _4+ energy_ ability successively, she regains 33% of her spent energy and resets her ability cooldown.\n\n_+2:_ If the Monk uses a weapon ability and a _3+ energy_ ability successively, she regains 33% of her spent energy and resets her ability cooldown.\n\n_+3:_ If the Monk uses a weapon ability and a _2+ energy_ ability successively, she regains 33% of her spent energy and resets her ability cooldown. +actors.hero.talent.combined_energy.desc=_+1:_ If the Monk uses a weapon ability and a _4+ energy_ ability successively, she regains 50% of her spent energy and resets her ability cooldown.\n\n_+2:_ If the Monk uses a weapon ability and a _3+ energy_ ability successively, she regains 50% of her spent energy and resets her ability cooldown.\n\n_+3:_ If the Monk uses a weapon ability and a _2+ energy_ ability successively, she regains 50% of her spent energy and resets her ability cooldown. actors.hero.talent.close_the_gap.title=close the gap actors.hero.talent.close_the_gap.desc=_+1:_ The Duelist blinks _up to two tiles_ toward her target when starting a duel.\n\n_+2:_ The Duelist blinks _up to three tiles_ toward her target when starting a duel.\n\n_+3:_ The Duelist blinks _up to four tiles_ toward her target when starting a duel.\n\n_+4:_ The Duelist blinks _up to five tiles_ toward her target when starting a duel.\n\nThis blink can go through enemies and hazards, and is taken into account when determining if an enemy is in range to be challenged. 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 957784c29..3f1ec6205 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -458,7 +458,7 @@ public abstract class Char extends Actor { if (combinedLethality != null){ if ( enemy.isAlive() && enemy.alignment != alignment && !Char.hasProp(enemy, Property.BOSS) && !Char.hasProp(enemy, Property.MINIBOSS) && this instanceof Hero && - (enemy.HP/(float)enemy.HT) <= 0.10f*((Hero)this).pointsInTalent(Talent.COMBINED_LETHALITY)) { + (enemy.HP/(float)enemy.HT) <= 0.4f*((Hero)this).pointsInTalent(Talent.COMBINED_LETHALITY)/3f) { enemy.HP = 0; if (!enemy.isAlive()) { enemy.die(this); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MonkEnergy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MonkEnergy.java index 19b52559a..a6c8c79b0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MonkEnergy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/MonkEnergy.java @@ -169,26 +169,22 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { if (hero.belongings.armor() != null){ if (hero.belongings.armor().tier <= 1 && points >= 3){ - enGainMulti += 1.00f; + enGainMulti += 1.20f; } else if (hero.belongings.armor().tier <= 2 && points >= 2){ - enGainMulti += 0.667f; + enGainMulti += 0.80f; } else if (hero.belongings.armor().tier <= 3 && points >= 1){ - enGainMulti += 0.333f; + enGainMulti += 0.40f; } } if (hero.belongings.weapon() instanceof MeleeWeapon && hero.buff(RingOfForce.BrawlersStance.class) == null){ if (((MeleeWeapon) hero.belongings.weapon()).tier <= 1 && points >= 3){ - enGainMulti += 1.00f; + enGainMulti += 1.20f; } else if (((MeleeWeapon) hero.belongings.weapon()).tier <= 2 && points >= 2){ - enGainMulti += 0.667f; + enGainMulti += 0.80f; } else if (((MeleeWeapon) hero.belongings.weapon()).tier <= 3 && points >= 1){ - enGainMulti += 0.333f; - } - } else if (hero.belongings.weapon == null) { - if (hero.buff(RingOfForce.Force.class) == null && points >= 3){ - enGainMulti += 1.50f; + enGainMulti += 0.40f; } } @@ -238,7 +234,7 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { } public void processCombinedEnergy(Talent.CombinedEnergyAbilityTracker tracker){ - energy = Math.min(energy+tracker.energySpent/3f, energyCap()); + energy = Math.min(energy+tracker.energySpent/2f, energyCap()); cooldown = 0; tracker.detach(); if (energy >= 1){ @@ -484,7 +480,7 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { int range = 3; if (Buff.affect(hero, MonkEnergy.class).abilitiesEmpowered(hero)){ - range += 2; + range += 3; } if (Dungeon.level.distance(hero.pos, target) > range){ @@ -568,7 +564,7 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { AttackIndicator.target(enemy); boolean empowered = Buff.affect(hero, MonkEnergy.class).abilitiesEmpowered(hero); - if (hero.attack(enemy, empowered ? 4f : 3f, 0, Char.INFINITE_ACCURACY)){ + if (hero.attack(enemy, empowered ? 4.5f : 3f, 0, Char.INFINITE_ACCURACY)){ Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG); } @@ -632,8 +628,6 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { GameScene.flash(0x88000000, false); Sample.INSTANCE.play(Assets.Sounds.SCAN); - Buff.affect(hero, Recharging.class, 10f); - Buff.affect(hero, ArtifactRecharge.class).prolong(10f).ignoreHornOfPlenty = false; for (Buff b : hero.buffs()){ if (b.type == Buff.buffType.NEGATIVE && !(b instanceof AllyBuff) @@ -654,6 +648,16 @@ public class MonkEnergy extends Buff implements ActionIndicator.Action { Buff.affect(hero, MeditateResistance.class, hero.cooldown()); } + Actor.addDelayed(new Actor() { + @Override + protected boolean act() { + Buff.affect(hero, Recharging.class, 8f); + Buff.affect(hero, ArtifactRecharge.class).prolong(8f).ignoreHornOfPlenty = false; + Actor.remove(this); + return true; + } + }, hero.cooldown()-1); + hero.next(); Buff.affect(hero, MonkEnergy.class).abilityUsed(this); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java index 0b6a0dca1..ce7c1b7de 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java @@ -413,10 +413,6 @@ abstract public class Weapon extends KindOfWeapon { multi += 0.2f; } - if (attacker.buff(MonkEnergy.MonkAbility.FlurryEmpowerTracker.class) != null){ - multi *= 0.75f; - } - return multi; }