v2.2.0: various weapon balance changes:

- Sneak ability reworked, now blinks but only grants 1 turn of stealth
- Harvest ability bleed amount increased to 110% and 90% from 100% and 80%
- Katana blocking down to 0-3 from 0-4
- Brawler's Stance ability charge use down to 1/6 from 1/4
This commit is contained in:
Evan Debenham
2023-08-27 14:33:47 -04:00
parent c1ed0f8abc
commit 288f0ea18b
8 changed files with 75 additions and 22 deletions

View File

@@ -914,10 +914,10 @@ items.rings.ringofforce.stats=When unarmed, at your current strength, this ring
items.rings.ringofforce.typical_stats=When unarmed, at your current strength, typically this ring will deal _%1$d-%2$d damage._ With a weapon equipped, typically this ring will increase damage by _%3$d._
items.rings.ringofforce.combined_stats=Your equipped rings are combining their power, dealing a total of _%1$d-%2$d damage_ without a weapon, or _+%3$d damage_ with one.
items.rings.ringofforce.ability_name=brawler's stance
items.rings.ringofforce.ability_desc=The Duelist can adopt a _brawler's stance_ with this ring. While in this stance the Duelist's regular attacks will use this ring even with a weapon equipped. The ring will also inherit the weapon's enchantment and augmentation. Each regular attack in this stance consumes 1/4 of a weapon charge.
items.rings.ringofforce.ability_desc=The Duelist can adopt a _brawler's stance_ with this ring. While in this stance the Duelist's regular attacks will use this ring even with a weapon equipped. The ring will also inherit the weapon's enchantment and augmentation. Each regular attack in this stance consumes 1/6 of a weapon charge.
items.rings.ringofforce.desc=This ring enhances the force of the wearer's melee blows. This extra power is fairly weak when wielding weapons, but an unarmed attack will be made much stronger. A cursed ring will instead weaken the wearer's blows.
items.rings.ringofforce$brawlersstance.name=brawler's stance
items.rings.ringofforce$brawlersstance.desc=While in this stance the Duelist's regular attacks will use an equipped ring of force even when she has a weapon equipped. The attack will still use the weapon's augmentation and enchantment however.\n\nEach regular attack in this stance consumes 1/4 of a weapon charge. You currently have enough charge for %d attacks.\n\nThis stance can be toggled on or off by using a ring of force.
items.rings.ringofforce$brawlersstance.desc=While in this stance the Duelist's regular attacks will use an equipped ring of force even when she has a weapon equipped. The attack will still use the weapon's augmentation and enchantment however.\n\nEach regular attack in this stance consumes 1/6 of a weapon charge. You currently have enough charge for %d attacks.\n\nThis stance can be toggled on or off by using a ring of force.
items.rings.ringoffuror.name=ring of furor
items.rings.ringoffuror.stats=When worn, this ring will increase the speed of your attacks by _%s%%._
@@ -1525,7 +1525,7 @@ items.weapon.enchantments.vampiric.elestrike_desc=An elemental strike with a vam
items.weapon.melee.assassinsblade.name=assassin's blade
items.weapon.melee.assassinsblade.stats_desc=This weapon is stronger against unaware enemies.
items.weapon.melee.assassinsblade.ability_name=sneak
items.weapon.melee.assassinsblade.ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability grants the Duelist 6 turns of invisibility, but costs 2 charges.
items.weapon.melee.assassinsblade.ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability lets the Duelist blink up to 3 tiles away and grants her 1 turn of invisibility, but costs 2 charges.
items.weapon.melee.assassinsblade.desc=A small wavy blade made of obsidian, difficult to use despite being lightweight, but deadly if it finds the right mark.
items.weapon.melee.battleaxe.name=battle axe
@@ -1545,13 +1545,13 @@ items.weapon.melee.crossbow$chargedshot.desc=The Duelist is focusing power into
items.weapon.melee.dagger.name=dagger
items.weapon.melee.dagger.stats_desc=This weapon is stronger against unaware enemies.
items.weapon.melee.dagger.ability_name=sneak
items.weapon.melee.dagger.ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability grants the Duelist 10 turns of invisibility, but costs 2 charges.
items.weapon.melee.dagger.ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability lets the Duelist blink up to 5 tiles away and grants her 1 turn of invisibility, but costs 2 charges.
items.weapon.melee.dagger.desc=A simple iron dagger with a worn wooden handle.
items.weapon.melee.dirk.name=dirk
items.weapon.melee.dirk.stats_desc=This weapon is stronger against unaware enemies.
items.weapon.melee.dirk.ability_name=sneak
items.weapon.melee.dirk.ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability grants the Duelist 8 turns of invisibility, but costs 2 charges.
items.weapon.melee.dirk.ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability lets the Duelist blink up to 4 tiles away and grants her 1 turn of invisibility, but costs 2 charges.
items.weapon.melee.dirk.desc=A longer thrusting dagger, gives a bit more steel to plunge into foes.
items.weapon.melee.flail.name=flail
@@ -1711,7 +1711,7 @@ items.weapon.melee.scimitar$sworddance.desc=The Duelist is making quick momentum
items.weapon.melee.sickle.name=sickle
items.weapon.melee.sickle.stats_desc=This is a rather inaccurate weapon.
items.weapon.melee.sickle.ability_name=harvest
items.weapon.melee.sickle.ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack inflicts bleed equal to 100% of damage and is guaranteed to hit, but costs 2 charges.
items.weapon.melee.sickle.ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack inflicts bleed equal to 110% of damage and is guaranteed to hit, but costs 2 charges.
items.weapon.melee.sickle.desc=A handheld farming tool that can double as a strong but unwieldy weapon.
items.weapon.melee.spear.name=spear
@@ -1736,7 +1736,7 @@ items.weapon.melee.warhammer.desc=Few creatures can withstand the crushing blow
items.weapon.melee.warscythe.name=war scythe
items.weapon.melee.warscythe.stats_desc=This is a rather inaccurate weapon.
items.weapon.melee.warscythe.ability_name=harvest
items.weapon.melee.warscythe.ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack inflicts bleed equal to 80% of damage and is guaranteed to hit, but costs 2 charges.
items.weapon.melee.warscythe.ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack inflicts bleed equal to 90% of damage and is guaranteed to hit, but costs 2 charges.
items.weapon.melee.warscythe.desc=This large and unwieldy tool has been reinforced to make it better at cutting foes than crops.
items.weapon.melee.whip.name=whip

View File

@@ -251,7 +251,7 @@ public class RingOfForce extends Ring {
public static class BrawlersStance extends Buff {
public static float HIT_CHARGE_USE = 0.25f;
public static float HIT_CHARGE_USE = 1/6f;
{
announced = true;

View File

@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.utils.Random;
@@ -65,6 +66,15 @@ public class AssassinsBlade extends MeleeWeapon {
return super.damageRoll(owner);
}
@Override
public String targetingPrompt() {
return Messages.get(this, "prompt");
}
public boolean useTargeting(){
return false;
}
@Override
protected int baseChargeUse(Hero hero, Char target){
return 2;
@@ -72,7 +82,7 @@ public class AssassinsBlade extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Dagger.sneakAbility(hero, 6, this);
Dagger.sneakAbility(hero, target, 3, this);
}
}

View File

@@ -31,8 +31,13 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.BArray;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
public class Dagger extends MeleeWeapon {
@@ -74,6 +79,15 @@ public class Dagger extends MeleeWeapon {
return super.damageRoll(owner);
}
@Override
public String targetingPrompt() {
return Messages.get(this, "prompt");
}
public boolean useTargeting(){
return false;
}
@Override
protected int baseChargeUse(Hero hero, Char target){
return 2;
@@ -81,16 +95,40 @@ public class Dagger extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
sneakAbility(hero, 10, this);
sneakAbility(hero, target, 5, this);
}
public static void sneakAbility(Hero hero, int invisTurns, MeleeWeapon wep){
public static void sneakAbility(Hero hero, Integer target, int maxDist, MeleeWeapon wep){
if (target == null) {
return;
}
if (Actor.findChar(target) != null || !Dungeon.level.heroFOV[target]) {
GLog.w(Messages.get(wep, "ability_bad_position"));
return;
}
PathFinder.buildDistanceMap(Dungeon.hero.pos, BArray.not(Dungeon.level.solid, null), maxDist);
if (PathFinder.distance[target] == Integer.MAX_VALUE) {
GLog.w(Messages.get(wep, "ability_bad_position"));
return;
}
wep.beforeAbilityUsed(hero, null);
Buff.affect(hero, Invisibility.class, invisTurns);
Buff.affect(hero, Invisibility.class, Actor.TICK);
hero.spendAndNext(Actor.TICK);
Dungeon.hero.sprite.turnTo( Dungeon.hero.pos, target);
Dungeon.hero.pos = target;
Dungeon.level.occupyCell(Dungeon.hero);
Dungeon.observe();
GameScene.updateFog();
Dungeon.hero.checkVisibleMobs();
Dungeon.hero.sprite.place( Dungeon.hero.pos );
CellEmitter.get( Dungeon.hero.pos ).burst( Speck.factory( Speck.WOOL ), 6 );
Sample.INSTANCE.play( Assets.Sounds.PUFF );
wep.afterAbilityUsed(hero);
}
}

View File

@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.utils.Random;
@@ -65,6 +66,15 @@ public class Dirk extends MeleeWeapon {
return super.damageRoll(owner);
}
@Override
public String targetingPrompt() {
return Messages.get(this, "prompt");
}
public boolean useTargeting(){
return false;
}
@Override
protected int baseChargeUse(Hero hero, Char target){
return 2;
@@ -72,7 +82,7 @@ public class Dirk extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Dagger.sneakAbility(hero, 8, this);
Dagger.sneakAbility(hero, target, 4, this);
}
}

View File

@@ -45,7 +45,7 @@ public class Katana extends MeleeWeapon {
@Override
public int defenseFactor( Char owner ) {
return 4; //4 extra defence
return 3; //3 extra defence
}
@Override

View File

@@ -95,7 +95,7 @@ public class Sickle extends MeleeWeapon {
AttackIndicator.target(enemy);
Buff.affect(enemy, HarvestBleedTracker.class, 0).bleedFactor = bleedFactor;
if (hero.attack(enemy, 1, 0, Char.INFINITE_ACCURACY)){
if (hero.attack(enemy, 1.1f, 0, Char.INFINITE_ACCURACY)){
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
}
@@ -103,11 +103,6 @@ public class Sickle extends MeleeWeapon {
hero.spendAndNext(hero.attackDelay());
if (!enemy.isAlive()){
wep.onAbilityKill(hero, enemy);
Buff.prolong(hero, Sword.CleaveTracker.class, 5f);
} else {
if (hero.buff(Sword.CleaveTracker.class) != null) {
hero.buff(Sword.CleaveTracker.class).detach();
}
}
wep.afterAbilityUsed(hero);
}

View File

@@ -56,7 +56,7 @@ public class WarScythe extends MeleeWeapon {
@Override
protected void duelistAbility(Hero hero, Integer target) {
Sickle.harvestAbility(hero, target, 0.8f, this);
Sickle.harvestAbility(hero, target, 0.9f, this);
}
}