diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java index 353031597..a8d86f76a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java @@ -94,7 +94,7 @@ public class Eye extends Mob { beamTarget = aim.collisionPos; return true; } else - //if the beam is charged, it has to attack, will aim at previous location of hero. + //if the beam is charged, it has to attack, will aim at previous location of target. return beamCharged; } else return super.canAttack(enemy); @@ -229,8 +229,8 @@ public class Eye extends Mob { private class Hunting extends Mob.Hunting{ @Override public boolean act(boolean enemyInFOV, boolean justAlerted) { - //always attack if the beam is charged, no exceptions - if (beamCharged && canAttack(enemy)) { + //even if enemy isn't seen, attack them if the beam is charged + if (beamCharged && enemy != null && canAttack(enemy)) { enemySeen = enemyInFOV; return doAttack(enemy); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java index 837f8b430..c1d4985df 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java @@ -69,7 +69,6 @@ import com.watabou.utils.PathFinder; import com.watabou.utils.Random; import java.util.ArrayList; -import java.util.HashSet; public class DriedRose extends Artifact { @@ -414,6 +413,8 @@ public class DriedRose extends Artifact { public void saySpawned(){ if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english int i = (Dungeon.depth - 1) / 5; + fieldOfView = new boolean[Dungeon.level.length()]; + Dungeon.level.updateFieldOfView(this, fieldOfView); if (chooseEnemy() == null) yell( Random.element( VOICE_AMBIENT[i] ) ); else @@ -461,37 +462,16 @@ public class DriedRose extends Artifact { return super.act(); } - //prioritizes closest enemy, and will never attack something far from the player @Override protected Char chooseEnemy() { - if (enemy == null - || !enemy.isAlive() - || !Dungeon.level.mobs.contains(enemy) - || Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) > 8 - || enemy.alignment != Alignment.ENEMY - || state == WANDERING) { - - HashSet enemies = new HashSet<>(); - for (Mob mob : Dungeon.level.mobs) { - if (mob.alignment == Alignment.ENEMY - && fieldOfView[mob.pos] - && Dungeon.level.distance(mob.pos, Dungeon.hero.pos) <= 8 - && mob.state != mob.PASSIVE) { - enemies.add(mob); - } - } - - //go for closest enemy - Char closest = null; - for (Char curr : enemies){ - if (closest == null - || Dungeon.level.distance(pos, curr.pos) < Dungeon.level.distance(pos, closest.pos)){ - closest = curr; - } - } - return closest; + Char enemy = super.chooseEnemy(); + + //will never attack something far from the player + if (enemy != null && Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) <= 8){ + return enemy; + } else { + return null; } - return enemy; } @Override