From b614b9b46f4a256382350c20ab222ed066385579 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 12 Oct 2022 14:54:07 +0200 Subject: [PATCH] Cleanup cards (#1667) * Card cleanup * FailedToTarget fix * Fix card * Use ColorSet cache in favor of parsing Co-authored-by: tool4EvEr --- .../java/forge/ai/ComputerUtilCombat.java | 2 +- .../forge/ai/ability/CountersMultiplyAi.java | 18 ++++++++++++++- .../src/main/java/forge/game/card/Card.java | 5 ++-- .../java/forge/game/card/CardFactory.java | 23 +++++++++---------- .../main/java/forge/game/card/CardState.java | 11 --------- .../main/java/forge/game/card/CardUtil.java | 8 ------- .../java/forge/game/card/token/TokenInfo.java | 2 +- forge-gui/res/cardsfolder/a/ambush_krotiq.txt | 2 +- .../cardsfolder/b/balduvian_trading_post.txt | 2 +- forge-gui/res/cardsfolder/b/bitter_feud.txt | 4 ++-- forge-gui/res/cardsfolder/c/cavern_harpy.txt | 2 +- .../res/cardsfolder/c/cliffhaven_kitesail.txt | 2 +- .../cardsfolder/c/commander_greven_il_vec.txt | 2 +- forge-gui/res/cardsfolder/c/coral_atoll.txt | 2 +- forge-gui/res/cardsfolder/d/dance_of_many.txt | 2 +- forge-gui/res/cardsfolder/d/dermotaxi.txt | 3 ++- .../res/cardsfolder/d/devout_invocation.txt | 2 +- .../res/cardsfolder/d/doomsday_specter.txt | 2 +- .../res/cardsfolder/d/dormant_volcano.txt | 2 +- forge-gui/res/cardsfolder/e/embercleave.txt | 2 +- forge-gui/res/cardsfolder/e/everglades.txt | 2 +- .../res/cardsfolder/e/eye_for_an_eye.txt | 2 +- .../res/cardsfolder/e/ezuris_predation.txt | 2 +- .../res/cardsfolder/f/fleetfoot_panther.txt | 2 +- .../res/cardsfolder/f/fungal_behemoth.txt | 2 +- forge-gui/res/cardsfolder/h/horned_kavu.txt | 2 +- .../cardsfolder/j/javelin_of_lightning.txt | 2 +- forge-gui/res/cardsfolder/j/jungle_basin.txt | 2 +- forge-gui/res/cardsfolder/k/karoo.txt | 2 +- .../res/cardsfolder/k/keymaster_rogue.txt | 2 +- forge-gui/res/cardsfolder/k/kor_skyfisher.txt | 2 +- .../k/kotose_the_silent_spider.txt | 3 ++- .../res/cardsfolder/m/marsh_crocodile.txt | 2 +- .../cardsfolder/m/maul_of_the_skyclaves.txt | 2 +- forge-gui/res/cardsfolder/m/mind_carver.txt | 2 +- .../res/cardsfolder/p/phantasmal_image.txt | 2 +- .../res/cardsfolder/p/progenitor_mimic.txt | 2 +- forge-gui/res/cardsfolder/r/ravagers_mace.txt | 2 +- forge-gui/res/cardsfolder/r/razing_snidd.txt | 2 +- .../res/cardsfolder/r/reckless_cohort.txt | 2 +- forge-gui/res/cardsfolder/r/relic_axe.txt | 2 +- .../res/cardsfolder/r/roaring_primadox.txt | 2 +- .../res/cardsfolder/s/scavenged_blade.txt | 2 +- .../cardsfolder/s/shanna_sisays_legacy.txt | 2 +- forge-gui/res/cardsfolder/s/shivan_wurm.txt | 2 +- .../res/cardsfolder/s/shrieking_drake.txt | 2 +- forge-gui/res/cardsfolder/s/silver_drake.txt | 2 +- .../res/cardsfolder/s/skyclave_pick_axe.txt | 2 +- forge-gui/res/cardsfolder/s/sparkcaster.txt | 2 +- forge-gui/res/cardsfolder/s/spined_fluke.txt | 2 +- .../res/cardsfolder/s/steel_leaf_paladin.txt | 2 +- forge-gui/res/cardsfolder/s/stonecloaker.txt | 2 +- .../res/cardsfolder/s/storm_sculptor.txt | 2 +- forge-gui/res/cardsfolder/u/utility_knife.txt | 2 +- .../upcoming/ghyrson_starn_kelermorph.txt | 2 +- .../cardsfolder/v/vesuvan_doppelganger.txt | 6 ++--- .../cardsfolder/v/vizier_of_many_faces.txt | 2 +- .../res/cardsfolder/w/whiptail_moloch.txt | 2 +- .../res/cardsfolder/w/whitemane_lion.txt | 2 +- .../res/cardsfolder/y/yaroks_wavecrasher.txt | 2 +- .../java/forge/gamemodes/match/GameLobby.java | 4 +--- 61 files changed, 91 insertions(+), 96 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 7b261c24726..5f30d9cbbad 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -518,7 +518,7 @@ public class ComputerUtilCombat { return true; } - return resultingPoison(ai, combat) > 9; + return resultingPoison(ai, combat) >= ai.getGame().getRules().getPoisonCountersToLose(); } // This calculates the amount of damage a blockgang can deal to the attacker diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java index af44764663a..238cdb2bea6 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMultiplyAi.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; 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 forge.ai.ComputerUtil; @@ -97,7 +99,21 @@ public class CountersMultiplyAi extends SpellAbilityAi { @Override protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { - return !sa.usesTargeting() || setTargets(ai, sa) || mandatory; + if (!sa.usesTargeting()) { + return true; + } + if (setTargets(ai, sa)) { + return true; + } else if (mandatory) { + CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa); + if (list.isEmpty()) { + return false; + } + Card safeMatch = Iterables.getFirst(Iterables.filter(list, Predicates.not(CardPredicates.hasCounters())), null); + sa.getTargets().add(safeMatch == null ? list.getFirst() : safeMatch); + return true; + } + return mandatory; } private CounterType getCounterType(SpellAbility sa) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 88d5e00d28d..96728df527b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3667,7 +3667,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final void addType(final String type0) { currentState.addType(type0); } - public final void addType(final Iterable type0) { currentState.addType(type0); } @@ -3876,8 +3875,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars { currentState.getView().updateHasChangeColors(!Iterables.isEmpty(getChangedCardColors())); } - public final void setColor(final String color) { - currentState.setColor(color); + public final void setColor(final String... color) { + setColor(ColorSet.fromNames(color).getColor()); } public final void setColor(final byte color) { currentState.setColor(color); diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index f940ff9ded8..0dd9ba86c26 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -662,31 +662,30 @@ public class CardFactory { final CardCloneStates result = new CardCloneStates(in, sa); final String newName = sa.getParamOrDefault("NewName", null); - String shortColors = ""; + ColorSet colors = null; if (sa.hasParam("AddTypes")) { types.addAll(Arrays.asList(sa.getParam("AddTypes").split(" & "))); } + if (sa.hasParam("SetCreatureTypes")) { + creatureTypes = ImmutableList.copyOf(sa.getParam("SetCreatureTypes").split(" ")); + } + if (sa.hasParam("AddKeywords")) { keywords.addAll(Arrays.asList(sa.getParam("AddKeywords").split(" & "))); } - if (sa.hasParam("AddColors")) { - shortColors = CardUtil.getShortColorsString(Arrays.asList(sa.getParam("AddColors") - .split(" & "))); - } - if (sa.hasParam("RemoveKeywords")) { removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & "))); } - if (sa.hasParam("SetColor")) { - shortColors = CardUtil.getShortColorsString(Arrays.asList(sa.getParam("SetColor").split(","))); + if (sa.hasParam("AddColors")) { + colors = ColorSet.fromNames(sa.getParam("AddColors").split(",")); } - if (sa.hasParam("SetCreatureTypes")) { - creatureTypes = ImmutableList.copyOf(sa.getParam("SetCreatureTypes").split(" ")); + if (sa.hasParam("SetColor")) { + colors = ColorSet.fromNames(sa.getParam("SetColor").split(",")); } // TODO handle Volrath's Shapeshifter @@ -734,11 +733,11 @@ public class CardFactory { } if (sa.hasParam("AddColors")) { - state.addColor(shortColors); + state.addColor(colors.getColor()); } if (sa.hasParam("SetColor")) { - state.setColor(shortColors); + state.setColor(colors.getColor()); } if (sa.hasParam("NonLegendary")) { diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index f5272bb5cbf..079bcc9b571 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -32,7 +32,6 @@ import forge.card.CardType; import forge.card.CardTypeView; import forge.card.MagicColor; import forge.card.mana.ManaCost; -import forge.card.mana.ManaCostParser; import forge.game.CardTraitBase; import forge.game.ForgeScript; import forge.game.GameObject; @@ -170,20 +169,10 @@ public class CardState extends GameObject implements IHasSVars { public final byte getColor() { return color; } - public final void addColor(final String color) { - final ManaCostParser parser = new ManaCostParser(color); - final ManaCost cost = new ManaCost(parser); - addColor(cost.getColorProfile()); - } public final void addColor(final byte color) { this.color |= color; view.updateColors(card); } - public final void setColor(final String color) { - final ManaCostParser parser = new ManaCostParser(color); - final ManaCost cost = new ManaCost(parser); - setColor(cost.getColorProfile()); - } public final void setColor(final byte color) { this.color = color; view.updateColors(card); diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 15b9102e90d..dd5f4a5020f 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -94,14 +94,6 @@ public final class CardUtil { return !kw.startsWith("Protection") && !NON_STACKING_LIST.contains(kw); } - public static String getShortColorsString(final Iterable colors) { - StringBuilder colorDesc = new StringBuilder(); - for (final String col : colors) { - colorDesc.append(MagicColor.toShortString(col)).append(" "); - } - return colorDesc.toString(); - } - /** * getThisTurnEntered. * diff --git a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java index ddc6101eaa2..257f37b8cc8 100644 --- a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java +++ b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java @@ -308,7 +308,7 @@ public class TokenInfo { if (sa.hasParam("TokenColors")) { String colors = sa.getParam("TokenColors"); colors = colors.replace("ChosenColor", host.getChosenColor()); - result.setColor(MagicColor.toShortString(colors)); + result.setColor(colors.split(",")); } return result; diff --git a/forge-gui/res/cardsfolder/a/ambush_krotiq.txt b/forge-gui/res/cardsfolder/a/ambush_krotiq.txt index 11c3cd60072..9de8cf6ebd4 100644 --- a/forge-gui/res/cardsfolder/a/ambush_krotiq.txt +++ b/forge-gui/res/cardsfolder/a/ambush_krotiq.txt @@ -5,5 +5,5 @@ PT:5/5 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return another creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Other+YouCtrl -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE5+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+cmcLE5 Oracle:Trample\nWhen Ambush Krotiq enters the battlefield, return another creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/b/balduvian_trading_post.txt b/forge-gui/res/cardsfolder/b/balduvian_trading_post.txt index a6f3d71a021..2187422d05b 100644 --- a/forge-gui/res/cardsfolder/b/balduvian_trading_post.txt +++ b/forge-gui/res/cardsfolder/b/balduvian_trading_post.txt @@ -9,5 +9,5 @@ SVar:MoveToGraveyard:DB$ ChangeZone | Origin$ All | Destination$ Graveyard | Def SVar:MoveToBattlefield:DB$ ChangeZone | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount -SVar:NeedsToPlay:Mountain.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Mountain.YouCtrl+untapped Oracle:If Balduvian Trading Post would enter the battlefield, sacrifice an untapped Mountain instead. If you do, put Balduvian Trading Post onto the battlefield. If you don't, put it into its owner's graveyard.\n{T}: Add {C}{R}.\n{1}, {T}: Balduvian Trading Post deals 1 damage to target attacking creature. diff --git a/forge-gui/res/cardsfolder/b/bitter_feud.txt b/forge-gui/res/cardsfolder/b/bitter_feud.txt index ae39ccb0078..cc983a996be 100644 --- a/forge-gui/res/cardsfolder/b/bitter_feud.txt +++ b/forge-gui/res/cardsfolder/b/bitter_feud.txt @@ -4,8 +4,8 @@ Types:Enchantment K:ETBReplacement:Other:ChooseP SVar:ChooseP:DB$ ChoosePlayer | Defined$ You | Choices$ Player | AILogic$ Curse | RememberChosen$ True | SubAbility$ ChoosePTwo | SpellDescription$ As CARDNAME enters the battlefield, choose two players. SVar:ChoosePTwo:DB$ ChoosePlayer | Defined$ You | Choices$ NonChosenPlayer | AILogic$ Curse -R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.RememberedPlayerCtrl | ValidTarget$ Permanent.ChosenCtrl,Player.Chosen | ReplaceWith$ DmgTwice | Description$ If a source controlled by one of the chosen players would deal damage to the other chosen player or a permanent that player controls, that source deals double that damage to that player or permanent instead. -R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.ChosenCtrl | ValidTarget$ Permanent.RememberedPlayerCtrl,Player.IsRemembered | ReplaceWith$ DmgTwice | Secondary$ True | Description$ If a source controlled by one of the chosen players would deal damage to the other chosen player or a permanent that player controls, that source deals double that damage to that player or permanent instead. +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.RememberedPlayerCtrl,Emblem.RememberedPlayerCtrl | ValidTarget$ Permanent.ChosenCtrl,Player.Chosen | ReplaceWith$ DmgTwice | Description$ If a source controlled by one of the chosen players would deal damage to the other chosen player or a permanent that player controls, that source deals double that damage to that player or permanent instead. +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.ChosenCtrl,Emblem.ChosenCtrl | ValidTarget$ Permanent.RememberedPlayerCtrl,Player.IsRemembered | ReplaceWith$ DmgTwice | Secondary$ True | Description$ If a source controlled by one of the chosen players would deal damage to the other chosen player or a permanent that player controls, that source deals double that damage to that player or permanent instead. SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X SVar:X:ReplaceCount$DamageAmount/Twice T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True diff --git a/forge-gui/res/cardsfolder/c/cavern_harpy.txt b/forge-gui/res/cardsfolder/c/cavern_harpy.txt index 5134bfd80ac..ed4d29aa01d 100644 --- a/forge-gui/res/cardsfolder/c/cavern_harpy.txt +++ b/forge-gui/res/cardsfolder/c/cavern_harpy.txt @@ -6,5 +6,5 @@ K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a blue or black creature you control to its owner's hand. A:AB$ ChangeZone | Cost$ PayLife<1> | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Black+YouCtrl,Creature.Blue+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE2+inZoneBattlefield,Creature.Blue+YouCtrl+cmcLE2+inZoneBattlefield +SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE2,Creature.Blue+YouCtrl+cmcLE2 Oracle:Flying\nWhen Cavern Harpy enters the battlefield, return a blue or black creature you control to its owner's hand.\nPay 1 life: Return Cavern Harpy to its owner's hand. diff --git a/forge-gui/res/cardsfolder/c/cliffhaven_kitesail.txt b/forge-gui/res/cardsfolder/c/cliffhaven_kitesail.txt index 179ea82edf9..f5a5fd473c0 100644 --- a/forge-gui/res/cardsfolder/c/cliffhaven_kitesail.txt +++ b/forge-gui/res/cardsfolder/c/cliffhaven_kitesail.txt @@ -3,7 +3,7 @@ ManaCost:1 Types:Artifact Equipment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Flying | Description$ Equipped creature has flying. K:Equip:2 Oracle:When Cliffhaven Kitesail enters the battlefield, attach it to target creature you control.\nEquipped creature has flying.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt b/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt index 78304e7abe5..117d24a9a3a 100644 --- a/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt +++ b/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt @@ -5,5 +5,5 @@ PT:7/5 K:Fear T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice a creature. SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ Creature | AILogic$ ExceptSelf -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE5+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+cmcLE5 Oracle:Fear (This creature can't be blocked except by artifact creatures and/or black creatures.)\nWhen Commander Greven il-Vec enters the battlefield, sacrifice a creature. diff --git a/forge-gui/res/cardsfolder/c/coral_atoll.txt b/forge-gui/res/cardsfolder/c/coral_atoll.txt index 3f0d553712d..69d55d668ba 100644 --- a/forge-gui/res/cardsfolder/c/coral_atoll.txt +++ b/forge-gui/res/cardsfolder/c/coral_atoll.txt @@ -5,5 +5,5 @@ K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Island you control to its owner's hand. SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Island.untapped/untapped Island> | UnlessPayer$ You A:AB$ Mana | Cost$ T | Produced$ C U | SpellDescription$ Add {C}{U}. -SVar:NeedsToPlay:Land.Island+YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Land.Island+YouCtrl+untapped Oracle:Coral Atoll enters the battlefield tapped.\nWhen Coral Atoll enters the battlefield, sacrifice it unless you return an untapped Island you control to its owner's hand.\n{T}: Add {C}{U}. diff --git a/forge-gui/res/cardsfolder/d/dance_of_many.txt b/forge-gui/res/cardsfolder/d/dance_of_many.txt index 6b434437e85..eaecee0952c 100644 --- a/forge-gui/res/cardsfolder/d/dance_of_many.txt +++ b/forge-gui/res/cardsfolder/d/dance_of_many.txt @@ -9,5 +9,5 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ TrigSac | TriggerDescription$ When the token leaves the battlefield, sacrifice CARDNAME. SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup K:UpkeepCost:U U -SVar:NeedsToPlay:Creature.inZoneBattlefield +SVar:NeedsToPlay:Creature Oracle:When Dance of Many enters the battlefield, create a token that's a copy of target nontoken creature.\nWhen Dance of Many leaves the battlefield, exile the token.\nWhen the token leaves the battlefield, sacrifice Dance of Many.\nAt the beginning of your upkeep, sacrifice Dance of Many unless you pay {U}{U}. diff --git a/forge-gui/res/cardsfolder/d/dermotaxi.txt b/forge-gui/res/cardsfolder/d/dermotaxi.txt index 673f5bc758a..7bb76dce988 100644 --- a/forge-gui/res/cardsfolder/d/dermotaxi.txt +++ b/forge-gui/res/cardsfolder/d/dermotaxi.txt @@ -5,5 +5,6 @@ PT:0/0 K:ETBReplacement:Other:Imprint SVar:Imprint:DB$ ChangeZone | Imprint$ True | ChangeType$ Creature | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Exile | Mandatory$ True | Hidden$ True | Chooser$ You | SpellDescription$ Imprint - As CARDNAME enters the battlefield, exile a creature card from a graveyard. A:AB$ Clone | Cost$ tapXType<2/Creature> | Defined$ Imprinted | Duration$ UntilEndOfTurn | ImprintRememberedNoCleanup$ True | AddTypes$ Vehicle & Artifact | StackDescription$ Until end of turn, CARDNAME becomes a copy of {c:Imprinted}, except it's a Vehicle artifact in addition to its other types. | SpellDescription$ Until end of turn, CARDNAME becomes a copy of the exiled card, except it's a Vehicle artifact in addition to its other types. -SVar:NeedsToPlay:Creature.inZoneGraveyard +SVar:NeedsToPlayVar:Check GE1 +SVar:Check:Count$ValidGraveyard Creature Oracle:Imprint — As Dermotaxi enters the battlefield, exile a creature card from a graveyard.\nTap two untapped creatures you control: Until end of turn, Dermotaxi becomes a copy of the exiled card, except it's a Vehicle artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/d/devout_invocation.txt b/forge-gui/res/cardsfolder/d/devout_invocation.txt index d4b0feb19ec..067de114c6e 100644 --- a/forge-gui/res/cardsfolder/d/devout_invocation.txt +++ b/forge-gui/res/cardsfolder/d/devout_invocation.txt @@ -7,6 +7,6 @@ SVar:DBToken:DB$ Token | TokenAmount$ Y | TokenScript$ w_4_4_angel_flying | Toke SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$Valid Creature.YouCtrl SVar:Y:Remembered$Amount -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Creature.YouCtrl+untapped SVar:PlayMain1:ALWAYS Oracle:Tap any number of untapped creatures you control. Create a 4/4 white Angel creature token with flying for each creature tapped this way. diff --git a/forge-gui/res/cardsfolder/d/doomsday_specter.txt b/forge-gui/res/cardsfolder/d/doomsday_specter.txt index 5b65763e883..6653d04ea10 100644 --- a/forge-gui/res/cardsfolder/d/doomsday_specter.txt +++ b/forge-gui/res/cardsfolder/d/doomsday_specter.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, look at that player's hand and choose a card from it. The player discards that card. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Black+YouCtrl,Creature.Blue+YouCtrl | AILogic$ NeverBounceItself SVar:TrigDiscard:DB$ Discard | Defined$ TriggeredTarget | NumCards$ 1 | Mode$ RevealYouChoose -SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE3+inZoneBattlefield,Creature.Blue+YouCtrl+cmcLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE3,Creature.Blue+YouCtrl+cmcLE3 Oracle:Flying\nWhen Doomsday Specter enters the battlefield, return a blue or black creature you control to its owner's hand.\nWhenever Doomsday Specter deals combat damage to a player, look at that player's hand and choose a card from it. The player discards that card. diff --git a/forge-gui/res/cardsfolder/d/dormant_volcano.txt b/forge-gui/res/cardsfolder/d/dormant_volcano.txt index 8e7d5e80967..3281ad2f8bb 100644 --- a/forge-gui/res/cardsfolder/d/dormant_volcano.txt +++ b/forge-gui/res/cardsfolder/d/dormant_volcano.txt @@ -5,5 +5,5 @@ K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C R | SpellDescription$ Add {C}{R}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Mountain you control to its owner's hand. SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Mountain.untapped/untapped Mountain> | UnlessPayer$ You -SVar:NeedsToPlay:Mountain.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Mountain.YouCtrl+untapped Oracle:Dormant Volcano enters the battlefield tapped.\nWhen Dormant Volcano enters the battlefield, sacrifice it unless you return an untapped Mountain you control to its owner's hand.\n{T}: Add {C}{R}. diff --git a/forge-gui/res/cardsfolder/e/embercleave.txt b/forge-gui/res/cardsfolder/e/embercleave.txt index c62033dc06e..a5c2b1f8ac6 100644 --- a/forge-gui/res/cardsfolder/e/embercleave.txt +++ b/forge-gui/res/cardsfolder/e/embercleave.txt @@ -7,7 +7,7 @@ SVar:X:Count$Valid Creature.attacking+YouCtrl SVar:BuffedBy:Creature.attacking T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control. -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl AI:RemoveDeck:All S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Double Strike & Trample | Description$ Equipped creature gets +1/+1 and has double strike and trample. K:Equip:3 diff --git a/forge-gui/res/cardsfolder/e/everglades.txt b/forge-gui/res/cardsfolder/e/everglades.txt index c609f3a7f1e..946703065b8 100644 --- a/forge-gui/res/cardsfolder/e/everglades.txt +++ b/forge-gui/res/cardsfolder/e/everglades.txt @@ -5,5 +5,5 @@ K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C B | SpellDescription$ Add {C}{B}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Swamp you control to its owner's hand. SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Swamp.untapped/untapped Swamp> | UnlessPayer$ You -SVar:NeedsToPlay:Swamp.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Swamp.YouCtrl+untapped Oracle:Everglades enters the battlefield tapped.\nWhen Everglades enters the battlefield, sacrifice it unless you return an untapped Swamp you control to its owner's hand.\n{T}: Add {C}{B}. diff --git a/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt b/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt index 850e1a08b04..5cb35c75f3b 100644 --- a/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt +++ b/forge-gui/res/cardsfolder/e/eye_for_an_eye.txt @@ -3,7 +3,7 @@ ManaCost:W W Types:Instant A:SP$ ChooseSource | Cost$ W W | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and CARDNAME deals that much damage to that source's controller. SVar:DBEffect:DB$ Effect | ReplacementEffects$ SelflessDamage | ImprintCards$ Self | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 -SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | Description$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and this card deals that much damage to that source's controller. +SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCardStrict,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | Description$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and this card deals that much damage to that source's controller. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ You | VarType$ Player | SubAbility$ EyeforEye SVar:EyeforEye:DB$ DealDamage | Defined$ ReplacedSourceController | DamageSource$ EffectSource | NumDmg$ X | SubAbility$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/e/ezuris_predation.txt b/forge-gui/res/cardsfolder/e/ezuris_predation.txt index dd2210df86d..b367c343962 100644 --- a/forge-gui/res/cardsfolder/e/ezuris_predation.txt +++ b/forge-gui/res/cardsfolder/e/ezuris_predation.txt @@ -6,5 +6,5 @@ SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_4_4_phyrexian_beast | T SVar:DBFight:DB$ Fight | Defined$ Imprinted | ExtraDefined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup2:DB$ Cleanup | ClearImprinted$ True -SVar:NeedsToPlay:Creature.OppCtrl+inZoneBattlefield+powerLE3 +SVar:NeedsToPlay:Creature.OppCtrl+powerLE3 Oracle:For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures. diff --git a/forge-gui/res/cardsfolder/f/fleetfoot_panther.txt b/forge-gui/res/cardsfolder/f/fleetfoot_panther.txt index 7aea728f515..c6139552925 100644 --- a/forge-gui/res/cardsfolder/f/fleetfoot_panther.txt +++ b/forge-gui/res/cardsfolder/f/fleetfoot_panther.txt @@ -5,5 +5,5 @@ PT:3/4 K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a green or white creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.White+YouCtrl,Creature.Green+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.White+cmcLE3+YouCtrl+inZoneBattlefield,Creature.Green+cmcLE3+YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.White+cmcLE3+YouCtrl,Creature.Green+cmcLE3+YouCtrl Oracle:Flash\nWhen Fleetfoot Panther enters the battlefield, return a green or white creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/f/fungal_behemoth.txt b/forge-gui/res/cardsfolder/f/fungal_behemoth.txt index 87b71fe2fc8..f9d27ac4096 100644 --- a/forge-gui/res/cardsfolder/f/fungal_behemoth.txt +++ b/forge-gui/res/cardsfolder/f/fungal_behemoth.txt @@ -9,6 +9,6 @@ T:Mode$ CounterRemoved | ValidCard$ Card.Self | TriggerZones$ Exile | CounterTyp SVar:TrigPut:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 SVar:X:Count$xPaid SVar:Y:Count$Valid Creature.YouCtrl$CardCounters.P1P1 -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl DeckHints:Ability$Counters Oracle:Fungal Behemoth's power and toughness are each equal to the number of +1/+1 counters on creatures you control.\nSuspend X—{X}{G}{G}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{G}{G} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.)\nWhenever a time counter is removed from Fungal Behemoth while it's exiled, you may put a +1/+1 counter on target creature. diff --git a/forge-gui/res/cardsfolder/h/horned_kavu.txt b/forge-gui/res/cardsfolder/h/horned_kavu.txt index bdaaf3e8266..642be635397 100644 --- a/forge-gui/res/cardsfolder/h/horned_kavu.txt +++ b/forge-gui/res/cardsfolder/h/horned_kavu.txt @@ -4,5 +4,5 @@ Types:Creature Kavu PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a red or green creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Red+YouCtrl,Creature.Green+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE3+inZoneBattlefield+notnamedHorned Kavu,Creature.Green+YouCtrl+cmcLE3+inZoneBattlefield+notnamedHorned Kavu +SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE3+notnamedHorned Kavu,Creature.Green+YouCtrl+cmcLE3+notnamedHorned Kavu Oracle:When Horned Kavu enters the battlefield, return a red or green creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/j/javelin_of_lightning.txt b/forge-gui/res/cardsfolder/j/javelin_of_lightning.txt index bacdc9aee74..eb98c8c27d5 100644 --- a/forge-gui/res/cardsfolder/j/javelin_of_lightning.txt +++ b/forge-gui/res/cardsfolder/j/javelin_of_lightning.txt @@ -4,7 +4,7 @@ Types:Artifact Equipment K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ First Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, equipped creature gets +2/+0 and has first strike. K:Equip:4 Oracle:Flash\nWhen Javelin of Lightning enters the battlefield, attach it to target creature you control.\nAs long as it's your turn, equipped creature gets +2/+0 and has first strike.\nEquip {4} ({4}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/j/jungle_basin.txt b/forge-gui/res/cardsfolder/j/jungle_basin.txt index be3681c61a1..064fe324d65 100644 --- a/forge-gui/res/cardsfolder/j/jungle_basin.txt +++ b/forge-gui/res/cardsfolder/j/jungle_basin.txt @@ -5,5 +5,5 @@ K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C G | SpellDescription$ Add {C}{G}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Forest you control to its owner's hand. SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Forest.untapped/untapped Forest> | UnlessPayer$ You -SVar:NeedsToPlay:Forest.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Forest.YouCtrl+untapped Oracle:Jungle Basin enters the battlefield tapped.\nWhen Jungle Basin enters the battlefield, sacrifice it unless you return an untapped Forest you control to its owner's hand.\n{T}: Add {C}{G}. diff --git a/forge-gui/res/cardsfolder/k/karoo.txt b/forge-gui/res/cardsfolder/k/karoo.txt index 358f023c5b5..7b5c3f835da 100644 --- a/forge-gui/res/cardsfolder/k/karoo.txt +++ b/forge-gui/res/cardsfolder/k/karoo.txt @@ -5,5 +5,5 @@ K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C W | SpellDescription$ Add {C}{W}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand. SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Plains.untapped/untapped Plains> | UnlessPayer$ You -SVar:NeedsToPlay:Plains.YouCtrl+inZoneBattlefield+untapped +SVar:NeedsToPlay:Plains.YouCtrl+untapped Oracle:Karoo enters the battlefield tapped.\nWhen Karoo enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand.\n{T}: Add {C}{W}. diff --git a/forge-gui/res/cardsfolder/k/keymaster_rogue.txt b/forge-gui/res/cardsfolder/k/keymaster_rogue.txt index 31ac7d23fa5..24eee7b1ed2 100644 --- a/forge-gui/res/cardsfolder/k/keymaster_rogue.txt +++ b/forge-gui/res/cardsfolder/k/keymaster_rogue.txt @@ -5,5 +5,5 @@ PT:3/2 S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE4+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+cmcLE4 Oracle:Keymaster Rogue can't be blocked.\nWhen Keymaster Rogue enters the battlefield, return a creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/k/kor_skyfisher.txt b/forge-gui/res/cardsfolder/k/kor_skyfisher.txt index c2131f90725..63cfa515f7b 100644 --- a/forge-gui/res/cardsfolder/k/kor_skyfisher.txt +++ b/forge-gui/res/cardsfolder/k/kor_skyfisher.txt @@ -5,5 +5,5 @@ PT:2/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a permanent you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Permanent.YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE2+inZoneBattlefield,Permanent.nonLand+YouCtrl+cmcLE1 +SVar:NeedsToPlay:Creature.YouCtrl+cmcLE2,Permanent.nonLand+YouCtrl+cmcLE1 Oracle:Flying\nWhen Kor Skyfisher enters the battlefield, return a permanent you control to its owner's hand. 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 cdb24646eaa..e5c6669eaec 100644 --- a/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt +++ b/forge-gui/res/cardsfolder/k/kotose_the_silent_spider.txt @@ -16,5 +16,6 @@ SVar:TrigLandPlayed:Mode$ LandPlayed | ValidCard$ Land.IsRemembered | Static$ Tr SVar:TrigCast:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Static$ True | TriggerZones$ Command | Execute$ TrigRemoveSelf SVar:TrigRemoveSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:NeedsToPlay:Card.inZoneGraveyard+OppOwn +SVar:NeedsToPlayVar:Check GE1 +SVar:Check:Count$ValidGraveyard Card.OppOwn Oracle:When Kotose, the Silent Spider enters the battlefield, exile target card other than a basic land card from an opponent's graveyard. Search that player's graveyard, hand, and library for any number of cards with the same name as that card and exile them. Then that player shuffles. For as long as you control Kotose, you may play one of the exiled cards, and you may spend mana as though it were mana of any color to cast it. diff --git a/forge-gui/res/cardsfolder/m/marsh_crocodile.txt b/forge-gui/res/cardsfolder/m/marsh_crocodile.txt index 89ad138ccab..90f867a7bd2 100644 --- a/forge-gui/res/cardsfolder/m/marsh_crocodile.txt +++ b/forge-gui/res/cardsfolder/m/marsh_crocodile.txt @@ -6,5 +6,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, each player discards a card. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Black+YouCtrl,Creature.Blue+YouCtrl | AILogic$ NeverBounceItself SVar:TrigDiscard:DB$ Discard | Defined$ Player | NumCards$ 1 | Mode$ TgtChoose -SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE3+inZoneBattlefield,Creature.Blue+YouCtrl+cmcLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.Black+YouCtrl+cmcLE3,Creature.Blue+YouCtrl+cmcLE3 Oracle:When Marsh Crocodile enters the battlefield, return a blue or black creature you control to its owner's hand.\nWhen Marsh Crocodile enters the battlefield, each player discards a card. diff --git a/forge-gui/res/cardsfolder/m/maul_of_the_skyclaves.txt b/forge-gui/res/cardsfolder/m/maul_of_the_skyclaves.txt index 895dbfaa8f4..4d7b5ca9d96 100644 --- a/forge-gui/res/cardsfolder/m/maul_of_the_skyclaves.txt +++ b/forge-gui/res/cardsfolder/m/maul_of_the_skyclaves.txt @@ -5,5 +5,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying & First Strike | Description$ Equipped creature gets +2/+2 and has flying and first strike. K:Equip:2 W W -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl Oracle:When Maul of the Skyclaves enters the battlefield, attach it to target creature you control.\nEquipped creature gets +2/+2 and has flying and first strike.\nEquip {2}{W}{W} diff --git a/forge-gui/res/cardsfolder/m/mind_carver.txt b/forge-gui/res/cardsfolder/m/mind_carver.txt index b3aedc61f18..1d9ec1350dd 100644 --- a/forge-gui/res/cardsfolder/m/mind_carver.txt +++ b/forge-gui/res/cardsfolder/m/mind_carver.txt @@ -3,7 +3,7 @@ ManaCost:B Types:Artifact Equipment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ X | AddToughness$ Y | Description$ Equipped creature gets +1/+0. It gets +3/+1 instead as long as an opponent has eight or more cards in their graveyard. SVar:X:Count$Compare Z GE8.3.1 SVar:Y:Count$Compare Z GE8.1.0 diff --git a/forge-gui/res/cardsfolder/p/phantasmal_image.txt b/forge-gui/res/cardsfolder/p/phantasmal_image.txt index f2ae8e88e93..2bf2f9ccbdd 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_image.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_image.txt @@ -8,5 +8,5 @@ SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | AddTypes$ Illusion | AddTrigge SVar:PhantasmalImageTgtTrig:Mode$ BecomesTarget | ValidTarget$ Card.Self | Execute$ PhantasmalImageSac | TriggerDescription$ When this creature becomes the target of a spell or ability, sacrifice it. SVar:PhantasmalImageSac:DB$ Sacrifice | Defined$ Self SVar:Targeting:Dies -SVar:NeedsToPlay:Creature.inZoneBattlefield +SVar:NeedsToPlay:Creature Oracle:You may have Phantasmal Image enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it has "When this creature becomes the target of a spell or ability, sacrifice it." diff --git a/forge-gui/res/cardsfolder/p/progenitor_mimic.txt b/forge-gui/res/cardsfolder/p/progenitor_mimic.txt index b1255e23003..51d406364e2 100644 --- a/forge-gui/res/cardsfolder/p/progenitor_mimic.txt +++ b/forge-gui/res/cardsfolder/p/progenitor_mimic.txt @@ -6,5 +6,5 @@ K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | AddTriggers$ ProgenitorTrig | AddSVars$ ProgenitorCopy,ProgenitorTrig | SpellDescription$ You may have Progenitor Mimic enter the battlefield as a copy of any creature on the battlefield, except it has "At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature." SVar:ProgenitorTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ ProgenitorCopy | IsPresent$ Card.Self+nonToken | TriggerDescription$ At the beginning of your upkeep, if CARDNAME isn't a token, create a token that's a copy of CARDNAME." SVar:ProgenitorCopy:DB$ CopyPermanent | Defined$ Self | NumCopies$ 1 -SVar:NeedsToPlay:Creature.inZoneBattlefield +SVar:NeedsToPlay:Creature Oracle:You may have Progenitor Mimic enter the battlefield as a copy of any creature on the battlefield, except it has "At the beginning of your upkeep, if this creature isn't a token, create a token that's a copy of this creature." diff --git a/forge-gui/res/cardsfolder/r/ravagers_mace.txt b/forge-gui/res/cardsfolder/r/ravagers_mace.txt index f82ef56f2a6..51333488044 100644 --- a/forge-gui/res/cardsfolder/r/ravagers_mace.txt +++ b/forge-gui/res/cardsfolder/r/ravagers_mace.txt @@ -6,7 +6,7 @@ SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select tar S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ X | AddKeyword$ Menace | Description$ Equipped creature gets +1/+0 for each creature in your party and has menace. (Your party consists of up to one each of Cleric, Rogue, Warrior, and Wizard.) SVar:X:Count$Party K:Equip:2 B R -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl DeckHas:Ability$Party DeckHints:Type$Cleric|Rogue|Warrior|Wizard Oracle:When Ravager's Mace enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+0 for each creature in your party and has menace. (Your party consists of up to one each of Cleric, Rogue, Warrior, and Wizard.)\nEquip {2}{B}{R} diff --git a/forge-gui/res/cardsfolder/r/razing_snidd.txt b/forge-gui/res/cardsfolder/r/razing_snidd.txt index f4febcb13bb..e6de7c8c0a5 100644 --- a/forge-gui/res/cardsfolder/r/razing_snidd.txt +++ b/forge-gui/res/cardsfolder/r/razing_snidd.txt @@ -7,5 +7,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Black+YouCtrl,Creature.Red+YouCtrl | AILogic$ NeverBounceItself SVar:TrigSac:DB$ Sacrifice | Defined$ Player | SacValid$ Land AI:RemoveDeck:Random -SVar:NeedsToPlay:Creature.Black+cmcLE3+YouCtrl+inZoneBattlefield,Creature.Red+cmcLE3+YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.Black+cmcLE3+YouCtrl,Creature.Red+cmcLE3+YouCtrl Oracle:When Razing Snidd enters the battlefield, return a black or red creature you control to its owner's hand.\nWhen Razing Snidd enters the battlefield, each player sacrifices a land. diff --git a/forge-gui/res/cardsfolder/r/reckless_cohort.txt b/forge-gui/res/cardsfolder/r/reckless_cohort.txt index 2f0aa071869..b0dff4ae228 100644 --- a/forge-gui/res/cardsfolder/r/reckless_cohort.txt +++ b/forge-gui/res/cardsfolder/r/reckless_cohort.txt @@ -2,7 +2,7 @@ Name:Reckless Cohort ManaCost:1 R Types:Creature Human Warrior Ally PT:2/2 -S:Mode$ MustAttack | ValidCreature$ Card.Self | IsPresent$ Valid Ally.Other+YouCtrl | PresentCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally. +S:Mode$ MustAttack | ValidCreature$ Card.Self | IsPresent$ Ally.Other+YouCtrl | PresentCompare$ EQ0 | Description$ CARDNAME attacks each combat if able unless you control another Ally. SVar:BuffedBy:Ally DeckHints:Type$Ally Oracle:Reckless Cohort attacks each combat if able unless you control another Ally. diff --git a/forge-gui/res/cardsfolder/r/relic_axe.txt b/forge-gui/res/cardsfolder/r/relic_axe.txt index 697ac413b08..06733fae4d3 100644 --- a/forge-gui/res/cardsfolder/r/relic_axe.txt +++ b/forge-gui/res/cardsfolder/r/relic_axe.txt @@ -8,6 +8,6 @@ SVar:X:Count$Compare Y GE1.2.1 SVar:Y:Targeted$Valid Warrior SVar:Y:Count$Valid Warrior.AttachedBy K:Equip:2 -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl DeckHints:Type$Warrior Oracle:When Relic Axe enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+1. If it's a Warrior, it gets +2/+1 instead.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/r/roaring_primadox.txt b/forge-gui/res/cardsfolder/r/roaring_primadox.txt index 6d706bbc6fd..7d8fa4eec80 100644 --- a/forge-gui/res/cardsfolder/r/roaring_primadox.txt +++ b/forge-gui/res/cardsfolder/r/roaring_primadox.txt @@ -5,5 +5,5 @@ PT:4/4 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigBounce | TriggerDescription$ At the beginning of your upkeep, return a creature you control to its owner's hand. SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 AI:RemoveDeck:Random -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl Oracle:At the beginning of your upkeep, return a creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/scavenged_blade.txt b/forge-gui/res/cardsfolder/s/scavenged_blade.txt index 3825deb3038..522734bfa25 100644 --- a/forge-gui/res/cardsfolder/s/scavenged_blade.txt +++ b/forge-gui/res/cardsfolder/s/scavenged_blade.txt @@ -3,7 +3,7 @@ ManaCost:1 R Types:Artifact Equipment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | Description$ Equipped creature gets +2/+0. K:Equip:2 R Oracle:When Scavenged Blade enters the battlefield, attach it to target creature you control.\nEquipped creature gets +2/+0.\nEquip {2}{R} ({2}{R}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/s/shanna_sisays_legacy.txt b/forge-gui/res/cardsfolder/s/shanna_sisays_legacy.txt index 288a4191e72..a2da66ad198 100644 --- a/forge-gui/res/cardsfolder/s/shanna_sisays_legacy.txt +++ b/forge-gui/res/cardsfolder/s/shanna_sisays_legacy.txt @@ -2,7 +2,7 @@ Name:Shanna, Sisay's Legacy ManaCost:G W Types:Legendary Creature Human Warrior PT:0/0 -S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card | ValidSA$ Activated,Triggered | Activator$ Player.Opponent | Description$ CARDNAME can't be the target of abilities your opponents control. +S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSA$ Activated,Triggered | Activator$ Player.Opponent | Description$ CARDNAME can't be the target of abilities your opponents control. S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +1/+1 for each creature you control. SVar:X:Count$Valid Creature.YouCtrl SVar:BuffedBy:Creature diff --git a/forge-gui/res/cardsfolder/s/shivan_wurm.txt b/forge-gui/res/cardsfolder/s/shivan_wurm.txt index 97d96f10203..b01f70a5870 100644 --- a/forge-gui/res/cardsfolder/s/shivan_wurm.txt +++ b/forge-gui/res/cardsfolder/s/shivan_wurm.txt @@ -5,5 +5,5 @@ PT:7/7 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a red or green creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Red+YouCtrl,Creature.Green+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE5+inZoneBattlefield,Creature.Green+YouCtrl+cmcLE5+inZoneBattlefield +SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE5,Creature.Green+YouCtrl+cmcLE5 Oracle:Trample\nWhen Shivan Wurm enters the battlefield, return a red or green creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/shrieking_drake.txt b/forge-gui/res/cardsfolder/s/shrieking_drake.txt index 955582fb35d..812f5333844 100644 --- a/forge-gui/res/cardsfolder/s/shrieking_drake.txt +++ b/forge-gui/res/cardsfolder/s/shrieking_drake.txt @@ -5,5 +5,5 @@ PT:1/1 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.YouCtrl+token+powerLE2+inZoneBattlefield,Creature.YouCtrl+nonToken+cmcLE2+powerLE1+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl Oracle:Flying\nWhen Shrieking Drake enters the battlefield, return a creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/silver_drake.txt b/forge-gui/res/cardsfolder/s/silver_drake.txt index 9611309880d..07a28fd70f3 100644 --- a/forge-gui/res/cardsfolder/s/silver_drake.txt +++ b/forge-gui/res/cardsfolder/s/silver_drake.txt @@ -5,5 +5,5 @@ PT:3/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a white or blue creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.White+YouCtrl,Creature.Blue+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.White+YouCtrl+cmcLE3+inZoneBattlefield,Creature.Blue+YouCtrl+cmcLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.White+YouCtrl+cmcLE3,Creature.Blue+YouCtrl+cmcLE3 Oracle:Flying\nWhen Silver Drake enters the battlefield, return a white or blue creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/skyclave_pick_axe.txt b/forge-gui/res/cardsfolder/s/skyclave_pick_axe.txt index 7bd77780f36..4ba26d5c29c 100644 --- a/forge-gui/res/cardsfolder/s/skyclave_pick_axe.txt +++ b/forge-gui/res/cardsfolder/s/skyclave_pick_axe.txt @@ -6,6 +6,6 @@ SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select tar T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Landfall - Whenever a land enters the battlefield under your control, equipped creature gets +2/+2 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Equipped | NumAtt$ 2 | NumDef$ 2 K:Equip:2 G -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl SVar:BuffedBy:Land Oracle:When Skyclave Pick-Axe enters the battlefield, attach it to target creature you control.\nLandfall — Whenever a land enters the battlefield under your control, equipped creature gets +2/+2 until end of turn.\nEquip {2}{G} diff --git a/forge-gui/res/cardsfolder/s/sparkcaster.txt b/forge-gui/res/cardsfolder/s/sparkcaster.txt index 17acfe9e853..f546cbb765d 100644 --- a/forge-gui/res/cardsfolder/s/sparkcaster.txt +++ b/forge-gui/res/cardsfolder/s/sparkcaster.txt @@ -6,5 +6,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals 1 damage to target player or planeswalker. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | ChangeType$ Creature.Red+YouCtrl,Creature.Green+YouCtrl | ChangeNum$ 1 | Mandatory$ True | AILogic$ NeverBounceItself SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ 1 -SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE4+inZoneBattlefield,Creature.Green+YouCtrl+cmcLE4+inZoneBattlefield +SVar:NeedsToPlay:Creature.Red+YouCtrl+cmcLE4,Creature.Green+YouCtrl+cmcLE4 Oracle:When Sparkcaster enters the battlefield, return a red or green creature you control to its owner's hand.\nWhen Sparkcaster enters the battlefield, it deals 1 damage to target player or planeswalker. diff --git a/forge-gui/res/cardsfolder/s/spined_fluke.txt b/forge-gui/res/cardsfolder/s/spined_fluke.txt index bc5a9b04dab..78313214a80 100644 --- a/forge-gui/res/cardsfolder/s/spined_fluke.txt +++ b/forge-gui/res/cardsfolder/s/spined_fluke.txt @@ -5,5 +5,5 @@ PT:5/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice a creature. SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ Creature A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+cmcLE3 Oracle:When Spined Fluke enters the battlefield, sacrifice a creature.\n{B}: Regenerate Spined Fluke. diff --git a/forge-gui/res/cardsfolder/s/steel_leaf_paladin.txt b/forge-gui/res/cardsfolder/s/steel_leaf_paladin.txt index 3dd5af07cde..5ab0764835b 100644 --- a/forge-gui/res/cardsfolder/s/steel_leaf_paladin.txt +++ b/forge-gui/res/cardsfolder/s/steel_leaf_paladin.txt @@ -5,5 +5,5 @@ PT:4/4 K:First Strike T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a green or white creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.White+YouCtrl,Creature.Green+YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.White+YouCtrl+cmcLE4+inZoneBattlefield,Creature.Green+YouCtrl+cmcLE4+inZoneBattlefield +SVar:NeedsToPlay:Creature.White+YouCtrl+cmcLE4,Creature.Green+YouCtrl+cmcLE4 Oracle:First strike\nWhen Steel Leaf Paladin enters the battlefield, return a green or white creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/stonecloaker.txt b/forge-gui/res/cardsfolder/s/stonecloaker.txt index d742e94d2c5..6bc668e52ff 100644 --- a/forge-gui/res/cardsfolder/s/stonecloaker.txt +++ b/forge-gui/res/cardsfolder/s/stonecloaker.txt @@ -8,5 +8,5 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | AILogic$ NeverBounceItself T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange2 | TriggerDescription$ When CARDNAME enters the battlefield, exile target card from a graveyard. SVar:TrigChange2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | TgtPrompt$ Select target card from any graveyard -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+nonToken Oracle:Flash\nFlying\nWhen Stonecloaker enters the battlefield, return a creature you control to its owner's hand.\nWhen Stonecloaker enters the battlefield, exile target card from a graveyard. diff --git a/forge-gui/res/cardsfolder/s/storm_sculptor.txt b/forge-gui/res/cardsfolder/s/storm_sculptor.txt index 24043314460..0ead985e5a6 100644 --- a/forge-gui/res/cardsfolder/s/storm_sculptor.txt +++ b/forge-gui/res/cardsfolder/s/storm_sculptor.txt @@ -5,5 +5,5 @@ PT:3/2 S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE4+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+nonToken Oracle:Storm Sculptor can't be blocked.\nWhen Storm Sculptor enters the battlefield, return a creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/u/utility_knife.txt b/forge-gui/res/cardsfolder/u/utility_knife.txt index 772cec9e156..bb7ea3b4e69 100644 --- a/forge-gui/res/cardsfolder/u/utility_knife.txt +++ b/forge-gui/res/cardsfolder/u/utility_knife.txt @@ -3,7 +3,7 @@ ManaCost:1 Types:Artifact Equipment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1. K:Equip:3 Oracle:When Utility Knife enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+1.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/ghyrson_starn_kelermorph.txt b/forge-gui/res/cardsfolder/upcoming/ghyrson_starn_kelermorph.txt index d076cf93035..87cd139a03a 100644 --- a/forge-gui/res/cardsfolder/upcoming/ghyrson_starn_kelermorph.txt +++ b/forge-gui/res/cardsfolder/upcoming/ghyrson_starn_kelermorph.txt @@ -3,6 +3,6 @@ ManaCost:1 U R Types:Legendary Creature Tyranid Human PT:3/2 K:Ward:2 -T:Mode$ DamageDone | ValidSource$ Card.Other+YouCtrl | ValidTarget$ Player,Permanent | TriggerZones$ Battlefield | DamageAmount$ EQ1 | Execute$ TrigDamage | TriggerDescription$ Three Autostubs — Whenever another source you control deals exactly 1 damage to a permanent or player, CARDNAME deals 2 damage to that permanent or player. +T:Mode$ DamageDone | ValidSource$ Card.Other+YouCtrl,Emblem.YouCtrl | ValidTarget$ Player,Permanent | TriggerZones$ Battlefield | DamageAmount$ EQ1 | Execute$ TrigDamage | TriggerDescription$ Three Autostubs — Whenever another source you control deals exactly 1 damage to a permanent or player, CARDNAME deals 2 damage to that permanent or player. SVar:TrigDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ TriggeredTarget Oracle:Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nThree Autostubs — Whenever another source you control deals exactly 1 damage to a permanent or player, Ghyrson Starn, Kelermorph deals 2 damage to that permanent or player. diff --git a/forge-gui/res/cardsfolder/v/vesuvan_doppelganger.txt b/forge-gui/res/cardsfolder/v/vesuvan_doppelganger.txt index 82c63bf985c..358c5658842 100644 --- a/forge-gui/res/cardsfolder/v/vesuvan_doppelganger.txt +++ b/forge-gui/res/cardsfolder/v/vesuvan_doppelganger.txt @@ -4,8 +4,8 @@ Types:Creature Shapeshifter PT:0/0 # Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone K:ETBReplacement:Copy:ChooseCreature:Optional -SVar:ChooseCreature:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True | AILogic$ Clone | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it doesn't copy that creature's color and it has "At the beginning of your upkeep, you may have this creature become a copy of target creature, except it doesn't copy that creature's color and it has this ability." -SVar:DBCopy:DB$ Clone | Defined$ Remembered | Colors$ Blue | OverwriteColors$ True | AddTriggers$ VesDopUpkeepTrig | AddSVars$ VesDopCopy,VesDopUpkeepTrig +SVar:ChooseCreature:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | AILogic$ Clone | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it doesn't copy that creature's color and it has "At the beginning of your upkeep, you may have this creature become a copy of target creature, except it doesn't copy that creature's color and it has this ability." +SVar:DBCopy:DB$ Clone | Defined$ ChosenCard | SetColor$ Blue | AddTriggers$ VesDopUpkeepTrig | AddSVars$ VesDopCopy,VesDopUpkeepTrig SVar:VesDopUpkeepTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ VesDopCopy | TriggerDescription$ At the beginning of your upkeep, you may have this creature become a copy of target creature, except it doesn't copy that creature's color and it has this ability. -SVar:VesDopCopy:DB$ Clone | ValidTgts$ Creature | TgtPrompt$ Select target creature to copy. | Optional$ True | Colors$ Blue | OverwriteColors$ True | GainThisAbility$ True | AddSVars$ VesDopCopy | AILogic$ CloneBestCreature +SVar:VesDopCopy:DB$ Clone | ValidTgts$ Creature | TgtPrompt$ Select target creature to copy. | Optional$ True | SetColor$ Blue | GainThisAbility$ True | AddSVars$ VesDopCopy | AILogic$ CloneBestCreature Oracle:You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield, except it doesn't copy that creature's color and it has "At the beginning of your upkeep, you may have this creature become a copy of target creature, except it doesn't copy that creature's color and it has this ability." diff --git a/forge-gui/res/cardsfolder/v/vizier_of_many_faces.txt b/forge-gui/res/cardsfolder/v/vizier_of_many_faces.txt index 40f491b0668..43d2a8b03be 100644 --- a/forge-gui/res/cardsfolder/v/vizier_of_many_faces.txt +++ b/forge-gui/res/cardsfolder/v/vizier_of_many_faces.txt @@ -5,6 +5,6 @@ PT:0/0 K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | Embalm$ True | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except if CARDNAME was embalmed, the token has no mana cost, it's white, and it's a Zombie in addition to its other types. K:Embalm:3 U U -SVar:NeedsToPlay:Creature.inZoneBattlefield +SVar:NeedsToPlay:Creature DeckHas:Ability$Token Oracle:You may have Vizier of Many Faces enter the battlefield as a copy of any creature on the battlefield, except if Vizier of Many Faces was embalmed, the token has no mana cost, it's white, and it's a Zombie in addition to its other types.\nEmbalm {3}{U}{U} diff --git a/forge-gui/res/cardsfolder/w/whiptail_moloch.txt b/forge-gui/res/cardsfolder/w/whiptail_moloch.txt index 7d177e22075..55144528d1f 100644 --- a/forge-gui/res/cardsfolder/w/whiptail_moloch.txt +++ b/forge-gui/res/cardsfolder/w/whiptail_moloch.txt @@ -4,6 +4,6 @@ Types:Creature Lizard PT:6/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals 3 damage to target creature you control. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.YouCtrl | NumDmg$ 3 | TgtPrompt$ Select target creature you control -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl AI:RemoveDeck:Random Oracle:When Whiptail Moloch enters the battlefield, it deals 3 damage to target creature you control. diff --git a/forge-gui/res/cardsfolder/w/whitemane_lion.txt b/forge-gui/res/cardsfolder/w/whitemane_lion.txt index 54cf55b14f0..b3429beacc0 100644 --- a/forge-gui/res/cardsfolder/w/whitemane_lion.txt +++ b/forge-gui/res/cardsfolder/w/whitemane_lion.txt @@ -5,5 +5,5 @@ PT:2/2 K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | AILogic$ NeverBounceItself -SVar:NeedsToPlay:Creature.YouCtrl+token+powerLE1+toughnessLE3,Creature.YouCtrl+cmcLE2+powerLE1+toughnessLE3+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+nonToken Oracle:Flash\nWhen Whitemane Lion enters the battlefield, return a creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/y/yaroks_wavecrasher.txt b/forge-gui/res/cardsfolder/y/yaroks_wavecrasher.txt index 9b41660bf33..d7c15a356fe 100644 --- a/forge-gui/res/cardsfolder/y/yaroks_wavecrasher.txt +++ b/forge-gui/res/cardsfolder/y/yaroks_wavecrasher.txt @@ -4,5 +4,5 @@ Types:Creature Elemental PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return another creature you control to its owner's hand. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Creature.Other+YouCtrl -SVar:NeedsToPlay:Creature.YouCtrl+cmcLE5+inZoneBattlefield +SVar:NeedsToPlay:Creature.YouCtrl+nonToken Oracle:When Yarok's Wavecrasher enters the battlefield, return another creature you control to its owner's hand. diff --git a/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java b/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java index 793791308a0..01bc9bfe6ab 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java @@ -110,7 +110,6 @@ public abstract class GameLobby implements IHasGameType { final boolean archenemyRemoved = triesToChangeArchenemy && !event.getArchenemy().booleanValue(); final boolean hasArchenemyChanged = triesToChangeArchenemy && slot.isArchenemy() != event.getArchenemy().booleanValue(); - final boolean changed = slot.apply(event) || hasArchenemyChanged; // Change archenemy teams @@ -134,7 +133,6 @@ public abstract class GameLobby implements IHasGameType { listener.update(index,event.getType()); } - if (changed) { updateView(false); } @@ -362,7 +360,7 @@ public abstract class GameLobby implements IHasGameType { } for (final LobbySlot slot : activeSlots) { - if (!slot.isReady() && slot.getType() != LobbySlotType.OPEN) { + if (!slot.isReady()) { SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblPlayerIsNotReady", slot.getName())); return null; }