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
|
###melee weapons
|
||||||
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_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
|
||||||
@@ -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.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_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_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
|
||||||
|
|||||||
+16
@@ -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,4 +66,19 @@ public class AssassinsBlade extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+60
@@ -22,10 +22,23 @@
|
|||||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
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.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.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.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.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;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
public class Dagger extends MeleeWeapon {
|
public class Dagger extends MeleeWeapon {
|
||||||
@@ -67,4 +80,51 @@ public class Dagger extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
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 );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -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,4 +66,19 @@ public class Dirk extends MeleeWeapon {
|
|||||||
return super.damageRoll(owner);
|
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