From 22036628d380741f8410fb5fad89cb870dc238ea Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 3 Nov 2020 15:25:01 -0500 Subject: [PATCH] v0.9.1: fixed rare errors resulting from v0.9.0 AI changes --- .../shatteredpixeldungeon/actors/mobs/Mob.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 394b4af70..1f1199b44 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -879,6 +879,9 @@ public abstract class Mob extends Char { public static final String TAG = "HUNTING"; + //prevents rare infinite loop cases + private boolean recursing = false; + @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { enemySeen = enemyInFOV; @@ -906,11 +909,16 @@ public abstract class Mob extends Char { } else { //if moving towards an enemy isn't possible, try to switch targets to another enemy that is closer - Char newEnemy = chooseEnemy(); - if (newEnemy != null && enemy != newEnemy){ - enemy = newEnemy; - spend( TICK ); - return true; + //unless we have already done that and still can't move toward them, then move on. + if (!recursing) { + Char newEnemy = chooseEnemy(); + if (newEnemy != null && enemy != newEnemy) { + enemy = newEnemy; + recursing = true; + boolean result = act(enemyInFOV, justAlerted); + recursing = false; + return result; + } } spend( TICK );