v2.0.0: added an ability for sneak attack weapons
This commit is contained in:
@@ -1482,6 +1482,8 @@ items.weapon.enchantments.vampiric.desc=This powerful enchantment leeches life f
|
||||
###melee weapons
|
||||
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 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
|
||||
@@ -1494,10 +1496,14 @@ items.weapon.melee.crossbow.desc=A fairly intricate weapon which shoots bolts at
|
||||
|
||||
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 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 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
|
||||
|
||||
@@ -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,4 +66,19 @@ public class AssassinsBlade extends MeleeWeapon {
|
||||
return super.damageRoll(owner);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int abilityChargeUse() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String targetingPrompt() {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
Dagger.sneakAbility(hero, target, 3, this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -22,10 +22,23 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
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.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.BArray;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class Dagger extends MeleeWeapon {
|
||||
@@ -67,4 +80,51 @@ public class Dagger extends MeleeWeapon {
|
||||
return super.damageRoll(owner);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int abilityChargeUse() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String targetingPrompt() {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
sneakAbility(hero, target, 5, this);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Buff.affect(hero, Invisibility.class, Math.max(1, 1/hero.speed()));
|
||||
hero.spendAndNext(1/hero.speed());
|
||||
wep.onAbilityUsed(hero);
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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,4 +66,19 @@ public class Dirk extends MeleeWeapon {
|
||||
return super.damageRoll(owner);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int abilityChargeUse() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String targetingPrompt() {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
Dagger.sneakAbility(hero, target, 4, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user