v2.3.0: improved DM-201 target selection when shooting gas

This commit is contained in:
Evan Debenham
2024-01-04 15:27:38 -05:00
parent f9e6fbc942
commit ad1161efe4

View File

@@ -40,7 +40,7 @@ public class DM201 extends DM200 {
properties.add(Property.IMMOVABLE);
HUNTING = new Mob.Hunting();
HUNTING = new Hunting();
}
@Override
@@ -50,30 +50,6 @@ public class DM201 extends DM200 {
private boolean threatened = false;
@Override
protected boolean act() {
//in case DM-201 hasn't been able to act yet
if (fieldOfView == null || fieldOfView.length != Dungeon.level.length()){
fieldOfView = new boolean[Dungeon.level.length()];
Dungeon.level.updateFieldOfView( this, fieldOfView );
}
if (paralysed <= 0 && state == HUNTING && enemy != null && enemySeen && threatened
&& canVent(enemy.pos) && !Dungeon.level.adjacent(pos, enemy.pos)
&& fieldOfView[enemy.pos] && enemy.invisible <= 0){
enemySeen = enemy.isAlive() && fieldOfView[enemy.pos] && enemy.invisible <= 0;
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;
} else {
zap();
return true;
}
}
return super.act();
}
@Override
public void damage(int dmg, Object src) {
if ((src instanceof Char && !Dungeon.level.adjacent(pos, ((Char)src).pos))
@@ -101,14 +77,19 @@ public class DM201 extends DM200 {
}
@Override
protected boolean canVent(int target) {
return false;
}
@Override
protected boolean getCloser(int target) {
return true;
return false;
}
@Override
protected boolean getFurther(int target) {
return true;
return false;
}
@Override
@@ -124,4 +105,25 @@ public class DM201 extends DM200 {
Dungeon.level.drop( new MetalShard(), pos + ofs ).sprite.drop( pos );
}
private class Hunting extends Mob.Hunting {
@Override
public boolean act( boolean enemyInFOV, boolean justAlerted ) {
if (threatened && enemyInFOV){
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;
} else {
zap();
return true;
}
} else {
return super.act( enemyInFOV, justAlerted );
}
}
}
}