From 8e4901ac81c2d037ab713935255d155b9088f786 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 7 Apr 2025 13:49:22 -0400 Subject: [PATCH] v3.1.0: added unlock logic for hazard badge (debug only atm) --- .../shatteredpixel/shatteredpixeldungeon/Badges.java | 8 ++++++++ .../shatteredpixeldungeon/Statistics.java | 5 +++++ .../shatteredpixeldungeon/actors/mobs/Mob.java | 6 ++++++ .../shatteredpixeldungeon/levels/CavesBossLevel.java | 7 +++++++ .../shatteredpixeldungeon/levels/features/Chasm.java | 6 +++++- .../levels/traps/BlazingTrap.java | 11 +++++++++-- .../levels/traps/BurningTrap.java | 6 ++++++ .../levels/traps/ChillingTrap.java | 6 ++++++ .../levels/traps/ConfusionTrap.java | 10 ++++++++++ .../levels/traps/CorrosionTrap.java | 10 ++++++++++ .../levels/traps/DisintegrationTrap.java | 5 +++++ .../levels/traps/ExplosiveTrap.java | 11 +++++++++++ .../levels/traps/FlashingTrap.java | 1 + .../shatteredpixeldungeon/levels/traps/FlockTrap.java | 4 ++++ .../shatteredpixeldungeon/levels/traps/FrostTrap.java | 6 ++++++ .../levels/traps/GatewayTrap.java | 2 ++ .../levels/traps/GeyserTrap.java | 9 +++++++++ .../levels/traps/GnollRockfallTrap.java | 5 +++++ .../shatteredpixeldungeon/levels/traps/GrimTrap.java | 5 +++++ .../levels/traps/GrippingTrap.java | 4 ++++ .../shatteredpixeldungeon/levels/traps/OozeTrap.java | 4 ++++ .../levels/traps/PoisonDartTrap.java | 4 ++++ .../levels/traps/RockfallTrap.java | 4 ++++ .../levels/traps/ShockingTrap.java | 6 ++++++ .../shatteredpixeldungeon/levels/traps/StormTrap.java | 6 ++++++ .../levels/traps/TeleportationTrap.java | 2 ++ .../shatteredpixeldungeon/levels/traps/ToxicTrap.java | 10 ++++++++++ .../shatteredpixeldungeon/levels/traps/Trap.java | 6 ++++++ .../levels/traps/WeakeningTrap.java | 4 ++++ .../levels/traps/WornDartTrap.java | 5 +++++ .../shatteredpixeldungeon/plants/Blindweed.java | 2 ++ .../shatteredpixeldungeon/plants/Fadeleaf.java | 3 +++ .../shatteredpixeldungeon/plants/Firebloom.java | 6 ++++++ .../shatteredpixeldungeon/plants/Icecap.java | 6 ++++++ .../shatteredpixeldungeon/plants/Sorrowmoss.java | 5 +++++ .../shatteredpixeldungeon/plants/Stormvine.java | 5 +++++ 36 files changed, 202 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 45ff5f45d..6f4c4525d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -533,6 +533,14 @@ public class Badges { displayBadge( badge ); } + + public static void validateHazardAssists() { + if (!DeviceCompat.isDebug()) return; + if (!local.contains( Badge.PIRANHAS ) && Statistics.hazardAssistedKills >= 10) { + local.add( Badge.ENEMY_HAZARDS ); + displayBadge( Badge.ENEMY_HAZARDS ); + } + } public static void validatePiranhasKilled() { Badge badge = null; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java index a13255cf7..ecd834104 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java @@ -36,6 +36,7 @@ public class Statistics { public static int foodEaten; public static int itemsCrafted; public static int piranhasKilled; + public static int hazardAssistedKills; public static int ankhsUsed; //tracks every item type 'seen' this run (i.e. would be added to catalogs) public static HashSet itemTypesDiscovered = new HashSet<>(); @@ -82,6 +83,7 @@ public class Statistics { foodEaten = 0; itemsCrafted = 0; piranhasKilled = 0; + hazardAssistedKills = 0; ankhsUsed = 0; itemTypesDiscovered.clear(); @@ -123,6 +125,7 @@ public class Statistics { private static final String FOOD = "foodEaten"; private static final String ALCHEMY = "potionsCooked"; private static final String PIRANHAS = "priranhas"; + private static final String HAZARD_ASSISTS = "hazard_assists"; private static final String ANKHS = "ankhsUsed"; private static final String PROG_SCORE = "prog_score"; @@ -164,6 +167,7 @@ public class Statistics { bundle.put( FOOD, foodEaten ); bundle.put( ALCHEMY, itemsCrafted ); bundle.put( PIRANHAS, piranhasKilled ); + bundle.put(HAZARD_ASSISTS, hazardAssistedKills); bundle.put( ANKHS, ankhsUsed ); bundle.put( ITEM_TYPES_DISCOVERED, itemTypesDiscovered.toArray(new Class[0]) ); @@ -209,6 +213,7 @@ public class Statistics { foodEaten = bundle.getInt( FOOD ); itemsCrafted = bundle.getInt( ALCHEMY ); piranhasKilled = bundle.getInt( PIRANHAS ); + hazardAssistedKills = bundle.getInt( HAZARD_ASSISTS ); ankhsUsed = bundle.getInt( ANKHS ); if (bundle.contains( ITEM_TYPES_DISCOVERED )) { 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 0a0825ac3..71d524c39 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 @@ -84,6 +84,7 @@ import com.shatteredpixel.shatteredpixeldungeon.journal.Bestiary; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -875,6 +876,11 @@ public abstract class Mob extends Char { } if (alignment == Alignment.ENEMY){ + if (buff(Trap.HazardAssistTracker.class) != null){ + Statistics.hazardAssistedKills++; + Badges.validateHazardAssists(); + } + rollToDropLoot(); if (cause == Dungeon.hero || cause instanceof Weapon || cause instanceof Weapon.Enchantment){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java index 80185ffb2..9eac1c9c2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DM300; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Pylon; @@ -43,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CavesPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; @@ -841,6 +843,11 @@ public class CavesBossLevel extends Level { Char ch = Actor.findChar(cell); if (ch != null && !(ch instanceof DM300) && !ch.flying) { + if (ch instanceof Mob){ + //incredibly specific but I'll 100% get a bug report in a year if I don't add this + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + } + Sample.INSTANCE.play( Assets.Sounds.LIGHTNING ); ch.damage( Random.NormalIntRange(6, 12), new Electricity()); ch.sprite.flash(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java index 1d5b7e6a2..010f34de2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.WeakFloorRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; @@ -151,7 +152,10 @@ public class Chasm implements Hero.Doom { } public static void mobFall( Mob mob ) { - if (mob.isAlive()) mob.die( Chasm.class ); + if (mob.isAlive()) { + Buff.prolong(mob, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + mob.die( Chasm.class ); + } if (mob.sprite != null) ((MobSprite)mob.sprite).fall(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BlazingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BlazingTrap.java index d599a15c3..cc1a27cf1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BlazingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BlazingTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -45,11 +48,15 @@ public class BlazingTrap extends Trap { PathFinder.buildDistanceMap( pos, BArray.not( Dungeon.level.solid, null ), 2 ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { - if (Dungeon.level.pit[i] || Dungeon.level.water[i]) + if (Dungeon.level.pit[i] || Dungeon.level.water[i]) { GameScene.add(Blob.seed(i, 1, Fire.class)); - else + } else { GameScene.add(Blob.seed(i, 5, Fire.class)); + } CellEmitter.get(i).burst(FlameParticle.FACTORY, 5); + if (Actor.findChar(i) instanceof Mob){ + Buff.prolong(Actor.findChar(i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } Sample.INSTANCE.play(Assets.Sounds.BURNING); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BurningTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BurningTrap.java index 262d1c6b8..cac89551d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BurningTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/BurningTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -45,6 +48,9 @@ public class BurningTrap extends Trap { if (!Dungeon.level.solid[pos + i]) { GameScene.add( Blob.seed( pos+i, 2, Fire.class ) ); CellEmitter.get( pos+i ).burst( FlameParticle.FACTORY, 5 ); + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } Sample.INSTANCE.play(Assets.Sounds.BURNING); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ChillingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ChillingTrap.java index 620071e46..176f2338b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ChillingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ChillingTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.audio.Sample; @@ -47,6 +50,9 @@ public class ChillingTrap extends Trap{ for( int i : PathFinder.NEIGHBOURS9) { if (!Dungeon.level.solid[pos + i]) { GameScene.add(Blob.seed(pos + i, 10, Freezing.class)); + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ConfusionTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ConfusionTrap.java index 5b55a868d..485ced277 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ConfusionTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ConfusionTrap.java @@ -22,10 +22,14 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ConfusionGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.audio.Sample; +import com.watabou.utils.PathFinder; public class ConfusionTrap extends Trap { @@ -40,5 +44,11 @@ public class ConfusionTrap extends Trap { GameScene.add(Blob.seed(pos, 300 + 20 * scalingDepth(), ConfusionGas.class)); Sample.INSTANCE.play(Assets.Sounds.GAS); + for( int i : PathFinder.NEIGHBOURS9) { + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CorrosionTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CorrosionTrap.java index 01fad63af..38bb4ad6d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CorrosionTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CorrosionTrap.java @@ -22,10 +22,14 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.audio.Sample; +import com.watabou.utils.PathFinder; public class CorrosionTrap extends Trap { @@ -42,6 +46,12 @@ public class CorrosionTrap extends Trap { corrosiveGas.setStrength(1+scalingDepth()/4); + for( int i : PathFinder.NEIGHBOURS9) { + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + } + GameScene.add(corrosiveGas); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DisintegrationTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DisintegrationTrap.java index d41974393..60ddeb5bc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DisintegrationTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DisintegrationTrap.java @@ -27,7 +27,9 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Beam; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -77,6 +79,9 @@ public class DisintegrationTrap extends Trap { if (heap != null) heap.explode(); if (target != null) { + if (target instanceof Mob){ + Buff.prolong(target, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[target.pos]) { Sample.INSTANCE.play(Assets.Sounds.RAY); ShatteredPixelDungeon.scene().add(new Beam.DeathRay(DungeonTilemap.tileCenterToWorld(pos), target.sprite.center())); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ExplosiveTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ExplosiveTrap.java index f1c151447..f84477cfa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ExplosiveTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ExplosiveTrap.java @@ -23,7 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; +import com.watabou.utils.PathFinder; public class ExplosiveTrap extends Trap { @@ -34,6 +38,13 @@ public class ExplosiveTrap extends Trap { @Override public void activate() { + + for( int i : PathFinder.NEIGHBOURS9) { + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + } + new Bomb().explode(pos); if (reclaimed && !Dungeon.hero.isAlive()) { Badges.validateDeathFromFriendlyMagic(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlashingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlashingTrap.java index 8af940d16..cb58f8697 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlashingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlashingTrap.java @@ -55,6 +55,7 @@ public class FlashingTrap extends Trap { Buff.prolong( c, Cripple.class, Cripple.DURATION*2f ); if (c instanceof Mob) { + Buff.prolong(c, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); if (((Mob)c).state == ((Mob)c).HUNTING) ((Mob)c).state = ((Mob)c).WANDERING; ((Mob)c).beckon( Dungeon.level.randomDestination( c ) ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlockTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlockTrap.java index bd483d718..0109af685 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlockTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FlockTrap.java @@ -24,6 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Sheep; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; @@ -72,6 +74,8 @@ public class FlockTrap extends Trap { t.activate(); } Dungeon.level.occupyCell(sheep); + } else if (Actor.findChar(i) instanceof Mob){ + Buff.prolong(Actor.findChar(i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); } } Sample.INSTANCE.play(Assets.Sounds.PUFF); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FrostTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FrostTrap.java index 58211441b..d32f74ec1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FrostTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/FrostTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.utils.BArray; @@ -50,6 +53,9 @@ public class FrostTrap extends Trap { for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { GameScene.add(Blob.seed(i, 20, Freezing.class)); + if (Actor.findChar(i) instanceof Mob){ + Buff.prolong(Actor.findChar(i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GatewayTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GatewayTrap.java index 0e1329cf0..7fd412548 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GatewayTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GatewayTrap.java @@ -25,6 +25,7 @@ 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.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; @@ -61,6 +62,7 @@ public class GatewayTrap extends Trap { if (ScrollOfTeleportation.teleportChar(ch)) { if (ch instanceof Mob && ((Mob) ch).state == ((Mob) ch).HUNTING) { ((Mob) ch).state = ((Mob) ch).WANDERING; + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); } telePos = ch.pos; break; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GeyserTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GeyserTrap.java index 3a2b35058..ec32cf17d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GeyserTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GeyserTrap.java @@ -26,7 +26,9 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -74,6 +76,10 @@ public class GeyserTrap extends Trap { Char ch = Actor.findChar(pos + i); if (ch != null){ + if (source == this && ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + //does the equivalent of a bomb's damage against fiery enemies. if (Char.hasProp(ch, Char.Property.FIERY)){ int dmg = Random.NormalIntRange(5 + scalingDepth(), 10 + scalingDepth()*2); @@ -100,6 +106,9 @@ public class GeyserTrap extends Trap { Char ch = Actor.findChar(pos); if (ch != null){ + if (source == this && ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } int targetpos = -1; if (centerKnockBackDirection != -1){ targetpos = centerKnockBackDirection; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GnollRockfallTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GnollRockfallTrap.java index 3a7eb04a3..6d5634b5b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GnollRockfallTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GnollRockfallTrap.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollGeomancer; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollGuard; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; @@ -81,6 +82,10 @@ public class GnollRockfallTrap extends RockfallTrap { Char ch = Actor.findChar( cell ); if (ch != null && ch.isAlive() && !(ch instanceof GnollGeomancer)){ + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + //deals notably less damage than a regular rockfall trap, but ignores armor int damage = Random.NormalIntRange(6, 12); ch.damage( Math.max(damage, 0) , this); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrimTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrimTrap.java index 420c95540..5227f4f1c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrimTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrimTrap.java @@ -26,7 +26,9 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges; 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.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; @@ -85,6 +87,9 @@ public class GrimTrap extends Trap { } if (target != null) { + if (target instanceof Mob){ + Buff.prolong(target, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } final Char finalTarget = target; //instant kill, use a mix of current HP and max HP, just like psi blast (for resistances) int damage = Math.round(finalTarget.HT/2f + finalTarget.HP/2f); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrippingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrippingTrap.java index 4fe014e53..f1d2b770c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrippingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GrippingTrap.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Wound; public class GrippingTrap extends Trap { @@ -44,6 +45,9 @@ public class GrippingTrap extends Trap { Char c = Actor.findChar( pos ); if (c != null && !c.flying) { + if (c instanceof Mob) { + Buff.prolong(c, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } int damage = Math.max( 0, (2 + scalingDepth()/2) - c.drRoll()/2 ); Buff.affect( c, Bleeding.class ).set( damage ); Buff.prolong( c, Cripple.class, Cripple.DURATION); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/OozeTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/OozeTrap.java index 59c4ea733..da9d7f1c3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/OozeTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/OozeTrap.java @@ -26,6 +26,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.Ooze; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.watabou.utils.PathFinder; @@ -45,6 +46,9 @@ public class OozeTrap extends Trap { Char ch = Actor.findChar( pos + i ); if (ch != null && !ch.flying){ Buff.affect(ch, Ooze.class).set( Ooze.DURATION ); + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PoisonDartTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PoisonDartTrap.java index 071fecb55..60ba80cca 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PoisonDartTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PoisonDartTrap.java @@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.PoisonDart; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -100,6 +101,9 @@ public class PoisonDartTrap extends Trap { } if (target != null) { + if (target instanceof Mob){ + Buff.prolong(target, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } final Char finalTarget = target; if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[target.pos]) { ((MissileSprite) ShatteredPixelDungeon.scene().recycle(MissileSprite.class)). diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/RockfallTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/RockfallTrap.java index 9612d95d5..9bb27b390 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/RockfallTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/RockfallTrap.java @@ -28,6 +28,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.Paralysis; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; @@ -95,6 +96,9 @@ public class RockfallTrap extends Trap { Char ch = Actor.findChar( cell ); if (ch != null && ch.isAlive()){ + if (ch instanceof Mob) { + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } int damage = Random.NormalIntRange(5+scalingDepth(), 10+scalingDepth()*2); damage -= ch.drRoll(); ch.damage( Math.max(damage, 0) , this); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ShockingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ShockingTrap.java index d7cba44fd..e4569632f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ShockingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ShockingTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.audio.Sample; import com.watabou.utils.PathFinder; @@ -47,6 +50,9 @@ public class ShockingTrap extends Trap { if (!Dungeon.level.solid[pos + i]) { GameScene.add(Blob.seed(pos + i, 10, Electricity.class)); } + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/StormTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/StormTrap.java index 05130a2b4..afdf7fcbe 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/StormTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/StormTrap.java @@ -23,8 +23,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.utils.BArray; import com.watabou.noosa.audio.Sample; @@ -48,6 +51,9 @@ public class StormTrap extends Trap { for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { GameScene.add(Blob.seed(i, 20, Electricity.class)); + if (Actor.findChar(i) instanceof Mob){ + Buff.prolong(Actor.findChar(i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/TeleportationTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/TeleportationTrap.java index b93a8c859..1c3dd3394 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/TeleportationTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/TeleportationTrap.java @@ -25,6 +25,7 @@ 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.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; @@ -51,6 +52,7 @@ public class TeleportationTrap extends Trap { if (ScrollOfTeleportation.teleportChar(ch)) { if (ch instanceof Mob && ((Mob) ch).state == ((Mob) ch).HUNTING) { ((Mob) ch).state = ((Mob) ch).WANDERING; + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ToxicTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ToxicTrap.java index fefed520d..51536c9b2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ToxicTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/ToxicTrap.java @@ -22,10 +22,14 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.audio.Sample; +import com.watabou.utils.PathFinder; public class ToxicTrap extends Trap{ @@ -40,5 +44,11 @@ public class ToxicTrap extends Trap{ GameScene.add( Blob.seed( pos, 300 + 20 * scalingDepth(), ToxicGas.class ) ); Sample.INSTANCE.play(Assets.Sounds.GAS); + for( int i : PathFinder.NEIGHBOURS9) { + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/Trap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/Trap.java index 57a3c4e13..dc680b197 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/Trap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/Trap.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.traps; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; import com.shatteredpixel.shatteredpixeldungeon.journal.Bestiary; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -142,4 +143,9 @@ public abstract class Trap implements Bundlable { bundle.put( VISIBLE, visible ); bundle.put( ACTIVE, active ); } + + //this buff is used to keep track of hazards recently affecting a character + public static class HazardAssistTracker extends FlavourBuff{ + public static final float DURATION = 50f; + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WeakeningTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WeakeningTrap.java index 7d8ddf1d6..267959365 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WeakeningTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WeakeningTrap.java @@ -26,6 +26,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.Weakness; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; @@ -49,6 +50,9 @@ public class WeakeningTrap extends Trap{ Buff.prolong( ch, Weakness.class, Weakness.DURATION/2f ); } Buff.prolong( ch, Weakness.class, Weakness.DURATION*3f ); + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WornDartTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WornDartTrap.java index 3ae6fc6ef..2a22f7642 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WornDartTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/WornDartTrap.java @@ -27,7 +27,9 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -85,6 +87,9 @@ public class WornDartTrap extends Trap { } if (target != null) { + if (target instanceof Mob){ + Buff.prolong(target, Trap.HazardAssistTracker.class, HazardAssistTracker.DURATION); + } final Char finalTarget = target; if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[target.pos]) { ((MissileSprite) ShatteredPixelDungeon.scene().recycle(MissileSprite.class)). diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Blindweed.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Blindweed.java index 3855260ed..cfa0caa35 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Blindweed.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Blindweed.java @@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class Blindweed extends Plant { @@ -51,6 +52,7 @@ public class Blindweed extends Plant { Buff.prolong(ch, Blindness.class, Blindness.DURATION); Buff.prolong(ch, Cripple.class, Cripple.DURATION); if (ch instanceof Mob) { + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); if (((Mob) ch).state == ((Mob) ch).HUNTING) ((Mob) ch).state = ((Mob) ch).WANDERING; ((Mob) ch).beckon(Dungeon.level.randomDestination( ch )); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Fadeleaf.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Fadeleaf.java index b96430c52..d17891dfd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Fadeleaf.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Fadeleaf.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.plants; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; @@ -30,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.Game; @@ -63,6 +65,7 @@ public class Fadeleaf extends Plant { } else if (ch instanceof Mob && !ch.properties().contains(Char.Property.IMMOVABLE)) { + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); ScrollOfTeleportation.teleportChar(ch, Fadeleaf.class); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Firebloom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Firebloom.java index a9d4bb857..23efb1994 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Firebloom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Firebloom.java @@ -29,8 +29,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -47,6 +49,10 @@ public class Firebloom extends Plant { if (ch instanceof Hero && ((Hero) ch).subClass == HeroSubClass.WARDEN){ Buff.affect(ch, FireImbue.class).set( FireImbue.DURATION*0.3f ); } + + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + } GameScene.add( Blob.seed( pos, 2, Fire.class ) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Icecap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Icecap.java index b3eeefe45..90aa07ca8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Icecap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Icecap.java @@ -22,12 +22,15 @@ package com.shatteredpixel.shatteredpixeldungeon.plants; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.PathFinder; @@ -48,6 +51,9 @@ public class Icecap extends Plant { for (int i : PathFinder.NEIGHBOURS9){ if (!Dungeon.level.solid[pos+i]) { Freezing.affect( pos+i ); + if (Actor.findChar(pos+i) instanceof Mob){ + Buff.prolong(Actor.findChar(pos+i), Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + } } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Sorrowmoss.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Sorrowmoss.java index cd36f1427..d50fb2f62 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Sorrowmoss.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Sorrowmoss.java @@ -28,8 +28,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ToxicImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class Sorrowmoss extends Plant { @@ -46,6 +48,9 @@ public class Sorrowmoss extends Plant { } if (ch != null) { + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + } Buff.affect( ch, Poison.class ).set( 5 + Math.round(2*Dungeon.scalingDepth() / 3f) ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Stormvine.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Stormvine.java index 78c8e7f1c..388464437 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Stormvine.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/plants/Stormvine.java @@ -27,6 +27,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Levitation; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class Stormvine extends Plant { @@ -43,6 +45,9 @@ public class Stormvine extends Plant { if (ch instanceof Hero && ((Hero) ch).subClass == HeroSubClass.WARDEN){ Buff.affect(ch, Levitation.class, Levitation.DURATION/2f); } else { + if (ch instanceof Mob){ + Buff.prolong(ch, Trap.HazardAssistTracker.class, Trap.HazardAssistTracker.DURATION); + } Buff.affect(ch, Vertigo.class, Vertigo.DURATION); } }