From b5f1513285e87bfe8d82b82c6d29cba15d611bfd Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 15 Aug 2022 13:47:42 -0400 Subject: [PATCH] v1.4.0: improved targeting logic for armor abilities --- .../actors/hero/abilities/ArmorAbility.java | 6 ++++++ .../actors/hero/abilities/Ratmogrify.java | 5 +++++ .../actors/hero/abilities/mage/WarpBeacon.java | 5 +++++ .../actors/hero/abilities/rogue/DeathMark.java | 9 +++++++-- .../actors/hero/abilities/rogue/SmokeBomb.java | 5 +++++ .../actors/hero/abilities/warrior/Shockwave.java | 5 +++++ .../shatteredpixeldungeon/items/armor/ClassArmor.java | 5 +++++ 7 files changed, 38 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/ArmorAbility.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/ArmorAbility.java index e0b633b43..18f1babfe 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/ArmorAbility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/ArmorAbility.java @@ -21,9 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -62,6 +64,10 @@ public abstract class ArmorAbility implements Bundlable { return targetingPrompt() != null; } + public int targetedPos( Char user, int dst ){ + return new Ballistica( user.pos, dst, Ballistica.PROJECTILE ).collisionPos; + } + public float chargeUse( Hero hero ){ float chargeUse = baseChargeUse; if (hero.hasTalent(Talent.HEROIC_ENERGY)){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/Ratmogrify.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/Ratmogrify.java index 29a3a23de..c6b1499fb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/Ratmogrify.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/Ratmogrify.java @@ -68,6 +68,11 @@ public class Ratmogrify extends ArmorAbility { return Messages.get(this, "prompt"); } + @Override + public int targetedPos(Char user, int dst) { + return dst; + } + @Override protected void activate(ClassArmor armor, Hero hero, Integer target) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java index e0241f760..616f9d039 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java @@ -70,6 +70,11 @@ public class WarpBeacon extends ArmorAbility { return super.targetingPrompt(); } + @Override + public int targetedPos(Char user, int dst) { + return dst; + } + @Override protected void activate(ClassArmor armor, Hero hero, Integer target) { if (target == null){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/DeathMark.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/DeathMark.java index b48557bfa..8efb89df3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/DeathMark.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/DeathMark.java @@ -46,13 +46,18 @@ import com.watabou.utils.PathFinder; public class DeathMark extends ArmorAbility { + { + baseChargeUse = 25f; + } + @Override public String targetingPrompt() { return Messages.get(this, "prompt"); } - { - baseChargeUse = 25f; + @Override + public int targetedPos(Char user, int dst) { + return dst; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/SmokeBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/SmokeBomb.java index 0e0845c15..b13ef955b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/SmokeBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/rogue/SmokeBomb.java @@ -67,6 +67,11 @@ public class SmokeBomb extends ArmorAbility { return Messages.get(this, "prompt"); } + @Override + public boolean useTargeting() { + return false; + } + @Override public float chargeUse(Hero hero) { if (!hero.hasTalent(Talent.SHADOW_STEP) || hero.invisible <= 0){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/warrior/Shockwave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/warrior/Shockwave.java index 6e01cd5ce..2ceb46f9d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/warrior/Shockwave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/warrior/Shockwave.java @@ -57,6 +57,11 @@ public class Shockwave extends ArmorAbility { return Messages.get(this, "prompt"); } + @Override + public int targetedPos(Char user, int dst) { + return new Ballistica( user.pos, dst, Ballistica.STOP_SOLID | Ballistica.STOP_TARGET ).collisionPos; + } + @Override protected void activate(ClassArmor armor, Hero hero, Integer target) { if (target == null){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java index 63f2a5ecc..e87b5aef6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/ClassArmor.java @@ -89,6 +89,11 @@ abstract public class ClassArmor extends Armor { } } + @Override + public int targetingPos(Hero user, int dst) { + return user.armorAbility.targetedPos(user, dst); + } + public static ClassArmor upgrade (Hero owner, Armor armor ) { ClassArmor classArmor = null;