mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Card cleanup (#1604)
This commit is contained in:
@@ -393,10 +393,9 @@ public class ComputerUtilMana {
|
||||
String manaProduced = toPay.isSnow() && hostCard.isSnow() ? "S" : GameActionUtil.generatedTotalMana(saPayment);
|
||||
//String originalProduced = manaProduced;
|
||||
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.newMap();
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromPlayer(ai);
|
||||
repParams.put(AbilityKey.Mana, manaProduced);
|
||||
repParams.put(AbilityKey.Affected, hostCard);
|
||||
repParams.put(AbilityKey.Player, ai);
|
||||
repParams.put(AbilityKey.AbilityMana, saPayment); // RootAbility
|
||||
|
||||
// TODO Damping Sphere might replace later?
|
||||
@@ -1617,10 +1616,9 @@ public class ComputerUtilMana {
|
||||
|
||||
// setup produce mana replacement effects
|
||||
String origin = mp.getOrigProduced();
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.newMap();
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromPlayer(ai);
|
||||
repParams.put(AbilityKey.Mana, origin);
|
||||
repParams.put(AbilityKey.Affected, sourceCard);
|
||||
repParams.put(AbilityKey.Player, ai);
|
||||
repParams.put(AbilityKey.AbilityMana, m); // RootAbility
|
||||
|
||||
List<ReplacementEffect> reList = game.getReplacementHandler().getReplacementList(ReplacementType.ProduceMana, repParams, ReplacementLayer.Other);
|
||||
|
||||
@@ -123,8 +123,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
return doSacAndReturnFromGraveLogic(aiPlayer, sa);
|
||||
} else if (aiLogic.equals("Necropotence")) {
|
||||
return SpecialCardAi.Necropotence.consider(aiPlayer, sa);
|
||||
} else if (aiLogic.equals("SameName")) { // Declaration in Stone
|
||||
return doSameNameLogic(aiPlayer, sa);
|
||||
} else if (aiLogic.equals("ReanimateAll")) {
|
||||
return SpecialCardAi.LivingDeath.consider(aiPlayer, sa);
|
||||
} else if (aiLogic.equals("TheScarabGod")) {
|
||||
@@ -1855,80 +1853,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean doSameNameLogic(Player aiPlayer, SpellAbility sa) {
|
||||
final Game game = aiPlayer.getGame();
|
||||
final Card source = sa.getHostCard();
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0);
|
||||
CardCollection list = CardLists.getValidCards(game.getCardsIn(origin), tgt.getValidTgts(), aiPlayer,
|
||||
source, sa);
|
||||
list = CardLists.filterControlledBy(list, aiPlayer.getOpponents());
|
||||
if (list.isEmpty()) {
|
||||
return false; // no valid targets
|
||||
}
|
||||
|
||||
Map<Player, Map.Entry<String, Integer>> data = Maps.newHashMap();
|
||||
|
||||
// need to filter for the opponents first
|
||||
for (final Player opp : aiPlayer.getOpponents()) {
|
||||
CardCollection oppList = CardLists.filterControlledBy(list, opp);
|
||||
|
||||
// no cards
|
||||
if (oppList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Compute value for each possible target
|
||||
Map<String, Integer> values = ComputerUtilCard.evaluateCreatureListByName(oppList);
|
||||
|
||||
// reject if none of them can be targeted
|
||||
oppList = CardLists.filter(oppList, CardPredicates.isTargetableBy(sa));
|
||||
// none can be targeted
|
||||
if (oppList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<String> toRemove = Lists.newArrayList();
|
||||
for (final String name : values.keySet()) {
|
||||
if (!Iterables.any(oppList, CardPredicates.nameEquals(name))) {
|
||||
toRemove.add(name);
|
||||
}
|
||||
}
|
||||
values.keySet().removeAll(toRemove);
|
||||
|
||||
// JAVA 1.8 use Map.Entry.comparingByValue()
|
||||
data.put(opp, Collections.max(values.entrySet(), new Comparator<Map.Entry<String, Integer>>() {
|
||||
@Override
|
||||
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
|
||||
return o1.getValue() - o2.getValue();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
if (!data.isEmpty()) {
|
||||
// JAVA 1.8 use Map.Entry.comparingByValue() somehow
|
||||
Map.Entry<Player, Map.Entry<String, Integer>> max = Collections.max(data.entrySet(), new Comparator<Map.Entry<Player, Map.Entry<String, Integer>>>() {
|
||||
@Override
|
||||
public int compare(Map.Entry<Player, Map.Entry<String, Integer>> o1, Map.Entry<Player, Map.Entry<String, Integer>> o2) {
|
||||
return o1.getValue().getValue() - o2.getValue().getValue();
|
||||
}
|
||||
});
|
||||
|
||||
// filter list again by the opponent and a creature of the wanted name that can be targeted
|
||||
list = CardLists.filter(CardLists.filterControlledBy(list, max.getKey()),
|
||||
CardPredicates.nameEquals(max.getValue().getKey()), CardPredicates.isTargetableBy(sa));
|
||||
|
||||
// list should contain only one element or zero
|
||||
sa.resetTargets();
|
||||
for (Card c : list) {
|
||||
sa.getTargets().add(c);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean doReturnCommanderLogic(SpellAbility sa, Player aiPlayer) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<AbilityKey, Object> originalParams = (Map<AbilityKey, Object>)sa.getReplacingObject(AbilityKey.OriginalParams);
|
||||
|
||||
@@ -2,7 +2,10 @@ package forge.ai.ability;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.ai.*;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -23,6 +26,8 @@ import forge.game.zone.ZoneType;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -451,6 +456,8 @@ public class PumpAi extends PumpAiBase {
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (sa.getParam("AILogic").equals("SameName")) {
|
||||
return doSameNameLogic(ai, sa);
|
||||
} else if (sa.getParam("AILogic").equals("SacOneEach")) {
|
||||
// each player sacrifices one permanent, e.g. Vaevictis, Asmadi the Dire - grab the worst for allied and
|
||||
// the best for opponents
|
||||
@@ -788,4 +795,78 @@ public class PumpAi extends PumpAiBase {
|
||||
//and the pump isn't mandatory
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean doSameNameLogic(Player aiPlayer, SpellAbility sa) {
|
||||
final Game game = aiPlayer.getGame();
|
||||
final Card source = sa.getHostCard();
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final ZoneType origin = ZoneType.listValueOf(sa.getSubAbility().getParam("Origin")).get(0);
|
||||
CardCollection list = CardLists.getValidCards(game.getCardsIn(origin), tgt.getValidTgts(), aiPlayer,
|
||||
source, sa);
|
||||
list = CardLists.filterControlledBy(list, aiPlayer.getOpponents());
|
||||
if (list.isEmpty()) {
|
||||
return false; // no valid targets
|
||||
}
|
||||
|
||||
Map<Player, Map.Entry<String, Integer>> data = Maps.newHashMap();
|
||||
|
||||
// need to filter for the opponents first
|
||||
for (final Player opp : aiPlayer.getOpponents()) {
|
||||
CardCollection oppList = CardLists.filterControlledBy(list, opp);
|
||||
|
||||
// no cards
|
||||
if (oppList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Compute value for each possible target
|
||||
Map<String, Integer> values = ComputerUtilCard.evaluateCreatureListByName(oppList);
|
||||
|
||||
// reject if none of them can be targeted
|
||||
oppList = CardLists.filter(oppList, CardPredicates.isTargetableBy(sa));
|
||||
// none can be targeted
|
||||
if (oppList.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<String> toRemove = Lists.newArrayList();
|
||||
for (final String name : values.keySet()) {
|
||||
if (!Iterables.any(oppList, CardPredicates.nameEquals(name))) {
|
||||
toRemove.add(name);
|
||||
}
|
||||
}
|
||||
values.keySet().removeAll(toRemove);
|
||||
|
||||
// JAVA 1.8 use Map.Entry.comparingByValue()
|
||||
data.put(opp, Collections.max(values.entrySet(), new Comparator<Map.Entry<String, Integer>>() {
|
||||
@Override
|
||||
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
|
||||
return o1.getValue() - o2.getValue();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
if (!data.isEmpty()) {
|
||||
// JAVA 1.8 use Map.Entry.comparingByValue() somehow
|
||||
Map.Entry<Player, Map.Entry<String, Integer>> max = Collections.max(data.entrySet(), new Comparator<Map.Entry<Player, Map.Entry<String, Integer>>>() {
|
||||
@Override
|
||||
public int compare(Map.Entry<Player, Map.Entry<String, Integer>> o1, Map.Entry<Player, Map.Entry<String, Integer>> o2) {
|
||||
return o1.getValue().getValue() - o2.getValue().getValue();
|
||||
}
|
||||
});
|
||||
|
||||
// filter list again by the opponent and a creature of the wanted name that can be targeted
|
||||
list = CardLists.filter(CardLists.filterControlledBy(list, max.getKey()),
|
||||
CardPredicates.nameEquals(max.getValue().getKey()), CardPredicates.isTargetableBy(sa));
|
||||
|
||||
// list should contain only one element or zero
|
||||
sa.resetTargets();
|
||||
for (Card c : list) {
|
||||
sa.getTargets().add(c);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ import forge.card.ColorSet;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.mana.ManaAtom;
|
||||
import forge.card.mana.ManaCostShard;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameActionUtil;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.ApiType;
|
||||
@@ -37,7 +36,7 @@ import forge.game.card.CardUtil;
|
||||
import forge.game.mana.Mana;
|
||||
import forge.game.mana.ManaPool;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.replacement.ReplacementEffect;
|
||||
import forge.game.replacement.ReplacementLayer;
|
||||
import forge.game.replacement.ReplacementType;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
@@ -636,24 +635,13 @@ public class AbilityManaPart implements java.io.Serializable {
|
||||
// check for produce mana replacement effects - they mess this up, so just use the mana ability
|
||||
final Card source = am.getHostCard();
|
||||
final Player activator = am.getActivatingPlayer();
|
||||
final Game g = source.getGame();
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.newMap();
|
||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromPlayer(activator);
|
||||
repParams.put(AbilityKey.Mana, getOrigProduced());
|
||||
repParams.put(AbilityKey.Affected, source);
|
||||
repParams.put(AbilityKey.Player, activator);
|
||||
repParams.put(AbilityKey.AbilityMana, am.getRootAbility());
|
||||
|
||||
for (final Player p : g.getPlayers()) {
|
||||
for (final Card crd : p.getAllCards()) {
|
||||
for (final ReplacementEffect replacementEffect : crd.getReplacementEffects()) {
|
||||
if (replacementEffect.getMode() == ReplacementType.ProduceMana
|
||||
&& replacementEffect.requirementsCheck(g)
|
||||
&& replacementEffect.canReplace(repParams)
|
||||
&& replacementEffect.zonesCheck(g.getZoneOf(crd))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!source.getGame().getReplacementHandler().getReplacementList(ReplacementType.ProduceMana, repParams, ReplacementLayer.Other).isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (am.getApi() == ApiType.ManaReflected) {
|
||||
|
||||
@@ -777,8 +777,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
return replacingObjects;
|
||||
}
|
||||
public Object getReplacingObject(final AbilityKey type) {
|
||||
final Object res = replacingObjects.get(type);
|
||||
return res;
|
||||
return replacingObjects.get(type);
|
||||
}
|
||||
|
||||
public void setReplacingObject(final AbilityKey type, final Object o) {
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
Name:Absorb Identity
|
||||
ManaCost:1 U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | RememberChanged$ True | SubAbility$ DBChoice | SpellDescription$ Return target creature to its owner's hand. You may have Shapeshifters you control become copies of that creature until end of turn.
|
||||
SVar:DBChoice:DB$ GenericChoice | Choices$ CloneArmy,DBNoop | Defined$ You | SubAbility$ DBCleanup | StackDescription$ You may have Shapeshifters you control become copies of that creature until end of turn.
|
||||
SVar:CloneArmy:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Shapeshifter.YouCtrl | RepeatSubAbility$ DBCopy | SpellDescription$ Shapeshifters you control become copies of that creature until end of turn.
|
||||
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | RememberLKI$ True | SubAbility$ CloneArmy | SpellDescription$ Return target creature to its owner's hand. You may have Shapeshifters you control become copies of that creature until end of turn.
|
||||
SVar:CloneArmy:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Shapeshifter.YouCtrl | RepeatSubAbility$ DBCopy | SubAbility$ DBCleanup | Optional$ True | OptionPrompt$ Do you want Shapeshifters you control to become copies of that creature until end of turn?
|
||||
SVar:DBCopy:DB$ Clone | Defined$ Remembered | CloneTarget$ Imprinted | Duration$ UntilEndOfTurn
|
||||
SVar:DBNoop:DB$ Cleanup | SpellDescription$ Do nothing.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHints:Type$Shapeshifter
|
||||
Oracle:Return target creature to its owner's hand. You may have Shapeshifters you control become copies of that creature until end of turn.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name:Aether Gust
|
||||
ManaCost:1 U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Card.inZoneStack+Red,Card.inZoneStack+Green,Permanent.Red,Permanent.Green | TgtZone$ Battlefield,Stack | TgtPrompt$ Select target spell or permanent that's red or green | AlternativeDecider$ TargetedController | Origin$ Battlefield,Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose target spell or permanent that's red or green. Its owner puts it on the top or bottom of their library.
|
||||
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Card.inZoneStack+Red,Card.inZoneStack+Green,Permanent.Red,Permanent.Green | TgtZone$ Battlefield,Stack | TgtPrompt$ Select target spell or permanent that's red or green | AlternativeDecider$ TargetedOwner | Origin$ Battlefield,Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose target spell or permanent that's red or green. Its owner puts it on the top or bottom of their library.
|
||||
Oracle:Choose target spell or permanent that's red or green. Its owner puts it on the top or bottom of their library.
|
||||
|
||||
@@ -4,7 +4,5 @@ Types:Creature Dragon
|
||||
PT:6/6
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ TriggeredCardController | Execute$ TrigChange | TriggerDescription$ When CARDNAME dies, you may put it on the top or bottom of its owner's library.
|
||||
SVar:TrigChange:DB$ GenericChoice | Defined$ TriggeredCardController | ShowCurrentCard$ TriggeredCard | Choices$ DBTop,DBBottom
|
||||
SVar:DBTop:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | SpellDescription$ Put it on the top of library
|
||||
SVar:DBBottom:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put it on the bottom of library
|
||||
SVar:DBTop:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of the library (and not on the bottom)?
|
||||
Oracle:Flying\nWhen Arashin Sovereign dies, you may put it on the top or bottom of its owner's library.
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Enchantment
|
||||
K:Flash
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target nonland permanent an opponent controls and all other nonland permanents that player controls with the same name as that permanent until CARDNAME leaves the battlefield.
|
||||
SVar:TrigExile:DB$ Pump | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | SubAbility$ DBChangeZoneAll
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ TargetedCard.Self,Permanent.nonLand+NotDefinedTargeted+sharesNameWith Targeted+ControlledBy TargetedController | Duration$ UntilHostLeavesPlay
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ TargetedCard.Self,Permanent.nonLand+NotDefinedTargeted+sharesNameWith Targeted+OppCtrl | Duration$ UntilHostLeavesPlay
|
||||
Oracle:When Banishment enters the battlefield, exile target nonland permanent an opponent controls and all other nonland permanents your opponents control with the same name as that permanent until Banishment leaves the battlefield.
|
||||
|
||||
@@ -9,7 +9,8 @@ SVar:DBAnimate:DB$ Animate | Defined$ Self | OverwriteSpells$ True | Abilities$
|
||||
SVar:DBAttach:DB$ Attach | Defined$ Remembered
|
||||
SVar:NewAttach:SP$ Attach | Cost$ 1 B | ValidTgts$ Creature.IsRemembered | AILogic$ Pump
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSacrifice | TriggerDescription$ When CARDNAME leaves the battlefield, that creature's controller sacrifices it.
|
||||
SVar:TrigSacrifice:DB$ Destroy | Sacrifice$ True | Defined$ Remembered
|
||||
SVar:TrigSacrifice:DB$ Destroy | Sacrifice$ True | Defined$ DirectRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ Enchanted creature gets +1/+1 and doesn't untap during its controller's untap step.
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | OptionalDecider$ EnchantedController | Execute$ TrigUntap | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, that player may pay {1}{B}. If the player does, untap that creature.
|
||||
SVar:TrigUntap:AB$Untap | Cost$ 1 B | Defined$ Enchanted
|
||||
|
||||
@@ -3,12 +3,10 @@ ManaCost:6 C
|
||||
Types:Creature Eldrazi
|
||||
PT:8/8
|
||||
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBReveal | TriggerDescription$ At the beginning of combat on your turn, reveal the top card of your library. If a creature card is revealed this way, you may have creatures you control other than CARDNAME become copies of that card until end of turn. You may put that card on the bottom of your library.
|
||||
SVar:DBReveal:DB$ PeekAndReveal | PeekAmount$ 1 | RevealValid$ Card | RememberRevealed$ True | SubAbility$ DBDeceive
|
||||
SVar:DBDeceive:DB$ GenericChoice | Choices$ CloneArmy,DBNoop | Defined$ You | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
|
||||
SVar:CloneArmy:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Creature.YouCtrl+Other | RepeatSubAbility$ DBCopy | SpellDescription$ Clone your other creatures with revealed
|
||||
SVar:DBReveal:DB$ PeekAndReveal | PeekAmount$ 1 | RevealValid$ Card | RememberRevealed$ True | SubAbility$ CloneArmy
|
||||
SVar:CloneArmy:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Creature.YouCtrl+Other | RepeatSubAbility$ DBCopy | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | Optional$ True | OptionPrompt$ Clone your other creatures with revealed?
|
||||
SVar:DBCopy:DB$ Clone | Defined$ Remembered | CloneTarget$ Imprinted | Duration$ UntilEndOfTurn
|
||||
SVar:DBNoop:DB$ Cleanup | SpellDescription$ Do nothing.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | SpellDescription$ Do nothing. | SubAbility$ FakeScry
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ FakeScry
|
||||
SVar:FakeScry:DB$ Dig | DigNum$ 1 | AnyNumber$ True | DestinationZone$ Library | LibraryPosition2$ 0
|
||||
AI:RemoveDeck:All
|
||||
DeckNeeds:Ability$Mana.Colorless
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
Name:Declaration in Stone
|
||||
ManaCost:1 W
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 1 W | Origin$ Battlefield | Destination$ Exile | AILogic$ SameName | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberLKI$ True | SubAbility$ DBExile | SpellDescription$ Exile target creature and all other creatures its controller controls with the same name as that creature. That player investigates for each nontoken creature exiled this way. | StackDescription$ SpellDescription
|
||||
SVar:DBExile:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | Defined$ RememberedController | ChangeType$ Remembered.Creature+sameName | Shuffle$ True | RememberChanged$ True | SubAbility$ DBInvestigate
|
||||
A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBExile | AILogic$ SameName | SpellDescription$ Exile target creature and all other creatures its controller controls with the same name as that creature. That player investigates for each nontoken creature exiled this way. | StackDescription$ SpellDescription
|
||||
SVar:DBExile:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | Defined$ TargetedController | ChangeType$ TargetedCard.Self,Creature.NotDefinedTargeted+sharesNameWith Targeted | Shuffle$ True | RememberLKI$ True | AILogic$ Always | SubAbility$ DBInvestigate
|
||||
SVar:DBInvestigate:DB$ Investigate | Num$ X | Defined$ RememberedController | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:RememberedLKI$Valid Card.nonToken
|
||||
|
||||
@@ -2,8 +2,8 @@ Name:Detention Sphere
|
||||
ManaCost:1 W U
|
||||
Types:Enchantment
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, you may exile target nonland permanent not named CARDNAME and all other permanents with the same name as that permanent.
|
||||
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+notnamedDetention Sphere | TgtPrompt$ Choose target nonland permanent not named Detention Sphere | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ DBChangeZoneAll
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Remembered.sameName | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True
|
||||
SVar:TrigExile:DB$ Pump | ValidTgts$ Permanent.nonLand+notnamedDetention Sphere | TgtPrompt$ Choose target nonland permanent not named Detention Sphere | SubAbility$ DBChangeZoneAll
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ TargetedCard.Self,Remembered.sameName+NotDefinedTargeted | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled cards to the battlefield under their owner's control.
|
||||
SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Battlefield
|
||||
SVar:OblivionRing:TRUE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Distant Memories
|
||||
ManaCost:2 U U
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | Imprint$ True | AILogic$ BestCard | SubAbility$ DBReturn | StackDescription$ SpellDescription | SpellDescription$ Search your library for a card, exile it, then shuffle. Any opponent may have you put that card into your hand. If no player does, you draw three cards.
|
||||
A:SP$ ChangeZone | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | Imprint$ True | AILogic$ BestCard | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Search your library for a card, exile it, then shuffle. Any opponent may have you put that card into your hand. If no player does, you draw three cards.
|
||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChoose | SubAbility$ DBDraw
|
||||
SVar:DBChoose:DB$ GenericChoice | Defined$ Remembered | Choices$ DBToHand,DoNothing | ChoicePrompt$ Have them put the card in their hand? | ConditionDefined$ Imprinted | ConditionZone$ Exile | ConditionPresent$ Card | ConditionCompare$ EQ1
|
||||
SVar:DBToHand:DB$ ChangeZone | Origin$ Exile | Destination$ Hand | Defined$ Imprinted | Unimprint$ True | SpellDescription$ Yes
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Zombie
|
||||
PT:3/5
|
||||
K:Exploit
|
||||
T:Mode$ Exploited | ValidCard$ Creature | ValidSource$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSubmerge | TriggerDescription$ When CARDNAME exploits a creature, target creature's owner puts it on the top or bottom of their library.
|
||||
SVar:TrigSubmerge:DB$ ChangeZone | ValidTgts$ Creature | TgtPrompt$ Select target creature | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)?
|
||||
SVar:TrigSubmerge:DB$ ChangeZone | ValidTgts$ Creature | TgtPrompt$ Select target creature | AlternativeDecider$ TargetedOwner | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)?
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Exploit (When this creature enters the battlefield, you may sacrifice a creature.)\nWhen Diver Skaab exploits a creature, target creature's owner puts it on the top or bottom of their library.
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
Name:Echoing Calm
|
||||
ManaCost:1 W
|
||||
Types:Instant
|
||||
A:SP$ Destroy | Cost$ 1 W | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment | SubAbility$ DBDestroyAll | RememberTargets$ True | ForgetOtherTargets$ True | SpellDescription$ Destroy target enchantment and all other enchantments with the same name as that enchantment.
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Remembered.Enchantment+Other+sameName | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 1 W | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment | SubAbility$ DBDestroyAll | SpellDescription$ Destroy target enchantment and all other enchantments with the same name as that enchantment.
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ TargetedCard.Self,Enchantment.NotDefinedTargeted+sharesNameWith Targeted
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Destroy target enchantment and all other enchantments with the same name as that enchantment.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Echoing Return
|
||||
ManaCost:B
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | AILogic$ SameName | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature | SubAbility$ DBReturn | SpellDescription$ Return target creature card and all other cards with the same name as that card from your graveyard to your hand. | StackDescription$ Return {c:Targeted} and all other cards with the same name as that card from your graveyard to your hand.
|
||||
SVar:DBReturn:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Hand | Defined$ You | ChangeType$ TargetedCard.sameName
|
||||
A:SP$ Pump | ValidTgts$ Creature.YouOwn | TgtZone$ Graveyard | TgtPrompt$ Select target creature | SubAbility$ DBReturn | SpellDescription$ Return target creature card and all other cards with the same name as that card from your graveyard to your hand. | StackDescription$ Return {c:Targeted} and all other cards with the same name as that card from your graveyard to your hand.
|
||||
SVar:DBReturn:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Hand | Defined$ You | ChangeType$ TargetedCard.Self,Card.NotDefinedTargeted+sharesNameWith Targeted
|
||||
DeckHas:Ability$Graveyard
|
||||
Oracle:Return target creature card and all other cards with the same name as that card from your graveyard to your hand.
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
Name:Echoing Ruin
|
||||
ManaCost:1 R
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 1 R | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SubAbility$ DBDestroyAll | RememberTargets$ True | ForgetOtherTargets$ True | SpellDescription$ Destroy target artifact and all other artifacts with the same name as that artifact.
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Remembered.Artifact+Other+sameName | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 1 R | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SubAbility$ DBDestroyAll | SpellDescription$ Destroy target artifact and all other artifacts with the same name as that artifact.
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ TargetedCard.Self,Artifact.NotDefinedTargeted+sharesNameWith Targeted
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Destroy target artifact and all other artifacts with the same name as that artifact.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Echoing Truth
|
||||
ManaCost:1 U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | Origin$ Battlefield | Destination$ Hand | RememberTargets$ True | SubAbility$ DBChangeZoneAll | AILogic$ SameName | SpellDescription$ Return target nonland permanent and all other permanents with the same name as that permanent to their owners' hands.
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Hand | ChangeType$ Remembered.sameName | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 1 U | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | SubAbility$ DBChangeZoneAll | SpellDescription$ Return target nonland permanent and all other permanents with the same name as that permanent to their owners' hands.
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Hand | ChangeType$ TargetedCard.Self,Permanent.NotDefinedTargeted+sharesNameWith Targeted
|
||||
Oracle:Return target nonland permanent and all other permanents with the same name as that permanent to their owners' hands.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name:Endless Detour
|
||||
ManaCost:G W U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | ValidTgts$ Card.inZoneStack,Permanent.nonLand,Card.inZoneGraveyard | TgtZone$ Battlefield,Stack,Graveyard | TgtPrompt$ Select target spell, nonland permanent, or card in a graveyard | AlternativeDecider$ TargetedController | Origin$ Battlefield,Stack,Graveyard | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ The owner of target spell, nonland permanent, or card in a graveyard puts it on the top or bottom of their library.
|
||||
A:SP$ ChangeZone | ValidTgts$ Card.inZoneStack,Permanent.nonLand,Card.inZoneGraveyard | TgtZone$ Battlefield,Stack,Graveyard | TgtPrompt$ Select target spell, nonland permanent, or card in a graveyard | AlternativeDecider$ TargetedOwner | Origin$ Battlefield,Stack,Graveyard | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ The owner of target spell, nonland permanent, or card in a graveyard puts it on the top or bottom of their library.
|
||||
Oracle:The owner of target spell, nonland permanent, or card in a graveyard puts it on the top or bottom of their library.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Legion's End
|
||||
ManaCost:1 B
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl+cmcLE2 | TgtPrompt$ Select target creature an opponent controls with mana value 2 or less | SubAbility$ DBExileAll | StackDescription$ SpellDescription | SpellDescription$ Exile target creature an opponent controls with mana value 2 or less and all other creatures that player controls with the same name as that creature. Then that player reveals their hand and exiles all cards with that name from their hand and graveyard.
|
||||
SVar:DBExileAll:DB$ ChangeZoneAll | Defined$ TargetedController | ChangeType$ Targeted.sameName+Creature | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBChangeZoneAll | StackDescription$ None
|
||||
A:SP$ Pump | Cost$ 1 B | ValidTgts$ Creature.OppCtrl+cmcLE2 | TgtPrompt$ Select target creature an opponent controls with mana value 2 or less | SubAbility$ DBExileAll | StackDescription$ SpellDescription | SpellDescription$ Exile target creature an opponent controls with mana value 2 or less and all other creatures that player controls with the same name as that creature. Then that player reveals their hand and exiles all cards with that name from their hand and graveyard.
|
||||
SVar:DBExileAll:DB$ ChangeZoneAll | Defined$ TargetedController | ChangeType$ TargetedCard.Self,Creature.NotDefinedTargeted+sharesNameWith Targeted | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBChangeZoneAll | StackDescription$ None
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Defined$ TargetedController | ChangeType$ Targeted.sameName | Origin$ Graveyard,Hand | Destination$ Exile | Search$ True | StackDescription$ None
|
||||
Oracle:Exile target creature an opponent controls with mana value 2 or less and all other creatures that player controls with the same name as that creature. Then that player reveals their hand and exiles all cards with that name from their hand and graveyard.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
Name:Maelstrom Pulse
|
||||
ManaCost:1 B G
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 1 B G | ValidTgts$ Permanent.nonland | TgtPrompt$ Select target nonland permanent | RememberTargets$ True | SubAbility$ DestroyAll | SpellDescription$ Destroy target nonland permanent and all other permanents with the same name as that permanent.
|
||||
SVar:DestroyAll:DB$ DestroyAll | ValidCards$ Remembered.sameName+Other | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 1 B G | ValidTgts$ Permanent.nonland | TgtPrompt$ Select target nonland permanent | SubAbility$ DestroyAll | SpellDescription$ Destroy target nonland permanent and all other permanents with the same name as that permanent.
|
||||
SVar:DestroyAll:DB$ DestroyAll | ValidCards$ TargetedCard.Self,Permanent.NotDefinedTargeted+sharesNameWith Targeted
|
||||
Oracle:Destroy target nonland permanent and all other permanents with the same name as that permanent.
|
||||
|
||||
@@ -2,8 +2,9 @@ Name:Martyr's Cry
|
||||
ManaCost:W W
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZoneAll | Cost$ W W | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | ChangeType$ Creature.White | SubAbility$ DBRepeat | SpellDescription$ Exile all white creatures. For each creature exiled this way, its controller draws a card.
|
||||
SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ DirectRemembered | UseImprinted$ True | RepeatSubAbility$ DBDraw | SubAbility$ DBCleanup
|
||||
SVar:DBDraw:DB$ Draw | Defined$ ImprintedController | NumCards$ 1
|
||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ RememberedController | RepeatSubAbility$ DBDraw | SubAbility$ DBCleanup
|
||||
SVar:DBDraw:DB$ Draw | Defined$ Remembered | NumCards$ X
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Remembered$Valid Card.RememberedPlayerCtrl
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Exile all white creatures. For each creature exiled this way, its controller draws a card.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Moonsnare Prototype
|
||||
ManaCost:U
|
||||
Types:Artifact
|
||||
A:AB$ Mana | Cost$ T tapXType<1/Artifact;Creature/artifact or creature> | Produced$ C | SpellDescription$ Add {C}.
|
||||
A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ 4 U Discard<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent for its owner to put on the top or bottom of their library | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ 4 U Discard<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent for its owner to put on the top or bottom of their library | AlternativeDecider$ TargetedOwner | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
DeckHints:Type$Artifact|Creature
|
||||
DeckHas:Ability$Discard
|
||||
Oracle:{T}, Tap an untapped artifact or creature you control: Add {C}.\nChannel — {4}{U}, Discard Moonsnare Prototype: The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
|
||||
@@ -8,7 +8,8 @@ SVar:Aurify:DB$ Animate | IsPresent$ Card.Self | Types$ Aura | OverwriteSpells$
|
||||
SVar:NewAttach:SP$ Attach | Cost$ 2 B | ValidTgts$ Creature.IsRemembered | AILogic$ Pump
|
||||
SVar:NecromAttach:DB$ Attach | Defined$ Remembered
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME leaves the battlefield, enchanted permanent's controller sacrifices it.
|
||||
SVar:TrigSac:DB$ Destroy | Sacrifice$ True | Defined$ Remembered
|
||||
SVar:TrigSac:DB$ Destroy | Sacrifice$ True | Defined$ DirectRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:NeedsToPlayVar:Y GE1
|
||||
SVar:Y:Count$TypeInYourYard.Creature
|
||||
Oracle:You may cast Necromancy as though it had flash. If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.\nWhen Necromancy enters the battlefield, if it's on the battlefield, it becomes an Aura with "enchant creature put onto the battlefield with Necromancy." Put target creature card from a graveyard onto the battlefield under your control and attach Necromancy to it. When Necromancy leaves the battlefield, that creature's controller sacrifices it.
|
||||
|
||||
@@ -4,10 +4,8 @@ Types:Legendary Planeswalker Nissa
|
||||
Loyalty:4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Landfall — Whenever a land enters the battlefield under your control, put a loyalty counter on CARDNAME.
|
||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ LOYALTY | CounterNum$ 1
|
||||
A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | SubAbility$ DBChoice | SpellDescription$ Untap target land you control. You may have it become a 3/3 Elemental creature with haste and menace until end of turn. It's still a land.
|
||||
SVar:DBChoice:DB$ GenericChoice | Defined$ You | Choices$ Animate,NoAnimate | StackDescription$ You may have it become a 3/3 Elemental creature with haste and menace until end of turn. It's still a land.
|
||||
SVar:Animate:DB$ Animate | Defined$ Targeted | Power$ 3 | Toughness$ 3 | Types$ Creature,Elemental | Keywords$ Haste & Menace | SpellDescription$ Target land becomes a 3/3 Elemental creature with haste and menace until end of turn.
|
||||
SVar:NoAnimate:DB$ Pump | SpellDescription$ Target land does not become a 3/3 Elemental creature with haste and menace until end of turn.
|
||||
A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | SubAbility$ Animate | SpellDescription$ Untap target land you control. You may have it become a 3/3 Elemental creature with haste and menace until end of turn. It's still a land.
|
||||
SVar:Animate:DB$ Animate | Defined$ Targeted | Power$ 3 | Toughness$ 3 | Types$ Creature,Elemental | Keywords$ Haste & Menace | Optional$ True
|
||||
A:AB$ ChangeZone | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | ChangeType$ Creature.YouOwn+cmcLEX | ChangeNum$ 1 | Origin$ Hand,Graveyard | Destination$ Battlefield | WithCountersType$ P1P1 | WithCountersAmount$ 2 | StackDescription$ SpellDescription | SpellDescription$ You may put a creature card with mana value less than or equal to the number of lands you control onto the battlefield from your hand or graveyard with two +1/+1 counters on it.
|
||||
SVar:X:Count$Valid Land.YouCtrl
|
||||
DeckHas:Ability$Counters|Graveyard
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
Name:Not Forgotten
|
||||
ManaCost:1 W
|
||||
Types:Sorcery
|
||||
A:SP$ GenericChoice | Cost$ 1 W | Defined$ You | ValidTgts$ Card | TgtZone$ Graveyard | Choices$ DBTop,DBBottom | SpellDescription$ Put target card from a graveyard on the top or bottom of its owner's library. Create a 1/1 white Spirit creature token with flying.
|
||||
SVar:DBTop:DB$ ChangeZone | Defined$ ParentTarget | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | SpellDescription$ Put it on the top of library. | StackDescription$ SpellDescription | SubAbility$ DBTrigToken
|
||||
SVar:DBBottom:DB$ ChangeZone | Defined$ ParentTarget | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put it on the bottom of library. | StackDescription$ SpellDescription | SubAbility$ DBTrigToken
|
||||
A:SP$ ChangeZone | ValidTgts$ Card | TgtZone$ Graveyard | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of the library (and not on the bottom)? | SubAbility$ DBTrigToken | SpellDescription$ Put target card from a graveyard on the top or bottom of its owner's library. Create a 1/1 white Spirit creature token with flying.
|
||||
SVar:DBTrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You | SpellDescription$ Create a 1/1 white Spirit creature token with flying. | StackDescription$ SpellDescription
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Put target card from a graveyard on the top or bottom of its owner's library. Create a 1/1 white Spirit creature token with flying.
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
Name:Power of Persuasion
|
||||
ManaCost:2 U
|
||||
Types:Sorcery
|
||||
A:SP$ Pump | Cost$ 2 U | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an oppoenent controls | SubAbility$ DBRollDice | SpellDescription$ Choose target creature an opponent controls,
|
||||
A:SP$ Pump | Cost$ 2 U | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | SubAbility$ DBRollDice | SpellDescription$ Choose target creature an opponent controls,
|
||||
SVar:DBRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-9:DBHand,10-19:DBLibrary,20:DBControl | SpellDescription$ then roll a d20.
|
||||
SVar:DBHand:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ ParentTarget | SpellDescription$ 1—9 VERT Return it to its owner's hand.
|
||||
SVar:DBLibrary:DB$ GenericChoice | Defined$ TargetedController | ShowCurrentCard$ Targeted | Choices$ DBTop,DBBottom | SpellDescription$ 10—19 VERT Its owner puts it on the top or bottom of their library.
|
||||
SVar:DBTop:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0
|
||||
SVar:DBBottom:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1
|
||||
SVar:DBLibrary:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDecider$ TargetedOwner | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)?
|
||||
SVar:DBControl:DB$ GainControl | Defined$ Targeted | LoseControl$ UntilTheEndOfYourNextTurn | SpellDescription$ 20 VERT Gain control of it until the end of your next turn.
|
||||
Oracle:Choose target creature an opponent controls, then roll a d20.\n1—9 | Return it to its owner's hand.\n10—19 | Its owner puts it on the top or bottom of their library.\n20 | Gain control of it until the end of your next turn.
|
||||
|
||||
@@ -9,5 +9,5 @@ SVar:TrigFlip:DB$ RepeatEach | RepeatCards$ Creature.nonDemon+nonDevil+nonImp |
|
||||
SVar:DBFlip:DB$ FlipACoin | NoCall$ True | TailsSubAbility$ DBRememberCreature
|
||||
SVar:DBRememberCreature:DB$ Pump | Defined$ Imprinted | RememberObjects$ Imprinted
|
||||
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Creature.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
Oracle:Flying, trample\nWhen Rakdos, the Showstopper enters the battlefield, flip a coin for each creature that isn't a Demon, Devil, or Imp. Destroy each creature whose coin comes up tails.
|
||||
|
||||
@@ -4,11 +4,9 @@ Types:Artifact Creature Construct
|
||||
PT:7/4
|
||||
K:Menace
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigRepeatEach | TriggerDescription$ When CARDNAME dies, each player may discard their hand and draw seven cards.
|
||||
SVar:TrigRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose
|
||||
SVar:DBChoose:DB$ GenericChoice | Choices$ DBDiscard,Noop | Defined$ Player.IsRemembered
|
||||
SVar:DBDiscard:DB$ Discard | Mode$ Hand | Defined$ Player.IsRemembered | SubAbility$ DBDraw | SpellDescription$ Discard your hand and draw seven cards.
|
||||
SVar:TrigRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBDiscard | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Discard your hand and draw seven cards?
|
||||
SVar:DBDiscard:DB$ Discard | Mode$ Hand | Defined$ Player.IsRemembered | SubAbility$ DBDraw
|
||||
SVar:DBDraw:DB$ Draw | Defined$ Player.IsRemembered | NumCards$ 7
|
||||
SVar:Noop:DB$ Cleanup | SpellDescription$ Do nothing.
|
||||
K:TypeCycling:Mountain:2
|
||||
DeckHas:Ability$Discard
|
||||
Oracle:Menace\nWhen Ruin Grinder dies, each player may discard their hand and draw seven cards.\nMountaincycling {2} ({2}, Discard this card: Search your library for a Mountain card, reveal it, put it into your hand, then shuffle.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Run Ashore
|
||||
ManaCost:4 U U
|
||||
Types:Instant
|
||||
A:SP$ Charm | Cost$ 4 U U | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBSubmerge,DBUnsummon
|
||||
SVar:DBSubmerge:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent for its owner to put on the top or bottom of their library | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
SVar:DBSubmerge:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent for its owner to put on the top or bottom of their library | AlternativeDecider$ TargetedOwner | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
SVar:DBUnsummon:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent to return to owner's hand | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target nonland permanent to its owner's hand.
|
||||
Oracle:Choose one or both —\n• The owner of target nonland permanent puts it on the top or bottom of their library.\n• Return target nonland permanent to its owner's hand.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name:Run Out of Town
|
||||
ManaCost:3 U
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | AlternativeDecider$ TargetedOwner | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
Oracle:The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:A-You Come to a River
|
||||
ManaCost:2 U
|
||||
Types:Sorcery
|
||||
A:SP$ Charm | Choices$ FightTheCurrent,FindACrossing
|
||||
SVar:FightTheCurrent:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ Fight the Current — The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
SVar:FightTheCurrent:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | AlternativeDecider$ TargetedOwner | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | StackDescription$ The owner of {c:Targeted} puts it on the top or bottom of their library. | SpellDescription$ Fight the Current — The owner of target nonland permanent puts it on the top or bottom of their library.
|
||||
SVar:FindACrossing:DB$ Pump | ValidTgts$ Creature | NumAtt$ 1 | KW$ HIDDEN Unblockable | SpellDescription$ Find a Crossing — Target creature gets +1/+0 until end of turn and can't be blocked this turn.
|
||||
Oracle:Choose one —\n• Fight the Current — The owner of target nonland permanent puts it on the top or bottom of their library.\n• Find a Crossing — Target creature gets +1/+0 until end of turn and can't be blocked this turn.
|
||||
|
||||
@@ -2,7 +2,6 @@ Name:Sever the Bloodline
|
||||
ManaCost:3 B
|
||||
Types:Sorcery
|
||||
K:Flashback:5 B B
|
||||
A:SP$ ChangeZone | Cost$ 3 B | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ DBSearch | SpellDescription$ Exile target creature and all other creatures with the same name as that creature.
|
||||
SVar:DBSearch:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Remembered.sameName | Shuffle$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 3 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBExile | SpellDescription$ Exile target creature and all other creatures with the same name as that creature.
|
||||
SVar:DBExile:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ TargetedCard.Self,Creature.NotDefinedTargeted+sharesNameWith Targeted
|
||||
Oracle:Exile target creature and all other creatures with the same name as that creature.\nFlashback {5}{B}{B} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Smoke Spirits' Aid
|
||||
ManaCost:X R
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | DefinedCards$ Targeted | RepeatSubAbility$ DBToken | ValidTgts$ Creature | TgtPrompt$ Select up to X target creatures | TargetMin$ 0 | TargetMax$ X | SpellDescription$ For each of up to X target creatures, create a red Aura enchantment token named Smoke Blessing attached to that creature. Those tokens have enchant creature and "When enchanted creature dies, it deals 1 damage to its controller and you create a Treasure token."
|
||||
A:SP$ RepeatEach | ChangeZoneTable$ True | DefinedCards$ Targeted | RepeatSubAbility$ DBToken | ValidTgts$ Creature | TgtPrompt$ Select up to X target creatures | TargetMin$ 0 | TargetMax$ X | SpellDescription$ For each of up to X target creatures, create a red Aura enchantment token named Smoke Blessing attached to that creature. Those tokens have enchant creature and "When enchanted creature dies, it deals 1 damage to its controller and you create a Treasure token."
|
||||
SVar:DBToken:DB$ Token | TokenScript$ smoke_blessing | AttachedTo$ Remembered
|
||||
SVar:X:Count$xPaid
|
||||
DeckHas:Ability$Token|Sacrifice & Type$Enchantment|Aura|Treasure|Artifact
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:3/3
|
||||
K:Flash
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTuck | TriggerDescription$ When CARDNAME enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.
|
||||
SVar:TrigTuck:DB$ ChangeZone | ValidTgts$ Card.inZoneStack+Creature,Card.inZoneStack+Planeswalker | TgtZone$ Stack | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature spell or planeswalker spell | AlternativeDecider$ TargetedController | Origin$ Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.
|
||||
SVar:TrigTuck:DB$ ChangeZone | ValidTgts$ Card.inZoneStack+Creature,Card.inZoneStack+Planeswalker | TgtZone$ Stack | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature spell or planeswalker spell | AlternativeDecider$ TargetedOwner | Origin$ Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.
|
||||
K:Evoke:ExileFromHand<1/Card.Blue+Other/blue card>
|
||||
Oracle:Flash\nFlying\nWhen Subtlety enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.\nEvoke—Exile a blue card from your hand.
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
Name:Wake of Destruction
|
||||
ManaCost:3 R R R
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 3 R R R | ValidTgts$ Land | TgtPrompt$ Select target land | RememberTargets$ True | SubAbility$ DBWakeofDestructionDestroyThemAll | SpellDescription$ Destroy target land and all other lands with the same name as that land.
|
||||
SVar:DBWakeofDestructionDestroyThemAll:DB$ DestroyAll | ValidCards$ Remembered.sameName | SubAbility$ DBWakeofDestructionCleanup
|
||||
SVar:DBWakeofDestructionCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Pump | Cost$ 3 R R R | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBWakeofDestructionDestroyThemAll | SpellDescription$ Destroy target land and all other lands with the same name as that land.
|
||||
SVar:DBWakeofDestructionDestroyThemAll:DB$ DestroyAll | ValidCards$ TargetedCard.Self,Land.NotDefinedTargeted+sharesNameWith Targeted
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Destroy target land and all other lands with the same name as that land.
|
||||
|
||||
Reference in New Issue
Block a user