v2.0.0: buffs to most weapon abilities based on early feedback and data

This commit is contained in:
Evan Debenham
2023-02-15 17:05:41 -05:00
parent f7e2c50698
commit 254f00fd56
14 changed files with 43 additions and 47 deletions

View File

@@ -1511,7 +1511,7 @@ items.weapon.melee.assassinsblade.desc=A small wavy blade made of obsidian, diff
items.weapon.melee.battleaxe.name=battle axe
items.weapon.melee.battleaxe.stats_desc=This is a rather accurate weapon.
items.weapon.melee.battleaxe.ability_name=heavy blow
items.weapon.melee.battleaxe.ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This strong but predictable attack has -75% accuracy, but deals +35% damage and applies vulnerable for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.battleaxe.ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This strong but predictable attack has -75% accuracy, but deals +40% damage and applies vulnerable and weaken for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.battleaxe.desc=The enormous steel head of this battle axe puts considerable heft behind each wide stroke.
items.weapon.melee.crossbow.name=crossbow
@@ -1546,25 +1546,25 @@ items.weapon.melee.flail$spinabilitytracker.desc=The Duelist is spinning her fla
items.weapon.melee.gauntlet.name=stone gauntlet
items.weapon.melee.gauntlet.stats_desc=This is a very fast weapon.
items.weapon.melee.gauntlet.ability_name=combo strike
items.weapon.melee.gauntlet.ability_desc=The Duelist can perform a _combo strike_ with a stone gauntlet. This attack is guaranteed to hit and is instantaneous if the Duelist has already successfully attacked with melee or thrown weapons twice in the last 4 turns.
items.weapon.melee.gauntlet.ability_desc=The Duelist can perform a _combo strike_ with a stone gauntlet. This attack is guaranteed to hit and deals +20% damage for each time the Duelist has already successfully attacked with melee or thrown weapons twice in the last 5 turns.
items.weapon.melee.gauntlet.desc=This massive gauntlet is made of crimson fabric with heavy magical stone layered on top. The fabric tightens around you, making the thick stone plates almost like a second skin. Swinging such a heavy weapon requires strength, but adds tremendous force to your blows.
items.weapon.melee.glaive.name=glaive
items.weapon.melee.glaive.stats_desc=This is a rather slow weapon.\nThis weapon has extra reach.
items.weapon.melee.glaive.ability_name=spike
items.weapon.melee.glaive.ability_desc=The Duelist can use the tip of a glaive to _spike_ an enemy that is in range but not adjacent. This deals -33% damage, but knocks the enemy back and is guaranteed to hit.
items.weapon.melee.glaive.ability_desc=The Duelist can use the tip of a glaive to _spike_ an enemy that is in range but not adjacent. This deals +10% damage, knocks the enemy back, and is guaranteed to hit.
items.weapon.melee.glaive.desc=A massive polearm consisting of a sword blade on the end of a pole.
items.weapon.melee.gloves.name=studded gloves
items.weapon.melee.gloves.stats_desc=This is a very fast weapon.
items.weapon.melee.gloves.ability_name=combo strike
items.weapon.melee.gloves.ability_desc=The Duelist can perform a _combo strike_ with studded gloves. This attack is guaranteed to hit and is instantaneous if the Duelist has already successfully attacked with melee or thrown weapons twice in the last 6 turns.
items.weapon.melee.gloves.ability_desc=The Duelist can perform a _combo strike_ with studded gloves. This attack is guaranteed to hit and deals +30% damage for each time the Duelist has already successfully attacked with melee or thrown weapons twice in the last 5 turns.
items.weapon.melee.gloves.desc=These studded gloves don't provide any real protection, but they act as a serviceable weapon while keeping the hands free.
items.weapon.melee.greataxe.name=greataxe
items.weapon.melee.greataxe.stats_desc=This weapon is incredibly heavy.
items.weapon.melee.greataxe.ability_name=retribution
items.weapon.melee.greataxe.ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 33% health. This devastating attack is guaranteed to hit and deals +35% damage.
items.weapon.melee.greataxe.ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 50% health. This devastating attack is guaranteed to hit and deals +35% damage.
items.weapon.melee.greataxe.desc=Meant to be wielded over the shoulder, this titanic axe is as powerful as it is heavy.
items.weapon.melee.greatshield.name=greatshield
@@ -1582,7 +1582,7 @@ items.weapon.melee.greatsword.desc=This towering blade inflicts heavy damage by
items.weapon.melee.handaxe.name=hand axe
items.weapon.melee.handaxe.stats_desc=This is a rather accurate weapon.
items.weapon.melee.handaxe.ability_name=heavy blow
items.weapon.melee.handaxe.ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This strong but predictable attack has -75% accuracy, but deals +45% damage and applies vulnerable for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.handaxe.ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This strong but predictable attack has -75% accuracy, but deals +50% damage and applies vulnerable and weaken for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.handaxe.desc=A light axe, most commonly used for felling trees. The wide blade works well against foes as well.
items.weapon.melee.knuckles.name=knuckleduster
@@ -1597,7 +1597,7 @@ items.weapon.melee.longsword.desc=This sword's long razor-sharp steel blade shin
items.weapon.melee.mace.name=mace
items.weapon.melee.mace.stats_desc=This is a rather accurate weapon.
items.weapon.melee.mace.ability_name=heavy blow
items.weapon.melee.mace.ability_desc=The Duelist can perform a _heavy blow_ with a mace. This strong but predictable attack has -75% accuracy, but deals +40% damage and applies vulnerable for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.mace.ability_desc=The Duelist can perform a _heavy blow_ with a mace. This strong but predictable attack has -75% accuracy, but deals +45% damage and applies vulnerable and weaken for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.mace.desc=The large iron head of this weapon inflicts substantial damage.
items.weapon.melee.magesstaff.name=mage's staff
@@ -1667,19 +1667,19 @@ items.weapon.melee.roundshield$guardtracker.desc=The Duelist has readied her shi
items.weapon.melee.runicblade.name=runic blade
items.weapon.melee.runicblade.stats_desc=This weapon benefits more from upgrades.
items.weapon.melee.runicblade.ability_name=runic slash
items.weapon.melee.runicblade.ability_desc=The Duelist can perform a _runic slash_ with a runic blade. This attack is guaranteed to hit and has +200% enchantment power.
items.weapon.melee.runicblade.ability_desc=The Duelist can perform a _runic slash_ with a runic blade. This attack is guaranteed to hit and has +250% enchantment power.
items.weapon.melee.runicblade.desc=A mysterious weapon from a distant land, with a bright blue blade.
items.weapon.melee.sai.name=sai
items.weapon.melee.sai.stats_desc=This is a very fast weapon.
items.weapon.melee.sai.ability_name=combo strike
items.weapon.melee.sai.ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and is instantaneous if the Duelist has already successfully attacked with melee or thrown weapons twice in the last 5 turns.
items.weapon.melee.sai.ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and deals +25% damage for each time the Duelist has already successfully attacked with melee or thrown weapons twice in the last 5 turns.
items.weapon.melee.sai.desc=Two thin blades meant to be wielded in one hand each. Excellent for tearing down enemies with a flurry of cuts.
items.weapon.melee.scimitar.name=scimitar
items.weapon.melee.scimitar.stats_desc=This is a rather fast weapon.
items.weapon.melee.scimitar.ability_name=sword dance
items.weapon.melee.scimitar.ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance grants the Duelist +60% attack speed and -33% accuracy for 6 turns, takes no time to activate, and costs two charges.
items.weapon.melee.scimitar.ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance grants the Duelist +60% attack speed and -20% accuracy for 6 turns, takes no time to activate, and costs two charges.
items.weapon.melee.scimitar.desc=A thick curved blade. Its shape allows for faster, yet less powerful attacks.
items.weapon.melee.scimitar$sworddance.name=sword dance
items.weapon.melee.scimitar$sworddance.desc=The Duelist is making quick momentum based strikes with her weapon, in a sort of dance. While this stance is active, she attacks 60%% faster (enough to attack exactly twice a turn with a scimitar), but suffers -33%% accuracy.\n\nTurns remaining: %s.
@@ -1687,7 +1687,7 @@ items.weapon.melee.scimitar$sworddance.desc=The Duelist is making quick momentum
items.weapon.melee.spear.name=spear
items.weapon.melee.spear.stats_desc=This is a rather slow weapon.\nThis weapon has extra reach.
items.weapon.melee.spear.ability_name=spike
items.weapon.melee.spear.ability_desc=The Duelist can use the tip of a spear to _spike_ an enemy that is in range but not adjacent. This deals -25% damage, but knocks the enemy back and is guaranteed to hit.
items.weapon.melee.spear.ability_desc=The Duelist can use the tip of a spear to _spike_ an enemy that is in range but not adjacent. This deals +15% damage, knocks the enemy back, and is guaranteed to hit.
items.weapon.melee.spear.desc=A slender wooden rod tipped with sharpened iron.
items.weapon.melee.sword.name=sword
@@ -1700,7 +1700,7 @@ items.weapon.melee.sword$cleavetracker.desc=The Duelist is ready to follow up on
items.weapon.melee.warhammer.name=war hammer
items.weapon.melee.warhammer.stats_desc=This is a rather accurate weapon.
items.weapon.melee.warhammer.ability_name=heavy blow
items.weapon.melee.warhammer.ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This strong but predictable attack has -75% accuracy, but deals +30% damage and applies vulnerable for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.warhammer.ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This strong but predictable attack has -75% accuracy, but deals +35% damage and applies vulnerable and weaken for 5 turns if it hits. Heavy blow can surprise attack.
items.weapon.melee.warhammer.desc=Few creatures can withstand the crushing blow of this towering mass of lead and steel, but it takes great strength to use effectively.
items.weapon.melee.whip.name=whip

View File

@@ -187,7 +187,7 @@ abstract public class Weapon extends KindOfWeapon {
}
if (owner.buff(Scimitar.SwordDance.class) != null){
ACC *= 0.67f;
ACC *= 0.8f;
}
return encumbrance > 0 ? (float)(ACC / Math.pow( 1.5, encumbrance )) : ACC;
@@ -392,7 +392,7 @@ abstract public class Weapon extends KindOfWeapon {
}
if (attacker.buff(RunicBlade.RunicSlashTracker.class) != null){
multi += 2f;
multi += 2.5f;
attacker.buff(RunicBlade.RunicSlashTracker.class).detach();
}

View File

@@ -50,7 +50,7 @@ public class BattleAxe extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Mace.heavyBlowAbility(hero, target, 1.35f, this);
Mace.heavyBlowAbility(hero, target, 1.40f, this);
}
}

View File

@@ -50,7 +50,7 @@ public class Gauntlet extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Sai.comboStrikeAbility(hero, target, 4, this);
Sai.comboStrikeAbility(hero, target, 0.20f, this);
}
}

View File

@@ -51,7 +51,7 @@ public class Glaive extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Spear.spikeAbility(hero, target, 0.67f, this);
Spear.spikeAbility(hero, target, 1.10f, this);
}
}

View File

@@ -52,7 +52,7 @@ public class Gloves extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Sai.comboStrikeAbility(hero, target, 6, this);
Sai.comboStrikeAbility(hero, target, 0.30f, this);
}
}

View File

@@ -62,7 +62,7 @@ public class Greataxe extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
if (hero.HP / (float)hero.HT > 0.33f){
if (hero.HP / (float)hero.HT >= 0.5f){
GLog.w(Messages.get(this, "ability_cant_use"));
return;
}

View File

@@ -58,7 +58,7 @@ public class HandAxe extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Mace.heavyBlowAbility(hero, target, 1.45f, this);
Mace.heavyBlowAbility(hero, target, 1.50f, this);
}
}

View File

@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vulnerable;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
@@ -60,7 +61,7 @@ public class Mace extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Mace.heavyBlowAbility(hero, target, 1.40f, this);
Mace.heavyBlowAbility(hero, target, 1.45f, this);
}
public static void heavyBlowAbility(Hero hero, Integer target, float dmgMulti, MeleeWeapon wep){
@@ -91,6 +92,7 @@ public class Mace extends MeleeWeapon {
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
if (enemy.isAlive()){
Buff.affect(enemy, Vulnerable.class, 5f);
Buff.affect(enemy, Weakness.class, 5f);
} else {
wep.onAbilityKill(hero);
}

View File

@@ -398,7 +398,7 @@ public class MeleeWeapon extends Weapon {
LockedFloor lock = target.buff(LockedFloor.class);
if (charges < chargeCap()){
if (lock == null || lock.regenOn()){
partialCharge += 1/(50f-(chargeCap()-charges)); // 50 to 40 turns per charge
partialCharge += 1/(45f-1.5f*(chargeCap()-charges)); // 45 to 30 turns per charge
}
int points = ((Hero)target).pointsInTalent(Talent.WEAPON_RECHARGING);
@@ -419,9 +419,9 @@ public class MeleeWeapon extends Weapon {
if (Dungeon.hero.subClass == HeroSubClass.CHAMPION
&& secondCharges < secondChargeCap()) {
if (lock == null || lock.regenOn()) {
// 100 to 80 turns per charge without talent
// up to 75 to 67 turns per charge at max talent level
secondPartialCharge += secondChargeMultiplier() / (50f-(secondChargeCap()-secondCharges));
// 90 to 60 turns per charge without talent
// up to 60 to 40 turns per charge at max talent level
secondPartialCharge += secondChargeMultiplier() / (45f-2.5f*(secondChargeCap()-secondCharges));
}
if (secondPartialCharge >= 1) {

View File

@@ -62,10 +62,10 @@ public class Sai extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Sai.comboStrikeAbility(hero, target, 5, this);
Sai.comboStrikeAbility(hero, target, 0.25f, this);
}
public static void comboStrikeAbility(Hero hero, Integer target, int comboTime, MeleeWeapon wep){
public static void comboStrikeAbility(Hero hero, Integer target, float boostPerHit, MeleeWeapon wep){
if (target == null) {
return;
}
@@ -89,29 +89,23 @@ public class Sai extends MeleeWeapon {
public void call() {
wep.beforeAbilityUsed(hero);
AttackIndicator.target(enemy);
boolean hit = hero.attack(enemy, 1, 0, Char.INFINITE_ACCURACY);
HashSet<ComboStrikeTracker> buffs = hero.buffs(ComboStrikeTracker.class);
int recentHits = buffs.size();
for (Buff b : buffs){
b.detach();
}
boolean hit = hero.attack(enemy, 1f + boostPerHit*recentHits, 0, Char.INFINITE_ACCURACY);
if (hit && !enemy.isAlive()){
wep.onAbilityKill(hero);
}
HashSet<ComboStrikeTracker> buffs = hero.buffs(ComboStrikeTracker.class);
int recentHits = 0;
for (Buff b : buffs){
if (b.cooldown() >= (ComboStrikeTracker.DURATION - comboTime)){
recentHits++;
}
}
Invisibility.dispel();
if (recentHits >= 2 && hit){
for (Buff b : buffs){
b.detach();
}
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
hero.next();
} else {
hero.spendAndNext(hero.attackDelay());
}
wep.afterAbilityUsed(hero);
}
});
@@ -119,7 +113,7 @@ public class Sai extends MeleeWeapon {
public static class ComboStrikeTracker extends FlavourBuff{
public static float DURATION = 6f;
public static float DURATION = 5f;
}

View File

@@ -61,7 +61,7 @@ public class Spear extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Spear.spikeAbility(hero, target, 0.75f, this);
Spear.spikeAbility(hero, target, 1.15f, this);
}
public static void spikeAbility(Hero hero, Integer target, float dmgMulti, MeleeWeapon wep){

View File

@@ -50,7 +50,7 @@ public class WarHammer extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Mace.heavyBlowAbility(hero, target, 1.30f, this);
Mace.heavyBlowAbility(hero, target, 1.35f, this);
}
}

View File

@@ -180,9 +180,9 @@ public abstract class TippedDart extends Dart {
}
use *= (1f - lotusPreserve);
//grants 1 extra use with charged shot
//grants 2 extra uses with charged shot
if (Dungeon.hero.buff(Crossbow.ChargedShot.class) != null){
use = 100f/((100f/use) + 1f) + 0.001f;
use = 100f/((100f/use) + 2f) + 0.001f;
}
return use;