diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 0b02f2744..153bfc77b 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -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.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.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.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.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.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.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.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.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.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.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. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index cac0a5abe..e4a51a178 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -1481,10 +1481,10 @@ public class Hero extends Char { protected boolean act() { if (enemy.isAlive()) { if (hasTalent(Talent.SHARED_UPGRADES)){ - int bonusTurns = wep.buffedLvl(); - // bonus dmg is 2.5% x talent lvl x weapon level x weapon tier - float bonusDmg = wep.buffedLvl() * ((MissileWeapon) wep).tier * pointsInTalent(Talent.SHARED_UPGRADES) * 0.025f; - Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION + bonusTurns).set(enemy.id(), bonusDmg); + int levelBonus = Math.min( 2*pointsInTalent(Talent.SHARED_UPGRADES), wep.buffedLvl() ); + // bonus dmg is 16.67% x weapon level, max of 2/4/6 + float bonusDmg = levelBonus/6f; + Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION + levelBonus).set(enemy.id(), bonusDmg); } else { Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION).set(enemy.id(), 0); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java index 0699df8a9..e35a21f72 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java @@ -176,15 +176,12 @@ abstract public class MissileWeapon extends Weapon { @Override public int throwPos(Hero user, int dst) { + //TODO do we want to let these stack? boolean projecting = hasEnchant(Projecting.class, user); - if (!projecting && Random.Int(3) < user.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ - if (this instanceof Dart && ((Dart) this).crossbowHasEnchant(Dungeon.hero)){ - //do nothing - } else { - SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class); - if (bow != null && bow.hasEnchant(Projecting.class, user)) { - projecting = true; - } + if (Random.Int(3) < user.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ + 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) { float accFactor = super.accuracyFactor(owner, target); 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); @@ -260,13 +257,9 @@ abstract public class MissileWeapon extends Weapon { @Override public int proc(Char attacker, Char defender, int damage) { if (attacker == Dungeon.hero && Random.Int(3) < Dungeon.hero.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ - if (this instanceof Dart && ((Dart) this).crossbowHasEnchant(Dungeon.hero)){ - //do nothing - } else { - 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); - } + 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 ){ 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)){ - usages *= 1.25f + (0.25f*Dungeon.hero.pointsInTalent(Talent.DURABLE_PROJECTILES)); + usages *= 1f + (1+Dungeon.hero.pointsInTalent(Talent.DURABLE_PROJECTILES))/6f; } if (holster) { usages *= MagicalHolster.HOLSTER_DURABILITY_FACTOR; @@ -463,7 +456,7 @@ abstract public class MissileWeapon extends Weapon { damage += Hero.heroDamageIntRange( 0, exStr ); } 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))); } }