- Added Maelstrom Archangel.

This commit is contained in:
Sloth
2012-02-18 09:29:49 +00:00
parent b2e38212f6
commit de20212f43
6 changed files with 100 additions and 54 deletions

1
.gitattributes vendored
View File

@@ -5194,6 +5194,7 @@ res/cardsfolder/m/mad_dog.txt -text svneol=unset#text/plain
res/cardsfolder/m/madblind_mountain.txt -text res/cardsfolder/m/madblind_mountain.txt -text
res/cardsfolder/m/maddening_wind.txt svneol=native#text/plain res/cardsfolder/m/maddening_wind.txt svneol=native#text/plain
res/cardsfolder/m/madrush_cyclops.txt svneol=native#text/plain res/cardsfolder/m/madrush_cyclops.txt svneol=native#text/plain
res/cardsfolder/m/maelstrom_archangel.txt -text
res/cardsfolder/m/maelstrom_djinn.txt svneol=native#text/plain res/cardsfolder/m/maelstrom_djinn.txt svneol=native#text/plain
res/cardsfolder/m/maelstrom_nexus.txt svneol=native#text/plain res/cardsfolder/m/maelstrom_nexus.txt svneol=native#text/plain
res/cardsfolder/m/maelstrom_pulse.txt svneol=native#text/plain res/cardsfolder/m/maelstrom_pulse.txt svneol=native#text/plain

View File

@@ -13,4 +13,6 @@ SVar:JaddiLifestriderZ:SVar$JaddiLifestriderY/Times.2
SVar:PlayMain1:FALSE SVar:PlayMain1:FALSE
SVar:Rarity:Uncommon SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/jaddi_lifestrider.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/jaddi_lifestrider.jpg
SetInfo:ROE|Uncommon|http://magiccards.info/scans/en/roe/189.jpg
Oracle:When Jaddi Lifestrider enters the battlefield, you may tap any number of untapped creatures you control. You gain 2 life for each creature tapped this way.
End End

View File

@@ -0,0 +1,13 @@
Name:Maelstrom Archangel
ManaCost:W U B R G
Types:Creature Angel
Text:no text
PT:5/5
K:Flying
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPlay | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may cast a nonland card from your hand without paying its mana cost.
SVar:TrigPlay:DB$ Play | Valid$ Card.nonLand+YouCtrl | ValidZone$ Hand | WithoutManaCost$ True
SVar:Rarity:Mythic
SVar:Picture:http://www.wizards.com/global/images/magic/general/maelstrom_archangel.jpg
SetInfo:CFX|Mythic|http://magiccards.info/scans/en/cfx/115.jpg
Oracle:Flying\nWhenever Maelstrom Archangel deals combat damage to a player, you may cast a nonland card from your hand without paying its mana cost.
End

View File

@@ -12,4 +12,6 @@ SVar:RemAIDeck:True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Rarity:Rare SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/sisters_of_stone_death.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/sisters_of_stone_death.jpg
SetInfo:RAV|Rare|http://magiccards.info/scans/en/rav/231.jpg
Oracle:{G}: Target creature blocks Sisters of Stone Death this turn if able.\n{B}{G}: Exile target creature blocking or blocked by Sisters of Stone Death.\n{2}{B}: Put a creature card exiled with Sisters of Stone Death onto the battlefield under your control.
End End

View File

@@ -10,4 +10,6 @@ SVar:TrigPlay:DB$ Play | Defined$ Targeted
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Rarity:Rare SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/toshiro_umezawa.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/toshiro_umezawa.jpg
SetInfo:BOK|Rare|http://magiccards.info/scans/en/bok/89.jpg
Oracle:Bushido 1 (When this blocks or becomes blocked, it gets +1/+1 until end of turn.)\nWhenever a creature an opponent controls dies, you may cast target instant card from your graveyard. If that card would be put into a graveyard this turn, exile it instead.
End End

View File

@@ -40,6 +40,7 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell; import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target; import forge.card.spellability.Target;
import forge.gui.GuiUtils;
import forge.util.MyRandom; import forge.util.MyRandom;
/** /**
* <p> * <p>
@@ -275,7 +276,7 @@ public final class AbilityFactoryPlay {
return false; return false;
} }
tgt.addTarget(CardFactoryUtil.getBestAI(cards)); tgt.addTarget(CardFactoryUtil.getBestAI(cards));
} else { } else if (!params.containsKey("Valid")) {
cards = new CardList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa)); cards = new CardList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa));
if (cards.isEmpty()) { if (cards.isEmpty()) {
return false; return false;
@@ -299,7 +300,11 @@ public final class AbilityFactoryPlay {
*/ */
private static boolean playTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) { private static boolean playTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
return false; if (mandatory) {
return true;
}
return playCanPlayAI(af, sa);
} }
/** /**
@@ -314,30 +319,50 @@ public final class AbilityFactoryPlay {
*/ */
private static void playResolve(final AbilityFactory af, final SpellAbility sa) { private static void playResolve(final AbilityFactory af, final SpellAbility sa) {
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
final Card card = af.getHostCard(); final Card source = sa.getSourceCard();
Player controller = sa.getActivatingPlayer(); Player controller = sa.getActivatingPlayer();
int amount = 1;
if (params.containsKey("Controller")) { if (params.containsKey("Amount")) {
controller = AbilityFactory.getDefinedPlayers(card, params.get("Controller"), sa).get(0); amount = AbilityFactory.calculateAmount(source, params.get("Amount"), sa);
} }
ArrayList<Card> tgtCards; if (params.containsKey("Controller")) {
controller = AbilityFactory.getDefinedPlayers(source, params.get("Controller"), sa).get(0);
}
CardList tgtCards = new CardList();
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (params.containsKey("Valid")) {
tgtCards = tgt.getTargetCards(); Zone zone = Zone.Hand;
} else { if (params.containsKey("ValidZone")) {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); zone = Zone.smartValueOf(params.get("ValidZone"));
}
tgtCards = AllZoneUtil.getCardsIn(zone);
tgtCards = tgtCards.getValidCards(params.get("Valid"), controller, source);
} else if (params.containsKey("Defined")) {
tgtCards = new CardList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa));
} else if (tgt != null) {
tgtCards = new CardList(tgt.getTargetCards());
} }
if (tgtCards.isEmpty()) { if (tgtCards.isEmpty()) {
return; return;
} }
for (int i = 0; i < amount; i++) {
Card tgtCard = tgtCards.get(0); Card tgtCard = tgtCards.get(0);
if (tgtCards.size() > 1) {
if (controller.isHuman()) {
tgtCard = (Card) GuiUtils.getChoice("Select a card to play", tgtCards.toArray());
} else {
tgtCard = CardFactoryUtil.getBestAI(tgtCards);
}
}
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("Do you want to play " + tgtCard + "?"); sb.append("Do you want to play " + tgtCard + "?");
if (controller.isHuman() && params.containsKey("Optional") && !GameActionUtil.showYesNoDialog(card, sb.toString())) { if (controller.isHuman() && params.containsKey("Optional")
&& !GameActionUtil.showYesNoDialog(source, sb.toString())) {
return; return;
} }
if (tgtCard.isLand()) { if (tgtCard.isLand()) {
@@ -381,6 +406,7 @@ public final class AbilityFactoryPlay {
ComputerUtil.playStack(tgtSA); ComputerUtil.playStack(tgtSA);
} }
} }
}
} // end resolve } // end resolve
} // end class AbilityFactory_Copy } // end class AbilityFactory_Copy