v2.0.1: fixed ranged enemy AI and projecting champ buff in some cases
This commit is contained in:
@@ -74,7 +74,8 @@ public class DM100 extends Mob implements Callback {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
return super.canAttack(enemy)
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
//used so resistances can differentiate between melee and magical attacks
|
//used so resistances can differentiate between melee and magical attacks
|
||||||
@@ -83,7 +84,8 @@ public class DM100 extends Mob implements Callback {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean doAttack( Char enemy ) {
|
protected boolean doAttack( Char enemy ) {
|
||||||
|
|
||||||
if (Dungeon.level.distance( pos, enemy.pos ) <= 1) {
|
if (Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos != enemy.pos) {
|
||||||
|
|
||||||
return super.doAttack( enemy );
|
return super.doAttack( enemy );
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -112,16 +112,18 @@ public abstract class Elemental extends Mob {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
if (rangedCooldown <= 0) {
|
if (super.canAttack(enemy)){
|
||||||
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT ).collisionPos == enemy.pos;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return super.canAttack( enemy );
|
return rangedCooldown < 0 && new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT ).collisionPos == enemy.pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean doAttack( Char enemy ) {
|
protected boolean doAttack( Char enemy ) {
|
||||||
|
|
||||||
if (Dungeon.level.adjacent( pos, enemy.pos ) || rangedCooldown > 0) {
|
if (Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
|
|| rangedCooldown > 0
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT ).collisionPos != enemy.pos) {
|
||||||
|
|
||||||
return super.doAttack( enemy );
|
return super.doAttack( enemy );
|
||||||
|
|
||||||
|
|||||||
@@ -93,15 +93,18 @@ public class Eye extends Mob {
|
|||||||
if (beamCooldown == 0) {
|
if (beamCooldown == 0) {
|
||||||
Ballistica aim = new Ballistica(pos, enemy.pos, Ballistica.STOP_SOLID);
|
Ballistica aim = new Ballistica(pos, enemy.pos, Ballistica.STOP_SOLID);
|
||||||
|
|
||||||
if (enemy.invisible == 0 && !isCharmedBy(enemy) && fieldOfView[enemy.pos] && aim.subPath(1, aim.dist).contains(enemy.pos)){
|
if (enemy.invisible == 0 && !isCharmedBy(enemy) && fieldOfView[enemy.pos]
|
||||||
|
&& (super.canAttack(enemy) || aim.subPath(1, aim.dist).contains(enemy.pos))){
|
||||||
beam = aim;
|
beam = aim;
|
||||||
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 target.
|
//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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -122,7 +125,8 @@ public class Eye extends Mob {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean doAttack( Char enemy ) {
|
protected boolean doAttack( Char enemy ) {
|
||||||
|
|
||||||
if (beamCooldown > 0) {
|
beam = new Ballistica(pos, enemy.pos, Ballistica.STOP_SOLID);
|
||||||
|
if (beamCooldown > 0 || !beam.subPath(1, beam.dist).contains(enemy.pos)) {
|
||||||
return super.doAttack(enemy);
|
return super.doAttack(enemy);
|
||||||
} else if (!beamCharged){
|
} else if (!beamCharged){
|
||||||
((EyeSprite)sprite).charge( enemy.pos );
|
((EyeSprite)sprite).charge( enemy.pos );
|
||||||
@@ -133,7 +137,6 @@ public class Eye extends Mob {
|
|||||||
|
|
||||||
spend( attackDelay() );
|
spend( attackDelay() );
|
||||||
|
|
||||||
beam = new Ballistica(pos, beamTarget, Ballistica.STOP_SOLID);
|
|
||||||
if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[beam.collisionPos] ) {
|
if (Dungeon.level.heroFOV[pos] || Dungeon.level.heroFOV[beam.collisionPos] ) {
|
||||||
sprite.zap( beam.collisionPos );
|
sprite.zap( beam.collisionPos );
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
+2
-2
@@ -66,8 +66,8 @@ public class GnollTrickster extends Gnoll {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
Ballistica attack = new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE);
|
return !Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
return !Dungeon.level.adjacent(pos, enemy.pos) && attack.collisionPos == enemy.pos;
|
&& (super.canAttack(enemy) || new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-2
@@ -71,8 +71,8 @@ public class Scorpio extends Mob {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
Ballistica attack = new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE);
|
return !Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
return !Dungeon.level.adjacent( pos, enemy.pos ) && attack.collisionPos == enemy.pos;
|
&& (super.canAttack(enemy) || new Ballistica( pos, enemy.pos, Ballistica.PROJECTILE).collisionPos == enemy.pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ public abstract class Shaman extends Mob {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
return super.canAttack(enemy)
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -89,7 +90,8 @@ public abstract class Shaman extends Mob {
|
|||||||
|
|
||||||
protected boolean doAttack(Char enemy ) {
|
protected boolean doAttack(Char enemy ) {
|
||||||
|
|
||||||
if (Dungeon.level.adjacent( pos, enemy.pos )) {
|
if (Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos != enemy.pos) {
|
||||||
|
|
||||||
return super.doAttack( enemy );
|
return super.doAttack( enemy );
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -77,12 +77,14 @@ public class Warlock extends Mob implements Callback {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAttack( Char enemy ) {
|
protected boolean canAttack( Char enemy ) {
|
||||||
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
return super.canAttack(enemy)
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean doAttack( Char enemy ) {
|
protected boolean doAttack( Char enemy ) {
|
||||||
|
|
||||||
if (Dungeon.level.adjacent( pos, enemy.pos )) {
|
if (Dungeon.level.adjacent( pos, enemy.pos )
|
||||||
|
|| new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos != enemy.pos) {
|
||||||
|
|
||||||
return super.doAttack( enemy );
|
return super.doAttack( enemy );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user