v0.6.2: fixed bugs and improved ai of sad ghost and evil eyes

This commit is contained in:
Evan Debenham 2017-09-30 18:39:04 -04:00
parent 051dddf835
commit 6a3eeb62cc
2 changed files with 12 additions and 32 deletions

View File

@ -94,7 +94,7 @@ public class Eye extends Mob {
beamTarget = aim.collisionPos; beamTarget = aim.collisionPos;
return true; return true;
} else } 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; return beamCharged;
} else } else
return super.canAttack(enemy); return super.canAttack(enemy);
@ -229,8 +229,8 @@ public class Eye extends Mob {
private class Hunting extends Mob.Hunting{ private class Hunting extends Mob.Hunting{
@Override @Override
public boolean act(boolean enemyInFOV, boolean justAlerted) { public boolean act(boolean enemyInFOV, boolean justAlerted) {
//always attack if the beam is charged, no exceptions //even if enemy isn't seen, attack them if the beam is charged
if (beamCharged && canAttack(enemy)) { if (beamCharged && enemy != null && canAttack(enemy)) {
enemySeen = enemyInFOV; enemySeen = enemyInFOV;
return doAttack(enemy); return doAttack(enemy);
} }

View File

@ -69,7 +69,6 @@ import com.watabou.utils.PathFinder;
import com.watabou.utils.Random; import com.watabou.utils.Random;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
public class DriedRose extends Artifact { public class DriedRose extends Artifact {
@ -414,6 +413,8 @@ public class DriedRose extends Artifact {
public void saySpawned(){ public void saySpawned(){
if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english
int i = (Dungeon.depth - 1) / 5; int i = (Dungeon.depth - 1) / 5;
fieldOfView = new boolean[Dungeon.level.length()];
Dungeon.level.updateFieldOfView(this, fieldOfView);
if (chooseEnemy() == null) if (chooseEnemy() == null)
yell( Random.element( VOICE_AMBIENT[i] ) ); yell( Random.element( VOICE_AMBIENT[i] ) );
else else
@ -461,37 +462,16 @@ public class DriedRose extends Artifact {
return super.act(); return super.act();
} }
//prioritizes closest enemy, and will never attack something far from the player
@Override @Override
protected Char chooseEnemy() { protected Char chooseEnemy() {
if (enemy == null Char enemy = super.chooseEnemy();
|| !enemy.isAlive()
|| !Dungeon.level.mobs.contains(enemy)
|| Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) > 8
|| enemy.alignment != Alignment.ENEMY
|| state == WANDERING) {
HashSet<Mob> enemies = new HashSet<>(); //will never attack something far from the player
for (Mob mob : Dungeon.level.mobs) { if (enemy != null && Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) <= 8){
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;
}
return enemy; return enemy;
} else {
return null;
}
} }
@Override @Override