From 96d8cd07b9f42faa8d2d96273d3acef779efd0c5 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 8 May 2021 20:57:43 -0400 Subject: [PATCH] v0.9.3: fixed giant champions attacking over allies --- .../actors/buffs/ChampionEnemy.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index 64305d188..e7fa874ef 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; @@ -29,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.shatteredpixel.shatteredpixeldungeon.utils.BArray; import com.watabou.noosa.Image; import com.watabou.utils.Bundle; import com.watabou.utils.PathFinder; @@ -189,8 +191,18 @@ public abstract class ChampionEnemy extends Buff { @Override public boolean canAttackWithExtraReach(Char enemy) { - //attack range of 2 - return target.fieldOfView[enemy.pos] && Dungeon.level.distance(target.pos, enemy.pos) <= 2; + if (Dungeon.level.distance( target.pos, enemy.pos ) > 2){ + return false; + } else { + boolean[] passable = BArray.not(Dungeon.level.solid, null); + for (Char ch : Actor.chars()) { + if (ch != target) passable[ch.pos] = false; + } + + PathFinder.buildDistanceMap(enemy.pos, passable, 2); + + return PathFinder.distance[target.pos] <= 2; + } } }