From 899a5747553ea962a74a3088a4792a1e09550d56 Mon Sep 17 00:00:00 2001 From: Sloth Date: Fri, 27 Jan 2012 10:56:38 +0000 Subject: [PATCH] - Added the keyword "CARDNAME must be blocked if able.". - Added Inescapable Brute. --- .gitattributes | 1 + res/cardsfolder/i/inescapable_brute.txt | 12 ++++++++++++ src/main/java/forge/CombatUtil.java | 11 +++++++++-- src/main/java/forge/ComputerUtilBlock.java | 4 +++- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 res/cardsfolder/i/inescapable_brute.txt diff --git a/.gitattributes b/.gitattributes index aa28a400304..fca2f5c274f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4154,6 +4154,7 @@ res/cardsfolder/i/indrik_stomphowler.txt svneol=native#text/plain res/cardsfolder/i/induce_despair.txt -text res/cardsfolder/i/induce_paranoia.txt -text svneol=unset#text/plain res/cardsfolder/i/inertia_bubble.txt svneol=native#text/plain +res/cardsfolder/i/inescapable_brute.txt -text res/cardsfolder/i/inexorable_tide.txt svneol=native#text/plain res/cardsfolder/i/infantry_veteran.txt svneol=native#text/plain res/cardsfolder/i/infected_vermin.txt svneol=native#text/plain diff --git a/res/cardsfolder/i/inescapable_brute.txt b/res/cardsfolder/i/inescapable_brute.txt new file mode 100644 index 00000000000..a2007619ee7 --- /dev/null +++ b/res/cardsfolder/i/inescapable_brute.txt @@ -0,0 +1,12 @@ +Name:Inescapable Brute +ManaCost:5 R +Types:Creature Giant Warrior +Text:no text +PT:3/3 +K:Wither +K:CARDNAME must be blocked if able. +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/inescapable_brute.jpg +SetInfo:SHM|Common|http://magiccards.info/scans/en/shm/95.jpg +Oracle:Wither (This deals damage to creatures in the form of -1/-1 counters.)\nInescapable Brute must be blocked if able. +End \ No newline at end of file diff --git a/src/main/java/forge/CombatUtil.java b/src/main/java/forge/CombatUtil.java index c20809f5304..4c0159bff28 100644 --- a/src/main/java/forge/CombatUtil.java +++ b/src/main/java/forge/CombatUtil.java @@ -452,8 +452,14 @@ public class CombatUtil { return false; } - CardList attackersWithLure = new CardList(combat.getAttackers()); - attackersWithLure = attackersWithLure.getKeyword("All creatures able to block CARDNAME do so."); + CardList attackers = new CardList(combat.getAttackers()); + CardList attackersWithLure = new CardList(); + for (Card attacker : attackers) { + if (attacker.hasStartOfKeyword("All creatures able to block CARDNAME do so.") + || (attacker.hasStartOfKeyword("CARDNAME must be blocked if able.") + && combat.getBlockers(attacker).isEmpty())) + attackersWithLure.add(attacker); + } for (final Card attacker : attackersWithLure) { if (CombatUtil.canBeBlocked(attacker, combat) && CombatUtil.canBlock(attacker, blocker)) { @@ -520,6 +526,7 @@ public class CombatUtil { // if the attacker has no lure effect, but the blocker can block another // attacker with lure, the blocker can't block the former if (!attacker.hasKeyword("All creatures able to block CARDNAME do so.") + && !(attacker.hasKeyword("CARDNAME must be blocked if able.") && combat.getBlockers(attacker).isEmpty()) && !blocker.getMustBlockCards().contains(attacker) && CombatUtil.mustBlockAnAttacker(blocker, combat)) { return false; } diff --git a/src/main/java/forge/ComputerUtilBlock.java b/src/main/java/forge/ComputerUtilBlock.java index 8e6846c3e2d..4b3745254d9 100644 --- a/src/main/java/forge/ComputerUtilBlock.java +++ b/src/main/java/forge/ComputerUtilBlock.java @@ -892,7 +892,9 @@ public class ComputerUtilBlock { for (final Card attacker : ComputerUtilBlock.getAttackers()) { blockers = ComputerUtilBlock.getPossibleBlockers(attacker, chumpBlockers, combat); for (final Card blocker : blockers) { - if (CombatUtil.canBlock(attacker, blocker, combat) && ComputerUtilBlock.getBlockersLeft().contains(blocker)) { + if (CombatUtil.canBlock(attacker, blocker, combat) && ComputerUtilBlock.getBlockersLeft().contains(blocker) + && (CombatUtil.mustBlockAnAttacker(blocker, combat) + || blocker.hasKeyword("CARDNAME blocks each turn if able."))) { combat.addBlocker(attacker, blocker); ComputerUtilBlock.getBlockersLeft().removeAll(blocker); }