From 7571a29a26c11de8f029f1cd11d0784b5602cc03 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Thu, 29 Sep 2022 19:14:40 +0200 Subject: [PATCH] Card cleanup (#1604) --- .../main/java/forge/ai/ComputerUtilMana.java | 6 +- .../java/forge/ai/ability/ChangeZoneAi.java | 76 ----------------- .../main/java/forge/ai/ability/PumpAi.java | 81 +++++++++++++++++++ .../game/spellability/AbilityManaPart.java | 20 +---- .../forge/game/spellability/SpellAbility.java | 3 +- .../res/cardsfolder/a/absorb_identity.txt | 8 +- forge-gui/res/cardsfolder/a/aether_gust.txt | 2 +- .../res/cardsfolder/a/arashin_sovereign.txt | 4 +- forge-gui/res/cardsfolder/b/banishment.txt | 2 +- .../res/cardsfolder/d/dance_of_the_dead.txt | 3 +- .../res/cardsfolder/d/deceiver_of_form.txt | 8 +- .../cardsfolder/d/declaration_in_stone.txt | 4 +- .../res/cardsfolder/d/detention_sphere.txt | 4 +- .../res/cardsfolder/d/distant_memories.txt | 2 +- forge-gui/res/cardsfolder/d/diver_skaab.txt | 2 +- forge-gui/res/cardsfolder/e/echoing_calm.txt | 5 +- .../res/cardsfolder/e/echoing_return.txt | 4 +- forge-gui/res/cardsfolder/e/echoing_ruin.txt | 5 +- forge-gui/res/cardsfolder/e/echoing_truth.txt | 5 +- .../res/cardsfolder/e/endless_detour.txt | 2 +- forge-gui/res/cardsfolder/l/legions_end.txt | 4 +- .../res/cardsfolder/m/maelstrom_pulse.txt | 5 +- forge-gui/res/cardsfolder/m/martyrs_cry.txt | 5 +- .../res/cardsfolder/m/moonsnare_prototype.txt | 2 +- forge-gui/res/cardsfolder/n/necromancy.txt | 3 +- .../n/nissa_of_shadowed_boughs.txt | 6 +- forge-gui/res/cardsfolder/n/not_forgotten.txt | 4 +- .../res/cardsfolder/p/power_of_persuasion.txt | 6 +- .../cardsfolder/r/rakdos_the_showstopper.txt | 2 +- forge-gui/res/cardsfolder/r/ruin_grinder.txt | 6 +- forge-gui/res/cardsfolder/r/run_ashore.txt | 2 +- .../res/cardsfolder/r/run_out_of_town.txt | 2 +- .../rebalanced/a-you_come_to_a_river.txt | 2 +- .../res/cardsfolder/s/sever_the_bloodline.txt | 5 +- .../res/cardsfolder/s/smoke_spirits_aid.txt | 2 +- forge-gui/res/cardsfolder/s/subtlety.txt | 2 +- .../res/cardsfolder/w/wake_of_destruction.txt | 5 +- 37 files changed, 141 insertions(+), 168 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index d890153115c..8a38809d09c 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -393,10 +393,9 @@ public class ComputerUtilMana { String manaProduced = toPay.isSnow() && hostCard.isSnow() ? "S" : GameActionUtil.generatedTotalMana(saPayment); //String originalProduced = manaProduced; - final Map repParams = AbilityKey.newMap(); + final Map 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 repParams = AbilityKey.newMap(); + final Map 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 reList = game.getReplacementHandler().getReplacementList(ReplacementType.ProduceMana, repParams, ReplacementLayer.Other); diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index c6bc4e9dadb..7870795e185 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -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> 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 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 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>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return o1.getValue() - o2.getValue(); - } - })); - } - - if (!data.isEmpty()) { - // JAVA 1.8 use Map.Entry.comparingByValue() somehow - Map.Entry> max = Collections.max(data.entrySet(), new Comparator>>() { - @Override - public int compare(Map.Entry> o1, Map.Entry> 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 originalParams = (Map)sa.getReplacingObject(AbilityKey.OriginalParams); diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 0747688f615..69e6a07c58d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -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> 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 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 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>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return o1.getValue() - o2.getValue(); + } + })); + } + + if (!data.isEmpty()) { + // JAVA 1.8 use Map.Entry.comparingByValue() somehow + Map.Entry> max = Collections.max(data.entrySet(), new Comparator>>() { + @Override + public int compare(Map.Entry> o1, Map.Entry> 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; + } } diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 5044504ac25..4986ceff38a 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -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 repParams = AbilityKey.newMap(); + final Map 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) { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 59593a9d95d..68f2aaaf235 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -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) { diff --git a/forge-gui/res/cardsfolder/a/absorb_identity.txt b/forge-gui/res/cardsfolder/a/absorb_identity.txt index 9a3a254c402..1b3360849a8 100644 --- a/forge-gui/res/cardsfolder/a/absorb_identity.txt +++ b/forge-gui/res/cardsfolder/a/absorb_identity.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/a/aether_gust.txt b/forge-gui/res/cardsfolder/a/aether_gust.txt index 1b731a7cba2..4b3bb292cef 100644 --- a/forge-gui/res/cardsfolder/a/aether_gust.txt +++ b/forge-gui/res/cardsfolder/a/aether_gust.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/a/arashin_sovereign.txt b/forge-gui/res/cardsfolder/a/arashin_sovereign.txt index 6627a53c5f0..0c65cd488a2 100644 --- a/forge-gui/res/cardsfolder/a/arashin_sovereign.txt +++ b/forge-gui/res/cardsfolder/a/arashin_sovereign.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/b/banishment.txt b/forge-gui/res/cardsfolder/b/banishment.txt index afa09aa2693..861a53eabff 100644 --- a/forge-gui/res/cardsfolder/b/banishment.txt +++ b/forge-gui/res/cardsfolder/b/banishment.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt b/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt index 5db80580e1e..23ee3356c90 100644 --- a/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt +++ b/forge-gui/res/cardsfolder/d/dance_of_the_dead.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/d/deceiver_of_form.txt b/forge-gui/res/cardsfolder/d/deceiver_of_form.txt index 514ed1626bb..4a13bb77638 100644 --- a/forge-gui/res/cardsfolder/d/deceiver_of_form.txt +++ b/forge-gui/res/cardsfolder/d/deceiver_of_form.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/d/declaration_in_stone.txt b/forge-gui/res/cardsfolder/d/declaration_in_stone.txt index b99b50dc04d..c716a045359 100644 --- a/forge-gui/res/cardsfolder/d/declaration_in_stone.txt +++ b/forge-gui/res/cardsfolder/d/declaration_in_stone.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/d/detention_sphere.txt b/forge-gui/res/cardsfolder/d/detention_sphere.txt index ec7eaa01d7e..e07a1a79166 100644 --- a/forge-gui/res/cardsfolder/d/detention_sphere.txt +++ b/forge-gui/res/cardsfolder/d/detention_sphere.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/d/distant_memories.txt b/forge-gui/res/cardsfolder/d/distant_memories.txt index d695438707e..9be7fd3e0f9 100644 --- a/forge-gui/res/cardsfolder/d/distant_memories.txt +++ b/forge-gui/res/cardsfolder/d/distant_memories.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/d/diver_skaab.txt b/forge-gui/res/cardsfolder/d/diver_skaab.txt index 1620ab76ade..f1c1e2248af 100644 --- a/forge-gui/res/cardsfolder/d/diver_skaab.txt +++ b/forge-gui/res/cardsfolder/d/diver_skaab.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/e/echoing_calm.txt b/forge-gui/res/cardsfolder/e/echoing_calm.txt index 34c1698fc88..871c8b9b6c7 100644 --- a/forge-gui/res/cardsfolder/e/echoing_calm.txt +++ b/forge-gui/res/cardsfolder/e/echoing_calm.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/e/echoing_return.txt b/forge-gui/res/cardsfolder/e/echoing_return.txt index d1f7eb45ce7..82b1b3056ae 100644 --- a/forge-gui/res/cardsfolder/e/echoing_return.txt +++ b/forge-gui/res/cardsfolder/e/echoing_return.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/e/echoing_ruin.txt b/forge-gui/res/cardsfolder/e/echoing_ruin.txt index 2d532297205..6b81fdc9829 100644 --- a/forge-gui/res/cardsfolder/e/echoing_ruin.txt +++ b/forge-gui/res/cardsfolder/e/echoing_ruin.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/e/echoing_truth.txt b/forge-gui/res/cardsfolder/e/echoing_truth.txt index f9caa57872a..f7110571e7b 100644 --- a/forge-gui/res/cardsfolder/e/echoing_truth.txt +++ b/forge-gui/res/cardsfolder/e/echoing_truth.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/e/endless_detour.txt b/forge-gui/res/cardsfolder/e/endless_detour.txt index df478bdf872..b4a56a7672e 100644 --- a/forge-gui/res/cardsfolder/e/endless_detour.txt +++ b/forge-gui/res/cardsfolder/e/endless_detour.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/l/legions_end.txt b/forge-gui/res/cardsfolder/l/legions_end.txt index 1ff89769fe8..f63ffa08b36 100644 --- a/forge-gui/res/cardsfolder/l/legions_end.txt +++ b/forge-gui/res/cardsfolder/l/legions_end.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/m/maelstrom_pulse.txt b/forge-gui/res/cardsfolder/m/maelstrom_pulse.txt index dbb515addb0..e38b84da7a1 100644 --- a/forge-gui/res/cardsfolder/m/maelstrom_pulse.txt +++ b/forge-gui/res/cardsfolder/m/maelstrom_pulse.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/m/martyrs_cry.txt b/forge-gui/res/cardsfolder/m/martyrs_cry.txt index 43a783ba75b..72cfbb33841 100644 --- a/forge-gui/res/cardsfolder/m/martyrs_cry.txt +++ b/forge-gui/res/cardsfolder/m/martyrs_cry.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/m/moonsnare_prototype.txt b/forge-gui/res/cardsfolder/m/moonsnare_prototype.txt index ea460414654..f8b7dae208f 100644 --- a/forge-gui/res/cardsfolder/m/moonsnare_prototype.txt +++ b/forge-gui/res/cardsfolder/m/moonsnare_prototype.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/n/necromancy.txt b/forge-gui/res/cardsfolder/n/necromancy.txt index f4caa12ae42..c9b3f5cb1df 100644 --- a/forge-gui/res/cardsfolder/n/necromancy.txt +++ b/forge-gui/res/cardsfolder/n/necromancy.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/n/nissa_of_shadowed_boughs.txt b/forge-gui/res/cardsfolder/n/nissa_of_shadowed_boughs.txt index 1f3ad4af2ed..880343c9f3a 100644 --- a/forge-gui/res/cardsfolder/n/nissa_of_shadowed_boughs.txt +++ b/forge-gui/res/cardsfolder/n/nissa_of_shadowed_boughs.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/n/not_forgotten.txt b/forge-gui/res/cardsfolder/n/not_forgotten.txt index 42933795dc9..53cf04efe07 100644 --- a/forge-gui/res/cardsfolder/n/not_forgotten.txt +++ b/forge-gui/res/cardsfolder/n/not_forgotten.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/p/power_of_persuasion.txt b/forge-gui/res/cardsfolder/p/power_of_persuasion.txt index c4ff5410837..019ee44e58d 100644 --- a/forge-gui/res/cardsfolder/p/power_of_persuasion.txt +++ b/forge-gui/res/cardsfolder/p/power_of_persuasion.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/r/rakdos_the_showstopper.txt b/forge-gui/res/cardsfolder/r/rakdos_the_showstopper.txt index 05f314d6900..8ceb8cc2338 100644 --- a/forge-gui/res/cardsfolder/r/rakdos_the_showstopper.txt +++ b/forge-gui/res/cardsfolder/r/rakdos_the_showstopper.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/r/ruin_grinder.txt b/forge-gui/res/cardsfolder/r/ruin_grinder.txt index 8a36a724e41..60435e47fd4 100644 --- a/forge-gui/res/cardsfolder/r/ruin_grinder.txt +++ b/forge-gui/res/cardsfolder/r/ruin_grinder.txt @@ -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.) diff --git a/forge-gui/res/cardsfolder/r/run_ashore.txt b/forge-gui/res/cardsfolder/r/run_ashore.txt index 36ac0e6ba43..206027abaa5 100644 --- a/forge-gui/res/cardsfolder/r/run_ashore.txt +++ b/forge-gui/res/cardsfolder/r/run_ashore.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/r/run_out_of_town.txt b/forge-gui/res/cardsfolder/r/run_out_of_town.txt index 90343afd8cc..61fb5233132 100644 --- a/forge-gui/res/cardsfolder/r/run_out_of_town.txt +++ b/forge-gui/res/cardsfolder/r/run_out_of_town.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-you_come_to_a_river.txt b/forge-gui/res/cardsfolder/rebalanced/a-you_come_to_a_river.txt index 7a2eeb67a29..5ae76650e7e 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-you_come_to_a_river.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-you_come_to_a_river.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/s/sever_the_bloodline.txt b/forge-gui/res/cardsfolder/s/sever_the_bloodline.txt index 1841ad4ea6e..0411bef4c10 100644 --- a/forge-gui/res/cardsfolder/s/sever_the_bloodline.txt +++ b/forge-gui/res/cardsfolder/s/sever_the_bloodline.txt @@ -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.) diff --git a/forge-gui/res/cardsfolder/s/smoke_spirits_aid.txt b/forge-gui/res/cardsfolder/s/smoke_spirits_aid.txt index 6f7d08c8c97..83783c76135 100644 --- a/forge-gui/res/cardsfolder/s/smoke_spirits_aid.txt +++ b/forge-gui/res/cardsfolder/s/smoke_spirits_aid.txt @@ -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 diff --git a/forge-gui/res/cardsfolder/s/subtlety.txt b/forge-gui/res/cardsfolder/s/subtlety.txt index 81dc3ee21b7..db95a661b05 100644 --- a/forge-gui/res/cardsfolder/s/subtlety.txt +++ b/forge-gui/res/cardsfolder/s/subtlety.txt @@ -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. diff --git a/forge-gui/res/cardsfolder/w/wake_of_destruction.txt b/forge-gui/res/cardsfolder/w/wake_of_destruction.txt index ec5970da3a2..bc092978f31 100644 --- a/forge-gui/res/cardsfolder/w/wake_of_destruction.txt +++ b/forge-gui/res/cardsfolder/w/wake_of_destruction.txt @@ -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.