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:
@@ -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.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.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_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.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.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.name=ring of furor
|
||||||
items.rings.ringoffuror.stats=When worn, this ring will increase the speed of your attacks by _%s%%._
|
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.name=assassin's blade
|
||||||
items.weapon.melee.assassinsblade.stats_desc=This weapon is stronger against unaware enemies.
|
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_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.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
|
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.name=dagger
|
||||||
items.weapon.melee.dagger.stats_desc=This weapon is stronger against unaware enemies.
|
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_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.dagger.desc=A simple iron dagger with a worn wooden handle.
|
||||||
|
|
||||||
items.weapon.melee.dirk.name=dirk
|
items.weapon.melee.dirk.name=dirk
|
||||||
items.weapon.melee.dirk.stats_desc=This weapon is stronger against unaware enemies.
|
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_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.dirk.desc=A longer thrusting dagger, gives a bit more steel to plunge into foes.
|
||||||
|
|
||||||
items.weapon.melee.flail.name=flail
|
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.name=sickle
|
||||||
items.weapon.melee.sickle.stats_desc=This is a rather inaccurate weapon.
|
items.weapon.melee.sickle.stats_desc=This is a rather inaccurate weapon.
|
||||||
items.weapon.melee.sickle.ability_name=harvest
|
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.sickle.desc=A handheld farming tool that can double as a strong but unwieldy weapon.
|
||||||
|
|
||||||
items.weapon.melee.spear.name=spear
|
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.name=war scythe
|
||||||
items.weapon.melee.warscythe.stats_desc=This is a rather inaccurate weapon.
|
items.weapon.melee.warscythe.stats_desc=This is a rather inaccurate weapon.
|
||||||
items.weapon.melee.warscythe.ability_name=harvest
|
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.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
|
items.weapon.melee.whip.name=whip
|
||||||
|
|||||||
+1
-1
@@ -251,7 +251,7 @@ public class RingOfForce extends Ring {
|
|||||||
|
|
||||||
public static class BrawlersStance extends Buff {
|
public static class BrawlersStance extends Buff {
|
||||||
|
|
||||||
public static float HIT_CHARGE_USE = 0.25f;
|
public static float HIT_CHARGE_USE = 1/6f;
|
||||||
|
|
||||||
{
|
{
|
||||||
announced = true;
|
announced = true;
|
||||||
|
|||||||
+11
-1
@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
@@ -65,6 +66,15 @@ public class AssassinsBlade extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
return super.damageRoll(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String targetingPrompt() {
|
||||||
|
return Messages.get(this, "prompt");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useTargeting(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int baseChargeUse(Hero hero, Char target){
|
protected int baseChargeUse(Hero hero, Char target){
|
||||||
return 2;
|
return 2;
|
||||||
@@ -72,7 +82,7 @@ public class AssassinsBlade extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void duelistAbility(Hero hero, Integer target) {
|
protected void duelistAbility(Hero hero, Integer target) {
|
||||||
Dagger.sneakAbility(hero, 6, this);
|
Dagger.sneakAbility(hero, target, 3, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+42
-4
@@ -31,8 +31,13 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
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.sprites.ItemSpriteSheet;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
import com.watabou.utils.BArray;
|
||||||
|
import com.watabou.utils.PathFinder;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
public class Dagger extends MeleeWeapon {
|
public class Dagger extends MeleeWeapon {
|
||||||
@@ -74,6 +79,15 @@ public class Dagger extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
return super.damageRoll(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String targetingPrompt() {
|
||||||
|
return Messages.get(this, "prompt");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useTargeting(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int baseChargeUse(Hero hero, Char target){
|
protected int baseChargeUse(Hero hero, Char target){
|
||||||
return 2;
|
return 2;
|
||||||
@@ -81,16 +95,40 @@ public class Dagger extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void duelistAbility(Hero hero, Integer target) {
|
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);
|
wep.beforeAbilityUsed(hero, null);
|
||||||
Buff.affect(hero, Invisibility.class, invisTurns);
|
Buff.affect(hero, Invisibility.class, Actor.TICK);
|
||||||
hero.spendAndNext(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 );
|
CellEmitter.get( Dungeon.hero.pos ).burst( Speck.factory( Speck.WOOL ), 6 );
|
||||||
Sample.INSTANCE.play( Assets.Sounds.PUFF );
|
Sample.INSTANCE.play( Assets.Sounds.PUFF );
|
||||||
|
|
||||||
wep.afterAbilityUsed(hero);
|
wep.afterAbilityUsed(hero);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
@@ -65,6 +66,15 @@ public class Dirk extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
return super.damageRoll(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String targetingPrompt() {
|
||||||
|
return Messages.get(this, "prompt");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useTargeting(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int baseChargeUse(Hero hero, Char target){
|
protected int baseChargeUse(Hero hero, Char target){
|
||||||
return 2;
|
return 2;
|
||||||
@@ -72,7 +82,7 @@ public class Dirk extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void duelistAbility(Hero hero, Integer target) {
|
protected void duelistAbility(Hero hero, Integer target) {
|
||||||
Dagger.sneakAbility(hero, 8, this);
|
Dagger.sneakAbility(hero, target, 4, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ public class Katana extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int defenseFactor( Char owner ) {
|
public int defenseFactor( Char owner ) {
|
||||||
return 4; //4 extra defence
|
return 3; //3 extra defence
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-6
@@ -95,7 +95,7 @@ public class Sickle extends MeleeWeapon {
|
|||||||
AttackIndicator.target(enemy);
|
AttackIndicator.target(enemy);
|
||||||
|
|
||||||
Buff.affect(enemy, HarvestBleedTracker.class, 0).bleedFactor = bleedFactor;
|
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);
|
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,11 +103,6 @@ public class Sickle extends MeleeWeapon {
|
|||||||
hero.spendAndNext(hero.attackDelay());
|
hero.spendAndNext(hero.attackDelay());
|
||||||
if (!enemy.isAlive()){
|
if (!enemy.isAlive()){
|
||||||
wep.onAbilityKill(hero, enemy);
|
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);
|
wep.afterAbilityUsed(hero);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ public class WarScythe extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void duelistAbility(Hero hero, Integer target) {
|
protected void duelistAbility(Hero hero, Integer target) {
|
||||||
Sickle.harvestAbility(hero, target, 0.8f, this);
|
Sickle.harvestAbility(hero, target, 0.9f, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user