v3.2.0: balance changes to thrown weapon talents

This commit is contained in:
Evan Debenham
2025-07-13 12:32:56 -04:00
parent 46121533fc
commit 4be2a6e51f
3 changed files with 20 additions and 27 deletions

View File

@@ -1062,7 +1062,7 @@ actors.hero.talent.bounty_hunter.desc=_+1:_ When the Assassin kills an enemy wit
actors.hero.talent.evasive_armor.title=evasive armor actors.hero.talent.evasive_armor.title=evasive armor
actors.hero.talent.evasive_armor.desc=_+1:_ While freerunning, the Freerunner gains an additional _+1 evasion_ per excess point of strength on his armor.\n\n_+2:_ While freerunning, the Freerunner gains an additional _+2 evasion_ per excess point of strength on his armor.\n\n_+3:_ While freerunning, the Freerunner gains an additional _+3 evasion_ per excess point of strength on his armor. actors.hero.talent.evasive_armor.desc=_+1:_ While freerunning, the Freerunner gains an additional _+1 evasion_ per excess point of strength on his armor.\n\n_+2:_ While freerunning, the Freerunner gains an additional _+2 evasion_ per excess point of strength on his armor.\n\n_+3:_ While freerunning, the Freerunner gains an additional _+3 evasion_ per excess point of strength on his armor.
actors.hero.talent.projectile_momentum.title=projectile momentum actors.hero.talent.projectile_momentum.title=projectile momentum
actors.hero.talent.projectile_momentum.desc=_+1:_ While freerunning, the Freerunner gains _+20% accuracy and +15% damage_ with thrown weapons.\n\n_+2:_ While freerunning, the Freerunner gains _+40% accuracy and +30% damage_ with thrown weapons.\n\n_+3:_ While freerunning, the Freerunner gains _+60% accuracy and +45% damage_ with thrown weapons. actors.hero.talent.projectile_momentum.desc=_+1:_ While freerunning, the Freerunner gains _+33% accuracy and +10% damage_ with thrown weapons.\n\n_+2:_ While freerunning, the Freerunner gains _+67% accuracy and +20% damage_ with thrown weapons.\n\n_+3:_ While freerunning, the Freerunner gains _+100% accuracy and +30% damage_ with thrown weapons.
actors.hero.talent.speedy_stealth.title=speedy stealth actors.hero.talent.speedy_stealth.title=speedy stealth
actors.hero.talent.speedy_stealth.desc=_+1:_ The Freerunner gains 2 stacks of momentum per turn while he is invisible.\n\n_+2:_ In addition to the benefits of +1, freerunning no longer counts down while the Freerunner is invisible.\n\n_+3:_ In addition to the benefits of +1 and +2, the Freerunner moves at 2x speed while invisible, regardless of whether he is freerunning or not. actors.hero.talent.speedy_stealth.desc=_+1:_ The Freerunner gains 2 stacks of momentum per turn while he is invisible.\n\n_+2:_ In addition to the benefits of +1, freerunning no longer counts down while the Freerunner is invisible.\n\n_+3:_ In addition to the benefits of +1 and +2, the Freerunner moves at 2x speed while invisible, regardless of whether he is freerunning or not.
@@ -1106,7 +1106,7 @@ actors.hero.talent.rejuvenating_steps.desc=_+1:_ When the Huntress steps on shor
actors.hero.talent.heightened_senses.title=heightened senses actors.hero.talent.heightened_senses.title=heightened senses
actors.hero.talent.heightened_senses.desc=_+1:_ The Huntress gains mind vision on characters within _2 tiles of her position_.\n\n_+2:_ The Huntress gains mind vision on characters within _3 tiles of her position_. actors.hero.talent.heightened_senses.desc=_+1:_ The Huntress gains mind vision on characters within _2 tiles of her position_.\n\n_+2:_ The Huntress gains mind vision on characters within _3 tiles of her position_.
actors.hero.talent.durable_projectiles.title=durable projectiles actors.hero.talent.durable_projectiles.title=durable projectiles
actors.hero.talent.durable_projectiles.desc=_+1:_ Thrown weapons have _+50% durability_ when used by the Huntress.\n\n_+2:_ Thrown weapons have _+75% durability_ when used by the Huntress. actors.hero.talent.durable_projectiles.desc=_+1:_ Thrown weapons have _+33% durability_ when used by the Huntress.\n\n_+2:_ Thrown weapons have _+50% durability_ when used by the Huntress.
actors.hero.talent.point_blank.title=point blank actors.hero.talent.point_blank.title=point blank
actors.hero.talent.point_blank.desc=_+1:_ When the Huntress uses her bow or a thrown weapon at melee range it has _-30% accuracy,_ instead of -50%.\n\n_+2:_ When the Huntress uses her bow or a thrown weapon at melee range it has _-10% accuracy,_ instead of -50%.\n\n_+3:_ When the Huntress uses her bow or a thrown weapon at melee range it has _+10% accuracy,_ instead of -50%.\n\nNote that thrown weapons or the spirit bow always have +50% accuracy when used at a distance. actors.hero.talent.point_blank.desc=_+1:_ When the Huntress uses her bow or a thrown weapon at melee range it has _-30% accuracy,_ instead of -50%.\n\n_+2:_ When the Huntress uses her bow or a thrown weapon at melee range it has _-10% accuracy,_ instead of -50%.\n\n_+3:_ When the Huntress uses her bow or a thrown weapon at melee range it has _+10% accuracy,_ instead of -50%.\n\nNote that thrown weapons or the spirit bow always have +50% accuracy when used at a distance.
@@ -1117,9 +1117,9 @@ actors.hero.talent.seer_shot.meta_desc=_If this talent is gained by a different
actors.hero.talent.farsight.title=farsight actors.hero.talent.farsight.title=farsight
actors.hero.talent.farsight.desc=_+1:_ The Sniper's vision range is _increased by 25%_.\n\n_+2:_ The Sniper's vision range is _increased by 50%_.\n\n_+3:_ The Sniper's vision range is _increased by 75%_. actors.hero.talent.farsight.desc=_+1:_ The Sniper's vision range is _increased by 25%_.\n\n_+2:_ The Sniper's vision range is _increased by 50%_.\n\n_+3:_ The Sniper's vision range is _increased by 75%_.
actors.hero.talent.shared_enchantment.title=shared enchantment actors.hero.talent.shared_enchantment.title=shared enchantment
actors.hero.talent.shared_enchantment.desc=_+1:_ Thrown weapons have a _33% chance_ to use the enchantment on the Sniper's bow.\n\n_+2:_ Thrown weapons have a _67% chance_ to use the enchantment on the Sniper's bow.\n\n_+3:_ Thrown weapons have a _100% chance_ to use the enchantment on the Sniper's bow.\n\nThis talent does not apply to darts shot from an enchanted crossbow, they already trigger the crossbow's enchantment. actors.hero.talent.shared_enchantment.desc=_+1:_ Thrown weapons have a _33% chance_ to use the enchantment on the Sniper's bow.\n\n_+2:_ Thrown weapons have a _67% chance_ to use the enchantment on the Sniper's bow.\n\n_+3:_ Thrown weapons have a _100% chance_ to use the enchantment on the Sniper's bow.\n\nThe bow's enchantment can trigger in addition to whatever enchantment the thrown weapon already has.
actors.hero.talent.shared_upgrades.title=shared upgrades actors.hero.talent.shared_upgrades.title=shared upgrades
actors.hero.talent.shared_upgrades.desc=_+1:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by _2.5%_ per tier of the thrown weapon.\n\n_+2:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by _5%_ per tier of the thrown weapon.\n\n_+3:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by _7.5%_ per tier of the thrown weapon. actors.hero.talent.shared_upgrades.desc=_+1:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by 16%, to a max of _2 turns and +33% damage at +2_.\n\n_+2:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by 16%, to a max of _4 turns and +67% damage at +4_.\n\n_+3:_ When the Sniper attacks with an upgraded thrown weapon, each level increases the duration of sniper's mark by 1 turn and the damage of her special attack by 16%, to a max of _6 turns and +100% damage at +6_.
actors.hero.talent.durable_tips.title=durable tips actors.hero.talent.durable_tips.title=durable tips
actors.hero.talent.durable_tips.desc=_+1:_ Tipped darts have _2x durability_ when the Warden uses them.\n\n_+2:_ Tipped darts have _3x durability_ when the Warden uses them.\n\n_+3:_ Tipped darts have _4x durability_ when the Warden uses them. actors.hero.talent.durable_tips.desc=_+1:_ Tipped darts have _2x durability_ when the Warden uses them.\n\n_+2:_ Tipped darts have _3x durability_ when the Warden uses them.\n\n_+3:_ Tipped darts have _4x durability_ when the Warden uses them.

View File

@@ -1481,10 +1481,10 @@ public class Hero extends Char {
protected boolean act() { protected boolean act() {
if (enemy.isAlive()) { if (enemy.isAlive()) {
if (hasTalent(Talent.SHARED_UPGRADES)){ if (hasTalent(Talent.SHARED_UPGRADES)){
int bonusTurns = wep.buffedLvl(); int levelBonus = Math.min( 2*pointsInTalent(Talent.SHARED_UPGRADES), wep.buffedLvl() );
// bonus dmg is 2.5% x talent lvl x weapon level x weapon tier // bonus dmg is 16.67% x weapon level, max of 2/4/6
float bonusDmg = wep.buffedLvl() * ((MissileWeapon) wep).tier * pointsInTalent(Talent.SHARED_UPGRADES) * 0.025f; float bonusDmg = levelBonus/6f;
Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION + bonusTurns).set(enemy.id(), bonusDmg); Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION + levelBonus).set(enemy.id(), bonusDmg);
} else { } else {
Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION).set(enemy.id(), 0); Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION).set(enemy.id(), 0);
} }

View File

@@ -176,15 +176,12 @@ abstract public class MissileWeapon extends Weapon {
@Override @Override
public int throwPos(Hero user, int dst) { public int throwPos(Hero user, int dst) {
//TODO do we want to let these stack?
boolean projecting = hasEnchant(Projecting.class, user); boolean projecting = hasEnchant(Projecting.class, user);
if (!projecting && Random.Int(3) < user.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ if (Random.Int(3) < user.pointsInTalent(Talent.SHARED_ENCHANTMENT)){
if (this instanceof Dart && ((Dart) this).crossbowHasEnchant(Dungeon.hero)){ SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class);
//do nothing if (bow != null && bow.hasEnchant(Projecting.class, user)) {
} else { projecting = true;
SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class);
if (bow != null && bow.hasEnchant(Projecting.class, user)) {
projecting = true;
}
} }
} }
@@ -201,7 +198,7 @@ abstract public class MissileWeapon extends Weapon {
public float accuracyFactor(Char owner, Char target) { public float accuracyFactor(Char owner, Char target) {
float accFactor = super.accuracyFactor(owner, target); float accFactor = super.accuracyFactor(owner, target);
if (owner instanceof Hero && owner.buff(Momentum.class) != null && owner.buff(Momentum.class).freerunning()){ if (owner instanceof Hero && owner.buff(Momentum.class) != null && owner.buff(Momentum.class).freerunning()){
accFactor *= 1f + 0.2f*((Hero) owner).pointsInTalent(Talent.PROJECTILE_MOMENTUM); accFactor *= 1f + ((Hero) owner).pointsInTalent(Talent.PROJECTILE_MOMENTUM)/3f;
} }
accFactor *= adjacentAccFactor(owner, target); accFactor *= adjacentAccFactor(owner, target);
@@ -260,13 +257,9 @@ abstract public class MissileWeapon extends Weapon {
@Override @Override
public int proc(Char attacker, Char defender, int damage) { public int proc(Char attacker, Char defender, int damage) {
if (attacker == Dungeon.hero && Random.Int(3) < Dungeon.hero.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ if (attacker == Dungeon.hero && Random.Int(3) < Dungeon.hero.pointsInTalent(Talent.SHARED_ENCHANTMENT)){
if (this instanceof Dart && ((Dart) this).crossbowHasEnchant(Dungeon.hero)){ SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class);
//do nothing if (bow != null && bow.enchantment != null && Dungeon.hero.buff(MagicImmune.class) == null) {
} else { damage = bow.enchantment.proc(this, attacker, defender, damage);
SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class);
if (bow != null && bow.enchantment != null && Dungeon.hero.buff(MagicImmune.class) == null) {
damage = bow.enchantment.proc(this, attacker, defender, damage);
}
} }
} }
@@ -402,9 +395,9 @@ abstract public class MissileWeapon extends Weapon {
public float durabilityPerUse( int level ){ public float durabilityPerUse( int level ){
float usages = baseUses * (float)(Math.pow(1.5f, level)); float usages = baseUses * (float)(Math.pow(1.5f, level));
//+50%/75% durability //+33%/50% durability
if (Dungeon.hero != null && Dungeon.hero.hasTalent(Talent.DURABLE_PROJECTILES)){ if (Dungeon.hero != null && Dungeon.hero.hasTalent(Talent.DURABLE_PROJECTILES)){
usages *= 1.25f + (0.25f*Dungeon.hero.pointsInTalent(Talent.DURABLE_PROJECTILES)); usages *= 1f + (1+Dungeon.hero.pointsInTalent(Talent.DURABLE_PROJECTILES))/6f;
} }
if (holster) { if (holster) {
usages *= MagicalHolster.HOLSTER_DURABILITY_FACTOR; usages *= MagicalHolster.HOLSTER_DURABILITY_FACTOR;
@@ -463,7 +456,7 @@ abstract public class MissileWeapon extends Weapon {
damage += Hero.heroDamageIntRange( 0, exStr ); damage += Hero.heroDamageIntRange( 0, exStr );
} }
if (owner.buff(Momentum.class) != null && owner.buff(Momentum.class).freerunning()) { if (owner.buff(Momentum.class) != null && owner.buff(Momentum.class).freerunning()) {
damage = Math.round(damage * (1f + 0.15f * ((Hero) owner).pointsInTalent(Talent.PROJECTILE_MOMENTUM))); damage = Math.round(damage * (1f + 0.1f * ((Hero) owner).pointsInTalent(Talent.PROJECTILE_MOMENTUM)));
} }
} }