diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index a7797d2008e..e40e9744990 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -210,6 +210,7 @@ public class GameAction { if (fromBattlefield) { c.setZone(zoneTo); c.setDamage(0); //clear damage after a card leaves the battlefield + c.setHasBeenDealtDeathtouchDamage(false); if (c.isTapped()) { c.setTapped(false); //untap card after it leaves the battlefield if needed game.fireEvent(new GameEventCardTapped(c, false)); @@ -703,7 +704,8 @@ public class GameAction { } } // Rule 704.5g - Destroy due to lethal damage - else if (c.getNetToughness() <= c.getDamage()) { + // Rule 704.5h - Destroy due to deathtouch + else if (c.getNetToughness() <= c.getDamage() || c.hasBeenDealtDeathtouchDamage()) { if (desCreats == null) { desCreats = new LinkedList(); } @@ -1129,6 +1131,7 @@ public class GameAction { && (c.getShieldCount() > 0 || c.hasKeyword("If CARDNAME would be destroyed, regenerate it."))) { c.subtractShield(c.getController().getController().chooseRegenerationShield(c)); c.setDamage(0); + c.setHasBeenDealtDeathtouchDamage(false); c.tap(); c.addRegeneratedThisTurn(); if (game.getCombat() != null) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java index e22f554fd47..1f47d892d19 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java @@ -143,6 +143,7 @@ public class DamageDealEffect extends SpellAbilityEffect { if (c.isInPlay() && (!targeted || c.canBeTargetedBy(sa))) { if (removeDamage) { c.setDamage(0); + c.setHasBeenDealtDeathtouchDamage(false); c.clearAssignedDamage(); } else if (noPrevention) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 7e322f92733..bb7eaf2f84b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -200,6 +200,7 @@ public class Card extends GameEntity implements Comparable, IIdentifiable private String oracleText = ""; private int damage; + private boolean hasBeenDealtDeathtouchDamage = false; // regeneration private List shields = new ArrayList(); @@ -5138,6 +5139,13 @@ public class Card extends GameEntity implements Comparable, IIdentifiable getGame().fireEvent(new GameEventCardStatsChanged(this)); } + public final boolean hasBeenDealtDeathtouchDamage() { + return hasBeenDealtDeathtouchDamage; + } + public final void setHasBeenDealtDeathtouchDamage(final boolean hasBeenDealtDeatchtouchDamage) { + this.hasBeenDealtDeathtouchDamage = hasBeenDealtDeatchtouchDamage; + } + public final Map getAssignedDamageMap() { return assignedDamageMap; } @@ -5545,7 +5553,7 @@ public class Card extends GameEntity implements Comparable, IIdentifiable } if (source.hasKeyword("Deathtouch") && isCreature()) { - game.getAction().destroy(this, null); + setHasBeenDealtDeathtouchDamage(true); damageType = DamageType.Deathtouch; } @@ -6038,6 +6046,7 @@ public class Card extends GameEntity implements Comparable, IIdentifiable public void onCleanupPhase(final Player turn) { setDamage(0); + setHasBeenDealtDeathtouchDamage(false); resetPreventNextDamage(); resetPreventNextDamageWithEffect(); resetReceivedDamageFromThisTurn();