From 8614d054560687d7e6a2a4b38353ca24dec6989d Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 15 May 2024 17:06:21 +0200 Subject: [PATCH] Panglacial Wurm: support altcosts (#5243) --- .../ability/effects/ChangeZoneAllEffect.java | 48 ++----------------- .../ability/effects/ChangeZoneEffect.java | 15 +++--- .../java/forge/game/card/CardFactoryUtil.java | 2 +- forge-gui/res/cardsfolder/c/counterbore.txt | 2 +- .../res/cardsfolder/c/cranial_extraction.txt | 2 +- forge-gui/res/cardsfolder/e/eradicate.txt | 2 +- forge-gui/res/cardsfolder/e/extirpate.txt | 2 +- .../res/cardsfolder/h/haunting_echoes.txt | 3 +- .../k/kotose_the_silent_spider.txt | 2 +- forge-gui/res/cardsfolder/l/lobotomy.txt | 2 +- forge-gui/res/cardsfolder/m/memoricide.txt | 2 +- forge-gui/res/cardsfolder/n/necromentia.txt | 2 +- forge-gui/res/cardsfolder/q/quash.txt | 2 +- forge-gui/res/cardsfolder/s/scour.txt | 2 +- .../res/cardsfolder/s/shimian_specter.txt | 2 +- forge-gui/res/cardsfolder/s/sowing_salt.txt | 2 +- forge-gui/res/cardsfolder/s/splinter.txt | 2 +- .../res/cardsfolder/t/test_of_talents.txt | 2 +- forge-gui/res/cardsfolder/t/the_end.txt | 2 +- .../res/cardsfolder/t/thought_hemorrhage.txt | 2 +- forge-gui/res/cardsfolder/u/unmoored_ego.txt | 2 +- 21 files changed, 29 insertions(+), 73 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java index eed1dd28802..ff4dd7e31ea 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java @@ -12,8 +12,8 @@ import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.*; import forge.game.player.Player; +import forge.game.player.PlayerCollection; import forge.game.spellability.SpellAbility; -import forge.game.trigger.TriggerType; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.Lang; @@ -45,56 +45,14 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect { final List origin = ZoneType.listValueOf(sa.getParam("Origin")); CardCollection cards; - List tgtPlayers = getTargetPlayers(sa); + PlayerCollection tgtPlayers = getTargetPlayers(sa); final Game game = sa.getActivatingPlayer().getGame(); if ((!sa.usesTargeting() && !sa.hasParam("Defined")) || sa.hasParam("UseAllOriginZones")) { cards = new CardCollection(game.getCardsIn(origin)); tgtPlayers = game.getPlayers(); } else { - cards = new CardCollection(); - for (final Player p : tgtPlayers) { - cards.addAll(p.getCardsIn(origin)); - - if (origin.contains(ZoneType.Library) && sa.hasParam("Search") && !sa.getActivatingPlayer().canSearchLibraryWith(sa, p)) { - cards.removeAll(p.getCardsIn(ZoneType.Library)); - } - } - if (origin.contains(ZoneType.Library) && sa.hasParam("Search")) { - // Search library using changezoneall effect need a param "Search" - if (sa.getActivatingPlayer().hasKeyword("LimitSearchLibrary")) { - for (final Player p : tgtPlayers) { - cards.removeAll(p.getCardsIn(ZoneType.Library)); - int fetchNum = Math.min(p.getCardsIn(ZoneType.Library).size(), 4); - cards.addAll(p.getCardsIn(ZoneType.Library, fetchNum)); - } - } - if (!sa.getActivatingPlayer().canSearchLibraryWith(sa, null)) { - // all these cards have "then that player shuffles", mandatory shuffle - cards.removeAll(game.getCardsIn(ZoneType.Library)); - } - } - } - - if (origin.contains(ZoneType.Library) && sa.hasParam("Search") && sa.getActivatingPlayer().canSearchLibraryWith(sa, null)) { - CardCollection libCards = CardLists.getValidCards(cards, "Card.inZoneLibrary", sa.getActivatingPlayer(), source, sa); - CardCollection libCardsYouOwn = CardLists.filterControlledBy(libCards, sa.getActivatingPlayer()); - if (!libCardsYouOwn.isEmpty()) { // Only searching one's own library would fire Archive Trap's altcost - sa.getActivatingPlayer().incLibrarySearched(); - } - if (!libCards.isEmpty()) { - sa.getActivatingPlayer().getController().reveal(libCards, ZoneType.Library, libCards.get(0).getOwner()); - } - final Map runParams = AbilityKey.mapFromPlayer(sa.getActivatingPlayer()); - runParams.put(AbilityKey.Target, tgtPlayers); - game.getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false); - } - if (origin.contains(ZoneType.Hand) && sa.hasParam("Search")) { - CardCollection handCards = CardLists.filterControlledBy(CardLists.getValidCards(cards, "Card.inZoneHand", sa.getActivatingPlayer(), source, sa), - sa.getActivatingPlayer().getOpponents()); - if (!handCards.isEmpty()) { - sa.getActivatingPlayer().getController().reveal(handCards, ZoneType.Hand, handCards.get(0).getOwner()); - } + cards = tgtPlayers.getCardsIn(origin); } if (sa.hasParam("Optional")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index ffdbdb3aa68..562c60673a2 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -4,6 +4,8 @@ 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.card.CardStateName; import forge.card.CardType; import forge.game.*; import forge.game.ability.AbilityKey; @@ -877,14 +879,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { Player chooser = null; if (sa.hasParam("Chooser")) { - final String choose = sa.getParam("Chooser"); - if (choose.equals("Targeted") && sa.getTargets().isTargetingAnyPlayer()) { - chooser = sa.getTargets().getFirstTargetedPlayer(); - } else { - final FCollectionView choosers = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Chooser"), sa); - if (!choosers.isEmpty()) { - chooser = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(choosers, null, sa, Localizer.getInstance().getMessage("lblChooser") + ":", false, null, null); - } + final FCollectionView choosers = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Chooser"), sa); + if (!choosers.isEmpty()) { + chooser = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(choosers, null, sa, Localizer.getInstance().getMessage("lblChooser") + ":", false, null, null); } } @@ -1052,7 +1049,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { "While you're searching your library, you may cast CARDNAME from your library."); decider.getController().tempShowCards(canCastWhileSearching); for (final Card tgtCard : canCastWhileSearching) { - List sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, decider); + List sas = AbilityUtils.getSpellsFromPlayEffect(tgtCard, decider, CardStateName.Original, true); if (sas.isEmpty()) { continue; } diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 3a4abac9e3b..541d000045f 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1594,7 +1594,7 @@ public class CardFactoryUtil { final String effect = "DB$ ChangeZone | ValidTgts$ Player | TgtPrompt$ Select target player" + " | Origin$ Library | Destination$ Hand | ChangeType$ Card.named" + k[1] + - " | Hidden$ True | Chooser$ Targeted | Optional$ Targeted"; + " | Hidden$ True | Chooser$ Targeted | Optional$ True"; final Trigger trigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic); trigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); diff --git a/forge-gui/res/cardsfolder/c/counterbore.txt b/forge-gui/res/cardsfolder/c/counterbore.txt index 5fe749a5b6c..9a5869b9706 100644 --- a/forge-gui/res/cardsfolder/c/counterbore.txt +++ b/forge-gui/res/cardsfolder/c/counterbore.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Counter | TargetType$ Spell | ValidTgts$ Card | SubAbility$ ExileYard | SpellDescription$ Counter target spell. Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ TargetedCard.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | StackDescription$ None SVar:NumInHand:TargetedController$CardsInHand SVar:NumInLib:TargetedController$CardsInLibrary Oracle:Counter target spell. Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles. diff --git a/forge-gui/res/cardsfolder/c/cranial_extraction.txt b/forge-gui/res/cardsfolder/c/cranial_extraction.txt index e585cf64dbd..beb34df2af3 100644 --- a/forge-gui/res/cardsfolder/c/cranial_extraction.txt +++ b/forge-gui/res/cardsfolder/c/cranial_extraction.txt @@ -4,7 +4,7 @@ Types:Sorcery Arcane A:SP$ NameCard | Defined$ You | ValidCards$ Card.nonLand | ValidDescription$ nonland | SubAbility$ ExileYard | SpellDescription$ Choose a nonland card name. Search target player's graveyard, hand, and library for all cards with that name and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player | TgtPrompt$ Select target player | ChangeType$ Card.NamedCard | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInLib:TargetedPlayer$CardsInLibrary SVar:NumInHand:TargetedPlayer$CardsInHand SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/e/eradicate.txt b/forge-gui/res/cardsfolder/e/eradicate.txt index 3edcafebe02..771bbaa19fe 100644 --- a/forge-gui/res/cardsfolder/e/eradicate.txt +++ b/forge-gui/res/cardsfolder/e/eradicate.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | RememberLKI$ True | ForgetOtherTargets$ True | SubAbility$ ExileYard | SpellDescription$ Exile target nonblack creature. Search its controller's graveyard, hand, and library for all cards with the same name as that creature and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ RememberedController | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:PlayerCountRememberedController$CardsInHand SVar:NumInLib:PlayerCountRememberedController$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/e/extirpate.txt b/forge-gui/res/cardsfolder/e/extirpate.txt index 09e8ad069eb..38e7c8316aa 100644 --- a/forge-gui/res/cardsfolder/e/extirpate.txt +++ b/forge-gui/res/cardsfolder/e/extirpate.txt @@ -5,7 +5,7 @@ K:Split second A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card.nonBasic | TgtPrompt$ Select target card in a graveyard other than a basic land | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ ExileYard | SpellDescription$ Choose target card in a graveyard other than a basic land card. Search its owner's graveyard, hand, and library for all cards with the same name as that card and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:TargetedController$CardsInHand SVar:NumInLib:TargetedController$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/h/haunting_echoes.txt b/forge-gui/res/cardsfolder/h/haunting_echoes.txt index 4293746e100..fb3808d4b1a 100644 --- a/forge-gui/res/cardsfolder/h/haunting_echoes.txt +++ b/forge-gui/res/cardsfolder/h/haunting_echoes.txt @@ -2,9 +2,10 @@ Name:Haunting Echoes ManaCost:3 B B Types:Sorcery A:SP$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player | TgtPrompt$ Select target player | ChangeType$ Card.nonBasic | RememberChanged$ True | SubAbility$ DBRepeat | SpellDescription$ Exile all cards from target player's graveyard other than basic land cards. For each card exiled this way, search that player's library for all cards with the same name as that card and exile them. Then that player shuffles. -SVar:DBRepeat:DB$ ChangeZoneAll | Origin$ Library | Defined$ Targeted | Destination$ Exile | Mandatory$ True | ChangeType$ Card.sharesNameWith Remembered | Search$ True | Shuffle$ True | SubAbility$ DBCleanup +SVar:DBRepeat:DB$ ChangeZone | Origin$ Library | DefinedPlayer$ Targeted | Destination$ Exile | ChangeType$ Card.sharesNameWith Remembered | ChangeNum$ X | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:NeedsToPlayVar:Z GE1 +SVar:X:TargetedPlayer$CardsInLibrary SVar:Z:SVar$Z1/Plus.Z2 SVar:Z1:Count$ValidGraveyard Card.nonLand+OppOwn SVar:Z2:Count$ValidGraveyard Card.Land+nonBasic+OppOwn diff --git a/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt b/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt index e5c6669eaec..8b2fcb9622c 100644 --- a/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt +++ b/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card.nonBasic+OppOwn | TgtPrompt$ Select target card other than a basic land in an opponent's graveyard | RememberChanged$ True | SubAbility$ ExileYard | StackDescription$ None SVar:ExileYard:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInYard | Chooser$ You | Hidden$ True | RememberChanged$ True | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | RememberChanged$ True | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | RememberChanged$ True | SubAbility$ DBEffect | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | RememberChanged$ True | SubAbility$ DBEffect | StackDescription$ None SVar:NumInYard:TargetedController$CardsInGraveyard SVar:NumInHand:TargetedController$CardsInHand SVar:NumInLib:TargetedController$CardsInLibrary diff --git a/forge-gui/res/cardsfolder/l/lobotomy.txt b/forge-gui/res/cardsfolder/l/lobotomy.txt index 1df42537eaa..8c7627963d3 100644 --- a/forge-gui/res/cardsfolder/l/lobotomy.txt +++ b/forge-gui/res/cardsfolder/l/lobotomy.txt @@ -5,7 +5,7 @@ A:SP$ RevealHand | ValidTgts$ Player | SubAbility$ ChooseCard | StackDescription SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.nonBasic+TargetedPlayerCtrl+inZoneHand | ChoiceZone$ Hand | SubAbility$ ExileYard | RememberChosen$ True | ForgetOtherTargets$ True | SpellDescription$ then you choose a card other than a basic land card from it. Search that player's graveyard, hand, and library for all cards with the same name as the chosen card and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ Targeted | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | AlreadyRevealed$ True | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:TargetedPlayer$CardsInHand SVar:NumInLib:TargetedPlayer$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/m/memoricide.txt b/forge-gui/res/cardsfolder/m/memoricide.txt index d68b63adb53..c87f24dcefe 100644 --- a/forge-gui/res/cardsfolder/m/memoricide.txt +++ b/forge-gui/res/cardsfolder/m/memoricide.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ NameCard | Defined$ You | ValidCards$ Card.nonLand | ValidDescription$ nonland | SubAbility$ ExileYard | SpellDescription$ Choose a nonland card name. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player | TgtPrompt$ Select target player | ChangeType$ Card.NamedCard | Chooser$ You | ChangeNum$ NumInYard | Hidden$ True | SubAbility$ ExileHand | StackDescription$ Choose a nonland card name. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles. SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | StackDescription$ None SVar:NumInLib:TargetedPlayer$CardsInLibrary SVar:NumInHand:TargetedPlayer$CardsInHand SVar:NumInYard:TargetedPlayer$CardsInGraveyard diff --git a/forge-gui/res/cardsfolder/n/necromentia.txt b/forge-gui/res/cardsfolder/n/necromentia.txt index 0953816d801..d315d37b86d 100644 --- a/forge-gui/res/cardsfolder/n/necromentia.txt +++ b/forge-gui/res/cardsfolder/n/necromentia.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ NameCard | Defined$ You | ValidCards$ Card.nonBasic | ValidDescription$ card other than a basic land | SubAbility$ ExileYard | StackDescription$ SpellDescription | SpellDescription$ Choose a card name other than a basic land card name. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. That player shuffles, then creates a 2/2 black Zombie creature token for each card exiled from their hand this way. SVar:ExileYard:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player.Opponent | TgtPrompt$ Select target opponent | ChangeType$ Card.NamedCard | Chooser$ You | ChangeNum$ NumInYard | Hidden$ True | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInHand | Chooser$ You | RememberChanged$ True | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBToken | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBToken | StackDescription$ None SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ b_2_2_zombie | TokenOwner$ Targeted | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:NumInLib:TargetedPlayer$CardsInLibrary diff --git a/forge-gui/res/cardsfolder/q/quash.txt b/forge-gui/res/cardsfolder/q/quash.txt index a12bc906c99..943ea3764c6 100644 --- a/forge-gui/res/cardsfolder/q/quash.txt +++ b/forge-gui/res/cardsfolder/q/quash.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Counter | TargetType$ Spell | ValidTgts$ Instant,Sorcery | SubAbility$ ExileYard | SpellDescription$ Counter target instant or sorcery spell. Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ TargetedCard.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | StackDescription$ None SVar:NumInHand:TargetedController$CardsInHand SVar:NumInLib:TargetedController$CardsInLibrary Oracle:Counter target instant or sorcery spell. Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. Then that player shuffles. diff --git a/forge-gui/res/cardsfolder/s/scour.txt b/forge-gui/res/cardsfolder/s/scour.txt index 2a8e8c8a4d3..46b096adb11 100644 --- a/forge-gui/res/cardsfolder/s/scour.txt +++ b/forge-gui/res/cardsfolder/s/scour.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment | RememberLKI$ True | ForgetOtherTargets$ True | SubAbility$ ExileYard | SpellDescription$ Exile target enchantment. Search its controller's graveyard, hand, and library for all cards with the same name as that enchantment and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:TargetedController$CardsInHand SVar:NumInLib:TargetedController$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/shimian_specter.txt b/forge-gui/res/cardsfolder/s/shimian_specter.txt index 69a5178042e..c5f0ac3057e 100644 --- a/forge-gui/res/cardsfolder/s/shimian_specter.txt +++ b/forge-gui/res/cardsfolder/s/shimian_specter.txt @@ -8,7 +8,7 @@ SVar:TrigReveal:DB$ RevealHand | Defined$ TriggeredTarget | RememberRevealedPlay SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.nonLand+RememberedPlayerCtrl+inZoneHand | ChoiceZone$ Hand | SubAbility$ ExileYard | RememberChosen$ True | ForgetOtherTargets$ True SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredTarget | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TriggeredTarget | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TriggeredTarget | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TriggeredTarget | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:TriggeredTarget$CardsInHand SVar:NumInLib:TriggeredTarget$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/sowing_salt.txt b/forge-gui/res/cardsfolder/s/sowing_salt.txt index 602ca49b83c..981ee49b54d 100644 --- a/forge-gui/res/cardsfolder/s/sowing_salt.txt +++ b/forge-gui/res/cardsfolder/s/sowing_salt.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Land.nonBasic | TgtPrompt$ Select target nonbasic land | RememberLKI$ True | ForgetOtherTargets$ True | SubAbility$ ExileYard | SpellDescription$ Exile target nonbasic land. Search its controller's graveyard, hand, and library for all cards with the same name as that land and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ RememberedController | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:PlayerCountRememberedController$CardsInHand SVar:NumInLib:PlayerCountRememberedController$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/splinter.txt b/forge-gui/res/cardsfolder/s/splinter.txt index f166132dfa2..f2606f003bb 100644 --- a/forge-gui/res/cardsfolder/s/splinter.txt +++ b/forge-gui/res/cardsfolder/s/splinter.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | RememberLKI$ True | ForgetOtherTargets$ True | SubAbility$ ExileYard | SpellDescription$ Exile target artifact. Search its controller's graveyard, hand, and library for all cards with the same name as that artifact and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ RememberedController | ChangeType$ Remembered.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ RememberedController | ChangeType$ Remembered.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInHand:PlayerCountRememberedController$CardsInHand SVar:NumInLib:PlayerCountRememberedController$CardsInLibrary SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/t/test_of_talents.txt b/forge-gui/res/cardsfolder/t/test_of_talents.txt index c717771c708..2adf66b68fa 100644 --- a/forge-gui/res/cardsfolder/t/test_of_talents.txt +++ b/forge-gui/res/cardsfolder/t/test_of_talents.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Counter | TargetType$ Spell | ValidTgts$ Instant,Sorcery | SubAbility$ ExileYard | SpellDescription$ Counter target spell. Search its controller's graveyard, hand, and library for all cards with the same name as that spell and exile them. That player shuffles, then draws a card for each card exiled from their hand this way. | StackDescription$ SpellDescription SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ TargetedCard.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None | RememberChanged$ True -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ Draw | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ Draw | StackDescription$ None SVar:Draw:DB$ Draw | Defined$ TargetedController | NumCards$ X | SubAbility$ DBCleanup | StackDescription$ None SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedSize diff --git a/forge-gui/res/cardsfolder/t/the_end.txt b/forge-gui/res/cardsfolder/t/the_end.txt index aec98503c6d..f413c853138 100644 --- a/forge-gui/res/cardsfolder/t/the_end.txt +++ b/forge-gui/res/cardsfolder/t/the_end.txt @@ -6,7 +6,7 @@ SVar:YourLife:Count$YourLifeTotal A:SP$ ChangeZone | SubAbility$ ExileYard | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | SpellDescription$ Exile target creature or planeswalker. Search its controller's graveyard, hand, and library for any number of cards with the same name as that permanent and exile them. That player shuffles, then draws a card for each card exiled from their hand this way. SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ TargetedController | ChangeType$ TargetedCard.sameName | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None | RememberChanged$ True -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ Draw | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ TargetedController | ChangeType$ TargetedCard.sameName | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ Draw | StackDescription$ None SVar:Draw:DB$ Draw | Defined$ TargetedController | NumCards$ X | SubAbility$ DBCleanup | StackDescription$ None SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedSize diff --git a/forge-gui/res/cardsfolder/t/thought_hemorrhage.txt b/forge-gui/res/cardsfolder/t/thought_hemorrhage.txt index d34e8a5a7ee..afc1bad49b3 100644 --- a/forge-gui/res/cardsfolder/t/thought_hemorrhage.txt +++ b/forge-gui/res/cardsfolder/t/thought_hemorrhage.txt @@ -6,7 +6,7 @@ SVar:DBReveal:DB$ RevealHand | RememberRevealed$ True | ValidTgts$ Player | TgtP SVar:DBDamage:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | SubAbility$ ExileYard SVar:ExileYard:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | Defined$ Targeted | ChangeType$ Card.NamedCard | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | AlreadyRevealed$ True | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Search$ True | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInLib | Chooser$ You | Shuffle$ True | SubAbility$ DBCleanup | StackDescription$ None SVar:NumInLib:TargetedPlayer$CardsInLibrary SVar:NumInHand:TargetedPlayer$CardsInHand SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True diff --git a/forge-gui/res/cardsfolder/u/unmoored_ego.txt b/forge-gui/res/cardsfolder/u/unmoored_ego.txt index 0a914d72417..041bcbe4c18 100644 --- a/forge-gui/res/cardsfolder/u/unmoored_ego.txt +++ b/forge-gui/res/cardsfolder/u/unmoored_ego.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ NameCard | Defined$ You | SubAbility$ ExileYard | StackDescription$ SpellDescription | SpellDescription$ Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. That player shuffles, then draws a card for each card exiled from their hand this way. SVar:ExileYard:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player.Opponent | TgtPrompt$ Select target opponent | ChangeType$ Card.NamedCard | Chooser$ You | ChangeNum$ 4 | Hidden$ True | RememberChanged$ True | SubAbility$ ExileHand | StackDescription$ None SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ Y | Chooser$ You | RememberChanged$ True | Imprint$ True | SubAbility$ ExileLib | StackDescription$ None -SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ Y | Chooser$ You | RememberChanged$ True | Search$ True | Shuffle$ True | SubAbility$ DBDraw | StackDescription$ None +SVar:ExileLib:DB$ ChangeZone | Origin$ Library | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ Y | Chooser$ You | RememberChanged$ True | Shuffle$ True | SubAbility$ DBDraw | StackDescription$ None SVar:DBDraw:DB$ Draw | Defined$ Targeted | NumCards$ Z | SubAbility$ DBCleanup | StackDescription$ None SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True SVar:X:Remembered$Amount