From 039eacd4de6ba4f8f5cc33423163226ae4d37dc0 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 29 May 2022 16:02:27 -0400 Subject: [PATCH] v1.3.0: adren., cleanse, and holy darts now have enemy effects as well --- .../assets/messages/items/items.properties | 6 ++-- .../weapon/missiles/darts/AdrenalineDart.java | 6 ++-- .../weapon/missiles/darts/CleansingDart.java | 28 +++++++++++++++++-- .../items/weapon/missiles/darts/HolyDart.java | 16 +++++++++-- 4 files changed, 47 insertions(+), 9 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index de6faead5..66d60d3b3 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1568,7 +1568,7 @@ items.weapon.melee.wornshortsword.desc=A quite short sword, worn down through he ###missile weapons items.weapon.missiles.darts.adrenalinedart.name=adrenaline dart -items.weapon.missiles.darts.adrenalinedart.desc=These darts are tipped with a swiftthistle-based compound which will give their target a boost in speed. This boost affects both speed of movement and of attacking, though movement is improved more. The dart itself is still harmful to enemies, but will not harm allies. +items.weapon.missiles.darts.adrenalinedart.desc=These darts are tipped with a swiftthistle-based compound which will boost the movement and attack speed of allies, or briefly lower the movement speed of enemies. The dart itself is still harmful to enemies, but will not harm allies. items.weapon.missiles.darts.blindingdart.name=blinding dart items.weapon.missiles.darts.blindingdart.desc=These darts are tipped with a blindweed-based compound which will blind their target for a short time. They do not disorient however, so an enemy will still know where they last saw you. @@ -1577,7 +1577,7 @@ items.weapon.missiles.darts.chillingdart.name=chilling dart items.weapon.missiles.darts.chillingdart.desc=These darts are tipped with an icecap-based compound which will significantly chill their target. items.weapon.missiles.darts.cleansingdart.name=cleansing dart -items.weapon.missiles.darts.cleansingdart.desc=These darts are tipped with a dreamfoil-based compound which will temporarily make their target immune to all negative effects. The dart itself is still harmful to enemies, but will not harm allies. +items.weapon.missiles.darts.cleansingdart.desc=These darts are tipped with a dreamfoil-based compound which will temporarily make allies immune to all negative effects, or will cleanse positive effects from enemies. Enemies may even briefly forget that they are attacking or fleeing from you. The dart itself is still harmful to enemies, but will not harm allies. items.weapon.missiles.darts.dart.name=dart items.weapon.missiles.darts.dart.ac_tip=TIP @@ -1598,7 +1598,7 @@ items.weapon.missiles.darts.healingdart.name=healing dart items.weapon.missiles.darts.healingdart.desc=These darts are tipped with a sungrass-based compound which grants a burst of healing to their target. The dart itself is still harmful to enemies, but will not harm allies. items.weapon.missiles.darts.holydart.name=holy dart -items.weapon.missiles.darts.holydart.desc=These darts are tipped with a starflower-based compound which grants a boost in power to their target. The dart itself is still harmful to enemies, but will not harm allies. +items.weapon.missiles.darts.holydart.desc=These darts are tipped with a starflower-based compound which infuses holy energy into their target. Allies and regular enemies will become blessed, but undead or demonic enemies will take heavy damage. The dart itself is still harmful to enemies, but will not harm allies. items.weapon.missiles.darts.incendiarydart.name=incendiary dart items.weapon.missiles.darts.incendiarydart.desc=These darts are tipped with a firebloom-based compound which will burst into brilliant flames on impact. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java index 109684c52..876f85f2a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Adrenaline; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class AdrenalineDart extends TippedDart { @@ -35,10 +36,11 @@ public class AdrenalineDart extends TippedDart { @Override public int proc(Char attacker, Char defender, int damage) { - Buff.prolong( defender, Adrenaline.class, 3*Adrenaline.DURATION); - if (attacker.alignment == defender.alignment){ + Buff.prolong( defender, Adrenaline.class, Adrenaline.DURATION); return 0; + } else { + Buff.prolong( defender, Cripple.class, Cripple.DURATION/2); } return super.proc(attacker, defender, damage); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java index ca64b2f41..09f9f2fe7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java @@ -21,7 +21,12 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfCleansing; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -34,10 +39,29 @@ public class CleansingDart extends TippedDart { @Override public int proc(Char attacker, final Char defender, int damage) { - PotionOfCleansing.cleanse(defender, PotionOfCleansing.Cleanse.DURATION*2f); - if (attacker.alignment == defender.alignment){ + PotionOfCleansing.cleanse(defender, PotionOfCleansing.Cleanse.DURATION*2f); return 0; + } else { + for (Buff b : defender.buffs()){ + if (!(b instanceof ChampionEnemy) && b.type == Buff.buffType.POSITIVE){ + b.detach(); + } + } + if (defender instanceof Mob) { + //need to delay this so damage from the dart doesn't break wandering + new FlavourBuff(){ + {actPriority = VFX_PRIO;} + public boolean act() { + if (((Mob) defender).state == ((Mob) defender).HUNTING || ((Mob) defender).state == ((Mob) defender).FLEEING){ + ((Mob) defender).state = ((Mob) defender).WANDERING; + } + ((Mob) defender).beckon(Dungeon.level.randomDestination(defender)); + defender.sprite.showLost(); + return super.act(); + } + }.attachTo(defender); + } } return super.proc(attacker, defender, damage); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java index 487e8ae81..f10bd1b57 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java @@ -21,10 +21,15 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Random; public class HolyDart extends TippedDart { @@ -35,11 +40,18 @@ public class HolyDart extends TippedDart { @Override public int proc(Char attacker, Char defender, int damage) { - Buff.affect(defender, Bless.class, Math.round(3.33f*Bless.DURATION)); - if (attacker.alignment == defender.alignment){ + Buff.affect(defender, Bless.class, Math.round(Bless.DURATION)); return 0; } + + if (Char.hasProp(defender, Char.Property.UNDEAD) || Char.hasProp(defender, Char.Property.DEMONIC)){ + defender.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10+buffedLvl() ); + Sample.INSTANCE.play(Assets.Sounds.BURNING); + defender.damage(Random.NormalIntRange(10 + Dungeon.depth/3, 20 + Dungeon.depth/3), this); + } else { + Buff.affect(defender, Bless.class, Math.round(Bless.DURATION)); + } return super.proc(attacker, defender, damage); }