v2.0.0: various armor ability balance changes

This commit is contained in:
Evan Debenham
2023-01-26 13:39:56 -05:00
parent 8ec9ca98f0
commit e3cf0a7f26
8 changed files with 27 additions and 46 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -403,7 +403,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 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.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 uses half a wand charge for each zap, 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!
@@ -422,7 +422,7 @@ actors.hero.abilities.rogue.smokebomb.prompt=Choose a location to jump to
actors.hero.abilities.rogue.smokebomb$ninjalog.name=wooden decoy
actors.hero.abilities.rogue.smokebomb$ninjalog.desc=Somehow, enemies are easily convinced that this wooden decoy is the real Rogue!
actors.hero.abilities.rogue.smokebomb.short_desc=The Rogue throws down a _Smoke Bomb_ while blinking away. He blinds enemies near his old location.
actors.hero.abilities.rogue.smokebomb.desc=The Rogue throws down a smoke bomb and blinks up to 10 tiles away. He can blink through hazards and enemies, but not through solid terrain like walls.\n\nEnemies that are adjacent to the Rogue's old position will be blinded for 5 turns.
actors.hero.abilities.rogue.smokebomb.desc=The Rogue throws down a smoke bomb and blinks up to 6 tiles away. He can blink through hazards and enemies, but not through solid terrain like walls.\n\nEnemies that are adjacent to the Rogue's old position will be blinded for 5 turns.
actors.hero.abilities.rogue.deathmark.name=death mark
actors.hero.abilities.rogue.deathmark.ally_target=You can only mark enemies
actors.hero.abilities.rogue.deathmark.short_desc=The Rogue places a _Death Mark_ on a chosen enemy. Marked enemies take bonus damage, but cannot die until the mark ends.
@@ -547,7 +547,7 @@ actors.hero.herosubclass.warden=warden
actors.hero.herosubclass.warden_short_desc=The _Warden_ can see through tall grass and gains bonus effects when she plants seeds and tramples plants.
actors.hero.herosubclass.warden_desc=The Warden has a strong connection to nature which grants her a variety of bonus effects relating to grass and plants. She is able to see through tall and furrowed grass as if it were empty space.\n\nThe Warden causes grass to sprout up around any seed she throws or plants, and gains special effects when trampling plants. These special effects replace the regular plant effects, meaning that no plant is harmful for her to step on.
actors.hero.herosubclass.champion=champion
actors.hero.herosubclass.champion_short_desc=The _Champion_ can wield a two weapons. Her regular attacks use her primary weapon, but she can swap weapons and use either weapon's ability.
actors.hero.herosubclass.champion_short_desc=The _Champion_ can wield two weapons. Her regular attacks use her primary weapon, but she can swap weapons and use either weapon's ability.
actors.hero.herosubclass.champion_desc=The Champion is a master of melee weapons who can equip a secondary weapon in addition to her primary one. Her regular attacks use her primary weapon, but she can swap her primary weapon instantly.\n\nThe secondary weapon's ability can be used at any time and has its own ability charges. Her secondary weapon charges have a 50% reduced charge cap and charge speed.
actors.hero.herosubclass.monk=monk
actors.hero.herosubclass.monk_short_desc=The _Monk_ builds energy while fighting. This energy can be spent on a variety of unique abilities.
@@ -617,7 +617,7 @@ actors.hero.talent.body_slam.desc=_+1:_ When the Warrior lands after jumping, al
actors.hero.talent.impact_wave.title=impact wave
actors.hero.talent.impact_wave.desc=_+1:_ When the Warrior lands after jumping, all adjacent enemies are knocked _2 tiles_ back and have a _25% chance_ of becoming vulnerable for 5 turns.\n\n_+2:_ When the Warrior lands after jumping, all adjacent enemies are knocked _3 tiles_ back and have a _50% chance_ of becoming vulnerable for 5 turns.\n\n_+3:_ When the Warrior lands after jumping, all adjacent enemies are knocked _4 tiles_ back and have a _75% chance_ of becoming vulnerable for 5 turns.\n\n_+4:_ When the Warrior lands after jumping, all adjacent enemies are knocked _5 tiles_ back and have a _100% chance_ of becoming vulnerable for 5 turns.
actors.hero.talent.double_jump.title=double jump
actors.hero.talent.double_jump.desc=_+1:_ If the Warrior performs a second leap within 3 turns, that leap has a _20% reduced_ charge cost.\n\n_+2:_ If the Warrior performs a second leap within 3 turns, that leap has a _36% reduced_ charge cost.\n\n_+3:_ If the Warrior performs a second leap within 3 turns, that leap has a _50% reduced_ charge cost.\n\n_+4:_ If the Warrior performs a second leap within 3 turns, that leap has a _60% reduced_ charge cost.
actors.hero.talent.double_jump.desc=_+1:_ If the Warrior performs a second leap within 3 turns, that leap has a _16% reduced_ charge cost.\n\n_+2:_ If the Warrior performs a second leap within 3 turns, that leap has a _30% reduced_ charge cost.\n\n_+3:_ If the Warrior performs a second leap within 3 turns, that leap has a _40% reduced_ charge cost.\n\n_+4:_ If the Warrior performs a second leap within 3 turns, that leap has a _50% reduced_ charge cost.
actors.hero.talent.expanding_wave.title=expanding wave
actors.hero.talent.expanding_wave.desc=_+1:_ Shockwave's range is increased to _6 tiles_ from 5, and its width is increased to _75 degrees_ from 60.\n\n_+2:_ Shockwave's range is increased to _7 tiles_ from 5, and its width is increased to _90 degrees_ from 60.\n\n_+3:_ Shockwave's range is increased to _8 tiles_ from 5, and its width is increased to _105 degrees_ from 60.\n\n_+4:_ Shockwave's range is increased to _9 tiles_ from 5, and its width is increased to _120 degrees_ from 60.
@@ -629,7 +629,7 @@ actors.hero.talent.shock_force.desc=_+1:_ Shockwave deals _20% more damage_ and
actors.hero.talent.sustained_retribution.title=sustained retribution
actors.hero.talent.sustained_retribution.desc=_+1:_ The Warrior deals _115% bonus damage_ spread over _2 hits_, instead of 100% bonus damage in 1 hit.\n\n_+2:_ The Warrior deals _130% bonus damage_ spread over _3 hits_, instead of 100% bonus damage in 1 hit.\n\n_+3:_ The Warrior deals _145% bonus damage_ spread over _4 hits_, instead of 100% bonus damage in 1 hit.\n\n_+4:_ The Warrior deals _160% bonus damage_ spread over _5 hits_, instead of 100% bonus damage in 1 hit.
actors.hero.talent.shrug_it_off.title=shrug it off
actors.hero.talent.shrug_it_off.desc=_+1:_ The Warrior cannot take more than _67% of his max HP_ in damage while enduring.\n\n_+2:_ The Warrior cannot take more than _45% of his max HP_ in damage while enduring.\n\n_+3:_ The Warrior cannot take more than _30% of his max HP_ in damage while enduring.\n\n_+4:_ The Warrior cannot take more than _20% of his max HP_ in damage while enduring.
actors.hero.talent.shrug_it_off.desc=_+1:_ The Warrior's damage reduction while enduring is _increased to 60%_, from 50%.\n\n_+2:_ The Warrior's damage reduction while enduring is _increased to 68%_, from 50%.\n\n_+3:_ The Warrior's damage reduction while enduring is _increased to 74%_, from 50%.\n\n_+4:_ The Warrior's damage reduction while enduring is _increased to 80%_, from 50%.
actors.hero.talent.even_the_odds.title=even the odds
actors.hero.talent.even_the_odds.desc=_+1:_ The Warrior deals an additional _5% bonus damage_ for every enemy within 2 tiles when enduring ends.\n\n_+2:_ The Warrior deals an additional _10% bonus damage_ for every enemy within 2 tiles when enduring ends.\n\n_+3:_ The Warrior deals an additional _15% bonus damage_ for every enemy within 2 tiles when enduring ends.\n\n_+4:_ The Warrior deals an additional _20% bonus damage_ for every enemy within 2 tiles when enduring ends.
@@ -688,7 +688,7 @@ actors.hero.talent.wild_power.desc=_+1:_ When using wild magic, wands will be bo
actors.hero.talent.fire_everything.title=fire everything
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 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.conserved_magic.desc=_+1:_ Each zap from wild magic now uses _0.33 charges_ instead of 0.5, and wild magic has a _25% chance_ to not spend a turn.\n\n_+2:_ Each zap from wild magic now uses _0.225 charges_ instead of 0.5, and wild magic has a _50% chance_ to not spend a turn.\n\n_+3:_ Each zap from wild magic now uses _0.15 charges_ instead of 0.5, and wild magic has a _75% chance_ to not spend a turn.\n\n_+4:_ Each zap from wild magic now uses _0.1 charges_ instead of 0.5, 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.
@@ -745,7 +745,7 @@ actors.hero.talent.hasty_retreat.desc=_+1:_ After blinking the Rogue gains _1 tu
actors.hero.talent.body_replacement.title=body replacement
actors.hero.talent.body_replacement.desc=_+1:_ After blinking, the Rogue leaves a wooden decoy behind that has _20 health and 1-3 armor_.\n\n_+2:_ After blinking, the Rogue leaves a wooden decoy behind that has _40 health and 2-6 armor_.\n\n_+3:_ After blinking, the Rogue leaves a wooden decoy behind that has _60 health and 3-9 armor_.\n\n_+4:_ After blinking, the Rogue leaves a wooden decoy behind that has _80 health and 4-12 armor_.\n\nOnly one decoy can be active at a time.
actors.hero.talent.shadow_step.title=shadow step
actors.hero.talent.shadow_step.desc=_+1:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _20% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+2:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _36% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+3:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _50% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+4:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _60% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.
actors.hero.talent.shadow_step.desc=_+1:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _16% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+2:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _30% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+3:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _41% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.\n\n_+4:_ If the rogue uses smoke bomb while invisible, it occurs instantly and has a _50% reduced_ charge cost, but it also doesn't blind enemies or trigger other talents.
actors.hero.talent.fear_the_reaper.title=fear the reaper
actors.hero.talent.fear_the_reaper.desc=_+1:_ When a death marked enemy reaches 0 hp, they become _crippled_.\n\n_+2:_ When a death marked enemy reaches 0 hp, they become _feared and crippled_.\n\n_+3:_ When a death marked enemy reaches 0 hp, they become _feared and crippled_ and enemies within 3 tiles become _crippled_.\n\n_+4:_ When a death marked enemy reaches 0 hp, they become _feared and crippled_ and enemies within 3 tiles become _feared and crippled_.

View File

@@ -680,11 +680,6 @@ public abstract class Char extends Actor {
buff( Paralysis.class ).processDamage(dmg);
}
Endure.EndureTracker endure = buff(Endure.EndureTracker.class);
if (endure != null){
dmg = endure.enforceDamagetakenLimit(dmg);
}
int shielded = dmg;
//FIXME: when I add proper damage properties, should add an IGNORES_SHIELDS property to use here.
if (!(src instanceof Hunger)){

View File

@@ -71,8 +71,8 @@ public abstract class ArmorAbility implements Bundlable {
public float chargeUse( Hero hero ){
float chargeUse = baseChargeUse;
if (hero.hasTalent(Talent.HEROIC_ENERGY)){
//reduced charge use by 13%/24%/34%/43%
chargeUse *= Math.pow( 0.869, hero.pointsInTalent(Talent.HEROIC_ENERGY));
//reduced charge use by 12%/23%/32%/40%
chargeUse *= Math.pow( 0.8804, hero.pointsInTalent(Talent.HEROIC_ENERGY));
}
return chargeUse;
}

View File

@@ -70,7 +70,7 @@ public class WildMagic extends ArmorAbility {
ArrayList<Wand> wands = hero.belongings.getAllItems(Wand.class);
Random.shuffle(wands);
float chargeUsePerShot = (float)Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
float chargeUsePerShot = 0.5f * (float)Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
for (Wand w : wands.toArray(new Wand[0])){
if (w.curCharges < 1 && w.partialCharge < chargeUsePerShot){
@@ -177,7 +177,7 @@ public class WildMagic extends ArmorAbility {
}
private void afterZap( Wand cur, ArrayList<Wand> wands, Hero hero, int target){
cur.partialCharge -= (float) Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
cur.partialCharge -= 0.5f * (float)Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
if (cur.partialCharge < 0) {
cur.partialCharge++;
cur.curCharges--;

View File

@@ -77,8 +77,8 @@ public class SmokeBomb extends ArmorAbility {
if (!hero.hasTalent(Talent.SHADOW_STEP) || hero.invisible <= 0){
return super.chargeUse(hero);
} else {
//reduced charge use by 20%/36%/50%/60%
return (float)(super.chargeUse(hero) * Math.pow(0.795, hero.pointsInTalent(Talent.SHADOW_STEP)));
//reduced charge use by 16%/30%/41%/50%
return (float)(super.chargeUse(hero) * Math.pow(0.84, hero.pointsInTalent(Talent.SHADOW_STEP)));
}
}
@@ -86,7 +86,7 @@ public class SmokeBomb extends ArmorAbility {
protected void activate(ClassArmor armor, Hero hero, Integer target) {
if (target != null) {
PathFinder.buildDistanceMap(hero.pos, BArray.not(Dungeon.level.solid,null), 10);
PathFinder.buildDistanceMap(hero.pos, BArray.not(Dungeon.level.solid,null), 6);
if ( PathFinder.distance[target] == Integer.MAX_VALUE ||
!Dungeon.level.heroFOV[target] ||

View File

@@ -51,7 +51,7 @@ public class Endure extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {
Buff.prolong(hero, EndureTracker.class, 13f).setup(hero);
Buff.prolong(hero, EndureTracker.class, 13f);
Combo combo = hero.buff(Combo.class);
if (combo != null){
@@ -71,11 +71,10 @@ public class Endure extends ArmorAbility {
type = buffType.POSITIVE;
}
public boolean enduring;
public boolean enduring = true;
public int damageBonus;
public int maxDmgTaken;
public int hitsLeft;
public int damageBonus = 0;
public int hitsLeft = 0;
@Override
public int icon() {
@@ -97,27 +96,17 @@ public class Endure extends ArmorAbility {
return Messages.get(this, "desc", damageBonus, hitsLeft);
}
public void setup(Hero hero){
enduring = true;
maxDmgTaken = (int) (hero.HT * Math.pow(0.67f, hero.pointsInTalent(Talent.SHRUG_IT_OFF)));
damageBonus = 0;
hitsLeft = 0;
}
public float adjustDamageTaken(float damage){
if (enduring) {
damageBonus += damage/2;
return damage/2f;
}
return damage;
}
public int enforceDamagetakenLimit(int damage){
if (damage >= maxDmgTaken) {
damage = maxDmgTaken;
maxDmgTaken = 0;
} else {
maxDmgTaken -= damage;
float damageMulti = 0.5f;
if (Dungeon.hero.hasTalent(Talent.SHRUG_IT_OFF)){
//total damage reduction is 60%/68%/74%/80%, based on points in talent
damageMulti *= Math.pow(0.8f, Dungeon.hero.pointsInTalent(Talent.SHRUG_IT_OFF));
}
return damage*damageMulti;
}
return damage;
}
@@ -166,7 +155,6 @@ public class Endure extends ArmorAbility {
public static String ENDURING = "enduring";
public static String DAMAGE_BONUS = "damage_bonus";
public static String MAX_DMG_TAKEN = "max_dmg_taken";
public static String HITS_LEFT = "hits_left";
@Override
@@ -174,7 +162,6 @@ public class Endure extends ArmorAbility {
super.storeInBundle(bundle);
bundle.put(ENDURING, enduring);
bundle.put(DAMAGE_BONUS, damageBonus);
bundle.put(MAX_DMG_TAKEN, maxDmgTaken);
bundle.put(HITS_LEFT, hitsLeft);
}
@@ -183,7 +170,6 @@ public class Endure extends ArmorAbility {
super.restoreFromBundle(bundle);
enduring = bundle.getBoolean(ENDURING);
damageBonus = bundle.getInt(DAMAGE_BONUS);
maxDmgTaken = bundle.getInt(ENDURING);
hitsLeft = bundle.getInt(HITS_LEFT);
}
};

View File

@@ -59,8 +59,8 @@ public class HeroicLeap extends ArmorAbility {
public float chargeUse( Hero hero ) {
float chargeUse = super.chargeUse(hero);
if (hero.buff(DoubleJumpTracker.class) != null){
//reduced charge use by 20%/36%/50%/60%
chargeUse *= Math.pow(0.795, hero.pointsInTalent(Talent.DOUBLE_JUMP));
//reduced charge use by 16%/30%/41%/50%
chargeUse *= Math.pow(0.84, hero.pointsInTalent(Talent.DOUBLE_JUMP));
}
return chargeUse;
}