- RemAIDeck update: next iteration.

This commit is contained in:
Agetian
2017-10-03 05:31:14 +00:00
parent e4f0463299
commit 08d305ebfa
24 changed files with 60 additions and 42 deletions

View File

@@ -1,14 +1,8 @@
package forge.ai; package forge.ai;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import forge.ai.ability.AnimateAi; import forge.ai.ability.AnimateAi;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.game.GameActionUtil; import forge.game.GameActionUtil;
@@ -27,6 +21,10 @@ import forge.game.zone.ZoneType;
import forge.util.MyRandom; import forge.util.MyRandom;
import forge.util.TextUtil; import forge.util.TextUtil;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Set;
public class ComputerUtilCost { public class ComputerUtilCost {
@@ -535,7 +533,7 @@ public class ComputerUtilCost {
if (payer.getLife() > 3 && payer.canPayLife(2)) { if (payer.getLife() > 3 && payer.canPayLife(2)) {
final int landsize = payer.getLandsInPlay().size() + 1; final int landsize = payer.getLandsInPlay().size() + 1;
for (Card c : payer.getCardsIn(ZoneType.Hand)) { for (Card c : payer.getCardsIn(ZoneType.Hand)) {
// if the new land size would equal the CMC of a card in AIs hand, consider playing it untapped, // if the new land size would equal the CMC of a card in AIs hand, consider playing it untapped,
// otherwise don't bother running other checks // otherwise don't bother running other checks
if (landsize != c.getCMC()) { if (landsize != c.getCMC()) {
continue; continue;

View File

@@ -742,6 +742,29 @@ public class SpecialCardAi {
} }
} }
// Mimic Vat
public static class MimicVat {
public static boolean considerExile(final Player ai, final SpellAbility sa) {
final Card source = sa.getHostCard();
final Card exiledWith = source.getImprintedCards().isEmpty() ? null : source.getImprintedCards().getFirst();
final List<Card> defined = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa);
final Card tgt = defined.isEmpty() ? null : defined.get(0);
return exiledWith == null || (tgt != null && ComputerUtilCard.evaluateCreature(tgt) > ComputerUtilCard.evaluateCreature(exiledWith));
}
public static boolean considerCopy(final Player ai, final SpellAbility sa) {
final Card source = sa.getHostCard();
final Card exiledWith = source.getImprintedCards().isEmpty() ? null : source.getImprintedCards().getFirst();
if (exiledWith == null) {
return false;
}
return ComputerUtilCard.doesSpecifiedCreatureAttackAI(ai, exiledWith);
}
}
// Momir Vig, Simic Visionary Avatar // Momir Vig, Simic Visionary Avatar
public static class MomirVigAvatar { public static class MomirVigAvatar {
public static boolean consider(final Player ai, final SpellAbility sa) { public static boolean consider(final Player ai, final SpellAbility sa) {

View File

@@ -756,6 +756,10 @@ public class ChangeZoneAi extends SpellAbilityAi {
* @return a boolean. * @return a boolean.
*/ */
private static boolean knownOriginPlayDrawbackAI(final Player aiPlayer, final SpellAbility sa) { private static boolean knownOriginPlayDrawbackAI(final Player aiPlayer, final SpellAbility sa) {
if ("MimicVat".equals(sa.getParam("AILogic"))) {
return SpecialCardAi.MimicVat.considerExile(aiPlayer, sa);
}
if (!sa.usesTargeting()) { if (!sa.usesTargeting()) {
return true; return true;
} }

View File

@@ -1,27 +1,23 @@
package forge.ai.ability; package forge.ai.ability;
import java.util.List;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.ai.ComputerUtil; import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCard; import forge.ai.ComputerUtilCard;
import forge.ai.SpecialCardAi;
import forge.ai.SpellAbilityAi; import forge.ai.SpellAbilityAi;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.*;
import forge.game.card.CardCollection;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.card.CardUtil;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode; import forge.game.player.PlayerActionConfirmMode;
import forge.game.player.PlayerCollection; import forge.game.player.PlayerCollection;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import java.util.List;
public class CopyPermanentAi extends SpellAbilityAi { public class CopyPermanentAi extends SpellAbilityAi {
@Override @Override
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
@@ -32,6 +28,10 @@ public class CopyPermanentAi extends SpellAbilityAi {
return false; return false;
} }
if ("MimicVat".equals(sa.getParam("AILogic"))) {
return SpecialCardAi.MimicVat.considerCopy(aiPlayer, sa);
}
if (sa.hasParam("AtEOT") && !aiPlayer.getGame().getPhaseHandler().is(PhaseType.MAIN1)) { if (sa.hasParam("AtEOT") && !aiPlayer.getGame().getPhaseHandler().is(PhaseType.MAIN1)) {
return false; return false;
} }

View File

@@ -3,7 +3,6 @@ ManaCost:1 B
Types:Sorcery Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Graveyard | Destination$ Hand | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | SpellDescription$ Return up to two target creature cards from your graveyard to your hand, then discard a card. | SubAbility$ DBDiscard A:SP$ ChangeZone | Cost$ 1 B | Origin$ Graveyard | Destination$ Hand | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | SpellDescription$ Return up to two target creature cards from your graveyard to your hand, then discard a card. | SubAbility$ DBDiscard
SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose
SVar:RemAIDeck:True
DeckHints:Ability$Graveyard & Ability$Discard DeckHints:Ability$Graveyard & Ability$Discard
DeckHas:Ability$Discard DeckHas:Ability$Discard
SVar:Picture:http://www.wizards.com/global/images/magic/general/macabre_waltz.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/macabre_waltz.jpg

View File

@@ -3,6 +3,6 @@ ManaCost:2 R
Types:Creature Human Wizard Types:Creature Human Wizard
PT:2/2 PT:2/2
A:AB$ DealDamage | Cost$ T Discard<1/Random> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to target creature or player. A:AB$ DealDamage | Cost$ T Discard<1/Random> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to target creature or player.
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mage_il_vec.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mage_il_vec.jpg
Oracle:{T}, Discard a card at random: Mage il-Vec deals 1 damage to target creature or player. Oracle:{T}, Discard a card at random: Mage il-Vec deals 1 damage to target creature or player.

View File

@@ -7,6 +7,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
SVar:TrigVote:DB$ Vote | Defined$ Player | VoteGrace$ MagisterofWorthZombify | VoteCondemnation$ MagisterofWorthDestroy | Tied$ MagisterofWorthDestroy | VoteType$ Grace,Condemnation | AILogic$ GraceOrCondemnation SVar:TrigVote:DB$ Vote | Defined$ Player | VoteGrace$ MagisterofWorthZombify | VoteCondemnation$ MagisterofWorthDestroy | Tied$ MagisterofWorthDestroy | VoteType$ Grace,Condemnation | AILogic$ GraceOrCondemnation
SVar:MagisterofWorthZombify:DB$ ChangeZoneAll | ChangeType$ Creature | Origin$ Graveyard | Destination$ Battlefield SVar:MagisterofWorthZombify:DB$ ChangeZoneAll | ChangeType$ Creature | Origin$ Graveyard | Destination$ Battlefield
SVar:MagisterofWorthDestroy:DB$ DestroyAll | ValidCards$ Creature.Other SVar:MagisterofWorthDestroy:DB$ DestroyAll | ValidCards$ Creature.Other
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/magister_of_worth.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/magister_of_worth.jpg
Oracle:Flying\nWill of the council — When Magister of Worth enters the battlefield, starting with you, each player votes for grace or condemnation. If grace gets more votes, each player returns each creature card from his or her graveyard to the battlefield. If condemnation gets more votes or the vote is tied, destroy all creatures other than Magister of Worth. Oracle:Flying\nWill of the council — When Magister of Worth enters the battlefield, starting with you, each player votes for grace or condemnation. If grace gets more votes, each player returns each creature card from his or her graveyard to the battlefield. If condemnation gets more votes or the vote is tied, destroy all creatures other than Magister of Worth.

View File

@@ -8,6 +8,6 @@ SVar:TrigPutCounter:AB$ PutCounter | Cost$ 0 | Defined$ Self | CounterType$ GROW
SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ TriggeredPlayer | NumCards$ X | References$ X | SubAbility$ DBDamage SVar:TrigDraw:AB$ Draw | Cost$ 0 | Defined$ TriggeredPlayer | NumCards$ X | References$ X | SubAbility$ DBDamage
SVar:DBDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X | References$ X SVar:DBDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X | References$ X
SVar:X:Count$CardCounters.GROWTH SVar:X:Count$CardCounters.GROWTH
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/malignant_growth.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/malignant_growth.jpg
Oracle:Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\nAt the beginning of your upkeep, put a growth counter on Malignant Growth.\nAt the beginning of each opponent's draw step, that player draws an additional card for each growth counter on Malignant Growth, then Malignant Growth deals damage to the player equal to the number of cards he or she drew this way. Oracle:Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\nAt the beginning of your upkeep, put a growth counter on Malignant Growth.\nAt the beginning of each opponent's draw step, that player draws an additional card for each growth counter on Malignant Growth, then Malignant Growth deals damage to the player equal to the number of cards he or she drew this way.

View File

@@ -5,6 +5,6 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | E
SVar:TrigFlip:AB$ FlipACoin | Cost$ 0 | Defined$ You | LoseSubAbility$ DBDamage SVar:TrigFlip:AB$ FlipACoin | Cost$ 0 | Defined$ You | LoseSubAbility$ DBDamage
SVar:DBDamage:DB$ DealDamage | Defined$ You | NumDmg$ 3 SVar:DBDamage:DB$ DealDamage | Defined$ You | NumDmg$ 3
A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 2 | SpellDescription$ Add {C}{C} to your mana pool. A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 2 | SpellDescription$ Add {C}{C} to your mana pool.
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_crypt.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_crypt.jpg
Oracle:At the beginning of your upkeep, flip a coin. If you lose the flip, Mana Crypt deals 3 damage to you.\n{T}: Add {C}{C} to your mana pool. Oracle:At the beginning of your upkeep, flip a coin. If you lose the flip, Mana Crypt deals 3 damage to you.\n{T}: Add {C}{C} to your mana pool.

View File

@@ -2,10 +2,10 @@ Name:Mana Echoes
ManaCost:2 R R ManaCost:2 R R
Types:Enchantment Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature | TriggerZones$ Battlefield | TriggerController$ You | OptionalDecider$ You | Execute$ TrigPump | TriggerDescription$ Whenever a creature enters the battlefield, you may add an amount of {C} to your mana pool equal to the number of creatures you control that share a creature type with it. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature | TriggerZones$ Battlefield | TriggerController$ You | OptionalDecider$ You | Execute$ TrigPump | TriggerDescription$ Whenever a creature enters the battlefield, you may add an amount of {C} to your mana pool equal to the number of creatures you control that share a creature type with it.
SVar:TrigPump:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | RememberObjects$ TriggeredCard | SubAbility$ DBMana SVar:TrigPump:DB$ Pump | Defined$ TriggeredCard | RememberObjects$ TriggeredCard | AILogic$ MimicVat | SubAbility$ DBMana
SVar:DBMana:DB$ Mana | Produced$ C | Defined$ You | Amount$ X | References$ X | SubAbility$ DBCleanup SVar:DBMana:DB$ Mana | Produced$ C | Defined$ You | Amount$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$Valid Creature.sharesCreatureTypeWith Remembered+YouCtrl SVar:X:Count$Valid Creature.sharesCreatureTypeWith Remembered+YouCtrl
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_echoes.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_echoes.jpg
Oracle:Whenever a creature enters the battlefield, you may add an amount of {C} to your mana pool equal to the number of creatures you control that share a creature type with it. Oracle:Whenever a creature enters the battlefield, you may add an amount of {C} to your mana pool equal to the number of creatures you control that share a creature type with it.

View File

@@ -3,6 +3,5 @@ ManaCost:2 R
Types:Enchantment Types:Enchantment
T:Mode$ TapsForMana | ValidCard$ Land | Execute$ TrigMana | TriggerZones$ Battlefield | Static$ True | TriggerDescription$ Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced. T:Mode$ TapsForMana | ValidCard$ Land | Execute$ TrigMana | TriggerZones$ Battlefield | Static$ True | TriggerDescription$ Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
SVar:TrigMana:AB$ ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Defined.Triggered | ReflectProperty$ Produced | Defined$ TriggeredPlayer SVar:TrigMana:AB$ ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Defined.Triggered | ReflectProperty$ Produced | Defined$ TriggeredPlayer
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_flare.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_flare.jpg
Oracle:Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced. Oracle:Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.

View File

@@ -7,6 +7,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | O
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigDamage | TriggerDescription$ At the beginning of your draw step, if CARDNAME is tapped, it deals 1 damage to you. T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | IsPresent$ Card.Self+tapped | Execute$ TrigDamage | TriggerDescription$ At the beginning of your draw step, if CARDNAME is tapped, it deals 1 damage to you.
SVar:TrigUntap:AB$Untap | Cost$ 4 | Defined$ Self SVar:TrigUntap:AB$Untap | Cost$ 4 | Defined$ Self
SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ You | NumDmg$ 1 SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ You | NumDmg$ 1
SVar:RemAIDeck:True #TODO: The AI will untap this with Voltaic Key and will correctly untap it when it has enough available mana. Might improve the logic for when the AI actually taps it for mana, perhaps.
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_vault.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_vault.jpg
Oracle:Mana Vault doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {4}. If you do, untap Mana Vault.\nAt the beginning of your draw step, if Mana Vault is tapped, it deals 1 damage to you.\n{T}: Add {C}{C}{C} to your mana pool. Oracle:Mana Vault doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {4}. If you do, untap Mana Vault.\nAt the beginning of your draw step, if Mana Vault is tapped, it deals 1 damage to you.\n{T}: Add {C}{C}{C} to your mana pool.

View File

@@ -3,7 +3,6 @@ ManaCost:1 W W
Types:Legendary Creature Human Wizard Types:Legendary Creature Human Wizard
PT:1/1 PT:1/1
A:AB$ ChangeZone | Cost$ T | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent | SubAbility$ DBChange | SpellDescription$ Exile CARDNAME and target permanent. A:AB$ ChangeZone | Cost$ T | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent | SubAbility$ DBChange | SpellDescription$ Exile CARDNAME and target permanent.
SVar:DBChange:DB$ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Exile SVar:DBChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mangara_of_corondor.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mangara_of_corondor.jpg
Oracle:{T}: Exile Mangara of Corondor and target permanent. Oracle:{T}: Exile Mangara of Corondor and target permanent.

View File

@@ -2,6 +2,5 @@ Name:Marsh Gas
ManaCost:B ManaCost:B
Types:Instant Types:Instant
A:SP$ PumpAll | Cost$ B | ValidCards$ Creature | IsCurse$ True | NumAtt$ -2 | SpellDescription$ All creatures get -2/-0 until end of turn. A:SP$ PumpAll | Cost$ B | ValidCards$ Creature | IsCurse$ True | NumAtt$ -2 | SpellDescription$ All creatures get -2/-0 until end of turn.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/marsh_gas.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/marsh_gas.jpg
Oracle:All creatures get -2/-0 until end of turn. Oracle:All creatures get -2/-0 until end of turn.

View File

@@ -6,6 +6,6 @@ K:Trample
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigIncrementCounters | TriggerDescription$ When CARDNAME enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigIncrementCounters | TriggerDescription$ When CARDNAME enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigIncrementCounters | TriggerController$ TriggeredCardController | Secondary$ True | TriggerDescription$ When CARDNAME enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigIncrementCounters | TriggerController$ TriggeredCardController | Secondary$ True | TriggerDescription$ When CARDNAME enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind.
SVar:TrigIncrementCounters:DB$ PutCounter | ValidTgts$ Permanent,Player | CounterType$ ExistingCounter | EachExistingCounter$ True | CounterNum$ 1 SVar:TrigIncrementCounters:DB$ PutCounter | ValidTgts$ Permanent,Player | CounterType$ ExistingCounter | EachExistingCounter$ True | CounterNum$ 1
SVar:RemAIDeck:True DeckHints:Ability$Counters
SVar:Picture:http://www.wizards.com/global/images/magic/general/maulfist_revolutionary.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/maulfist_revolutionary.jpg
Oracle:Trample\nWhen Maulfist Revolutionary enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind. Oracle:Trample\nWhen Maulfist Revolutionary enters the battlefield or dies, for each kind of counter on target permanent or player, give that permanent or player another counter of that kind.

View File

@@ -7,6 +7,5 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | TriggerZones$ Batt
SVar:TrigExile:AB$ ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig SVar:TrigExile:AB$ ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig
SVar:DelTrig:DB$ DelayedTrigger | DelayedTriggerDefinedPlayer$ You | Mode$ Phase | Phase$ Declare Attackers | Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield tapped and attacking. SVar:DelTrig:DB$ DelayedTrigger | DelayedTriggerDefinedPlayer$ You | Mode$ Phase | Phase$ Declare Attackers | Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield tapped and attacking.
SVar:TrigReturn:DB$ ChangeZone | Defined$ Self | Origin$ Exile | Destination$ Battlefield | Attacking$ True | Tapped$ True | GainControl$ True SVar:TrigReturn:DB$ ChangeZone | Defined$ Self | Origin$ Exile | Destination$ Battlefield | Attacking$ True | Tapped$ True | GainControl$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/meandering_towershell.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/meandering_towershell.jpg
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nWhenever Meandering Towershell attacks, exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the declare attackers step on your next turn. Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nWhenever Meandering Towershell attacks, exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the declare attackers step on your next turn.

View File

@@ -2,6 +2,6 @@ Name:Meteor Storm
ManaCost:R G ManaCost:R G
Types:Enchantment Types:Enchantment
A:AB$ DealDamage | Cost$ 2 R G Discard<2/Random> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature or player. A:AB$ DealDamage | Cost$ 2 R G Discard<2/Random> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature or player.
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/meteor_storm.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/meteor_storm.jpg
Oracle:{2}{R}{G}, Discard two cards at random: Meteor Storm deals 4 damage to target creature or player. Oracle:{2}{R}{G}, Discard two cards at random: Meteor Storm deals 4 damage to target creature or player.

View File

@@ -2,16 +2,16 @@ Name:Mimic Vat
ManaCost:3 ManaCost:3
Types:Artifact Types:Artifact
T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard. T:Mode$ ChangesZone | ValidCard$ Creature.nonToken | Origin$ Battlefield | Destination$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with CARDNAME to its owner's graveyard.
SVar:TrigReturn:AB$ ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | ChangeNum$ 1 | SubAbility$ DBCleanup SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Imprinted | ChangeNum$ 1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBExile SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | SubAbility$ DBExile
SVar:DBExile:DB$ ChangeZone | Cost$ 0 | Imprint$ True | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredCard | ChangeNum$ 1 SVar:DBExile:DB$ ChangeZone | Imprint$ True | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredCard | ChangeNum$ 1 | AILogic$ MimicVat
A:AB$ CopyPermanent | Cost$ 3 T | Defined$ Imprinted.ExiledWithSource | AddSVars$ SneakAttackEOT | PumpKeywords$ Haste | AtEOT$ Exile | SpellDescription$ Create a token that's a copy of a card exiled with CARDNAME. It gains haste. Exile it at the beginning of the next end step. A:AB$ CopyPermanent | Cost$ 3 T | Defined$ Imprinted.ExiledWithSource | AddSVars$ SneakAttackEOT | PumpKeywords$ Haste | AtEOT$ Exile | AILogic$ MimicVat | SpellDescription$ Create a token that's a copy of a card exiled with CARDNAME. It gains haste. Exile it at the beginning of the next end step.
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsImprinted+ExiledWithSource | Execute$ DBForget T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsImprinted+ExiledWithSource | Execute$ DBForget
SVar:DBForget:DB$ Pump | ForgetImprinted$ TriggeredCard SVar:DBForget:DB$ Pump | ForgetImprinted$ TriggeredCard
T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanImprinted | Static$ True T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanImprinted | Static$ True
SVar:DBCleanImprinted:DB$ Cleanup | ClearImprinted$ True SVar:DBCleanImprinted:DB$ Cleanup | ClearImprinted$ True
SVar:NonStackingEffect:True SVar:NonStackingEffect:True
SVar:RemAIDeck:True SVar:RemRandomDeck:True
SVar:SneakAttackEOT:SVar:EndOfTurnLeavePlay:True SVar:SneakAttackEOT:SVar:EndOfTurnLeavePlay:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mimic_vat.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mimic_vat.jpg
Oracle:Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with Mimic Vat to its owner's graveyard.\n{3}, {T}: Create a token that's a copy of a card exiled with Mimic Vat. It gains haste. Exile it at the beginning of the next end step. Oracle:Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with Mimic Vat to its owner's graveyard.\n{3}, {T}: Create a token that's a copy of a card exiled with Mimic Vat. It gains haste. Exile it at the beginning of the next end step.

View File

@@ -3,6 +3,5 @@ ManaCost:X B
Types:Sorcery Types:Sorcery
A:SP$ Discard | Cost$ X B | ValidTgts$ Player | NumCards$ X | References$ X | Mode$ Random | SpellDescription$ Target player discards X cards at random. A:SP$ Discard | Cost$ X B | ValidTgts$ Player | NumCards$ X | References$ X | Mode$ Random | SpellDescription$ Target player discards X cards at random.
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mind_twist.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mind_twist.jpg
Oracle:Target player discards X cards at random. Oracle:Target player discards X cards at random.

View File

@@ -4,6 +4,5 @@ Types:Instant
A:SP$ Counter | Cost$ X U R | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ X | SubAbility$ DBBurn | References$ X | SpellDescription$ Counter target spell unless its controller pays {X}. Mindswipe deals {X} damage to that spell's controller. A:SP$ Counter | Cost$ X U R | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ X | SubAbility$ DBBurn | References$ X | SpellDescription$ Counter target spell unless its controller pays {X}. Mindswipe deals {X} damage to that spell's controller.
SVar:DBBurn:DB$DealDamage | Cost$ 0 | NumDmg$ X | References$ X | Defined$ TargetedController SVar:DBBurn:DB$DealDamage | Cost$ 0 | NumDmg$ X | References$ X | Defined$ TargetedController
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mindswipe.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mindswipe.jpg
Oracle:Counter target spell unless its controller pays {X}. Mindswipe deals X damage to that spell's controller. Oracle:Counter target spell unless its controller pays {X}. Mindswipe deals X damage to that spell's controller.

View File

@@ -5,7 +5,6 @@ A:SP$ Charm | Cost$ B | Choices$ DBDestroy,DBChangeZone,DBLoseLife | CharmNum$ 1
SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature.Cleric | TgtPrompt$ Select target cleric. | SpellDescription$ Destroy target Cleric. SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature.Cleric | TgtPrompt$ Select target cleric. | SpellDescription$ Destroy target Cleric.
SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Creature.Cleric | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Return target Cleric card from your graveyard to your hand. SVar:DBChangeZone:DB$ ChangeZone | ValidTgts$ Creature.Cleric | Origin$ Graveyard | Destination$ Hand | SpellDescription$ Return target Cleric card from your graveyard to your hand.
SVar:DBLoseLife:DB$ LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player to lose 2 life | LifeAmount$ 2 | SpellDescription$ Target player loses 2 life. SVar:DBLoseLife:DB$ LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player to lose 2 life | LifeAmount$ 2 | SpellDescription$ Target player loses 2 life.
SVar:RemAIDeck:True DeckNeeds:Type$Cleric
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/misery_charm.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/misery_charm.jpg
Oracle:Choose one —\n• Destroy target Cleric.\n• Return target Cleric card from your graveyard to your hand.\n• Target player loses 2 life. Oracle:Choose one —\n• Destroy target Cleric.\n• Return target Cleric card from your graveyard to your hand.\n• Target player loses 2 life.

View File

@@ -1,9 +1,8 @@
Name:Molder Name:Molder
ManaCost:X G ManaCost:X G
Types:Instant Types:Instant
A:SP$ Destroy | Cost$ X G | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | NoRegen$ True | SubAbility$ DBGainLife | SpellDescription$ Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life. A:SP$ Destroy | Cost$ X G | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | NoRegen$ True | References$ X | SubAbility$ DBGainLife | SpellDescription$ Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life.
SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ X | References$ X SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ X | References$ X
SVar:X:Targeted$CardManaCost SVar:X:Targeted$CardManaCost
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/molder.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/molder.jpg
Oracle:Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life. Oracle:Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life.

View File

@@ -9,6 +9,8 @@ SVar:PayThePiper:DB$ Animate | Defined$ Targeted | Permanent$ True | Keywords$ A
SVar:TrigMusicianPay:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ MusiciansSpite | Secondary$ True | TriggerDescription$ At the beginning of your upkeep, destroy this creature unless you pay 1 for each music counter on it. SVar:TrigMusicianPay:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ MusiciansSpite | Secondary$ True | TriggerDescription$ At the beginning of your upkeep, destroy this creature unless you pay 1 for each music counter on it.
SVar:MusiciansSpite:AB$ Destroy | Cost$ 0 | Defined$ Self | UnlessCost$ MusicX | UnlessPayer$ You | References$ MusicX SVar:MusiciansSpite:AB$ Destroy | Cost$ 0 | Defined$ Self | UnlessCost$ MusicX | UnlessPayer$ You | References$ MusicX
SVar:MusicX:Count$CardCounters.MUSIC SVar:MusicX:Count$CardCounters.MUSIC
SVar:RemAIDeck:True SVar:NeedsToPlayVar:Z GE5
SVar:Z:Count$Valid Land.YouCtrl+inZoneBattlefield
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/musician.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/musician.jpg
Oracle:Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\n{T}: Put a music counter on target creature. If it doesn't have "At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it," it gains that ability. Oracle:Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\n{T}: Put a music counter on target creature. If it doesn't have "At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it," it gains that ability.

View File

@@ -6,6 +6,5 @@ T:Mode$ ChangesZone | ValidCard$ Card.wasCastFromHand+Self | Destination$ Battle
SVar:ETBCounter:AB$PutCounter | Cost$ 0 | Defined$ Self | CounterType$ DIVINITY | CounterNum$ 1 SVar:ETBCounter:AB$PutCounter | Cost$ 0 | Defined$ Self | CounterType$ DIVINITY | CounterNum$ 1
S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_DIVINITY | AddKeyword$ Indestructible | Description$ CARDNAME has indestructible as long as it has a divinity counter on it. S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_DIVINITY | AddKeyword$ Indestructible | Description$ CARDNAME has indestructible as long as it has a divinity counter on it.
A:AB$DestroyAll | Cost$ SubCounter<1/DIVINITY> | ValidCards$ Land | SpellDescription$ Destroy all lands. A:AB$DestroyAll | Cost$ SubCounter<1/DIVINITY> | ValidCards$ Land | SpellDescription$ Destroy all lands.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/myojin_of_infinite_rage.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/myojin_of_infinite_rage.jpg
Oracle:Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand.\nMyojin of Infinite Rage has indestructible as long as it has a divinity counter on it.\nRemove a divinity counter from Myojin of Infinite Rage: Destroy all lands. Oracle:Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand.\nMyojin of Infinite Rage has indestructible as long as it has a divinity counter on it.\nRemove a divinity counter from Myojin of Infinite Rage: Destroy all lands.