From 2452a8941eb6d6362912694438b5d4c0cd94473f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 1 Nov 2024 14:26:14 -0400 Subject: [PATCH] v3.0.0: implemented the Sunray spell/talent --- .../src/main/assets/interfaces/hero_icons.png | Bin 2183 -> 2228 bytes .../main/assets/interfaces/talent_icons.png | Bin 7005 -> 7044 bytes .../assets/messages/actors/actors.properties | 9 +- .../actors/hero/Talent.java | 4 +- .../actors/hero/spells/ClericSpell.java | 4 + .../actors/hero/spells/Sunray.java | 122 ++++++++++++++++++ .../shatteredpixeldungeon/effects/Beam.java | 7 + .../items/armor/glyphs/AntiMagic.java | 2 + .../shatteredpixeldungeon/ui/HeroIcon.java | 3 +- 9 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Sunray.java diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index 2bc1903eb6eb581235a8387a5965d4125929c1f6..61680ca9be04bf9a5f3adb865def283c036eaaf7 100644 GIT binary patch delta 1935 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 Vioeb8$B{pD^rr6xw>C)f{tIa5ht~iA diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index ae5792312256c2e2a152c589253ef44e09447bab..359dc8a25321b49aedfb3770e169955d5544a978 100644 GIT binary patch delta 6758 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 delta 6719 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 + */ + +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.Blindness; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; +import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Random; + +public class Sunray extends TargetedClericSpell { + + public static final Sunray INSTANCE = new Sunray(); + + @Override + public int icon() { + return HeroIcon.SUNRAY; + } + + @Override + public String desc() { + int min = Dungeon.hero.pointsInTalent(Talent.SUNRAY) == 2 ? 3 : 2; + int max = Dungeon.hero.pointsInTalent(Talent.SUNRAY) == 2 ? 12 : 8; + int dur = Dungeon.hero.pointsInTalent(Talent.SUNRAY) == 2 ? 6 : 4; + return Messages.get(this, "desc", min, max, dur) + "\n\n" + Messages.get(this, "charge_cost", (int)chargeUse(Dungeon.hero)); + } + + @Override + protected void onTargetSelected(HolyTome tome, Hero hero, Integer target) { + if (target == null){ + return; + } + + Ballistica aim = new Ballistica(hero.pos, target, Ballistica.MAGIC_BOLT); + + if (Actor.findChar( aim.collisionPos ) == hero){ + GLog.i( Messages.get(Wand.class, "self_target") ); + return; + } + + hero.busy(); + Sample.INSTANCE.play( Assets.Sounds.RAY ); + hero.sprite.zap(target); + + hero.sprite.parent.add( + new Beam.SunRay(hero.sprite.center(), DungeonTilemap.raisedTileCenterToWorld(aim.collisionPos))); + + Char ch = Actor.findChar( aim.collisionPos ); + if (ch != null) { + ch.sprite.burst(0xFFFFFF44, 5); + + if (Char.hasProp(ch, Char.Property.UNDEAD) || Char.hasProp(ch, Char.Property.DEMONIC)){ + if (hero.pointsInTalent(Talent.SUNRAY) == 2) { + ch.damage(12, Sunray.this); + } else { + ch.damage(8, Sunray.this); + } + } else { + if (hero.pointsInTalent(Talent.SUNRAY) == 2) { + ch.damage(Random.NormalIntRange(3, 12), Sunray.this); + } else { + ch.damage(Random.NormalIntRange(2, 8), Sunray.this); + } + } + + if (ch.isAlive()) { + if (ch.buff(Blindness.class) != null && ch.buff(SunRayRecentlyBlindedTracker.class) != null) { + Buff.prolong(ch, Paralysis.class, 2f + 2f*hero.pointsInTalent(Talent.SUNRAY)); + ch.buff(SunRayRecentlyBlindedTracker.class).detach(); + } else if (ch.buff(SunRayUsedTracker.class) == null) { + Buff.prolong(ch, Blindness.class, 2f + 2f*hero.pointsInTalent(Talent.SUNRAY)); + Buff.prolong(ch, SunRayRecentlyBlindedTracker.class, 2f + 2f*hero.pointsInTalent(Talent.SUNRAY)); + Buff.affect(ch, SunRayUsedTracker.class); + } + } + } + + hero.spend( 1f ); + hero.next(); + + onSpellCast(tome, hero); + + } + + public static class SunRayUsedTracker extends Buff {} + public static class SunRayRecentlyBlindedTracker extends FlavourBuff {} + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Beam.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Beam.java index 6a48f3dd4..6c04513fa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Beam.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Beam.java @@ -66,6 +66,13 @@ public class Beam extends Image { } } + public static class SunRay extends Beam{ + public SunRay(PointF s, PointF e){ + super(s, e, Effects.Type.LIGHT_RAY, 1f); + tint(1, 1, 0.25f, 1); + } + } + public static class HealthRay extends Beam{ public HealthRay(PointF s, PointF e){ super(s, e, Effects.Type.HEALTH_RAY, 0.75f); 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 3fd6e01a0..4256a4ed7 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 @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.Eleme import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.WarpBeacon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.GuidingLight; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyWeapon; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.Sunray; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CrystalWisp; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM100; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Eye; @@ -92,6 +93,7 @@ public class AntiMagic extends Armor.Glyph { RESISTS.add( GuidingLight.class ); RESISTS.add( HolyWeapon.class ); + RESISTS.add( Sunray.class ); RESISTS.add( ElementalBlast.class ); RESISTS.add( CursedWand.class ); 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 db2e63c77..b4e5d7bc7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -73,7 +73,8 @@ public class HeroIcon extends Image { public static final int HOLY_WARD = 42; public static final int SHIELD_OF_LIGHT = 43; public static final int DETECT_CURSE = 44; - public static final int DIVINE_SENSE = 45; + public static final int SUNRAY = 45; + public static final int DIVINE_SENSE = 46; //action indicator visuals public static final int BERSERK = 80;