From 5570e015fd7ea69e40f4c69c3ab1a99f1c620cb4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 14 Jan 2025 14:45:29 -0500 Subject: [PATCH] v3.0.0: implemented the Paladin's smite spell --- .../src/main/assets/interfaces/hero_icons.png | Bin 3481 -> 3599 bytes .../main/assets/interfaces/talent_icons.png | Bin 7498 -> 7530 bytes .../assets/messages/actors/actors.properties | 6 +- .../actors/hero/Hero.java | 5 + .../actors/hero/spells/ClericSpell.java | 7 +- .../actors/hero/spells/Smite.java | 114 ++++++++++++++++++ .../items/armor/glyphs/AntiMagic.java | 2 + .../items/weapon/Weapon.java | 9 ++ .../shatteredpixeldungeon/ui/HeroIcon.java | 7 +- 9 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Smite.java diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index ec1da32601e5d0a122eefd19a2eca48ba2651301..462fc72fb5fda0ab7109aa1a3b25c2c5e663bf6c 100644 GIT binary patch delta 3427 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 delta 3308 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 K&%=$Oss8~g|0ZSt diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index 38e8311360654785dafd40b72ba198592f463948..52edff8a135bc53e6ec466a842b0ba56d31841a1 100644 GIT binary patch delta 7248 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 I*XQd00sUeUMgRZ+ delta 7216 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 p)%TPuvBiP=$ + */ + +package com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells; + +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.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Callback; +import com.watabou.utils.Random; + +public class Smite extends TargetedClericSpell { + + public static Smite INSTANCE = new Smite(); + + @Override + public int icon() { + return HeroIcon.SMITE; + } + + @Override + public String desc() { + int min = 5 + Dungeon.hero.lvl/2; + int max = 10 + Dungeon.hero.lvl; + return Messages.get(this, "desc", min, max) + "\n\n" + Messages.get(this, "charge_cost", (int)chargeUse(Dungeon.hero)); + } + + @Override + public float chargeUse(Hero hero) { + return 2f; + } + + @Override + protected void onTargetSelected(HolyTome tome, Hero hero, Integer target) { + if (target == null) { + return; + } + + Char enemy = Actor.findChar(target); + if (enemy == null || enemy == hero){ + GLog.w(Messages.get(this, "no_target")); + return; + } + + //we apply here because of projecting + SmiteTracker tracker = Buff.affect(hero, SmiteTracker.class); + if (hero.isCharmedBy(enemy) || !Dungeon.level.heroFOV[target] || !hero.canAttack(enemy)) { + GLog.w(Messages.get(this, "invalid_enemy")); + tracker.detach(); + return; + } + + hero.sprite.attack(enemy.pos, new Callback() { + @Override + public void call() { + AttackIndicator.target(enemy); + + if (hero.attack(enemy, 1, 0, Char.INFINITE_ACCURACY)){ + Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG); + enemy.sprite.burst(0xFFFFFFFF, 10); + } + tracker.detach(); + + Invisibility.dispel(); + + hero.spendAndNext(hero.attackDelay()); + onSpellCast(tome, hero); + } + }); + + } + + public static int bonusDmg( Hero attacker, Char defender){ + int min = 5 + attacker.lvl/2; + int max = 10 + attacker.lvl; + if (Char.hasProp(defender, Char.Property.UNDEAD) || Char.hasProp(defender, Char.Property.DEMONIC)){ + return max; + } else { + return Random.NormalIntRange(min, max); + } + } + + public static class SmiteTracker extends FlavourBuff {}; + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AntiMagic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AntiMagic.java index c64e81cfc..26d47d321 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AntiMagic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/glyphs/AntiMagic.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.WarpB import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.GuidingLight; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyLance; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyWeapon; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.Smite; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.Sunray; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CrystalWisp; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100; @@ -97,6 +98,7 @@ public class AntiMagic extends Armor.Glyph { RESISTS.add( HolyWeapon.class ); RESISTS.add( Sunray.class ); RESISTS.add( HolyLance.class ); + RESISTS.add( Smite.class ); RESISTS.add( Judgement.class ); RESISTS.add( ElementalBlast.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java index 8ebe0c860..60c6e9298 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/Weapon.java @@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.AscendedForm; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.duelist.ElementalStrike; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyWeapon; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.Smite; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag; @@ -130,6 +131,10 @@ abstract public class Weapon extends KindOfWeapon { } else if (enchantment != null) { damage = enchantment.proc(this, attacker, defender, damage); } + if (attacker instanceof Hero && isEquipped((Hero) attacker) && + attacker.buff(Smite.SmiteTracker.class) != null){ + defender.damage(Smite.bonusDmg((Hero) attacker, defender), Smite.INSTANCE); + } } if (!levelKnown && attacker == Dungeon.hero) { @@ -488,6 +493,10 @@ abstract public class Weapon extends KindOfWeapon { attacker.buff(RunicBlade.RunicSlashTracker.class).detach(); } + if (attacker.buff(Smite.SmiteTracker.class) != null){ + multi += 3f; + } + if (attacker.buff(ElementalStrike.DirectedPowerTracker.class) != null){ multi += attacker.buff(ElementalStrike.DirectedPowerTracker.class).enchBoost; attacker.buff(ElementalStrike.DirectedPowerTracker.class).detach(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java index 445ecb810..cd70ba729 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -35,7 +35,7 @@ public class HeroIcon extends Image { private static final int SIZE = 16; //transparent icon - public static final int NONE = 63; + public static final int NONE = 127; //subclasses public static final int BERSERKER = 0; @@ -87,7 +87,10 @@ public class HeroIcon extends Image { public static final int HOLY_LANCE = 51; public static final int HALLOWED_GROUND = 52; public static final int MNEMONIC_PRAYER = 53; - //Paladin spells go here + public static final int SMITE = 54; + public static final int LAY_ON_HANDS = 55; + //56 + //57 public static final int DIVINE_INTERVENTION = 58; public static final int JUDGEMENT = 59; public static final int FLASH = 60;