diff --git a/res/card-pictures.txt b/res/card-pictures.txt index b2dc1fa7add..d6d797cf8ef 100644 --- a/res/card-pictures.txt +++ b/res/card-pictures.txt @@ -38,6 +38,10 @@ snow_covered_mountain.jpg http://www.wizards.com/global/images/magic/gene snow_covered_mountain1.jpg http://www.wizards.com/global/images/magic/general/snow_covered_mountain.jpg snow_covered_mountain2.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg snow_covered_mountain3.jpg http://www.magickartenmarkt.de/img/cards/Ice_Age/snow_covered_mountain.jpg +melancholy.jpg http://www.wizards.com/global/images/magic/general/melancholy.jpg +mystic_restraints.jpg http://www.wizards.com/global/images/magic/general/mystic_restraints.jpg +roots.jpg http://www.wizards.com/global/images/magic/general/roots.jpg +thirst.jpg http://www.wizards.com/global/images/magic/general/thirst.jpg eldrazi_conscription.jpg http://www.wizards.com/global/images/magic/general/eldrazi_conscription.jpg brood_birthing.jpg http://www.wizards.com/global/images/magic/general/brood_birthing.jpg skittering_invasion.jpg http://www.wizards.com/global/images/magic/general/skittering_invasion.jpg diff --git a/res/cards.txt b/res/cards.txt index 92e54fdbe73..fef15c521f4 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -1,3 +1,34 @@ +Melancholy +2 B +Enchantment Aura +Enchanted creature doesn't untap during its controller's untap step. +Enchant creature +At the beginning of your upkeep, sacrifice Melancholy unless you pay:B +When CARDNAME enters the battlefield, tap enchanted creature. + +Mystic Restraints +2 U U +Enchantment Aura +Enchanted creature doesn't untap during its controller's untap step. +Flash +Enchant creature +When CARDNAME enters the battlefield, tap enchanted creature. + +Roots +3 G +Enchantment Aura +Enchanted creature doesn't untap during its controller's untap step. +Enchant creature without flying +When CARDNAME enters the battlefield, tap enchanted creature. + +Thirst +2 U +Enchantment Aura +Enchanted creature doesn't untap during its controller's untap step. +Enchant creature +At the beginning of your upkeep, sacrifice Thirst unless you pay:U +When CARDNAME enters the battlefield, tap enchanted creature. + Death Cultist B Creature Human Wizard diff --git a/src/forge/CardFactory_Auras.java b/src/forge/CardFactory_Auras.java index 32948a90cd3..95ca7b29c8f 100644 --- a/src/forge/CardFactory_Auras.java +++ b/src/forge/CardFactory_Auras.java @@ -1253,10 +1253,24 @@ class CardFactory_Auras { }//*************** END ************ END ************************** //*************** START *********** START ************************** - else if (cardName.equals("Entangling Vines") || cardName.equals("Glimmerdust Nap")) { + else if (cardName.equals("Entangling Vines") || cardName.equals("Glimmerdust Nap") || + cardName.equals("Melancholy") || cardName.equals("Mystic Restraints") || + cardName.equals("Roots") || cardName.equals("Thirst")) { final SpellAbility spell = new Spell(card) { private static final long serialVersionUID = 843412563175285562L; + + // for flash, which is not working through the keyword for some reason + // if not flash then limit to main 1 and 2 on controller's turn and card in hand + @Override + public boolean canPlay() { + return (card.getKeyword().contains("Flash") && (AllZone.GameAction.isCardInZone(card, AllZone.Human_Hand) || + AllZone.GameAction.isCardInZone(card, AllZone.Computer_Hand)) + || + (! card.getKeyword().contains("Flash") && (card.getController().equals(AllZone.Phase.getActivePlayer()) && + (AllZone.GameAction.isCardInZone(card, AllZone.Human_Hand) || AllZone.GameAction.isCardInZone(card, AllZone.Computer_Hand)) && + (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) || AllZone.Phase.getPhase().equals(Constant.Phase.Main2))))); + } @Override public boolean canPlayAI() { @@ -1264,16 +1278,34 @@ class CardFactory_Auras { CardList list = new CardList(AllZone.Human_Play.getCards()); // Target human creature list = list.filter(new CardListFilter() { public boolean addCard(Card c) { - return c.isCreature() && c.isTapped() && CardFactoryUtil.canTarget(card, c) && + return c.isCreature() && CardFactoryUtil.canTarget(card, c) && !c.getKeyword().contains("CARDNAME doesn't untap during your untap step."); } }); + + if (card.getKeyword().contains("Enchant tapped creature")) { + list = list.filter(new CardListFilter() { + public boolean addCard(Card c) { + return c.isTapped(); + } + }); + } + + if (card.getKeyword().contains("Enchant creature without flying")) { + list = list.filter(new CardListFilter() { + public boolean addCard(Card c) { + return ! c.getKeyword().contains("Flying"); + } + }); + } if (list.isEmpty()) { return false; } else { CardListUtil.sortAttack(list); - CardListUtil.sortFlying(list); + if (! card.getKeyword().contains("Enchant creature without flying")) { + CardListUtil.sortFlying(list); + } setTargetCard(list.get(0)); } return true; @@ -1286,8 +1318,12 @@ class CardFactory_Auras { Card c = getTargetCard(); - if (AllZone.GameAction.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) card.enchantCard(c); - + if (AllZone.GameAction.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) { + if (card.getKeyword().contains("When CARDNAME enters the battlefield, tap enchanted creature.")) { + c.tap(); + } + card.enchantCard(c); + } }//resolve() };//SpellAbility card.clearSpellAbility(); @@ -1340,11 +1376,31 @@ class CardFactory_Auras { creatures.addAll(hum.getCards()); creatures = creatures.filter(new CardListFilter() { public boolean addCard(Card c) { - return c.isCreature() && c.isTapped() && CardFactoryUtil.canTarget(card, c); + return c.isCreature() && CardFactoryUtil.canTarget(card, c); } }); - stopSetNext(CardFactoryUtil.input_targetSpecific(spell, creatures, "Select target tapped creature", true, false)); + String instruction = "Select target creature"; + + if (card.getKeyword().contains("Enchant tapped creature")) { + instruction = "Select target tapped creature"; + creatures = creatures.filter(new CardListFilter() { + public boolean addCard(Card c) { + return c.isTapped(); + } + }); + } + + if (card.getKeyword().contains("Enchant creature without flying")) { + instruction = "Select target creature without flying"; + creatures = creatures.filter(new CardListFilter() { + public boolean addCard(Card c) { + return ! c.getKeyword().contains("Flying"); + } + }); + } + + stopSetNext(CardFactoryUtil.input_targetSpecific(spell, creatures, instruction, true, false)); } }; card.addEnchantCommand(onEnchant);