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 89ae0c8ce..d267f3edb 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 @@ -229,25 +229,30 @@ public abstract class Mob extends Char { //we have no enemy, or the current one is dead/missing if ( enemy == null || !enemy.isAlive() || !Actor.chars().contains(enemy) || state == WANDERING) { newEnemy = true; - //We are an ally, and current enemy is another ally. - } else if (alignment == Alignment.ALLY && enemy.alignment == Alignment.ALLY) { - newEnemy = true; //We are amoked and current enemy is the hero } else if (buff( Amok.class ) != null && enemy == Dungeon.hero) { newEnemy = true; //We are charmed and current enemy is what charmed us } else if (buff(Charm.class) != null && buff(Charm.class).object == enemy.id()) { newEnemy = true; - //we aren't amoked, current enemy is invulnerable to us, and that enemy isn't affect by aggression - } else if (buff( Amok.class ) == null && enemy.isInvulnerable(getClass()) && enemy.buff(StoneOfAggression.Aggression.class) == null) { - newEnemy = true; + } + + //additionally, if we are an ally, find a new enemy if... + if (!newEnemy && alignment == Alignment.ALLY){ + //current enemy is also an ally + if (enemy.alignment == Alignment.ALLY){ + newEnemy = true; + //current enemy is invulnerable + } else if (enemy.isInvulnerable(getClass())){ + newEnemy = true; + } } if ( newEnemy ) { HashSet enemies = new HashSet<>(); - //if the mob is amoked... + //if we are amoked... if ( buff(Amok.class) != null) { //try to find an enemy mob to attack first. for (Mob mob : Dungeon.level.mobs) @@ -272,7 +277,7 @@ public abstract class Mob extends Char { } } - //if the mob is an ally... + //if we are an ally... } else if ( alignment == Alignment.ALLY ) { //look for hostile mobs to attack for (Mob mob : Dungeon.level.mobs) @@ -284,20 +289,21 @@ public abstract class Mob extends Char { enemies.add(mob); } - //if the mob is an enemy... + //if we are an enemy... } else if (alignment == Alignment.ENEMY) { //look for ally mobs to attack for (Mob mob : Dungeon.level.mobs) - if (mob.alignment == Alignment.ALLY && fieldOfView[mob.pos] && mob.invisible <= 0 && !mob.isInvulnerable(getClass())) + if (mob.alignment == Alignment.ALLY && fieldOfView[mob.pos] && mob.invisible <= 0) enemies.add(mob); //and look for the hero - if (fieldOfView[Dungeon.hero.pos] && Dungeon.hero.invisible <= 0 && !Dungeon.hero.isInvulnerable(getClass())) { + if (fieldOfView[Dungeon.hero.pos] && Dungeon.hero.invisible <= 0) { enemies.add(Dungeon.hero); } } - + + //do not target anything that's charming us Charm charm = buff( Charm.class ); if (charm != null){ Char source = (Char)Actor.findById( charm.object );