diff --git a/.gitattributes b/.gitattributes index 68deb916269..522974ebe77 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2930,6 +2930,7 @@ res/cardsfolder/marsh_threader.txt -text svneol=native#text/plain res/cardsfolder/marsh_viper.txt -text svneol=native#text/plain res/cardsfolder/marshaling_cry.txt -text svneol=native#text/plain res/cardsfolder/martial_coup.txt -text svneol=native#text/plain +res/cardsfolder/masako_the_humorless.txt -text svneol=native#text/plain res/cardsfolder/mask_of_law_and_grace.txt -text svneol=native#text/plain res/cardsfolder/mask_of_riddles.txt -text svneol=native#text/plain res/cardsfolder/masked_admirers.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/masako_the_humorless.txt b/res/cardsfolder/masako_the_humorless.txt new file mode 100644 index 00000000000..7bc9e2636c5 --- /dev/null +++ b/res/cardsfolder/masako_the_humorless.txt @@ -0,0 +1,9 @@ +Name:Masako the Humorless +ManaCost:2 W +Types:Legendary Creature Human Advisor +Text:Tapped creatures you control can block as though they were untapped. +PT:2/1 +K:Flash +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/masako_the_humorless.jpg +End \ No newline at end of file diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index ca11d5b854a..517c0ace7dc 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -11888,7 +11888,7 @@ public class CardFactory_Creatures { @Override public boolean canPlayAI() { - return !card.getType().contains("Spirit"); + return !card.getType().contains("Spirit") && super.canPlayAI(); } };// ability1 @@ -11901,7 +11901,7 @@ public class CardFactory_Creatures { Ability ability2 = new Ability(card, "RW RW RW") { @Override public void resolve() { - if(card.getType().contains("Spirit") || card.getKeyword().contains("Changeling")) { + if(card.isType("Spirit")) { boolean artifact = false; card.setBaseAttack(4); card.setBaseDefense(4); @@ -11922,12 +11922,12 @@ public class CardFactory_Creatures { @Override public boolean canPlay() { - return card.getType().contains("Spirit") || card.getKeyword().contains("Changeling") && super.canPlay(); + return card.isType("Spirit") && super.canPlay(); } @Override public boolean canPlayAI() { - return !card.getType().contains("Warrior"); + return !card.getType().contains("Warrior") && super.canPlayAI(); } };// ability2 @@ -11940,7 +11940,7 @@ public class CardFactory_Creatures { Ability ability3 = new Ability(card, "RW RW RW RW RW RW") { @Override public void resolve() { - if(card.getType().contains("Warrior") || card.getKeyword().contains("Changeling")) { + if(card.isType("Warrior")) { boolean artifact = false; card.setBaseAttack(8); card.setBaseDefense(8); @@ -11962,12 +11962,12 @@ public class CardFactory_Creatures { @Override public boolean canPlay() { - return card.getType().contains("Warrior") || card.getKeyword().contains("Changeling") && super.canPlay(); + return card.isType("Warrior") && super.canPlay(); } @Override public boolean canPlayAI() { - return !card.getType().contains("Avatar"); + return !card.getType().contains("Avatar") && super.canPlayAI(); } };// ability3 diff --git a/src/forge/CombatUtil.java b/src/forge/CombatUtil.java index d3cab992061..8c5b1eb0030 100644 --- a/src/forge/CombatUtil.java +++ b/src/forge/CombatUtil.java @@ -17,7 +17,7 @@ public class CombatUtil { if(blocker == null) return false; - if(blocker.isTapped()) return false; + if(blocker.isTapped() && !AllZoneUtil.isCardInPlay("Masako the Humorless",blocker.getController())) return false; if(blocker.getKeyword().contains("CARDNAME can't block.") || blocker.getKeyword().contains("CARDNAME can't attack or block.")) return false; @@ -294,6 +294,7 @@ public class CombatUtil { return true; }//canBlock() + public static boolean canAttack(Card c) { if(AllZoneUtil.isCardInPlay("Peacekeeper")) return false; @@ -2186,7 +2187,8 @@ public class CombatUtil { final int blockers = AllZone.Combat.getBlockers(a).size(); - if(a.getKeyword().contains("Whenever CARDNAME becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.")) { + if(a.getKeyword().contains( + "Whenever CARDNAME becomes blocked, it gets +1/+1 until end of turn for each creature blocking it.")) { Ability ability = new Ability(a, "0") { @Override public void resolve() { diff --git a/src/forge/ComputerUtil_Attack2.java b/src/forge/ComputerUtil_Attack2.java index 02e1cab0306..05050b4518a 100644 --- a/src/forge/ComputerUtil_Attack2.java +++ b/src/forge/ComputerUtil_Attack2.java @@ -28,8 +28,8 @@ public class ComputerUtil_Attack2 { computerList = new CardList(possibleAttackers.toArray()); computerList = computerList.getType("Creature"); - attackers = getUntappedCreatures(possibleAttackers, true); - blockers = getUntappedCreatures(possibleBlockers , false); + attackers = getPossibleAttackers(possibleAttackers); + blockers = getPossibleBlockers(possibleBlockers); this.blockerLife = blockerLife; final ArrayList valuable = new ArrayList(); @@ -45,18 +45,23 @@ public class ComputerUtil_Attack2 { }); }//constructor - public CardList getUntappedCreatures(CardList in, final boolean checkCanAttack) + public CardList getPossibleAttackers(CardList in) + { + CardList list = new CardList(in.toArray()); + list = list.filter(new CardListFilter() + { + public boolean addCard(Card c) { return c.isCreature() && CombatUtil.canAttack(c); } + }); + return list; + }//getUntappedCreatures() + + public CardList getPossibleBlockers(CardList in) { CardList list = new CardList(in.toArray()); list = list.filter(new CardListFilter() { - public boolean addCard(Card c) - { - boolean b = c.isCreature() && c.isUntapped(); + public boolean addCard(Card c) { return c.isCreature() && CombatUtil.canBlock(c); } - if(checkCanAttack) return b && CombatUtil.canAttack(c); - else return b && CombatUtil.canBlock(c); - } }); return list; }//getUntappedCreatures() diff --git a/src/forge/Input_Block.java b/src/forge/Input_Block.java index 52132b5a958..4480fd63868 100644 --- a/src/forge/Input_Block.java +++ b/src/forge/Input_Block.java @@ -68,8 +68,8 @@ public class Input_Block extends Input { //is attacking? if(CardUtil.toList(AllZone.Combat.getAttackers()).contains(card)) { currentAttacker = card; - } else if(zone.is(Constant.Zone.Battlefield, AllZone.HumanPlayer) && card.isCreature() && card.isUntapped() - && CombatUtil.canBlock(currentAttacker, card)) { + } else if(zone.is(Constant.Zone.Battlefield, AllZone.HumanPlayer) && card.isCreature() + && CombatUtil.canBlock(currentAttacker, card)) { if(currentAttacker != null && (!allBlocking.contains(card))) { allBlocking.add(card); AllZone.Combat.addBlocker(currentAttacker, card);