From 21f52e19286f5e12188f61f3fc3dd320b7cc5dac Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 4 May 2019 18:40:02 -0400 Subject: [PATCH] v0.7.3: various trap adjustments in prep for new reclaim trap: - disintegration trap no longer does % health damage - flock trap duration no longer scales with depth - bosses now resist grim traps, Yog is immune - pitfall traps do not work on boss floors - reduced poison dart trap scaling with depth - rockfall traps are a static 5x5 AOE if they aren't on the ground - summoning traps now work on boss floors - note that the curse of multiplicity also now works on boss floors - bosses resist weakening traps --- .../shatteredpixeldungeon/actors/Char.java | 3 ++- .../actors/mobs/Bestiary.java | 12 +++++----- .../actors/mobs/Yog.java | 3 ++- .../levels/CavesBossLevel.java | 5 ----- .../levels/CityBossLevel.java | 5 ----- .../levels/HallsBossLevel.java | 5 ----- .../shatteredpixeldungeon/levels/Level.java | 22 ++++++++++++++++++- .../levels/PrisonBossLevel.java | 5 ----- .../levels/RegularLevel.java | 22 ------------------- .../levels/SewerBossLevel.java | 5 ----- .../levels/traps/CursingTrap.java | 4 ++-- .../levels/traps/DisintegrationTrap.java | 2 +- .../levels/traps/FlockTrap.java | 2 +- .../levels/traps/PitfallTrap.java | 8 +++++++ .../levels/traps/PoisonDartTrap.java | 2 +- .../levels/traps/RockfallTrap.java | 5 ++++- .../levels/traps/SummoningTrap.java | 4 ---- .../levels/traps/WeakeningTrap.java | 6 ++++- .../messages/levels/levels.properties | 7 +++--- 19 files changed, 57 insertions(+), 70 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java index f6fb4defb..b95ec6139 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -73,6 +73,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Shoc import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Door; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GrimTrap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -595,7 +596,7 @@ public abstract class Char extends Actor { } public enum Property{ - BOSS ( new HashSet( Arrays.asList(Grim.class, ScrollOfRetribution.class, ScrollOfPsionicBlast.class)), + BOSS ( new HashSet( Arrays.asList(Grim.class, GrimTrap.class, ScrollOfRetribution.class, ScrollOfPsionicBlast.class)), new HashSet( Arrays.asList(Corruption.class, StoneOfAggression.Aggression.class) )), MINIBOSS ( new HashSet(), new HashSet( Arrays.asList(Corruption.class) )), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index 1f3c2dba9..d768a6d15 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -55,7 +55,7 @@ public class Bestiary { return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, Gnoll.class, Gnoll.class, Gnoll.class, Gnoll.class, Crab.class, Swarm.class)); - case 4: + case 4: case 5: //1x rat, 2x gnoll, 3x crab, 1x swarm return new ArrayList<>(Arrays.asList(Rat.class, Gnoll.class, Gnoll.class, @@ -80,7 +80,7 @@ public class Bestiary { Thief.class, Shaman.class, Shaman.class, Guard.class, Guard.class)); - case 9: + case 9: case 10: //3x skeleton, 1x thief, 2x shaman, 3x guard return new ArrayList<>(Arrays.asList(Skeleton.class, Skeleton.class, Skeleton.class, Thief.class, @@ -106,7 +106,7 @@ public class Bestiary { Brute.class, Brute.class, Brute.class, Shaman.class, Spinner.class)); - case 14: + case 14: case 15: //1x bat, 3x brute, 1x shaman, 4x spinner return new ArrayList<>(Arrays.asList( Bat.class, @@ -134,7 +134,7 @@ public class Bestiary { Warlock.class, Monk.class, Monk.class, Golem.class)); - case 19: + case 19: case 20: //1x elemental, 1x warlock, 2x monk, 3x golem return new ArrayList<>(Arrays.asList( Elemental.class, @@ -143,7 +143,7 @@ public class Bestiary { Golem.class, Golem.class, Golem.class)); // Halls - case 22: + case 21: case 22: //3x succubus, 3x evil eye return new ArrayList<>(Arrays.asList( Succubus.class, Succubus.class, Succubus.class, @@ -154,7 +154,7 @@ public class Bestiary { Succubus.class, Succubus.class, Eye.class, Eye.class, Eye.class, Eye.class, Scorpio.class, Scorpio.class)); - case 24: + case 24: case 25: case 26: //1x succubus, 2x evil eye, 3x scorpio return new ArrayList<>(Arrays.asList( Succubus.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Yog.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Yog.java index 5909114ad..43e70e75a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Yog.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Yog.java @@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetribution; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GrimTrap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -180,8 +181,8 @@ public class Yog extends Mob { } { - immunities.add( Grim.class ); + immunities.add( GrimTrap.class ); immunities.add( Terror.class ); immunities.add( Amok.class ); immunities.add( Charm.class ); 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 e348a6ebd..ce972fe6d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java @@ -181,11 +181,6 @@ public class CavesBossLevel extends Level { return true; } - @Override - public Mob createMob() { - return null; - } - @Override protected void createMobs() { } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java index 8c4a86730..414081d62 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java @@ -150,11 +150,6 @@ public class CityBossLevel extends Level { } } - @Override - public Mob createMob() { - return null; - } - @Override protected void createMobs() { } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java index 2225cf7fb..6474e7221 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java @@ -142,11 +142,6 @@ public class HallsBossLevel extends Level { return true; } - @Override - public Mob createMob() { - return null; - } - @Override protected void createMobs() { } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index ea2fa23cc..7db9a76a0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -41,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Shadows; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bestiary; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlowParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.WindParticle; @@ -375,6 +376,12 @@ public abstract class Level implements Bundlable { if (feeling == Feeling.DARK) viewDistance = Math.round(viewDistance/2f); + if (bundle.contains( "mobs_to_spawn" )) { + for (Class mob : bundle.getClassArray("mobs_to_spawn")) { + if (mob != null) mobsToSpawn.add(mob); + } + } + buildFlagMaps(); cleanWalls(); } @@ -398,6 +405,7 @@ public abstract class Level implements Bundlable { bundle.put( MOBS, mobs ); bundle.put( BLOBS, blobs.values() ); bundle.put( FEELING, feeling ); + bundle.put( "mobs_to_spawn", mobsToSpawn.toArray(new Class[0])); } public int tunnelTile() { @@ -426,7 +434,19 @@ public abstract class Level implements Bundlable { abstract protected boolean build(); - abstract public Mob createMob(); + private ArrayList> mobsToSpawn = new ArrayList<>(); + + public Mob createMob() { + if (mobsToSpawn == null || mobsToSpawn.isEmpty()) + mobsToSpawn = Bestiary.getMobRotation(Dungeon.depth); + + try { + return mobsToSpawn.remove(0).newInstance(); + } catch (Exception e) { + ShatteredPixelDungeon.reportException(e); + return null; + } + } abstract protected void createMobs(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java index 78b5cd0a4..ddb99d08c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java @@ -141,11 +141,6 @@ public class PrisonBossLevel extends Level { return true; } - @Override - public Mob createMob() { - return null; - } - @Override protected void createMobs() { tengu = new Tengu(); //We want to keep track of tengu independently of other mobs, he's not always in the level. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 51a59e736..f1166d71f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -180,21 +180,6 @@ public abstract class RegularLevel extends Level { } } - private ArrayList> mobsToSpawn = new ArrayList<>(); - - @Override - public Mob createMob() { - if (mobsToSpawn == null || mobsToSpawn.isEmpty()) - mobsToSpawn = Bestiary.getMobRotation(Dungeon.depth); - - try { - return mobsToSpawn.remove(0).newInstance(); - } catch (Exception e) { - ShatteredPixelDungeon.reportException(e); - return null; - } - } - @Override protected void createMobs() { //on floor 1, 10 rats are created so the player can get level 2. @@ -479,7 +464,6 @@ public abstract class RegularLevel extends Level { public void storeInBundle( Bundle bundle ) { super.storeInBundle( bundle ); bundle.put( "rooms", rooms ); - bundle.put( "mobs_to_spawn", mobsToSpawn.toArray(new Class[0])); } @SuppressWarnings("unchecked") @@ -496,12 +480,6 @@ public abstract class RegularLevel extends Level { roomExit = r; } } - - if (bundle.contains( "mobs_to_spawn" )) { - for (Class mob : bundle.getClassArray("mobs_to_spawn")) { - if (mob != null) mobsToSpawn.add(mob); - } - } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java index 5809d6529..bfc984773 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerBossLevel.java @@ -110,11 +110,6 @@ public class SewerBossLevel extends SewerLevel { mobs.add( boss ); } - @Override - public Mob createMob() { - return null; - } - public Actor respawner() { return null; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CursingTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CursingTrap.java index 83cefde5a..5b9169023 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CursingTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/CursingTrap.java @@ -125,13 +125,13 @@ public class CursingTrap extends Trap { if (item instanceof Weapon){ Weapon w = (Weapon) item; if (w.enchantment == null){ - w.enchantment = Weapon.Enchantment.randomCurse(); + w.enchant(Weapon.Enchantment.randomCurse()); } } if (item instanceof Armor){ Armor a = (Armor) item; if (a.glyph == null){ - a.glyph = Armor.Glyph.randomCurse(); + a.inscribe(Armor.Glyph.randomCurse()); } } } 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 d45da3f70..f94c1f87a 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 @@ -74,7 +74,7 @@ public class DisintegrationTrap extends Trap { Sample.INSTANCE.play(Assets.SND_RAY); ShatteredPixelDungeon.scene().add(new Beam.DeathRay(DungeonTilemap.tileCenterToWorld(pos), target.sprite.center())); } - target.damage( Math.max( target.HT/5, Random.Int(target.HP / 2, 2 * target.HP / 3) ), this ); + target.damage( Random.NormalIntRange(30, 50) + Dungeon.depth, this ); if (target == Dungeon.hero){ Hero hero = (Hero)target; if (!hero.isAlive()){ 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 ea3360b7d..c2754bba4 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 @@ -57,7 +57,7 @@ public class FlockTrap extends Trap { && Actor.findChar(i) == null && !(Dungeon.level.pit[i])) { Sheep sheep = new Sheep(); - sheep.lifespan = Random.NormalIntRange(3 + Dungeon.depth/4, 6 + Dungeon.depth/2 ); + sheep.lifespan = Random.NormalIntRange( 4, 8 ); sheep.pos = i; GameScene.add(sheep); CellEmitter.get(i).burst(Speck.factory(Speck.WOOL), 4); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PitfallTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PitfallTrap.java index 9808c994d..bcb364339 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PitfallTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/PitfallTrap.java @@ -28,7 +28,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; public class PitfallTrap extends Trap { @@ -39,6 +41,12 @@ public class PitfallTrap extends Trap { @Override public void activate() { + + if( Dungeon.bossLevel() || Dungeon.depth > 25){ + GLog.w(Messages.get(this, "no_pit")); + return; + } + Heap heap = Dungeon.level.heaps.get( pos ); if (heap != null){ 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 ac92b13d9..166933605 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 @@ -86,7 +86,7 @@ public class PoisonDartTrap extends Trap { Dungeon.fail( trap.getClass() ); } Buff.affect( finalTarget, Poison.class ) - .set( 4 + Dungeon.depth ); + .set( 8 + Math.round(2*Dungeon.depth / 3f) ); Sample.INSTANCE.play(Assets.SND_HIT, 1, 1, Random.Float(0.8f, 1.25f)); finalTarget.sprite.bloodBurstA(finalTarget.sprite.center(), dmg); finalTarget.sprite.flash(); 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 ac1c8cf24..6407a1e04 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 @@ -60,7 +60,10 @@ public class RockfallTrap extends Trap { ArrayList rockCells = new ArrayList<>(); - if (Dungeon.level instanceof RegularLevel){ + //determines if the trap is actually in the world, or if it is being spawned for its effect + boolean onGround = Dungeon.level.traps.get(pos) == this; + + if (onGround && Dungeon.level instanceof RegularLevel){ Room r = ((RegularLevel) Dungeon.level).room(pos); int cell; for (Point p : r.getPoints()){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/SummoningTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/SummoningTrap.java index 83a758086..d89d25bfe 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/SummoningTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/SummoningTrap.java @@ -43,10 +43,6 @@ public class SummoningTrap extends Trap { @Override public void activate() { - if (Dungeon.bossLevel()) { - return; - } - int nMobs = 1; if (Random.Int( 2 ) == 0) { nMobs++; 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 7f0d9d894..f809f5c97 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 @@ -43,7 +43,11 @@ public class WeakeningTrap extends Trap{ } Char ch = Actor.findChar( pos ); - if (ch != null && !ch.flying){ + if (ch != null){ + if (ch.properties().contains(Char.Property.BOSS) + || ch.properties().contains(Char.Property.MINIBOSS)){ + Buff.prolong( ch, Weakness.class, Weakness.DURATION/2f ); + } Buff.prolong( ch, Weakness.class, Weakness.DURATION*2f ); } } diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties index 9814061f8..cf650c023 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties @@ -82,14 +82,15 @@ levels.traps.oozetrap.name=ooze trap levels.traps.oozetrap.desc=This trap will splash out caustic ooze when activated, which will burn until it is washed away. levels.traps.pitfalltrap.name=pitfall trap -levels.traps.pitfalltrap.desc=This pressure plate rests atop a fairly weak floor, and will likely collapse into a pit if it is pressed. +levels.traps.pitfalltrap.no_pit=the ground is too solid for a pitfall trap to work here. +levels.traps.pitfalltrap.desc=This trap will cause anything that triggers it to slip right through the ground and fall! It won't work in areas with especially solid floors though. levels.traps.poisondarttrap.name=poison dart trap levels.traps.poisondarttrap.desc=A small dart-blower must be hidden nearby, activating this trap will cause it to shoot a poisoned dart at the nearest target.\n\nThankfully the trigger mechanism isn't hidden. levels.traps.rockfalltrap.name=rockfall trap levels.traps.rockfalltrap.ondeath=You were crushed by the rockfall trap... -levels.traps.rockfalltrap.desc=This trap is connected to a series of loose rocks above, triggering it will cause them to come crashing down over the entire room!\n\nThankfully the trigger mechanism isn't hidden. +levels.traps.rockfalltrap.desc=This trap is connected to a series of loose rocks above, triggering it will cause them to come crashing down over the entire room! If the trap isn't in a specific room, rocks will fall in an area around the trap instead.\n\nThankfully the trigger mechanism isn't hidden. levels.traps.shockingtrap.name=shocking trap levels.traps.shockingtrap.desc=A mechanism with a large amount of energy stored into it. Triggering this trap will discharge that energy into a field around it. @@ -115,7 +116,7 @@ levels.traps.warpingtrap.name=warping trap levels.traps.warpingtrap.desc=Whatever triggers this trap will be warped to some other location on this floor. levels.traps.weakeningtrap.name=weakening trap -levels.traps.weakeningtrap.desc=Dark magic in this trap sucks the energy out of anything that comes into contact with it. +levels.traps.weakeningtrap.desc=Dark magic in this trap sucks the energy out of anything that comes into contact with it. Powerful enemies may resist the effect, however. levels.traps.worndarttrap.name=worn dart trap levels.traps.worndarttrap.desc=A small dart-blower must be hidden nearby, activating this trap will cause it to shoot at the nearest target.\n\nDue to its age it's not very harmful though, it isn't even hidden...