From c09301bceac2a4fe8209366a0d36e3dfe2e6dbe0 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 6 Jan 2022 15:43:44 +0100 Subject: [PATCH] Fix getLethalDamage --- forge-game/src/main/java/forge/game/card/Card.java | 11 +++++++++-- .../src/main/java/forge/screens/match/CMatchUI.java | 1 - .../java/forge/screens/match/VAssignCombatDamage.java | 6 ++---- 3 files changed, 11 insertions(+), 7 deletions(-) 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 2b6358ecd8a..181b334dae1 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5199,6 +5199,12 @@ public class Card extends GameEntity implements Comparable, IHasSVars { // this is the minimal damage a trampling creature has to assign to a blocker public final int getLethalDamage() { + // CR 702.2c + for (Card c : getAssignedDamageMap().keySet()) { + if (c.hasKeyword(Keyword.DEATHTOUCH)) { + return 0; + } + } return getLethal() - getDamage() - getTotalAssignedDamage(); } @@ -5224,8 +5230,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public final void addAssignedDamage(int assignedDamage0, final Card sourceCard) { - if (assignedDamage0 < 0) { - assignedDamage0 = 0; + // 510.1a Creatures that would assign 0 or less damage don’t assign combat damage at all. + if (assignedDamage0 <= 0) { + return; } Log.debug(this + " - was assigned " + assignedDamage0 + " damage, by " + sourceCard); if (!assignedDamageMap.containsKey(sourceCard)) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index abef410190b..619cafdcd84 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -1056,7 +1056,6 @@ public final class CMatchUI return result.get(); } - @Override public void openView(final TrackableCollection myPlayers) { final GameView gameView = getGameView(); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java index bd844c2b8fc..9fe31a827fa 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java @@ -283,7 +283,7 @@ public class VAssignCombatDamage { * @param isLMB */ private void assignDamageTo(CardView source, final boolean meta, final boolean isAdding) { - if ( !damage.containsKey(source) ) + if (!damage.containsKey(source)) source = null; // If trying to assign to the defender, follow the normal assignment rules @@ -391,7 +391,6 @@ public class VAssignCombatDamage { dt.damage = Math.max(0, addedDamage + dt.damage); } - /** * TODO: Write javadoc for this method. * @return @@ -410,8 +409,7 @@ public class VAssignCombatDamage { int damageLeft = totalDamageToAssign; boolean allHaveLethal = true; - for (DamageTarget dt : defenders) - { + for (DamageTarget dt : defenders) { int dmg = dt.damage; damageLeft -= dmg; int lethal = getDamageToKill(dt.card);