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 9befbca1b..adcc4a564 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 @@ -157,12 +157,23 @@ public class RipperDemon extends Mob { //ensure there is somewhere to land after leaping if (leapVictim != null){ int bouncepos = -1; + //attempt to bounce in free passable space for (int i : PathFinder.NEIGHBOURS8){ if ((bouncepos == -1 || Dungeon.level.trueDistance(pos, leapPos+i) < Dungeon.level.trueDistance(pos, bouncepos)) && Actor.findChar(leapPos+i) == null && Dungeon.level.passable[leapPos+i]){ bouncepos = leapPos+i; } } + //try again, allowing a bounce into any non-solid terrain + if (bouncepos == -1){ + for (int i : PathFinder.NEIGHBOURS8){ + if ((bouncepos == -1 || Dungeon.level.trueDistance(pos, leapPos+i) < Dungeon.level.trueDistance(pos, bouncepos)) + && Actor.findChar(leapPos+i) == null && !Dungeon.level.solid[leapPos+i]){ + bouncepos = leapPos+i; + } + } + } + //if no valid position, cancel the leap if (bouncepos == -1) { leapPos = -1; return true;