From 45fb4003bf5058d349ba1fb08dc6d857fef2638b Mon Sep 17 00:00:00 2001 From: Northmoc <103371817+Northmoc@users.noreply.github.com> Date: Sat, 28 Oct 2023 07:43:20 -0400 Subject: [PATCH] add loop functionality to CloneEffect / refactor some cards! (#3966) --- .../game/ability/effects/CloneEffect.java | 179 +++++++++--------- .../a/augmenter_pugilist_echoing_equation.txt | 4 +- .../b/brudiclad_telchor_engineer.txt | 9 +- forge-gui/res/cardsfolder/c/crack_open.txt | 6 +- .../res/cardsfolder/i/infinite_reflection.txt | 7 +- .../cardsfolder/m/masterful_replication.txt | 9 +- forge-gui/res/cardsfolder/m/mirrorweave.txt | 4 +- .../res/cardsfolder/s/sakashimas_will.txt | 11 +- .../upcoming/nanogene_conversion.txt | 4 +- 9 files changed, 111 insertions(+), 122 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index 95b54f97620..9a4baa05ece 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -1,21 +1,13 @@ package forge.game.ability.effects; -import java.util.Arrays; -import java.util.List; - import com.google.common.collect.Iterables; import com.google.common.collect.Lists; - import forge.GameCommand; import forge.StaticData; import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardFactory; -import forge.game.card.CardLists; -import forge.game.card.CardPredicates; +import forge.game.card.*; import forge.game.event.GameEventCardStatsChanged; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -24,6 +16,10 @@ import forge.util.CardTranslation; import forge.util.Localizer; import forge.util.collect.FCollection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class CloneEffect extends SpellAbilityEffect { // TODO update this method @@ -58,7 +54,7 @@ public class CloneEffect extends SpellAbilityEffect { public void resolve(SpellAbility sa) { final Card host = sa.getHostCard(); final Player activator = sa.getActivatingPlayer(); - Card tgtCard = host; + List cloneTargets = new ArrayList<>(); final Game game = activator.getGame(); final List pumpKeywords = Lists.newArrayList(); @@ -89,9 +85,11 @@ public class CloneEffect extends SpellAbilityEffect { } choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host, sa); + boolean choiceOpt = sa.hasParam("ChoiceOptional"); - String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard") + " "; - cardToCopy = activator.getController().chooseSingleEntityForEffect(choices, sa, title, false, null); + String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : + Localizer.getInstance().getMessage("lblChooseaCard") + " "; + cardToCopy = activator.getController().chooseSingleEntityForEffect(choices, sa, title, choiceOpt, null); } else if (sa.hasParam("Defined")) { List cloneSources = AbilityUtils.getDefinedCards(host, sa.getParam("Defined"), sa); if (!cloneSources.isEmpty()) { @@ -114,89 +112,94 @@ public class CloneEffect extends SpellAbilityEffect { // find target of cloning i.e. card becoming a clone if (sa.hasParam("CloneTarget")) { - final List cloneTargets = AbilityUtils.getDefinedCards(host, sa.getParam("CloneTarget"), sa); - if (!cloneTargets.isEmpty()) { - tgtCard = cloneTargets.get(0); - game.getTriggerHandler().clearActiveTriggers(tgtCard, null); - } else { + cloneTargets = AbilityUtils.getDefinedCards(host, sa.getParam("CloneTarget"), sa); + if (cloneTargets.isEmpty()) { return; } } else if (sa.hasParam("Choices") && sa.usesTargeting()) { - tgtCard = sa.getTargetCard(); + cloneTargets.add(sa.getTargetCard()); + } else { + cloneTargets.add(host); + } + + if (cloneTargets.contains(cardToCopy) && sa.hasParam("ExcludeChosen")) { + cloneTargets.remove(cardToCopy); + } + + for (Card tgtCard : cloneTargets) { game.getTriggerHandler().clearActiveTriggers(tgtCard, null); - } - - if (sa.hasParam("CloneZone")) { - if (!tgtCard.isInZone(ZoneType.smartValueOf(sa.getParam("CloneZone")))) { - return; - } - } - - if (tgtCard.isPhasedOut()) { - return; - } - - if ("UntilTargetedUntaps".equals(sa.getParam("Duration")) && !cardToCopy.isTapped()) { - return; - } - - final Long ts = game.getNextTimestamp(); - tgtCard.addCloneState(CardFactory.getCloneStates(cardToCopy, tgtCard, sa), ts); - - // set ETB tapped of clone - if (sa.hasParam("IntoPlayTapped")) { - tgtCard.setTapped(true); - } - - if (!pumpKeywords.isEmpty()) { - tgtCard.addChangedCardKeywords(pumpKeywords, Lists.newArrayList(), false, ts, 0); - } - - tgtCard.updateStateForView(); - - // when clone is itself, cleanup from old abilities - if (host.equals(tgtCard) && !sa.hasParam("ImprintRememberedNoCleanup")) { - tgtCard.clearImprintedCards(); - tgtCard.clearRemembered(); - } - - if (sa.hasParam("Duration")) { - final Card cloneCard = tgtCard; - // if clone is temporary, target needs old values back after (keep Death-Mask Duplicant working) - final Iterable clonedImprinted = new CardCollection(tgtCard.getImprintedCards()); - final Iterable clonedRemembered = new FCollection<>(tgtCard.getRemembered()); - - final GameCommand unclone = new GameCommand() { - private static final long serialVersionUID = -78375985476256279L; - - @Override - public void run() { - if (cloneCard.removeCloneState(ts)) { - // remove values gained while being cloned - cloneCard.clearImprintedCards(); - cloneCard.clearRemembered(); - // restore original Remembered and Imprinted, ignore cards from players who lost - cloneCard.addImprintedCards(Iterables.filter(clonedImprinted, CardPredicates.ownerLives())); - cloneCard.addRemembered(Iterables.filter(clonedRemembered, Player.class)); - cloneCard.addRemembered(Iterables.filter(Iterables.filter(clonedRemembered, Card.class), CardPredicates.ownerLives())); - cloneCard.updateStateForView(); - game.fireEvent(new GameEventCardStatsChanged(cloneCard)); - } + if (sa.hasParam("CloneZone")) { + if (!tgtCard.isInZone(ZoneType.smartValueOf(sa.getParam("CloneZone")))) { + continue; } - }; + } - addUntilCommand(sa, unclone); + if (tgtCard.isPhasedOut()) { + continue; + } + + if ("UntilTargetedUntaps".equals(sa.getParam("Duration")) && !cardToCopy.isTapped()) { + continue; + } + + final Long ts = game.getNextTimestamp(); + tgtCard.addCloneState(CardFactory.getCloneStates(cardToCopy, tgtCard, sa), ts); + + // set ETB tapped of clone + if (sa.hasParam("IntoPlayTapped")) { + tgtCard.setTapped(true); + } + + if (!pumpKeywords.isEmpty()) { + tgtCard.addChangedCardKeywords(pumpKeywords, Lists.newArrayList(), false, ts, 0); + } + + tgtCard.updateStateForView(); + + // when clone is itself, cleanup from old abilities + if (host.equals(tgtCard) && !sa.hasParam("ImprintRememberedNoCleanup")) { + tgtCard.clearImprintedCards(); + tgtCard.clearRemembered(); + } + + if (sa.hasParam("Duration")) { + final Card cloneCard = tgtCard; + // if clone is temporary, target needs old values back after (keep Death-Mask Duplicant working) + final Iterable clonedImprinted = new CardCollection(tgtCard.getImprintedCards()); + final Iterable clonedRemembered = new FCollection<>(tgtCard.getRemembered()); + + final GameCommand unclone = new GameCommand() { + private static final long serialVersionUID = -78375985476256279L; + + @Override + public void run() { + if (cloneCard.removeCloneState(ts)) { + // remove values gained while being cloned + cloneCard.clearImprintedCards(); + cloneCard.clearRemembered(); + // restore original Remembered and Imprinted, ignore cards from players who lost + cloneCard.addImprintedCards(Iterables.filter(clonedImprinted, CardPredicates.ownerLives())); + cloneCard.addRemembered(Iterables.filter(clonedRemembered, Player.class)); + cloneCard.addRemembered(Iterables.filter(Iterables.filter(clonedRemembered, Card.class), CardPredicates.ownerLives())); + cloneCard.updateStateForView(); + game.fireEvent(new GameEventCardStatsChanged(cloneCard)); + } + } + }; + + addUntilCommand(sa, unclone); + } + + // now we can also cleanup in case target was another card + tgtCard.clearRemembered(); + tgtCard.clearImprintedCards(); + + if (sa.hasParam("RememberCloneOrigin")) { + tgtCard.addRemembered(cardToCopy); + } + + game.fireEvent(new GameEventCardStatsChanged(tgtCard)); } - - // now we can also cleanup in case target was another card - tgtCard.clearRemembered(); - tgtCard.clearImprintedCards(); - - if (sa.hasParam("RememberCloneOrigin")) { - tgtCard.addRemembered(cardToCopy); - } - - game.fireEvent(new GameEventCardStatsChanged(tgtCard)); } } diff --git a/forge-gui/res/cardsfolder/a/augmenter_pugilist_echoing_equation.txt b/forge-gui/res/cardsfolder/a/augmenter_pugilist_echoing_equation.txt index f7ceea2c3ec..86ad03009b2 100644 --- a/forge-gui/res/cardsfolder/a/augmenter_pugilist_echoing_equation.txt +++ b/forge-gui/res/cardsfolder/a/augmenter_pugilist_echoing_equation.txt @@ -12,7 +12,5 @@ ALTERNATE Name:Echoing Equation ManaCost:3 U U Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBRepeatEach | StackDescription$ Each other creature {p:You} controls becomes a copy of {c:Targeted} until end of turn, except those creatures aren't legendary if {c:Targeted} is legendary. | SpellDescription$ Choose target creature you control. Each other creature you control becomes a copy of it until end of turn, except those creatures aren't legendary if the chosen creature is legendary. -SVar:DBRepeatEach:DB$ RepeatEach | RepeatCards$ Creature.YouCtrl+NotDefinedTargeted | RepeatSubAbility$ DBClone -SVar:DBClone:DB$ Clone | Defined$ Targeted | CloneTarget$ Imprinted | NonLegendary$ True | Duration$ UntilEndOfTurn +A:SP$ Clone | Defined$ Targeted | CloneTarget$ Valid Creature.YouCtrl+NotDefinedTargeted | NonLegendary$ True | Duration$ UntilEndOfTurn | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | StackDescription$ Each other creature {p:You} controls becomes a copy of {c:Targeted} until end of turn, except those creatures aren't legendary. | SpellDescription$ Choose target creature you control. Each other creature you control becomes a copy of it until end of turn, except those creatures aren't legendary if the chosen creature is legendary. Oracle:Choose target creature you control. Each other creature you control becomes a copy of it until end of turn, except those creatures aren't legendary if the chosen creature is legendary. diff --git a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt index 1b4e7c5ba6b..bc3b3bbdcfd 100644 --- a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt +++ b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt @@ -5,11 +5,8 @@ PT:4/4 S:Mode$ Continuous | Affected$ Creature.token+YouCtrl | AddKeyword$ Haste | Description$ Creature tokens you control have haste. SVar:PlayMain1:TRUE T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_2_1_a_phyrexian_myr | TokenOwner$ You | SubAbility$ DBImprint -SVar:DBImprint:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Card.token+YouCtrl | ChoiceTitle$ Choose token you control | SubAbility$ MassClone | StackDescription$ None | SpellDescription$ Each other token becomes a copy of target token. -SVar:MassClone:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Card.token+nonChosenCard+YouCtrl | RepeatSubAbility$ DBCopy | SubAbility$ DBCleanup -SVar:DBCopy:DB$ Clone | Defined$ ChosenCard | CloneTarget$ Imprinted -SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +SVar:TrigToken:DB$ Token | TokenScript$ u_2_1_a_phyrexian_myr | SubAbility$ DBClone +SVar:DBClone:DB$ Clone | Choices$ Card.token+YouCtrl | ChoiceTitle$ You may choose a token you control | ChoiceOptional$ True | ExcludeChosen$ True | CloneTarget$ Valid Card.token+YouCtrl DeckHints:Type$Token -DeckHas:Type$Token +DeckHas:Type$Token & Type$Artifact|Myr Oracle:Creature tokens you control have haste.\nAt the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. diff --git a/forge-gui/res/cardsfolder/c/crack_open.txt b/forge-gui/res/cardsfolder/c/crack_open.txt index 593181def10..0f5f08cd230 100644 --- a/forge-gui/res/cardsfolder/c/crack_open.txt +++ b/forge-gui/res/cardsfolder/c/crack_open.txt @@ -1,7 +1,7 @@ Name:Crack Open ManaCost:2 G Types:Sorcery -A:SP$ Destroy | Cost$ 2 G | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SubAbility$ DBToken | SpellDescription$ Destroy target artifact or enchantment. Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You -DeckHas:Ability$Token +A:SP$ Destroy | Cost$ 2 G | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SubAbility$ DBToken | SpellDescription$ Destroy target artifact or enchantment. +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You | SpellDescription$ Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") +DeckHas:Ability$Token|Sacrifice & Type$Artifact|Treasure Oracle:Destroy target artifact or enchantment. Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") diff --git a/forge-gui/res/cardsfolder/i/infinite_reflection.txt b/forge-gui/res/cardsfolder/i/infinite_reflection.txt index 235d7173cf1..20a7ff3e1f3 100644 --- a/forge-gui/res/cardsfolder/i/infinite_reflection.txt +++ b/forge-gui/res/cardsfolder/i/infinite_reflection.txt @@ -2,12 +2,11 @@ Name:Infinite Reflection ManaCost:5 U Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 5 U | ValidTgts$ Creature | AILogic$ HighestEvaluation +A:SP$ Attach | ValidTgts$ Creature | AILogic$ HighestEvaluation T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+AttachedTo Card | Execute$ RememberInitialAttach | Static$ True SVar:RememberInitialAttach:DB$ Pump | RememberObjects$ Valid Card.AttachedBy -T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+AttachedTo Card | Execute$ FirstReflections | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield attached to a creature, each other nontoken creature you control becomes a copy of that creature. -SVar:FirstReflections:DB$ RepeatEach | RepeatCards$ Creature.nonToken+YouCtrl+IsNotRemembered | UseImprinted$ True | Zone$ Battlefield | RepeatSubAbility$ Reflect | SubAbility$ DBCleanup -SVar:Reflect:DB$ Clone | Defined$ Remembered | CloneTarget$ Imprinted +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+AttachedTo Card | Execute$ TrigClone | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield attached to a creature, each other nontoken creature you control becomes a copy of that creature. +SVar:TrigClone:DB$ Clone | Defined$ Remembered | CloneTarget$ Valid Creature.nonToken+YouCtrl+IsNotRemembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True K:ETBReplacement:Copy:Reflections:Mandatory:Battlefield:Creature.nonToken+YouCtrl SVar:Reflections:DB$ Clone | Defined$ Enchanted | CloneTarget$ ReplacedCard | SpellDescription$ Nontoken creatures you control enter the battlefield as a copy of enchanted creature. diff --git a/forge-gui/res/cardsfolder/m/masterful_replication.txt b/forge-gui/res/cardsfolder/m/masterful_replication.txt index 0fb5c332f50..73df5273401 100644 --- a/forge-gui/res/cardsfolder/m/masterful_replication.txt +++ b/forge-gui/res/cardsfolder/m/masterful_replication.txt @@ -1,11 +1,10 @@ Name:Masterful Replication ManaCost:5 U Types:Instant -A:SP$ Charm | Cost$ 5 U | Choices$ DBToken,DBCopy +A:SP$ Charm | Choices$ DBToken,DBClone SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | SpellDescription$ Create two 3/3 colorless Golem artifact creature tokens. -SVar:DBCopy:DB$ Pump | ValidTgts$ Artifact.YouCtrl | SubAbility$ DBRepeat | SpellDescription$ Choose target artifact you control. Each other artifact you control becomes a copy of that artifact until end of turn. -SVar:DBRepeat:DB$ RepeatEach | RepeatCards$ Artifact.YouCtrl+NotDefinedTargeted | RepeatSubAbility$ DBClone -SVar:DBClone:DB$ Clone | Defined$ Targeted | CloneTarget$ Remembered | Duration$ UntilEndOfTurn +SVar:DBClone:DB$ Clone | Defined$ Targeted | CloneTarget$ Valid Artifact.YouCtrl+NotDefinedTargeted | Duration$ UntilEndOfTurn | ValidTgts$ Artifact.YouCtrl | TgtPrompt$ Choose target artifact you control | StackDescription$ Each other artifact {p:You} controls becomes a copy of {c:Targeted} until end of turn. | SpellDescription$ Choose target artifact you control. Each other artifact you control becomes a copy of that artifact until end of turn. AI:RemoveDeck:All -DeckHas:Ability$Token +DeckHas:Ability$Token & Type$Artifact|Golem +DeckHints:Type$Artifact Oracle:Choose one —\n• Create two 3/3 colorless Golem artifact creature tokens.\n• Choose target artifact you control. Each other artifact you control becomes a copy of that artifact until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mirrorweave.txt b/forge-gui/res/cardsfolder/m/mirrorweave.txt index 086ee942012..8b1b1e9a0e7 100644 --- a/forge-gui/res/cardsfolder/m/mirrorweave.txt +++ b/forge-gui/res/cardsfolder/m/mirrorweave.txt @@ -1,7 +1,5 @@ Name:Mirrorweave ManaCost:2 WU WU Types:Instant -A:SP$ Pump | Cost$ 2 WU WU | ValidTgts$ Creature.nonLegendary | TgtPrompt$ Choose target nonlegendary creature | AILogic$ Pump | SubAbility$ MirrorweaveClone | StackDescription$ None | SpellDescription$ Each other creature becomes a copy of target nonlegendary creature until end of turn. -SVar:MirrorweaveClone:DB$ RepeatEach | RepeatCards$ Creature.NotDefinedTargeted | RepeatSubAbility$ DBCopy -SVar:DBCopy:DB$ Clone | Defined$ Targeted | CloneTarget$ Remembered | Duration$ UntilEndOfTurn +A:SP$ Clone | Defined$ Targeted | CloneTarget$ Valid Creature.NotDefinedTargeted | Duration$ UntilEndOfTurn | ValidTgts$ Creature.nonLegendary | TgtPrompt$ Select target nonlegendary creature | StackDescription$ REP target nonlegendary creature_{c:Targeted} | SpellDescription$ Each other creature becomes a copy of target nonlegendary creature until end of turn. Oracle:Each other creature becomes a copy of target nonlegendary creature until end of turn. diff --git a/forge-gui/res/cardsfolder/s/sakashimas_will.txt b/forge-gui/res/cardsfolder/s/sakashimas_will.txt index c99fb02ec3e..9e613d79b07 100644 --- a/forge-gui/res/cardsfolder/s/sakashimas_will.txt +++ b/forge-gui/res/cardsfolder/s/sakashimas_will.txt @@ -1,13 +1,10 @@ Name:Sakashima's Will ManaCost:3 U Types:Sorcery -A:SP$ Charm | Cost$ 3 U | MinCharmNum$ 1 | CharmNum$ X | Choices$ DBControl,DBImprint | AdditionalDescription$ . If you control a commander as you cast this spell, you may choose both. -SVar:DBControl:DB$ ChooseCard | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Mandatory$ True | Choices$ Creature.TargetedPlayerCtrl | ChoiceTitle$ Choose a creature you control | SubAbility$ DBGainControl | AILogic$ WorstCard | SpellDescription$ Target opponent chooses a creature they control. You gain control of it. +A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ X | Choices$ DBControl,DBClone | AdditionalDescription$ . If you control a commander as you cast this spell, you may choose both. +SVar:DBControl:DB$ ChooseCard | ValidTgts$ Opponent | Mandatory$ True | Choices$ Creature.TargetedPlayerCtrl | ChoiceTitle$ Choose a creature you control | SubAbility$ DBGainControl | AILogic$ WorstCard | SpellDescription$ Target opponent chooses a creature they control. You gain control of it. SVar:DBGainControl:DB$ GainControl | Defined$ ChosenCard | NewController$ You -SVar:DBImprint:DB$ ChooseCard | Defined$ You | Mandatory$ True | Choices$ Creature.YouCtrl | ChoiceTitle$ Choose a creature you control | SubAbility$ MassClone | SpellDescription$ Choose a creature you control. Each other creature you control becomes a copy of that creature until end of turn. -SVar:MassClone:DB$ RepeatEach | RepeatCards$ Card.Creature+nonChosenCard+YouCtrl | RepeatSubAbility$ DBCopy -SVar:DBCopy:DB$ Clone | Defined$ ChosenCard | CloneTarget$ Remembered | Duration$ UntilEndOfTurn -SVar:X:Count$Compare Y GE1.2.1 -SVar:Y:Count$Valid Card.IsCommander+YouCtrl +SVar:DBClone:DB$ Clone | Choices$ Creature.YouCtrl | ChoiceTitle$ Choose a creature you control | ExcludeChosen$ True | CloneTarget$ Valid Creature.YouCtrl | Duration$ UntilEndOfTurn +SVar:X:Count$Compare Count$Valid Card.IsCommander+YouCtrl GE1.2.1 SVar:PlayMain1:TRUE Oracle:Choose one. If you control a commander as you cast this spell, you may choose both.\n• Target opponent chooses a creature they control. You gain control of it.\n• Choose a creature you control. Each other creature you control becomes a copy of that creature until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/nanogene_conversion.txt b/forge-gui/res/cardsfolder/upcoming/nanogene_conversion.txt index 3bc3dd9da37..695d36d73e3 100644 --- a/forge-gui/res/cardsfolder/upcoming/nanogene_conversion.txt +++ b/forge-gui/res/cardsfolder/upcoming/nanogene_conversion.txt @@ -1,7 +1,5 @@ Name:Nanogene Conversion ManaCost:3 U Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBRepeatEach | StackDescription$ Each other creature becomes a copy of {c:Targeted} until end of turn, except those creatures aren't legendary | SpellDescription$ Choose target creature you control. Each other creature becomes a copy of that creature until end of turn, except it isn't legendary. -SVar:DBRepeatEach:DB$ RepeatEach | RepeatCards$ Creature.NotDefinedTargeted | RepeatSubAbility$ DBClone -SVar:DBClone:DB$ Clone | Defined$ Targeted | CloneTarget$ Remembered | NonLegendary$ True | Duration$ UntilEndOfTurn +A:SP$ Clone | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | Defined$ Targeted | CloneTarget$ Valid Creature.NotDefinedTargeted | NonLegendary$ True | Duration$ UntilEndOfTurn | StackDescription$ Each other creature becomes a copy of {c:Targeted} until end of turn, except those creatures aren't legendary. | SpellDescription$ Choose target creature you control. Each other creature becomes a copy of that creature until end of turn, except it isn't legendary. Oracle:Choose target creature you control. Each other creature becomes a copy of that creature until end of turn, except it isn't legendary.