Card cleanup (#1604)

This commit is contained in:
tool4ever
2022-09-29 19:14:40 +02:00
committed by GitHub
parent e6c9a9278e
commit 7571a29a26
37 changed files with 141 additions and 168 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.)

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.)

View File

@@ -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

View File

@@ -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.

View File

@@ -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.