From 5563ceb3cd3df0f314b129dd83ddb5586746d9ba Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 1 Sep 2024 14:38:46 -0400 Subject: [PATCH] v2.5.0: fixed ripper demons refusing to leap into enemies over pits --- .../actors/mobs/RipperDemon.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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;