diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java index eded200a1..a0051a6bc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Actor.java @@ -321,7 +321,7 @@ public abstract class Actor implements Bundlable { } public static void addDelayed( Actor actor, float delay ) { - add( actor, now + delay ); + add( actor, now + Math.max(delay, 0) ); } private static synchronized void add( Actor actor, float time ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java index f9d3e04cc..1fb657a1d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/mage/WarpBeacon.java @@ -147,7 +147,7 @@ public class WarpBeacon extends ArmorAbility { if (!candidates.isEmpty()){ ScrollOfTeleportation.appear(hero, tracker.pos); - Actor.addDelayed( new Pushing( toPush, toPush.pos, candidates.get(0) ), -1 ); + Actor.add( new Pushing( toPush, toPush.pos, candidates.get(0) )); toPush.pos = candidates.get(0); Dungeon.level.occupyCell(toPush); 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 eead0b5e1..c51ea85cc 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 @@ -124,7 +124,7 @@ public class DemonSpawner extends Mob { Dungeon.level.occupyCell(spawn); if (sprite.visible) { - Actor.addDelayed(new Pushing(spawn, pos, spawn.pos), -1); + Actor.add(new Pushing(spawn, pos, spawn.pos)); } spawnCooldown += 60; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ghoul.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ghoul.java index 4785e8fee..8692ed4da 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ghoul.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ghoul.java @@ -131,7 +131,7 @@ public class Ghoul extends Mob { Dungeon.level.occupyCell(child); if (sprite.visible) { - Actor.addDelayed( new Pushing( child, pos, child.pos ), -1 ); + Actor.add( new Pushing( child, pos, child.pos ) ); } for (Buff b : buffs(ChampionEnemy.class)){ @@ -277,7 +277,7 @@ public class Ghoul extends Mob { } if (candidates.size() > 0) { int newPos = Random.element( candidates ); - Actor.addDelayed( new Pushing( ghoul, ghoul.pos, newPos ), -1 ); + Actor.add( new Pushing( ghoul, ghoul.pos, newPos ) ); ghoul.pos = newPos; } else { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Guard.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Guard.java index bd0dac806..8f92dab83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Guard.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Guard.java @@ -101,11 +101,11 @@ public class Guard extends Mob { Effects.Type.CHAIN, new Callback() { public void call() { - Actor.addDelayed(new Pushing(enemy, enemy.pos, newPosFinal, new Callback() { + Actor.add(new Pushing(enemy, enemy.pos, newPosFinal, new Callback() { public void call() { pullEnemy(enemy, newPosFinal); } - }), -1); + })); next(); } })); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java index 1e0f390c8..c8e854a08 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java @@ -202,7 +202,7 @@ public class Necromancer extends Mob { //push enemy, or wait a turn if there is no valid pushing position if (pushPos != pos) { Char ch = Actor.findChar(summoningPos); - Actor.addDelayed( new Pushing( ch, ch.pos, pushPos ), -1 ); + Actor.add( new Pushing( ch, ch.pos, pushPos ) ); ch.pos = pushPos; Dungeon.level.occupyCell(ch ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RipperDemon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RipperDemon.java index c11b82878..d8843b1a9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RipperDemon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/RipperDemon.java @@ -187,7 +187,7 @@ public class RipperDemon extends Mob { } if (endPos != leapPos){ - Actor.addDelayed(new Pushing(RipperDemon.this, leapPos, endPos), -1); + Actor.add(new Pushing(RipperDemon.this, leapPos, endPos)); } pos = endPos; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/SpectralNecromancer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/SpectralNecromancer.java index c79bacffa..710c6119a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/SpectralNecromancer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/SpectralNecromancer.java @@ -125,7 +125,7 @@ public class SpectralNecromancer extends Necromancer { //push enemy, or wait a turn if there is no valid pushing position if (pushPos != pos) { Char ch = Actor.findChar(summoningPos); - Actor.addDelayed( new Pushing( ch, ch.pos, pushPos ), -1 ); + Actor.add( new Pushing( ch, ch.pos, pushPos ) ); ch.pos = pushPos; Dungeon.level.occupyCell(ch ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java index 0a149d7cf..f0e165d20 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Swarm.java @@ -104,7 +104,7 @@ public class Swarm extends Mob { GameScene.add( clone, SPLIT_DELAY ); //we add before assigning HP due to ascension clone.HP = (HP - damage) / 2; - Actor.addDelayed( new Pushing( clone, pos, clone.pos ), -1 ); + Actor.add( new Pushing( clone, pos, clone.pos ) ); Dungeon.level.occupyCell(clone); 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 372d29605..86109d33d 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 @@ -334,7 +334,7 @@ public class YogDzewa extends Mob { if (spawnPos != -1) { summon.pos = spawnPos; GameScene.add( summon ); - Actor.addDelayed( new Pushing( summon, pos, summon.pos ), -1 ); + Actor.add( new Pushing( summon, pos, summon.pos ) ); summon.beckon(Dungeon.hero.pos); Dungeon.level.occupyCell(summon); @@ -453,7 +453,7 @@ public class YogDzewa extends Mob { } GameScene.add(fist, 4); - Actor.addDelayed( new Pushing( fist, Dungeon.level.exit(), fist.pos ), -1 ); + Actor.add( new Pushing( fist, Dungeon.level.exit(), fist.pos ) ); Dungeon.level.occupyCell(fist); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Pushing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Pushing.java index 59f7b748e..7db4c9f7e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Pushing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Pushing.java @@ -42,7 +42,7 @@ public class Pushing extends Actor { private Callback callback; { - actPriority = VFX_PRIO; + actPriority = VFX_PRIO+10; } public Pushing( Char ch, int from, int to ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java index b8d8c8289..d6fe06eb3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Amulet.java @@ -76,15 +76,20 @@ public class Amulet extends Item { Statistics.amuletObtained = true; hero.spend(-TIME_TO_PICK_UP); - //add a delayed actor here so pickup behaviour can fully process. - Actor.addDelayed(new Actor(){ + //delay with an actor here so pickup behaviour can fully process. + Actor.add(new Actor(){ + + { + actPriority = VFX_PRIO; + } + @Override protected boolean act() { Actor.remove(this); showAmuletScene( true ); return false; } - }, -5); + }); } return true; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Honeypot.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Honeypot.java index 9c19c4dab..be6d53c5b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Honeypot.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Honeypot.java @@ -120,7 +120,7 @@ public class Honeypot extends Item { bee.pos = newPos; GameScene.add( bee ); - if (newPos != pos) Actor.addDelayed( new Pushing( bee, pos, newPos ), -1f ); + if (newPos != pos) Actor.add( new Pushing( bee, pos, newPos ) ); bee.sprite.alpha( 0 ); bee.sprite.parent.add( new AlphaTweener( bee.sprite, 1, 0.15f ) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java index 9111dea00..b868e6ef6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java @@ -132,7 +132,7 @@ public class BeaconOfReturning extends Spell { if (toPush == hero){ returnPos = candidates.get(0); } else { - Actor.addDelayed( new Pushing( toPush, toPush.pos, candidates.get(0) ), -1 ); + Actor.add( new Pushing( toPush, toPush.pos, candidates.get(0) ) ); toPush.pos = candidates.get(0); Dungeon.level.occupyCell(toPush); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index 1813d18fd..678ec7f70 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -149,7 +149,7 @@ public class WandOfBlastWave extends DamageWand { final boolean finalCollided = collided && collideDmg; final int initialpos = ch.pos; - Actor.addDelayed(new Pushing(ch, ch.pos, newPos, new Callback() { + Actor.add(new Pushing(ch, ch.pos, newPos, new Callback() { public void call() { if (initialpos != ch.pos || Actor.findChar(newPos) != null) { //something caused movement or added chars before pushing resolved, cancel to be safe. @@ -178,7 +178,7 @@ public class WandOfBlastWave extends DamageWand { GameScene.updateFog(); } } - }), -1); + })); } @Override @@ -186,9 +186,9 @@ public class WandOfBlastWave extends DamageWand { //acts like elastic enchantment //we delay this with an actor to prevent conflicts with regular elastic //so elastic always fully resolves first, then this effect activates - Actor.addDelayed(new Actor() { + Actor.add(new Actor() { { - actPriority = VFX_PRIO-1; //act after pushing effects + actPriority = VFX_PRIO+9; //act after pushing effects } @Override @@ -199,7 +199,7 @@ public class WandOfBlastWave extends DamageWand { } return true; } - }, -1); + }); } private static class BlastWaveOnHit extends Elastic{ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index fd0bafa62..a8bb61b8b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ConfusionTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.FlockTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GatewayTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.OozeTrap; +import com.shatteredpixel.shatteredpixeldungeon.levels.traps.PitfallTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ShockingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.TeleportationTrap; @@ -99,7 +100,7 @@ public class SewerLevel extends RegularLevel { @Override protected Class[] trapClasses() { return Dungeon.depth == 1 ? - new Class[]{ WornDartTrap.class } : + new Class[]{ PitfallTrap.class } : new Class[]{ ChillingTrap.class, ShockingTrap.class, ToxicTrap.class, WornDartTrap.class, AlarmTrap.class, OozeTrap.class, 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 06b88735f..94183cbaf 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 @@ -55,6 +55,7 @@ public class PitfallTrap extends Trap { DelayedPit p = Buff.append(Dungeon.hero, DelayedPit.class, 1); p.depth = Dungeon.depth; + p.branch = Dungeon.branch; p.pos = pos; for (int i : PathFinder.NEIGHBOURS9){