diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 4e983b40a..d38d8192d 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.effects.Wound; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfAccuracy; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; @@ -256,8 +257,15 @@ public abstract class Mob extends Char { return false; } } - - @Override + + @Override + public void updateSpriteState() { + super.updateSpriteState(); + if (Dungeon.hero.buff(TimekeepersHourglass.timeFreeze.class) != null) + sprite.add( CharSprite.State.PARALYSED ); + } + + @Override public void move( int step ) { super.move( step ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java index 5c712363a..55eebbd11 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java @@ -253,23 +253,30 @@ public class TimekeepersHourglass extends Artifact { } - public void delayedPress(int cell){ + public void setDelayedPress(int cell){ if (!presses.contains(cell)) presses.add(cell); } + public void triggerPresses(){ + for (int cell : presses) + Dungeon.level.press(cell, null); + + presses = new ArrayList(); + } + @Override public boolean attachTo(Char target) { - for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) - mob.sprite.add(CharSprite.State.PARALYSED); + if (Dungeon.level != null) + for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) + mob.sprite.add(CharSprite.State.PARALYSED); GameScene.freezeEmitters = true; return super.attachTo(target); } @Override public void detach(){ - for (int cell : presses) - Dungeon.level.press(cell, null); + triggerPresses(); for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) mob.sprite.remove(CharSprite.State.PARALYSED); GameScene.freezeEmitters = false; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index 40918c8fd..5b586a1c6 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -781,7 +781,7 @@ public abstract class Level implements Bundlable { Level.set( cell, Terrain.discover( map[cell] ) ); GameScene.updateMap( cell ); - timeFreeze.delayedPress(cell); + timeFreeze.setDelayedPress( cell ); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 6d97d4309..36f6e4524 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -298,7 +298,9 @@ public class GameScene extends PixelScene { public void destroy() { - scene = null; + freezeEmitters = false; + + scene = null; Badges.saveGlobal(); super.destroy();