diff --git a/src/forge/Card.java b/src/forge/Card.java index 202294627bf..01087f752f7 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -2977,7 +2977,11 @@ public class Card extends MyObservable { else if(source.getKeyword().contains("Deathtouch")) { for(int i=1; i <= maxDamage; i++) { - if (predictDamage(i, source, isCombat) > 0) + if (noPrevention) { + if (staticReplaceDamage(i, source, isCombat) > 0) + return i; + } + else if (predictDamage(i, source, isCombat) > 0) return i; } } diff --git a/src/forge/card/abilityFactory/AbilityFactory_DealDamage.java b/src/forge/card/abilityFactory/AbilityFactory_DealDamage.java index 666b748b59a..e320f4439b9 100644 --- a/src/forge/card/abilityFactory/AbilityFactory_DealDamage.java +++ b/src/forge/card/abilityFactory/AbilityFactory_DealDamage.java @@ -292,8 +292,9 @@ public class AbilityFactory_DealDamage { private Card chooseTgtC(final int d, final boolean noPrevention, final Player pl, final boolean mandatory) { Target tgt = AF.getAbTgt(); + final Card source = AF.getHostCard(); CardList hPlay = AllZoneUtil.getPlayerCardsInPlay(pl); - hPlay = hPlay.getValidCards(tgt.getValidTgts(), AllZone.ComputerPlayer, AF.getHostCard()); + hPlay = hPlay.getValidCards(tgt.getValidTgts(), AllZone.ComputerPlayer, source); ArrayList objects = tgt.getTargets(); for(Object o : objects){ @@ -303,19 +304,12 @@ public class AbilityFactory_DealDamage { hPlay.remove(c); } } - hPlay = hPlay.getTargetableCards(AF.getHostCard()); + hPlay = hPlay.getTargetableCards(source); CardList killables = hPlay.filter(new CardListFilter() { public boolean addCard(Card c) { - int restDamage = d; - if (!noPrevention) - restDamage = c.predictDamage(d,AF.getHostCard(),false); - else - restDamage = c.staticReplaceDamage(restDamage, AF.getHostCard(), false); - - // will include creatures already dealt damage - return c.getKillDamage() <= restDamage && c.getShield() == 0 && - !c.getKeyword().contains("Indestructible") && !(c.getSVar("SacMe").length() > 0); + return (c.getEnoughDamageToKill(d, source, false, noPrevention) <= d ) + && !(c.getSVar("SacMe").length() > 0); } });