diff --git a/.gitattributes b/.gitattributes index 4b5cc22d6c8..7f85ef4f508 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1060,6 +1060,7 @@ res/cardsfolder/disperse.txt -text svneol=native#text/plain res/cardsfolder/dissipate.txt -text svneol=native#text/plain res/cardsfolder/dissipation_field.txt -text svneol=native#text/plain res/cardsfolder/distress.txt -text svneol=native#text/plain +res/cardsfolder/disturbed_burial.txt -text svneol=native#text/plain res/cardsfolder/dive_bomber.txt -text svneol=native#text/plain res/cardsfolder/divebomber_griffin.txt -text svneol=native#text/plain res/cardsfolder/diversionary_tactics.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/disturbed_burial.txt b/res/cardsfolder/disturbed_burial.txt new file mode 100644 index 00000000000..6e050e7cbd8 --- /dev/null +++ b/res/cardsfolder/disturbed_burial.txt @@ -0,0 +1,9 @@ +Name:Disturbed Burial +ManaCost:1 B +Types:Sorcery +Text:no text +K:spReturnTgt:1:Creature:Hand:Return target creature card from your graveyard to your hand. +SVar:Buyback:3 +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/disturbed_burial.jpg +End diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 9ea8e42769d..39a31672123 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -3647,10 +3647,10 @@ public class CardFactory implements NewConstants { /** - * Generic return target card(s) from graveyard to Hand or Battlefield cards + * Generic return target card(s) from graveyard to Hand, Battlefield or Top of Library * spReturnTgt:{Num Cards/Parameters}:{Type}:{To Zone}:{DrawBack}:{Spell Desc} * - * DrawBack and Buyback is not yet implemented. + * DrawBack and X Count/Costs are not yet implemented. */ if (hasKeyword(card, "spReturnTgt") != -1) { int n = hasKeyword(card, "spReturnTgt"); @@ -3694,8 +3694,6 @@ public class CardFactory implements NewConstants { desc = k[5]; } - card.clearSpellAbility(); - final SpellAbility spRtrnTgt = new Spell(card) { private static final long serialVersionUID = 7970018872459137897L; @@ -3848,63 +3846,34 @@ public class CardFactory implements NewConstants { }// getGraveyardList() };// spRtrnTgt - Input target = new Input() { - private static final long serialVersionUID = 816838038180106359L; - - @Override - public void showMessage() { - - CardList grave = getGraveyardList(); - CardList targets = new CardList(); - - if (returnUpTo[0]) { - for (int i = 0; i < numCardsToReturn; i++) { - if (grave.size() > 0) { - Object o = AllZone.Display.getChoiceOptional("Select a card", grave.toArray()); - if (o == null) break; - Card c = (Card) o; - targets.add(c); - grave.remove(c); - } - } - - } else if (grave.size() > numCardsToReturn) { - for (int i = 0; i < numCardsToReturn; i++) { - Object o = AllZone.Display.getChoice("Select a card", grave.toArray()); - Card c = (Card) o; - targets.add(c); - grave.remove(c); - } - - } else if (grave.size() == numCardsToReturn) { - targets = grave; - } - - if (targets.size() > 0) { - spRtrnTgt.setTargetList(targets); - stopSetNext(new Input_PayManaCost(spRtrnTgt)); - } else stop(); - - }// showMessage() - - public CardList getGraveyardList() { - CardList list = new CardList(); - PlayerZone zone = AllZone.getZone(Constant.Zone.Graveyard, card.getController()); - list.addAll(zone.getCards()); - list = list.getValidCards(Tgts); - return list; - } - };// Input + spRtrnTgt.setBeforePayMana(CardFactoryUtil.spReturnTgt_input_targetCards_InGraveyard(card, spRtrnTgt, returnUpTo[0], numCardsToReturn, Tgts)); if (desc.length() > 0) { spRtrnTgt.setDescription(desc); } - spRtrnTgt.setBeforePayMana(target); + + card.clearSpellAbility(); card.addSpellAbility(spRtrnTgt); if (Destination.equals("Hand")) { card.setSVar("PlayMain1", "TRUE"); } + + String bbCost = card.getSVar("Buyback"); + if (!bbCost.equals("")) { + + SpellAbility bbRtrnTgt = spRtrnTgt.copy(); + bbRtrnTgt.setManaCost(CardUtil.addManaCosts(card.getManaCost(), bbCost)); + + StringBuilder sb = new StringBuilder(); + sb.append("Buyback ").append(bbCost).append(" (You may pay an additional ").append(bbCost); + sb.append(" as you cast this spell. If you do, put this card into your hand as it resolves.)"); + bbRtrnTgt.setDescription(sb.toString()); + + bbRtrnTgt.setIsBuyBackAbility(true); + bbRtrnTgt.setBeforePayMana(CardFactoryUtil.spReturnTgt_input_targetCards_InGraveyard(card, bbRtrnTgt, returnUpTo[0], numCardsToReturn, Tgts)); + card.addSpellAbility(bbRtrnTgt); + } }// spReturnTgt diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index 902db4d793c..c07ee7dc71d 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -3007,6 +3007,57 @@ public class CardFactoryUtil { return target; }//input_targetPlayer() + public static Input spReturnTgt_input_targetCards_InGraveyard(final Card card, final SpellAbility spell, final boolean UpTo, final int numCards, final String Tgts[]) { + Input target = new Input() { + private static final long serialVersionUID = 816838038180106359L; + + @Override + public void showMessage() { + + CardList grave = getGraveyardList(); + CardList targets = new CardList(); + + if (UpTo) { + for (int i = 0; i < numCards; i++) { + if (grave.size() > 0) { + Object o = AllZone.Display.getChoiceOptional("Select a card", grave.toArray()); + if (o == null) break; + Card c = (Card) o; + targets.add(c); + grave.remove(c); + } + } + + } else if (grave.size() > numCards) { + for (int i = 0; i < numCards; i++) { + Object o = AllZone.Display.getChoice("Select a card", grave.toArray()); + Card c = (Card) o; + targets.add(c); + grave.remove(c); + } + + } else if (grave.size() == numCards) { + targets = grave; + } + + if (targets.size() > 0) { + spell.setTargetList(targets); + stopSetNext(new Input_PayManaCost(spell)); + } else stop(); + + }// showMessage() + + public CardList getGraveyardList() { + CardList list = new CardList(); + PlayerZone zone = AllZone.getZone(Constant.Zone.Graveyard, card.getController()); + list.addAll(zone.getCards()); + list = list.getValidCards(Tgts); + return list; + } + };// Input + return target; + }//spReturnTgt_input_targetCards_InGraveyard() + public static CardList AI_getHumanCreature(final Card spell, boolean targeted) { CardList creature = new CardList(AllZone.Human_Play.getCards()); creature = creature.getType("Creature");