v1.2.0: fixed DM-200s and golems attacking through crystal doors

This commit is contained in:
Evan Debenham
2022-03-20 16:17:00 -04:00
parent 4ce6c1df45
commit d61ac8dc99
2 changed files with 29 additions and 5 deletions

View File

@@ -28,9 +28,12 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.ConeAOE;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.DM200Sprite;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.watabou.utils.Bundle;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
public class DM200 extends Mob {
@@ -125,6 +128,16 @@ public class DM200 extends Mob {
}
private boolean canVent(int target){
if (ventCooldown > 0) return false;
PathFinder.buildDistanceMap(target, BArray.not(Dungeon.level.solid, null), Dungeon.level.distance(pos, target)+1);
//vent can go around blocking terrain, but not through it
if (PathFinder.distance[pos] == Integer.MAX_VALUE){
return false;
}
return true;
}
private class Hunting extends Mob.Hunting{
@Override
@@ -137,7 +150,7 @@ public class DM200 extends Mob {
int oldPos = pos;
if (ventCooldown <= 0 && distance(enemy) >= 1 && Random.Int(100/distance(enemy)) == 0){
if (distance(enemy) >= 1 && Random.Int(100/distance(enemy)) == 0 && canVent(target)){
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;
@@ -150,7 +163,7 @@ public class DM200 extends Mob {
spend( 1 / speed() );
return moveSprite( oldPos, pos );
} else if (ventCooldown <= 0) {
} else if (canVent(target)) {
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;

View File

@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
import com.shatteredpixel.shatteredpixeldungeon.sprites.GolemSprite;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.watabou.utils.Bundle;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
@@ -169,6 +170,16 @@ public class Golem extends Mob {
enemyTeleCooldown = 20;
}
private boolean canTele(int target){
if (enemyTeleCooldown > 0) return false;
PathFinder.buildDistanceMap(target, BArray.not(Dungeon.level.solid, null), Dungeon.level.distance(pos, target)+1);
//zaps can go around blocking terrain, but not through it
if (PathFinder.distance[pos] == Integer.MAX_VALUE){
return false;
}
return true;
}
private class Wandering extends Mob.Wandering{
@Override
@@ -204,8 +215,8 @@ public class Golem extends Mob {
int oldPos = pos;
if (enemyTeleCooldown <= 0 && distance(enemy) >= 1 && Random.Int(100/distance(enemy)) == 0
&& !Char.hasProp(enemy, Property.IMMOVABLE)){
if (distance(enemy) >= 1 && Random.Int(100/distance(enemy)) == 0
&& !Char.hasProp(enemy, Property.IMMOVABLE) && canTele(target)){
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;
@@ -218,7 +229,7 @@ public class Golem extends Mob {
spend( 1 / speed() );
return moveSprite( oldPos, pos );
} else if (enemyTeleCooldown <= 0 && !Char.hasProp(enemy, Property.IMMOVABLE)) {
} else if (!Char.hasProp(enemy, Property.IMMOVABLE) && canTele(target)) {
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
sprite.zap( enemy.pos );
return false;