From 5b1e2bc3a956776566547246dff61c6394fc9dbe Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 23 Sep 2021 20:03:19 -0400 Subject: [PATCH] v1.1.0: reworked scroll of petrification, now scroll of dread --- .../assets/messages/actors/actors.properties | 3 + .../assets/messages/items/items.properties | 8 +- core/src/main/assets/sprites/item_icons.png | Bin 1575 -> 1576 bytes .../ShatteredPixelDungeon.java | 4 + .../shatteredpixeldungeon/actors/Char.java | 13 ++- .../actors/buffs/Dread.java | 106 ++++++++++++++++++ .../hero/abilities/rogue/SmokeBomb.java | 2 + .../actors/mobs/CrystalMimic.java | 5 +- .../actors/mobs/DemonSpawner.java | 2 + .../actors/mobs/Mob.java | 16 ++- .../actors/mobs/Pylon.java | 2 + .../actors/mobs/RotHeart.java | 2 + .../actors/mobs/Spinner.java | 5 +- .../actors/mobs/Tengu.java | 2 + .../actors/mobs/Thief.java | 5 +- .../actors/mobs/YogDzewa.java | 2 + .../items/scrolls/exotic/ExoticScroll.java | 7 +- ...fPetrification.java => ScrollOfDread.java} | 15 ++- .../items/wands/WandOfCorruption.java | 4 +- .../sprites/ItemSpriteSheet.java | 4 +- 20 files changed, 181 insertions(+), 26 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Dread.java rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/{ScrollOfPetrification.java => ScrollOfDread.java} (79%) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index eb7d9efaf..78cbcffac 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -146,6 +146,9 @@ actors.buffs.degrade.desc=Powerful dark magic is sapping the strength that scrol actors.buffs.doom.name=Doomed actors.buffs.doom.desc=It's hard to keep going when it seems like the universe wants you dead.\n\nDoomed characters will receive double damage from all sources.\n\nDoom is permanent, its effects only end in death. +actors.buffs.dread.name=Dread +actors.buffs.dread.desc=A terror so great that it will cause its target to flee the dungeon entirely!\n\nCreatures affected by dread will run from their opponent at high speed, and will disappear from the dungeon entirely once they are out of sight. Enemies that are disposed of this way will not award any items or experience. The shock of pain will lessen the duration of dread.\n\nTurns of dread remaining: %d. + actors.buffs.drowsy.name=Drowsy actors.buffs.drowsy.desc=A magical force is making it difficult to stay awake.\n\nThe hero can resist drowsiness by taking damage or by being at full health.\n\nAfter a few turns, the target will fall into a deep magical sleep. diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 79da8aca7..2859d0ef8 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -934,7 +934,7 @@ items.scrolls.scrollofterror.name=scroll of terror items.scrolls.scrollofterror.none=The scroll emits a brilliant flash of red light. items.scrolls.scrollofterror.one=The scroll emits a brilliant flash of red light and the %s flees! items.scrolls.scrollofterror.many=The scroll emits a brilliant flash of red light and the monsters flee! -items.scrolls.scrollofterror.desc=A flash of red light will overwhelm all creatures in your field of view with terror, and they will turn and flee. Attacking a fleeing enemy will shorten the effect. +items.scrolls.scrollofterror.desc=When read, this scroll will emit a flash of red light that will overwhelm all enemies in your field of view with terror, and they will turn and flee. Attacking a fleeing enemy will shorten the effect. items.scrolls.scrolloftransmutation.name=scroll of transmutation items.scrolls.scrolloftransmutation.inv_title=Transmute an item @@ -979,6 +979,9 @@ items.scrolls.exotic.scrollofdivination.nothing_left=There is nothing left to id items.scrolls.exotic.scrollofdivination.desc=This scroll will permanently identify four random item types. The types identified can be a potion's color, a scroll's rune, or a ring's gem. The items identified won't necessarily be ones you're carrying. items.scrolls.exotic.scrollofdivination$wnddivination.desc=Your scroll of divination has identified the following items: +items.scrolls.exotic.scrollofdread.name=scroll of dread +items.scrolls.exotic.scrollofdread.desc=When read, this scroll will emit a flash of red light that will instill incredible terror in all enemies in your field of view. So great is this effect that they will rapidly try to flee from the entire dungeon, never to be seen again!\n\nJust like with terror, this effect can expire with time, or if the enemy is attacked.\n\nStrong-willed enemies, such as bosses, will be inflicted with regular terror instead. + items.scrolls.exotic.scrollofenchantment.name=scroll of enchantment items.scrolls.exotic.scrollofenchantment.inv_title=Enchant an item items.scrolls.exotic.scrollofenchantment.weapon=Select an enchantment to apply to your weapon. @@ -996,9 +999,6 @@ items.scrolls.exotic.scrollofmysticalenergy.desc=The raw magical power bound up items.scrolls.exotic.scrollofpassage.name=scroll of passage items.scrolls.exotic.scrollofpassage.desc=The spell on this parchment instantly transports the reader to the nearest region entrance above them. Very handy for quickly getting to a shop. -items.scrolls.exotic.scrollofpetrification.name=scroll of petrification -items.scrolls.exotic.scrollofpetrification.desc=A flash of red light will overwhelm all creatures in your field of view with such great terror that they will be frozen on the spot. - items.scrolls.exotic.scrollofpolymorph.name=scroll of polymorph items.scrolls.exotic.scrollofpolymorph.desc=This scroll contains powerful transmutation magic. When invoked, all enemies in the reader's sight will be transformed into magical sheep!\n\nThe transformation is permanent, eliminating all enemies affected. Powerful enemies will resist the effect though, and any items affected enemies were carrying are lost. diff --git a/core/src/main/assets/sprites/item_icons.png b/core/src/main/assets/sprites/item_icons.png index 32513caa4264ddaea308ce3eb05e9293bdb2ef6c..337642ab2747c18e249aab483cd5cc9458b0fc60 100644 GIT binary patch delta 1255 zcmVbktKGKp+W=y+hvjCNC*YtwlDwy092DR0V8V@*xtoDhtZ?X~qwn`%FsOg!htvibIW#AGw>cS~&<+C`HAUbF^mX@peb*NV&cXnb zk(kh!R*RMn#v&5XAJdVNCqUoI`KdphPLV#qO!_lm;`-lD;7EKum6B5E(o+Pu1<5m) zzB`y9Cer`@3=S%vpo`QfbA2OJF0{rJc|M`Ep)5cvD@ts`~4muXFrz*k#%MA6*8b^YlWI3 z2keFJofXo~>L&UE+yg8*><@ObLR}k>cJ+&atu-k@l5n<)n|z+Lbu;~oiwl^|W{ACb zoq!^!)_Maj-2g&oq9lL)+Rn50ARr5xUlu&=1z=~w zJ3Inv2Q)X}#0i&v(uA zCzA=x@E!}^HGu2a37`m4ft*W@EgD`dfam8I8ej$pUL|mZFo5)921p))$>#!)vKx37 zUokNAjv25D!T^6rKS(|X6f05WLkR%zy6=Uc41=eL6_{ zz9f(uFsiC*#CWmz$6&c!nn2`-LCUYdY_(dMU+dHQPi)WUvn@2>T9&0Nx3+EF z+#~;vk3dw={}002ovPDHLkV1jr?S@-|| delta 1256 zcmVektKEp|J!B%+hviPLXqG|2)L$z>$|A3Qm0T+MTgn{+|00e(YL_t(|0qmBAZZk^^g}<~rp=tgJ z<0fT>_kX-=kgU}$ZB@aAe2zWkb8_OSgV4b^k%ChLr9wzn&^3D4aQXxTDgziQ{Dj=e z2xp9>IsNko%t5X)kct!zJsUkg`~5!7U_clcI-Jn< z!5B9TOiX`5YdRe|Iv6R00gF>cN}d2cDJS%&)2Znr%qn4qJDBi`1dRAPsg#sL7rGh& zZo%Z|V~m;Un}Z3z*a4i_0aECjuFf!E`g5Gw4ChDs@7@IsD!!yY^#u6$bL7a8BMXE| zz*tJbYPGUHH89p2gssBPfs}s=N?q3|`~4mvXB(~b7wVwWhjL)gAq>QS$IV*g*Ji+a zCxvw}2YW@&TFSJub{l;K#SAPt><=PBYoir&yQsFGsIP-bV((UvwE-qj; zo1yHL_X$V@l7YSem$(5%XQCwiwc4}yARsHWK@1?wu4pE(vWgwh1+ae*E-x?5#179O z6$(Nv!ZjWNhU&LA5X26=W9@68sEODC5=Jd$XZACnOSLm_;R!(VUGNSKpux`JJvD|c zA^#4BD3x{GjBEpifdR-4qFi6=18#0_Z*MSC!LH9JclY=Acff-}8~heudBxo@42;L> zg7xF$eI+7@+wn@_a|5EE#Q_PD8Awuq zJb&v4k$-u8Xs17!OkjrhNa0fhxPBy{5u~CClx70FNdT{}Z?r%R5WG*ofG~jSH+CR- z2qK?LV+Y<|mG%aR1Y!rIf~EmXKS;g?6saa}3T=>AfF>tW?+ky$yWkxqfpg@@k-yrp zcilwtAPVC@sgsrZ8QSTFnEQY+cgDc<*oGb6|5dgaxzsjMrDJh#ap z`@R&&1oYyUd-Nxh4}s7atGs-n<_5Wsxi>CETN4P*jWfdxbY z@v-Bmg*#dU_{0qFqplEr5#PK%*vEPF*Sh8oy z;&3=Da6GPn&Bg|0`3uzbZ!`k0-n>%0zrPnP_XmwYm2ba{VRATxLf>k&3Io=gbr`Tc zoyskC=W~C((+IqHeS7uNUZ4}q$-M! z`59dBb_GSt00;q1-=8;-35Wpcm4-qpRdTz StIO;F0000( Arrays.asList(Grim.class, GrimTrap.class, ScrollOfRetribution.class, ScrollOfPsionicBlast.class)), - new HashSet( Arrays.asList(Corruption.class) )), + new HashSet( Arrays.asList(Corruption.class, Dread.class) )), MINIBOSS ( new HashSet(), - new HashSet( Arrays.asList(Corruption.class) )), + new HashSet( Arrays.asList(Corruption.class, Dread.class) )), UNDEAD, DEMONIC, INORGANIC ( new HashSet(), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Dread.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Dread.java new file mode 100644 index 000000000..2d2cb101d --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Dread.java @@ -0,0 +1,106 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class Dread extends Buff { + + protected int left = (int)DURATION; + public int object = 0; + + public static final float DURATION = 20f; + + { + type = buffType.NEGATIVE; + announced = true; + } + + //dread overrides terror + @Override + public boolean attachTo(Char target) { + if (super.attachTo(target)){ + Buff.detach( target, Terror.class ); + return true; + } else { + return false; + } + } + + { + immunities.add(Terror.class); + } + + @Override + public boolean act() { + + if (!Dungeon.level.heroFOV[target.pos] + && Dungeon.level.distance(target.pos, Dungeon.hero.pos) >= 6) { + Actor.remove( target ); + target.sprite.killAndErase(); + Dungeon.level.mobs.remove(target); + } else { + left--; + if (left <= 0){ + detach(); + } + } + + spend(TICK); + return true; + } + + private static final String LEFT = "left"; + private static final String OBJECT = "object"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle(bundle); + bundle.put(LEFT, left); + bundle.put(OBJECT, object); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + object = bundle.getInt( OBJECT ); + left = bundle.getInt( LEFT ); + } + + @Override + public int icon() { + return BuffIndicator.TERROR; + } + + @Override + public float iconFadePercent() { + return Math.max(0, (DURATION - left) / DURATION); + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(1, 0, 0); + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", left); + } + + public void recover() { + left -= 5; + if (left <= 0){ + detach(); + } + } + +} 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 2e073a969..9d9052525 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 @@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; @@ -164,6 +165,7 @@ public class SmokeBomb extends ArmorAbility { } { + immunities.add( Dread.class ); immunities.add( Terror.class ); immunities.add( Amok.class ); immunities.add( Charm.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java index 1ee262161..9999b5b69 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java @@ -27,6 +27,7 @@ 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.Corruption; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -184,7 +185,9 @@ public class CrystalMimic extends Mimic { private class Fleeing extends Mob.Fleeing{ @Override protected void nowhereToRun() { - if (buff( Terror.class ) == null && buff( Corruption.class ) == null) { + if (buff( Terror.class ) == null + && buff( Corruption.class ) == null + && buff( Dread.class ) == null) { if (enemySeen) { sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Mob.class, "rage")); state = HUNTING; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DemonSpawner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DemonSpawner.java index 1ca0f4e9c..33710d20a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DemonSpawner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DemonSpawner.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; @@ -162,6 +163,7 @@ public class DemonSpawner extends Mob { immunities.add( Paralysis.class ); immunities.add( Amok.class ); immunities.add( Sleep.class ); + immunities.add( Dread.class ); immunities.add( Terror.class ); immunities.add( Vertigo.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index ff9465626..c2f2840bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -34,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Preparation; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; @@ -188,7 +189,7 @@ public abstract class Mob extends Char { return true; } - if (buff(Terror.class) != null){ + if (buff(Terror.class) != null || buff(Dread.class) != null ){ state = FLEEING; } @@ -204,6 +205,14 @@ public abstract class Mob extends Char { protected Char chooseEnemy() { + Dread dread = buff( Dread.class ); + if (dread != null) { + Char source = (Char)Actor.findById( dread.object ); + if (source != null) { + return source; + } + } + Terror terror = buff( Terror.class ); if (terror != null) { Char source = (Char)Actor.findById( terror.object ); @@ -340,7 +349,7 @@ public abstract class Mob extends Char { super.add( buff ); if (buff instanceof Amok || buff instanceof Corruption) { state = HUNTING; - } else if (buff instanceof Terror) { + } else if (buff instanceof Terror || buff instanceof Dread) { state = FLEEING; } else if (buff instanceof Sleep) { state = SLEEPING; @@ -351,7 +360,8 @@ public abstract class Mob extends Char { @Override public void remove( Buff buff ) { super.remove( buff ); - if (buff instanceof Terror) { + if ((buff instanceof Terror && buff(Dread.class) == null) + || (buff instanceof Dread && buff(Terror.class) == null)) { if (enemySeen) { sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "rage")); state = HUNTING; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Pylon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Pylon.java index 74c1aee4b..3e1d8f437 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Pylon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Pylon.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; @@ -212,6 +213,7 @@ public class Pylon extends Mob { immunities.add( Amok.class ); immunities.add( Sleep.class ); immunities.add( Terror.class ); + immunities.add( Dread.class ); immunities.add( Vertigo.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RotHeart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RotHeart.java index 8c60a53dd..0871bc96a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RotHeart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RotHeart.java @@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; @@ -128,6 +129,7 @@ public class RotHeart extends Mob { immunities.add( Sleep.class ); immunities.add( ToxicGas.class ); immunities.add( Terror.class ); + immunities.add( Dread.class ); immunities.add( Vertigo.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java index 5892786e2..19dc42260 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Web; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; @@ -107,7 +108,7 @@ public class Spinner extends Mob { } } - if (state == FLEEING && buff( Terror.class ) == null && + if (state == FLEEING && buff( Terror.class ) == null && buff( Dread.class ) == null && enemy != null && enemySeen && enemy.buff( Poison.class ) == null) { state = HUNTING; } @@ -228,7 +229,7 @@ public class Spinner extends Mob { private class Fleeing extends Mob.Fleeing { @Override protected void nowhereToRun() { - if (buff(Terror.class) == null) { + if (buff(Terror.class) == null && buff(Dread.class) == null) { state = HUNTING; } else { super.nowhereToRun(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Tengu.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Tengu.java index 1444e50c5..a681946d0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Tengu.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Tengu.java @@ -34,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -333,6 +334,7 @@ public class Tengu extends Mob { { immunities.add( Blindness.class ); + immunities.add( Dread.class ); immunities.add( Terror.class ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java index 9356f6263..b2aaa196b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; @@ -196,7 +197,9 @@ public class Thief extends Mob { private class Fleeing extends Mob.Fleeing { @Override protected void nowhereToRun() { - if (buff( Terror.class ) == null && buff( Corruption.class ) == null) { + if (buff( Terror.class ) == null + && buff( Dread.class ) == null + && buff( Corruption.class ) == null) { if (enemySeen) { sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Mob.class, "rage")); state = HUNTING; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java index c89b437a5..ade7d9080 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/YogDzewa.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; @@ -494,6 +495,7 @@ public class YogDzewa extends Mob { } { + immunities.add( Dread.class ); immunities.add( Terror.class ); immunities.add( Amok.class ); immunities.add( Charm.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ExoticScroll.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ExoticScroll.java index a73918f0c..7a016e7f5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ExoticScroll.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ExoticScroll.java @@ -54,9 +54,6 @@ public abstract class ExoticScroll extends Scroll { regToExo.put(ScrollOfUpgrade.class, ScrollOfEnchantment.class); exoToReg.put(ScrollOfEnchantment.class, ScrollOfUpgrade.class); - regToExo.put(ScrollOfTerror.class, ScrollOfPetrification.class); - exoToReg.put(ScrollOfPetrification.class, ScrollOfTerror.class); - regToExo.put(ScrollOfRemoveCurse.class, ScrollOfAntiMagic.class); exoToReg.put(ScrollOfAntiMagic.class, ScrollOfRemoveCurse.class); @@ -66,8 +63,8 @@ public abstract class ExoticScroll extends Scroll { regToExo.put(ScrollOfRage.class, ScrollOfConfusion.class); exoToReg.put(ScrollOfConfusion.class, ScrollOfRage.class); - regToExo.put(ScrollOfTerror.class, ScrollOfPetrification.class); - exoToReg.put(ScrollOfPetrification.class, ScrollOfTerror.class); + regToExo.put(ScrollOfTerror.class, ScrollOfDread.class); + exoToReg.put(ScrollOfDread.class, ScrollOfTerror.class); regToExo.put(ScrollOfRecharging.class, ScrollOfMysticalEnergy.class); exoToReg.put(ScrollOfMysticalEnergy.class, ScrollOfRecharging.class); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfPetrification.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfDread.java similarity index 79% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfPetrification.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfDread.java index ea696a9c4..aa87a81dc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfPetrification.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/exotic/ScrollOfDread.java @@ -25,26 +25,31 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Flare; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.audio.Sample; -public class ScrollOfPetrification extends ExoticScroll { +public class ScrollOfDread extends ExoticScroll { { - icon = ItemSpriteSheet.Icons.SCROLL_PETRIF; + icon = ItemSpriteSheet.Icons.SCROLL_DREAD; } @Override public void doRead() { new Flare( 5, 32 ).color( 0xFF0000, true ).show( curUser.sprite, 2f ); Sample.INSTANCE.play( Assets.Sounds.READ ); - + for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { if (mob.alignment != Char.Alignment.ALLY && Dungeon.level.heroFOV[mob.pos]) { - Buff.affect( mob, Paralysis.class, Paralysis.DURATION ); + if (!mob.isImmune(Dread.class)){ + Buff.affect( mob, Dread.class ).object = curUser.id(); + } else { + Buff.affect( mob, Terror.class, Terror.DURATION ).object = curUser.id(); + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfCorruption.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfCorruption.java index 393d9ac23..6607e496f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfCorruption.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfCorruption.java @@ -38,6 +38,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corrosion; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost; @@ -110,7 +111,8 @@ public class WandOfCorruption extends Wand { MAJOR_DEBUFFS.put(Slow.class, 2f); MAJOR_DEBUFFS.put(Hex.class, 2f); MAJOR_DEBUFFS.put(Paralysis.class, 1f); - + + MAJOR_DEBUFFS.put(Dread.class, 0f); MAJOR_DEBUFFS.put(Charm.class, 0f); MAJOR_DEBUFFS.put(MagicalSleep.class, 0f); MAJOR_DEBUFFS.put(SoulMark.class, 0f); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 880b27c3c..2308ab993 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -778,7 +778,7 @@ public class ItemSpriteSheet { public static final int SCROLL_FORESIGHT= EXOTIC_SCROLLS+7; public static final int SCROLL_CONFUSION= EXOTIC_SCROLLS+8; public static final int SCROLL_PSIBLAST = EXOTIC_SCROLLS+9; - public static final int SCROLL_PETRIF = EXOTIC_SCROLLS+10; + public static final int SCROLL_DREAD = EXOTIC_SCROLLS+10; public static final int SCROLL_POLYMORPH= EXOTIC_SCROLLS+11; static { assignIconRect( SCROLL_ENCHANT, 7, 7 ); @@ -791,7 +791,7 @@ public class ItemSpriteSheet { assignIconRect( SCROLL_FORESIGHT, 7, 5 ); assignIconRect( SCROLL_CONFUSION, 7, 7 ); assignIconRect( SCROLL_PSIBLAST, 5, 6 ); - assignIconRect( SCROLL_PETRIF, 7, 5 ); + assignIconRect( SCROLL_DREAD, 5, 7 ); assignIconRect( SCROLL_POLYMORPH, 7, 6 ); }