From e4cb2d754ac74e02b22d27045af61b59e03ad8de Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 23 Oct 2024 18:42:10 +0200 Subject: [PATCH] Support engine tracking card mover vs. controller --- .../src/main/java/forge/game/GameAction.java | 74 +++++++++++-------- .../java/forge/game/ability/AbilityKey.java | 1 + .../ability/effects/ManifestBaseEffect.java | 1 - .../java/forge/game/card/CardDamageMap.java | 3 +- .../forge/game/replacement/ReplaceMoved.java | 5 +- .../game/trigger/TriggerChangesZone.java | 6 +- .../res/cardsfolder/a/all_hallows_eve.txt | 2 +- forge-gui/res/cardsfolder/a/arboria.txt | 2 +- .../res/cardsfolder/a/assassins_trophy.txt | 2 +- .../res/cardsfolder/a/avatar_of_growth.txt | 2 +- .../res/cardsfolder/b/balthor_the_defiled.txt | 2 +- .../cardsfolder/b/blessed_reincarnation.txt | 2 +- .../res/cardsfolder/b/bloodbond_march.txt | 2 +- .../cardsfolder/b/boldwyr_heavyweights.txt | 2 +- .../res/cardsfolder/b/boseiju_who_endures.txt | 2 +- .../cardsfolder/b/braids_conjurer_adept.txt | 2 +- .../b/bringer_of_the_last_gift.txt | 2 +- .../res/cardsfolder/c/chaos_mutation.txt | 2 +- forge-gui/res/cardsfolder/c/chaos_warp.txt | 2 +- .../cardsfolder/c/chaotic_transformation.txt | 2 +- .../res/cardsfolder/c/cleansing_wildfire.txt | 2 +- .../res/cardsfolder/c/crypt_champion.txt | 2 +- .../res/cardsfolder/d/demolition_field.txt | 2 +- .../res/cardsfolder/d/dire_strain_rampage.txt | 2 +- .../d/divergent_transformations.txt | 2 +- forge-gui/res/cardsfolder/d/divine_gambit.txt | 2 +- .../res/cardsfolder/d/dubious_challenge.txt | 2 +- .../res/cardsfolder/e/endless_whispers.txt | 2 +- forge-gui/res/cardsfolder/e/eureka.txt | 2 +- forge-gui/res/cardsfolder/e/exhume.txt | 2 +- .../res/cardsfolder/f/fall_of_the_thran.txt | 2 +- forge-gui/res/cardsfolder/f/field_of_ruin.txt | 2 +- .../res/cardsfolder/g/geomancers_gambit.txt | 2 +- forge-gui/res/cardsfolder/g/ghost_quarter.txt | 2 +- forge-gui/res/cardsfolder/g/guild_feud.txt | 2 +- forge-gui/res/cardsfolder/h/hypergenesis.txt | 2 +- .../cardsfolder/i/indomitable_creativity.txt | 2 +- .../i/iwamori_of_the_open_fist.txt | 2 +- .../j/jinnie_fay_jetmirs_second.txt | 6 +- .../k/kynaios_and_tiro_of_meletis.txt | 2 +- .../res/cardsfolder/l/land_equilibrium.txt | 6 +- .../res/cardsfolder/m/magister_of_worth.txt | 2 +- forge-gui/res/cardsfolder/m/myr_servitor.txt | 2 +- forge-gui/res/cardsfolder/n/natures_wrath.txt | 4 +- .../res/cardsfolder/o/oath_of_druids.txt | 2 +- .../res/cardsfolder/o/oath_of_lieges.txt | 2 +- .../res/cardsfolder/o/old_growth_dryads.txt | 2 +- forge-gui/res/cardsfolder/o/overburden.txt | 2 +- forge-gui/res/cardsfolder/p/parallax_tide.txt | 2 +- forge-gui/res/cardsfolder/p/parallax_wave.txt | 2 +- forge-gui/res/cardsfolder/p/path_to_exile.txt | 2 +- .../res/cardsfolder/p/patriarchs_bidding.txt | 2 +- .../cardsfolder/p/pendant_of_prosperity.txt | 2 +- forge-gui/res/cardsfolder/p/polymorph.txt | 2 +- forge-gui/res/cardsfolder/p/proteus_staff.txt | 2 +- .../res/cardsfolder/p/pyrrhic_revival.txt | 2 +- forge-gui/res/cardsfolder/r/reweave.txt | 2 +- .../res/cardsfolder/r/roar_of_reclamation.txt | 2 +- .../res/cardsfolder/r/rootweaver_druid.txt | 4 +- .../res/cardsfolder/s/sadistic_augermage.txt | 2 +- .../res/cardsfolder/s/scheming_symmetry.txt | 2 +- .../res/cardsfolder/s/second_sunrise.txt | 2 +- forge-gui/res/cardsfolder/s/shape_anew.txt | 2 +- forge-gui/res/cardsfolder/s/show_and_tell.txt | 2 +- .../s/sundering_eruption_volcanic_fissure.txt | 2 +- .../cardsfolder/t/tasha_unholy_archmage.txt | 2 +- .../cardsfolder/t/tempt_with_discovery.txt | 2 +- .../cardsfolder/t/tempt_with_immortality.txt | 2 +- forge-gui/res/cardsfolder/t/tempting_wurm.txt | 2 +- .../cardsfolder/t/the_beamtown_bullies.txt | 2 +- .../res/cardsfolder/t/the_great_aurora.txt | 2 +- forge-gui/res/cardsfolder/t/thelons_chant.txt | 2 +- .../res/cardsfolder/t/thieves_auction.txt | 2 +- .../res/cardsfolder/t/tourachs_chant.txt | 2 +- forge-gui/res/cardsfolder/t/transmogrify.txt | 2 +- .../res/cardsfolder/t/twilights_call.txt | 2 +- .../res/cardsfolder/v/volatile_fault.txt | 2 +- forge-gui/res/cardsfolder/w/warp_world.txt | 4 +- .../cardsfolder/w/white_orchid_phantom.txt | 2 +- .../res/cardsfolder/w/wild_magic_surge.txt | 2 +- .../res/cardsfolder/w/winds_of_abandon.txt | 2 +- 81 files changed, 137 insertions(+), 117 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 6b75fb6b610..f17f1ed4671 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -209,11 +209,27 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer c.getController().setRevolt(true); } + Player putter = c.getController(); + // Don't copy Tokens, copy only cards leaving the battlefield // and returning to hand (to recreate their spell ability information) if (toBattlefield || (suppress && zoneTo.getZoneType().isHidden())) { copied = c; + // in some cases it's always affected that puts them in play (initially) + String defPutter; + if (cause == null || (!cause.hasParam("Putter") && (c.isToken() || + cause.getApi() == ApiType.Cloak || cause.getApi() == ApiType.Manifest || cause.getApi() == ApiType.ManifestDread))) { + defPutter = "Owner"; + } else { + defPutter = cause.getParamOrDefault("Putter", "You"); + } + if ("Owner".equals(defPutter)) { + putter = c.getOwner(); + } else { + putter = AbilityUtils.getDefinedPlayers(cause.getHostCard(), defPutter, cause).getFirst(); + } + if (lastKnownInfo == null) { lastKnownInfo = CardCopyService.getLKICopy(c); } @@ -249,13 +265,6 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer copied = new CardCopyService(c).copyCard(false); - // CR 707.12 casting of a card copy - if (zoneTo.is(ZoneType.Stack) && c.isRealToken()) { - copied.setCopiedPermanent(c.getCopiedPermanent()); - //TODO: Feels like this should fit here and seems to work but it'll take a fair bit more testing to be sure. - //copied.setGamePieceType(GamePieceType.COPIED_SPELL); - } - copied.setGameTimestamp(c.getGameTimestamp()); if (zoneTo.is(ZoneType.Stack)) { @@ -267,6 +276,13 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer copied.setExiledBy(c.getExiledBy()); copied.setDrawnThisTurn(c.getDrawnThisTurn()); + // CR 707.12 casting of a card copy + if (c.isRealToken()) { + copied.setCopiedPermanent(c.getCopiedPermanent()); + //TODO: Feels like this should fit here and seems to work but it'll take a fair bit more testing to be sure. + //copied.setGamePieceType(GamePieceType.COPIED_SPELL); + } + if (c.isTransformed()) { copied.incrementTransformedTimestamp(); } @@ -277,6 +293,7 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer // CR 112.2 A spell’s controller is, by default, the player who put it on the stack. copied.setController(cause.getActivatingPlayer(), 0); + KeywordInterface kw = cause.getKeyword(); if (kw != null) { copied.addKeywordForStaticAbility(kw); @@ -290,25 +307,24 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer copied.setBackSide(false); } - copied.setUnearthed(c.isUnearthed()); - // need to copy counters when card enters another zone than hand or library if (lastKnownInfo.hasKeyword("Counters remain on CARDNAME as it moves to any zone other than a player's hand or library.") && !(zoneTo.is(ZoneType.Hand) || zoneTo.is(ZoneType.Library))) { copied.setCounters(Maps.newHashMap(lastKnownInfo.getCounters())); } - } - // perpetual stuff - if (c.hasIntensity()) { - copied.setIntensity(c.getIntensity(false)); - } - if (c.isSpecialized()) { - copied.setState(c.getCurrentStateName(), false); - } - if (c.hasPerpetual()) { - copied.setPerpetual(c); + // perpetual stuff + if (c.hasIntensity()) { + copied.setIntensity(c.getIntensity(false)); + } + if (c.isSpecialized()) { + copied.setState(c.getCurrentStateName(), false); + } + if (c.hasPerpetual()) { + copied.setPerpetual(c); + } } + // ensure that any leftover keyword/type changes are cleared in the state view copied.updateStateForView(); @@ -343,6 +359,7 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer repParams.put(AbilityKey.EffectOnly, true); repParams.put(AbilityKey.CounterTable, table); repParams.put(AbilityKey.CounterMap, table.column(copied)); + repParams.put(AbilityKey.Putter, putter); } if (params != null) { @@ -632,6 +649,7 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer runParams.put(AbilityKey.Destination, zoneTo.getZoneType().name()); runParams.put(AbilityKey.IndividualCostPaymentInstance, game.costPaymentStack.peek()); runParams.put(AbilityKey.MergedCards, mergedCards); + runParams.put(AbilityKey.Putter, putter); if (params != null) { runParams.putAll(params); @@ -780,8 +798,6 @@ private Card moveTo(final Zone zoneTo, Card c, Integer position, SpellAbility ca final Zone zoneFrom = game.getZoneOf(c); // String prevName = prev != null ? prev.getZoneName() : ""; - // Card lastKnownInfo = c; - // Handle the case that one component of a merged permanent got take to the subgame if (zoneTo.is(ZoneType.Subgame) && (c.hasMergedCard() || c.isMerged())) { c.moveMergedToSubgame(cause); @@ -913,7 +929,7 @@ public final Card moveToVariantDeck(Card c, ZoneType zone, int deckPosition, Spe } return changeZone(game.getZoneOf(c), deck, c, deckPosition, cause, params); } - + public final Card moveToJunkyard(Card c, SpellAbility cause, Map params) { final PlayerZone junkyard = c.getOwner().getZone(ZoneType.Junkyard); return moveTo(junkyard, c, cause, params); @@ -931,7 +947,6 @@ public final Card exile(final Card c, SpellAbility cause, Map runParams = AbilityKey.mapFromCard(c); runParams.put(AbilityKey.Cause, cause); if (origin != null) { // is generally null when adding via dev mode @@ -1264,10 +1279,9 @@ public boolean checkStateEffects(final boolean runEvents, final Set affect AbilityKey.addCardZoneTableParams(mapParams, table); for (final Player p : game.getPlayers()) { - for (final ZoneType zt : ZoneType.values()) { - if (zt == ZoneType.Command) - p.checkKeywordCard(); + p.checkKeywordCard(); + for (final ZoneType zt : ZoneType.values()) { if (zt == ZoneType.Battlefield) { continue; } @@ -1275,7 +1289,9 @@ public boolean checkStateEffects(final boolean runEvents, final Set affect checkAgain |= stateBasedAction704_5d(c); // Dungeon Card won't affect other cards, so don't need to set checkAgain stateBasedAction_Dungeon(c); - stateBasedAction_Scheme(c); + if (zt == ZoneType.Command) { + stateBasedAction_Scheme(c); + } } } } @@ -1557,7 +1573,7 @@ private void stateBasedAction_Scheme(Card c) { return; } if (!game.getStack().hasSourceOnStack(c, null)) { - moveTo(ZoneType.SchemeDeck, c, null, AbilityKey.newMap()); + moveTo(ZoneType.SchemeDeck, c, -1, null, AbilityKey.newMap()); } } @@ -1676,7 +1692,6 @@ public void checkGameOverCondition() { FCollectionView allPlayers = game.getPlayers(); for (Player p : allPlayers) { if (p.checkLoseCondition()) { // this will set appropriate outcomes - // Run triggers if (losers == null) { losers = Lists.newArrayListWithCapacity(3); } @@ -1898,7 +1913,6 @@ public final CardCollection sacrifice(final Iterable list, final SpellAbil } } for (Map.Entry> e : lki.asMap().entrySet()) { - // Run triggers final Map runParams = AbilityKey.mapFromPlayer(e.getKey()); runParams.put(AbilityKey.Cards, new CardCollection(e.getValue())); runParams.put(AbilityKey.Cause, source); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityKey.java b/forge-game/src/main/java/forge/game/ability/AbilityKey.java index 24faa6069b3..f4b61ccb545 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -115,6 +115,7 @@ public enum AbilityKey { Player("Player"), PreventedAmount("PreventedAmount"), Produced("Produced"), + Putter("Putter"), Regeneration("Regeneration"), ReplacementEffect("ReplacementEffect"), ReplacementResult("ReplacementResult"), diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java index ec9eb7bbd5c..d5e3f6bf49e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java @@ -31,7 +31,6 @@ public void resolve(SpellAbility sa) { } protected void manifestLoop(SpellAbility sa, Player p, final int amount) { - final Card source = sa.getHostCard(); final Player activator = sa.getActivatingPlayer(); final Game game = source.getGame(); diff --git a/forge-game/src/main/java/forge/game/card/CardDamageMap.java b/forge-game/src/main/java/forge/game/card/CardDamageMap.java index d612ec9626c..5a83811ba2b 100644 --- a/forge-game/src/main/java/forge/game/card/CardDamageMap.java +++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java @@ -143,7 +143,7 @@ public void triggerExcessDamage(boolean isCombat, Map lethalDamag damaged.getKey().setHasBeenDealtExcessDamageThisTurn(true); damaged.getKey().logExcessDamage(excess); - // Run triggers + final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.DamageTarget, damaged.getKey()); runParams.put(AbilityKey.DamageAmount, excess); @@ -158,7 +158,6 @@ public void triggerExcessDamage(boolean isCombat, Map lethalDamag } if (!damagedList.isEmpty()) { - // Run triggers final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.DamageTargets, damagedList); runParams.put(AbilityKey.IsCombatDamage, isCombat); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java index 15c76678c06..16263460fe1 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java @@ -40,6 +40,9 @@ public boolean canReplace(Map runParams) { if (!matchesValidParam("ValidCause", runParams.get(AbilityKey.Cause))) { return false; } + if (!matchesValidParam("ValidPutter", runParams.get(AbilityKey.Putter))) { + return false; + } if (hasParam("Origin")) { ZoneType zt = (ZoneType) runParams.get(AbilityKey.Origin); @@ -113,7 +116,7 @@ public boolean canReplace(Map runParams) { @Override public void setReplacingObjects(Map runParams, SpellAbility sa) { sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); - sa.setReplacingObjectsFrom(runParams, AbilityKey.NewCard, AbilityKey.CardLKI, AbilityKey.Cause, + sa.setReplacingObjectsFrom(runParams, AbilityKey.NewCard, AbilityKey.CardLKI, AbilityKey.Cause, AbilityKey.Putter, AbilityKey.LastStateBattlefield, AbilityKey.LastStateGraveyard, AbilityKey.CounterTable, AbilityKey.CounterMap); } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java index 617cc838992..22d3b846dad 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java @@ -130,6 +130,10 @@ public final boolean performTest(final Map runParams) { return false; } + if (!matchesValidParam("ValidPutter", runParams.get(AbilityKey.Putter))) { + return false; + } + if (hasParam("Fizzle")) { if (!runParams.containsKey(AbilityKey.Fizzle)) { return false; @@ -203,7 +207,7 @@ public final void setTriggeringObjects(final SpellAbility sa, Map | ChangeType$ Creature.Black,Creature.Red | Origin$ Graveyard | Destination$ Battlefield | SpellDescription$ Each player returns all black and all red creature cards from their graveyard to the battlefield. +A:AB$ ChangeZoneAll | Cost$ B B B Exile<1/CARDNAME> | ChangeType$ Creature.Black,Creature.Red | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner | SpellDescription$ Each player returns all black and all red creature cards from their graveyard to the battlefield. AI:RemoveDeck:All Oracle:Minion creatures get +1/+1.\n{B}{B}{B}, Exile Balthor the Defiled: Each player returns all black and all red creature cards from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/b/blessed_reincarnation.txt b/forge-gui/res/cardsfolder/b/blessed_reincarnation.txt index 69b16e87d8f..7f7f8d372e0 100644 --- a/forge-gui/res/cardsfolder/b/blessed_reincarnation.txt +++ b/forge-gui/res/cardsfolder/b/blessed_reincarnation.txt @@ -3,6 +3,6 @@ ManaCost:3 U Types:Instant K:Rebound A:SP$ ChangeZone | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBDig | SpellDescription$ Exile target creature an opponent controls. That player reveals cards from the top of their library until a creature card is revealed. The player puts that card onto the battlefield, then shuffles the rest into their library. -SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True +SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | Putter$ Owner AI:RemoveDeck:All Oracle:Exile target creature an opponent controls. That player reveals cards from the top of their library until a creature card is revealed. The player puts that card onto the battlefield, then shuffles the rest into their library.\nRebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) diff --git a/forge-gui/res/cardsfolder/b/bloodbond_march.txt b/forge-gui/res/cardsfolder/b/bloodbond_march.txt index b4a6bb4364a..a6adca26495 100644 --- a/forge-gui/res/cardsfolder/b/bloodbond_march.txt +++ b/forge-gui/res/cardsfolder/b/bloodbond_march.txt @@ -2,6 +2,6 @@ Name:Bloodbond March ManaCost:2 B G Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ Whenever a player casts a creature spell, each player returns all cards with the same name as that spell from their graveyard to the battlefield. -SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Triggered.sameName | Origin$ Graveyard | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Triggered.sameName | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner AI:RemoveDeck:Random Oracle:Whenever a player casts a creature spell, each player returns all cards with the same name as that spell from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/b/boldwyr_heavyweights.txt b/forge-gui/res/cardsfolder/b/boldwyr_heavyweights.txt index 8b21f311a43..1f95d05fe3f 100644 --- a/forge-gui/res/cardsfolder/b/boldwyr_heavyweights.txt +++ b/forge-gui/res/cardsfolder/b/boldwyr_heavyweights.txt @@ -4,5 +4,5 @@ Types:Creature Giant Warrior PT:8/8 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, each opponent may search their library for a creature card and put it onto the battlefield. Then each player who searched their library this way shuffles. -SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature | DefinedPlayer$ Player.Opponent | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature | DefinedPlayer$ Player.Opponent | Putter$ Owner | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:Trample\nWhen Boldwyr Heavyweights enters, each opponent may search their library for a creature card and put it onto the battlefield. Then each player who searched their library this way shuffles. diff --git a/forge-gui/res/cardsfolder/b/boseiju_who_endures.txt b/forge-gui/res/cardsfolder/b/boseiju_who_endures.txt index 525377c4fde..b71e169f447 100644 --- a/forge-gui/res/cardsfolder/b/boseiju_who_endures.txt +++ b/forge-gui/res/cardsfolder/b/boseiju_who_endures.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Legendary Land A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. A:AB$ Destroy | PrecostDesc$ Channel — | Cost$ 1 G Discard<1/CARDNAME> | ValidTgts$ Artifact.OppCtrl,Enchantment.OppCtrl,Land.nonBasic+OppCtrl | TgtPrompt$ Select target artifact, enchantment, or nonbasic land an opponent controls | SubAbility$ DBChangeZone | ReduceCost$ X | ActivationZone$ Hand | SpellDescription$ Destroy target artifact, enchantment, or nonbasic land an opponent controls. That player may search their library for a land card with a basic land type, put it onto the battlefield, then shuffle. This ability costs {1} less to activate for each legendary creature you control. -SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.hasABasicLandType | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True +SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.hasABasicLandType | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True SVar:X:Count$Valid Creature.Legendary+YouCtrl DeckHints:Type$Legendary DeckHas:Ability$Discard diff --git a/forge-gui/res/cardsfolder/b/braids_conjurer_adept.txt b/forge-gui/res/cardsfolder/b/braids_conjurer_adept.txt index 470b1cb1711..0b06b8da8d8 100644 --- a/forge-gui/res/cardsfolder/b/braids_conjurer_adept.txt +++ b/forge-gui/res/cardsfolder/b/braids_conjurer_adept.txt @@ -3,6 +3,6 @@ ManaCost:2 U U Types:Legendary Creature Human Wizard PT:2/2 T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ At the beginning of each player's upkeep, that player may put an artifact, creature, or land card from their hand onto the battlefield. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature,Artifact,Land | DefinedPlayer$ TriggeredPlayer | ChangeNum$ 1 +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature,Artifact,Land | DefinedPlayer$ TriggeredPlayer | Putter$ Owner | ChangeNum$ 1 AI:RemoveDeck:Random Oracle:At the beginning of each player's upkeep, that player may put an artifact, creature, or land card from their hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/b/bringer_of_the_last_gift.txt b/forge-gui/res/cardsfolder/b/bringer_of_the_last_gift.txt index 1eac8383870..71bd2cafd9e 100644 --- a/forge-gui/res/cardsfolder/b/bringer_of_the_last_gift.txt +++ b/forge-gui/res/cardsfolder/b/bringer_of_the_last_gift.txt @@ -5,7 +5,7 @@ PT:6/6 K:Flying T:Mode$ ChangesZone | ValidCard$ Card.Self+wasCastByYou | Destination$ Battlefield | Execute$ TrigSacAll | TriggerDescription$ When CARDNAME enters, if you cast it, each player sacrifices all other creatures they control. Then each player returns all creature cards from their graveyard that weren't put there this way to the battlefield. SVar:TrigSacAll:DB$ SacrificeAll | ValidCards$ Creature.StrictlyOther | RememberSacrificed$ True | SubAbility$ DBReturnAll -SVar:DBReturnAll:DB$ ChangeZoneAll | ChangeType$ Creature.IsNotRemembered | Origin$ Graveyard | Destination$ Battlefield | SubAbility$ DBCleanup +SVar:DBReturnAll:DB$ ChangeZoneAll | ChangeType$ Creature.IsNotRemembered | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Graveyard|Sacrifice DeckHints:Ability$Graveyard|Discard|Mill diff --git a/forge-gui/res/cardsfolder/c/chaos_mutation.txt b/forge-gui/res/cardsfolder/c/chaos_mutation.txt index 0d3e34799c4..0998d830a38 100644 --- a/forge-gui/res/cardsfolder/c/chaos_mutation.txt +++ b/forge-gui/res/cardsfolder/c/chaos_mutation.txt @@ -3,7 +3,7 @@ ManaCost:3 U R Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature | TgtPrompt$ Select any number of target creatures controlled by different players | TargetMin$ 0 | TargetMax$ MaxTgt | TargetsWithDifferentControllers$ True | SubAbility$ DBRepeatEach | RememberLKI$ True | SpellDescription$ Exile any number of target creatures controlled by different players. SVar:DBRepeatEach:DB$ RepeatEach | DefinedCards$ DirectRemembered | Zone$ Exile | UseImprinted$ True | RepeatSubAbility$ DBDig | SubAbility$ DBCleanup | SpellDescription$ For each creature exiled this way, its controller reveals cards from the top of their library until they reveal a creature card, puts that card onto the battlefield, then puts the rest on the bottom of their library in a random order. -SVar:DBDig:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True +SVar:DBDig:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | Putter$ Owner SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:MaxTgt:PlayerCountPlayers$Amount Oracle:Exile any number of target creatures controlled by different players. For each creature exiled this way, its controller reveals cards from the top of their library until they reveal a creature card, puts that card onto the battlefield, then puts the rest on the bottom of their library in a random order. diff --git a/forge-gui/res/cardsfolder/c/chaos_warp.txt b/forge-gui/res/cardsfolder/c/chaos_warp.txt index 7abb5929be2..eef1cc9dafa 100644 --- a/forge-gui/res/cardsfolder/c/chaos_warp.txt +++ b/forge-gui/res/cardsfolder/c/chaos_warp.txt @@ -2,5 +2,5 @@ Name:Chaos Warp ManaCost:2 R Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Library | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | SubAbility$ DBDig | Shuffle$ True | SpellDescription$ The owner of target permanent shuffles it into their library, then reveals the top card of their library. If it's a permanent card, they put it onto the battlefield. -SVar:DBDig:DB$ Dig | Defined$ TargetedOwner | DigNum$ 1 | Reveal$ True | DestinationZone$ Battlefield | DestinationZone2$ Library | LibraryPosition2$ 0 | ChangeNum$ All | ChangeValid$ Permanent +SVar:DBDig:DB$ Dig | Defined$ TargetedOwner | DigNum$ 1 | Reveal$ True | DestinationZone$ Battlefield | DestinationZone2$ Library | LibraryPosition2$ 0 | ChangeNum$ All | ChangeValid$ Permanent | Putter$ Owner Oracle:The owner of target permanent shuffles it into their library, then reveals the top card of their library. If it's a permanent card, they put it onto the battlefield. diff --git a/forge-gui/res/cardsfolder/c/chaotic_transformation.txt b/forge-gui/res/cardsfolder/c/chaotic_transformation.txt index 7d2b953c5d0..420bfbddfaf 100644 --- a/forge-gui/res/cardsfolder/c/chaotic_transformation.txt +++ b/forge-gui/res/cardsfolder/c/chaotic_transformation.txt @@ -9,6 +9,6 @@ SVar:Land:DB$ Pump | ValidTgts$ Land | TgtPrompt$ Select up to one target land | SVar:DBExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ Targeted | SubAbility$ DBRepeatPlayer | Imprint$ True SVar:DBRepeatPlayer:DB$ RepeatEach | RepeatPlayers$ ImprintedController | RepeatSubAbility$ DBRepeatCard | SubAbility$ DBCleanup | SpellDescription$ For each permanent exiled this way, its controller reveals cards from the top of their library until they reveal a card that shares a card type with it, puts that card onto the battlefield, then shuffles. SVar:DBRepeatCard:DB$ RepeatEach | DefinedCards$ ImprintedLKI.RememberedPlayerCtrl | ChooseOrder$ RememberedPlayer | RepeatSubAbility$ DBDigUntil -SVar:DBDigUntil:DB$ DigUntil | Valid$ Card.sharesCardTypeWith RememberedLKI | FoundDestination$ Battlefield | Defined$ RememberedController | Shuffle$ True | RevealedDestination$ Library | RevealedLibraryPosition$ -1 +SVar:DBDigUntil:DB$ DigUntil | Valid$ Card.sharesCardTypeWith RememberedLKI | FoundDestination$ Battlefield | Defined$ RememberedController | Shuffle$ True | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | Putter$ Owner SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True Oracle:Exile up to one target artifact, up to one target creature, up to one target enchantment, up to one target planeswalker, and/or up to one target land. For each permanent exiled this way, its controller reveals cards from the top of their library until they reveal a card that shares a card type with it, puts that card onto the battlefield, then shuffles. diff --git a/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt b/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt index 30200a18783..a3078efca04 100644 --- a/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt +++ b/forge-gui/res/cardsfolder/c/cleansing_wildfire.txt @@ -2,6 +2,6 @@ Name:Cleansing Wildfire ManaCost:1 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw | StackDescription$ Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle their library. +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True | SubAbility$ DBDraw | StackDescription$ Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle their library. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/c/crypt_champion.txt b/forge-gui/res/cardsfolder/c/crypt_champion.txt index 77769d7c685..023420ccf62 100644 --- a/forge-gui/res/cardsfolder/c/crypt_champion.txt +++ b/forge-gui/res/cardsfolder/c/crypt_champion.txt @@ -6,7 +6,7 @@ K:Double Strike T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, each player puts a creature card with mana value 3 or less from their graveyard onto the battlefield. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ R | TriggerDescription$ When CARDNAME enters, sacrifice it unless {R} was spent to cast it. SVar:TrigChangeZone:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl+cmcLE3 | ChangeNum$ 1 | Hidden$ True | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Mandatory$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl+cmcLE3 | ChangeNum$ 1 | Hidden$ True | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Putter$ Owner | Mandatory$ True SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:red Oracle:Double strike\nWhen Crypt Champion enters, each player puts a creature card with mana value 3 or less from their graveyard onto the battlefield.\nWhen Crypt Champion enters, sacrifice it unless {R} was spent to cast it. diff --git a/forge-gui/res/cardsfolder/d/demolition_field.txt b/forge-gui/res/cardsfolder/d/demolition_field.txt index b562926b74f..4cdbb35d82c 100644 --- a/forge-gui/res/cardsfolder/d/demolition_field.txt +++ b/forge-gui/res/cardsfolder/d/demolition_field.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBSearchBis | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | Putter$ Owner | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBSearchBis | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You may search your library for a basic land card, put it onto the battlefield, then shuffle. SVar:DBSearchBis:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ You | ChangeType$ Land.Basic | ChangeNum$ 1 AI:RemoveDeck:Random DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt b/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt index ab685face2e..87a4202a00d 100644 --- a/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt +++ b/forge-gui/res/cardsfolder/d/dire_strain_rampage.txt @@ -2,7 +2,7 @@ Name:Dire-Strain Rampage ManaCost:1 R G Types:Sorcery A:SP$ Destroy | ValidTgts$ Artifact,Enchantment,Land | TgtPrompt$ Select target artifact, enchantment, or land | RememberDestroyed$ True | SubAbility$ DBChangeZone | SpellDescription$ Destroy target artifact, enchantment, or land. If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeNum$ X | ChangeType$ Land.Basic | Optional$ True | ShuffleNonMandatory$ True | SubAbility$ DBCleanup | StackDescription$ If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. +SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | Putter$ Owner | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeNum$ X | ChangeType$ Land.Basic | Optional$ True | ShuffleNonMandatory$ True | SubAbility$ DBCleanup | StackDescription$ If a land was destroyed this way, its controller may search their library for up to two basic land cards, put them onto the battlefield tapped, then shuffle. Otherwise, its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Valid Land/Plus.1 K:Flashback:3 R G diff --git a/forge-gui/res/cardsfolder/d/divergent_transformations.txt b/forge-gui/res/cardsfolder/d/divergent_transformations.txt index 5f9fe5428ba..c883a37a11d 100644 --- a/forge-gui/res/cardsfolder/d/divergent_transformations.txt +++ b/forge-gui/res/cardsfolder/d/divergent_transformations.txt @@ -4,6 +4,6 @@ Types:Instant K:Undaunted A:SP$ ChangeZone | ValidTgts$ Creature | TargetMin$ 2 | TargetMax$ 2 | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | SubAbility$ DBTransform | SpellDescription$ Exile two target creatures. For each of those creatures, its controller reveals cards from the top of their library until they reveal a creature card, puts that card onto the battlefield, then shuffles the rest into their library. SVar:DBTransform:DB$ RepeatEach | UseImprinted$ True | DefinedCards$ DirectRemembered | ChooseOrder$ True | Zone$ Exile | RepeatSubAbility$ DBReveal | SubAbility$ DBCleanRemembered -SVar:DBReveal:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Creature | ValidDescription$ creature | RevealedDestination$ Library | RevealedLibraryPosition$ 0 | FoundDestination$ Battlefield | Shuffle$ True +SVar:DBReveal:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Creature | ValidDescription$ creature | RevealedDestination$ Library | RevealedLibraryPosition$ 0 | FoundDestination$ Battlefield | Shuffle$ True | Putter$ Owner SVar:DBCleanRemembered:DB$ Cleanup | ClearRemembered$ True Oracle:Undaunted (This spell costs {1} less to cast for each opponent.)\nExile two target creatures. For each of those creatures, its controller reveals cards from the top of their library until they reveal a creature card, puts that card onto the battlefield, then shuffles the rest into their library. diff --git a/forge-gui/res/cardsfolder/d/divine_gambit.txt b/forge-gui/res/cardsfolder/d/divine_gambit.txt index b8afb55fd6c..09613525f69 100644 --- a/forge-gui/res/cardsfolder/d/divine_gambit.txt +++ b/forge-gui/res/cardsfolder/d/divine_gambit.txt @@ -2,5 +2,5 @@ Name:Divine Gambit ManaCost:W W Types:Sorcery A:SP$ ChangeZone | ValidTgts$ Artifact.OppCtrl,Creature.OppCtrl,Enchantment.OppCtrl | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target artifact, creature, or enchantment an opponent controls | SubAbility$ DBChangeZone | SpellDescription$ Exile target artifact, creature, or enchantment an opponent controls. That player may put a permanent card from their hand onto the battlefield. -SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | ChangeType$ Permanent | Origin$ Hand | Destination$ Battlefield +SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ TargetedController | Putter$ Owner | ChangeType$ Permanent | Origin$ Hand | Destination$ Battlefield Oracle:Exile target artifact, creature, or enchantment an opponent controls. That player may put a permanent card from their hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/d/dubious_challenge.txt b/forge-gui/res/cardsfolder/d/dubious_challenge.txt index 192498a12db..62487a54929 100644 --- a/forge-gui/res/cardsfolder/d/dubious_challenge.txt +++ b/forge-gui/res/cardsfolder/d/dubious_challenge.txt @@ -2,6 +2,6 @@ Name:Dubious Challenge ManaCost:3 G Types:Sorcery A:SP$ Dig | DigNum$ 10 | ChangeNum$ 2 | Optional$ True | ChangeValid$ Creature | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ OpponentChooses | SpellDescription$ Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle. Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. | StackDescription$ SpellDescription -SVar:OpponentChooses:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | GainControl$ Targeted | DefinedPlayer$ You | Chooser$ Targeted | ValidTgts$ Opponent | ChangeType$ Card.IsRemembered | Hidden$ True | SubAbility$ YouGetTheRest +SVar:OpponentChooses:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | GainControl$ Targeted | DefinedPlayer$ You | Chooser$ Targeted | ValidTgts$ Opponent | Putter$ Targeted | ChangeType$ Card.IsRemembered | Hidden$ True | SubAbility$ YouGetTheRest SVar:YouGetTheRest:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered Oracle:Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle. Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. diff --git a/forge-gui/res/cardsfolder/e/endless_whispers.txt b/forge-gui/res/cardsfolder/e/endless_whispers.txt index 0e3ace0c167..f4ea0b54c56 100644 --- a/forge-gui/res/cardsfolder/e/endless_whispers.txt +++ b/forge-gui/res/cardsfolder/e/endless_whispers.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature | AddTrigger$ TrigEndlessDies | AddSVar$ SVar:TrigEndlessDies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerController$ TriggeredCardController | Execute$ TrigTgtOpp | TriggerDescription$ When this creature dies, choose target opponent. That player puts this card from its owner's graveyard onto the battlefield under their control at the beginning of the next end step. SVar:TrigTgtOpp:DB$ Pump | ValidTgts$ Opponent | IsCurse$ True | SubAbility$ DBDelayTrig SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ EndlessReturn | RememberObjects$ TargetedPlayer,Self | TriggerDescription$ That player puts this card from its owner's graveyard onto the battlefield under their control at the beginning of the next end step. -SVar:EndlessReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ DelayTriggerRemembered | GainControl$ DelayTriggerRemembered +SVar:EndlessReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ DelayTriggerRemembered | GainControl$ DelayTriggerRemembered | Putter$ DelayTriggerRemembered AI:RemoveDeck:All AI:RemoveDeck:Random Oracle:Each creature has "When this creature dies, choose target opponent. That player puts this card from its owner's graveyard onto the battlefield under their control at the beginning of the next end step." diff --git a/forge-gui/res/cardsfolder/e/eureka.txt b/forge-gui/res/cardsfolder/e/eureka.txt index 110337eed18..a80bbd3e7ff 100644 --- a/forge-gui/res/cardsfolder/e/eureka.txt +++ b/forge-gui/res/cardsfolder/e/eureka.txt @@ -6,7 +6,7 @@ SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expressio SVar:DBRepeatChoice:DB$ RepeatEach | StartingWith$ You | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose a permanent to put onto the battlefield. -SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 +SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Putter$ Owner | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put a permanent onto the battlefield. SVar:FinalReset:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/e/exhume.txt b/forge-gui/res/cardsfolder/e/exhume.txt index 58e5e7a94eb..02ab346b756 100644 --- a/forge-gui/res/cardsfolder/e/exhume.txt +++ b/forge-gui/res/cardsfolder/e/exhume.txt @@ -2,7 +2,7 @@ Name:Exhume ManaCost:1 B Types:Sorcery A:SP$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player | SpellDescription$ Each player puts a creature card from their graveyard onto the battlefield. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | Mandatory$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Putter$ Owner | ChangeNum$ 1 | Hidden$ True | Mandatory$ True SVar:X:Count$TypeInYourYard.Creature SVar:NeedsToPlayVar:X GE1 Oracle:Each player puts a creature card from their graveyard onto the battlefield. diff --git a/forge-gui/res/cardsfolder/f/fall_of_the_thran.txt b/forge-gui/res/cardsfolder/f/fall_of_the_thran.txt index eba120706b1..84d14cb08ff 100644 --- a/forge-gui/res/cardsfolder/f/fall_of_the_thran.txt +++ b/forge-gui/res/cardsfolder/f/fall_of_the_thran.txt @@ -4,5 +4,5 @@ Types:Enchantment Saga K:Chapter:3:DBDestroyAll,DBRepeatEach,DBRepeatEach SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Land | SpellDescription$ Destroy all lands. SVar:DBRepeatEach:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player | SpellDescription$ Each player returns two land cards from their graveyard to the battlefield. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 2 | Hidden$ True | Mandatory$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Putter$ Owner | ChangeNum$ 2 | Hidden$ True | Mandatory$ True Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Destroy all lands.\nII, III — Each player returns two land cards from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/f/field_of_ruin.txt b/forge-gui/res/cardsfolder/f/field_of_ruin.txt index c7bf2aa8719..0402e0f3f79 100644 --- a/forge-gui/res/cardsfolder/f/field_of_ruin.txt +++ b/forge-gui/res/cardsfolder/f/field_of_ruin.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls. | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ Player | ChangeType$ Land.Basic | ChangeNum$ 1 | StackDescription$ Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ Player | Putter$ Owner | ChangeType$ Land.Basic | ChangeNum$ 1 | StackDescription$ Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. AI:RemoveDeck:Random Oracle:{T}: Add {C}.\n{2}, {T}, Sacrifice Field of Ruin: Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles. diff --git a/forge-gui/res/cardsfolder/g/geomancers_gambit.txt b/forge-gui/res/cardsfolder/g/geomancers_gambit.txt index 69bf863a9f1..0d84a8e3bf4 100644 --- a/forge-gui/res/cardsfolder/g/geomancers_gambit.txt +++ b/forge-gui/res/cardsfolder/g/geomancers_gambit.txt @@ -2,6 +2,6 @@ Name:Geomancer's Gambit ManaCost:2 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/g/ghost_quarter.txt b/forge-gui/res/cardsfolder/g/ghost_quarter.txt index f239fef961c..afbfd743725 100644 --- a/forge-gui/res/cardsfolder/g/ghost_quarter.txt +++ b/forge-gui/res/cardsfolder/g/ghost_quarter.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Land | TgtPrompt$ Select target land. | SubAbility$ DBChange | AILogic$ GhostQuarter | AITgts$ Land.nonBasic | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True AI:RemoveDeck:Random Oracle:{T}: Add {C}.\n{T}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/g/guild_feud.txt b/forge-gui/res/cardsfolder/g/guild_feud.txt index f5458b9e400..48383403cfd 100644 --- a/forge-gui/res/cardsfolder/g/guild_feud.txt +++ b/forge-gui/res/cardsfolder/g/guild_feud.txt @@ -2,7 +2,7 @@ Name:Guild Feud ManaCost:5 R Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ OppPick | TriggerDescription$ At the beginning of your upkeep, target opponent reveals the top three cards of their library, may put a creature card from among them onto the battlefield, then puts the rest into their graveyard. You do the same with the top three cards of your library. If two creatures are put onto the battlefield this way, those creatures fight each other. -SVar:OppPick:DB$ Dig | ValidTgts$ Opponent | DigNum$ 3 | Reveal$ True | ChangeNum$ 1 | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Graveyard | Choser$ Targeted | Optional$ True | RememberChanged$ True | SubAbility$ YouPick +SVar:OppPick:DB$ Dig | ValidTgts$ Opponent | DigNum$ 3 | Reveal$ True | ChangeNum$ 1 | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Graveyard | Choser$ Targeted | Putter$ Owner | Optional$ True | RememberChanged$ True | SubAbility$ YouPick SVar:YouPick:DB$ Dig | Defined$ You | DigNum$ 3 | Reveal$ True | ChangeNum$ 1 | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Graveyard | Optional$ True | RememberChanged$ True | SubAbility$ PicksFight SVar:PicksFight:DB$ Fight | Defined$ Remembered | SubAbility$ DBCleanup | ConditionCheckSVar$ NumFighters | ConditionSVarCompare$ EQ2 | StackDescription$ If two creatures are put onto the battlefield this way, those creatures fight each other. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/h/hypergenesis.txt b/forge-gui/res/cardsfolder/h/hypergenesis.txt index 5f7b9e3900d..ceab39c5dc2 100644 --- a/forge-gui/res/cardsfolder/h/hypergenesis.txt +++ b/forge-gui/res/cardsfolder/h/hypergenesis.txt @@ -8,7 +8,7 @@ SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expressio SVar:DBRepeatChoice:DB$ RepeatEach | StartingWith$ You | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose an artifact, creature, enchantment, or land card from your hand onto the battlefield. -SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 +SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Putter$ Owner | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put an artifact, creature, enchantment, or land card from your hand onto the battlefield. SVar:FinalReset:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/i/indomitable_creativity.txt b/forge-gui/res/cardsfolder/i/indomitable_creativity.txt index 844677c6d15..9ad521d33d6 100644 --- a/forge-gui/res/cardsfolder/i/indomitable_creativity.txt +++ b/forge-gui/res/cardsfolder/i/indomitable_creativity.txt @@ -3,7 +3,7 @@ ManaCost:X R R R Types:Sorcery A:SP$ Destroy | ValidTgts$ Artifact,Creature | TargetMin$ X | TargetMax$ X | TgtPrompt$ Select X target artifacts and/or creatures | Origin$ Battlefield | Destination$ Graveyard | RememberDestroyed$ True | SubAbility$ DBTransform | StackDescription$ Destroy {c:Targeted}. | SpellDescription$ Destroy X target artifacts and/or creatures. For each permanent destroyed this way, its controller reveals cards from the top of their library until an artifact or creature card is revealed and exiles that card. Those players put the exiled cards onto the battlefield, then shuffle. SVar:DBTransform:DB$ RepeatEach | UseImprinted$ True | DefinedCards$ DirectRemembered | ChooseOrder$ True | RepeatSubAbility$ DBReveal | SubAbility$ DBPutOnBattlefield | StackDescription$ For each permanent destroyed this way, its controller reveals cards from the top of their library until an artifact or creature card is revealed and exiles that card. Those players put the exiled cards onto the battlefield, then shuffle their libraries. -SVar:DBReveal:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Artifact,Creature | ValidDescription$ artifact or creature | RevealedDestination$ Library | RevealedLibraryPosition$ 0 | RevealRandomOrder$ True | FoundDestination$ Exile | RememberFound$ True | SubAbility$ DBForget +SVar:DBReveal:DB$ DigUntil | Defined$ ImprintedController | Amount$ 1 | Valid$ Artifact,Creature | ValidDescription$ artifact or creature | RevealedDestination$ Library | RevealedLibraryPosition$ 0 | RevealRandomOrder$ True | FoundDestination$ Exile | RememberFound$ True | SubAbility$ DBForget | Putter$ Owner SVar:DBForget:DB$ Pump | ForgetObjects$ Imprinted | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True SVar:DBPutOnBattlefield:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBShuffle diff --git a/forge-gui/res/cardsfolder/i/iwamori_of_the_open_fist.txt b/forge-gui/res/cardsfolder/i/iwamori_of_the_open_fist.txt index 710e7f2c735..0816f34b33c 100644 --- a/forge-gui/res/cardsfolder/i/iwamori_of_the_open_fist.txt +++ b/forge-gui/res/cardsfolder/i/iwamori_of_the_open_fist.txt @@ -4,5 +4,5 @@ Types:Legendary Creature Human Monk PT:5/5 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, each opponent may put a legendary creature card from their hand onto the battlefield. -SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.Legendary | DefinedPlayer$ Player.Opponent | ChangeNum$ 1 +SVar:TrigChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.Legendary | DefinedPlayer$ Player.Opponent | Putter$ Owner | ChangeNum$ 1 Oracle:Trample\nWhen Iwamori of the Open Fist enters, each opponent may put a legendary creature card from their hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt b/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt index 0dfec835e14..ed143ab314d 100644 --- a/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt +++ b/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt @@ -2,10 +2,10 @@ Name:Jinnie Fay, Jetmir's Second ManaCost:RG G GW Types:Legendary Creature Elf Druid PT:3/3 -R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ GenericChoice | Optional$ True | Description$ If you would create one or more tokens, you may instead create that many 2/2 green Cat creature tokens with haste or that many 3/1 green Dog creature tokens with vigilance. +R:Event$ CreateToken | ActiveZones$ Battlefield | ValidPlayer$ You | ReplaceWith$ GenericChoice | Optional$ True | Description$ If you would create one or more tokens, you may instead create that many 2/2 green Cat creature tokens with haste or that many 3/1 green Dog creature tokens with vigilance. SVar:GenericChoice:DB$ GenericChoice | Choices$ Cat,Dog -SVar:Cat:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_2_2_cat_haste | SpellDescription$ Create that many 2/2 green Cat creature tokens with haste. -SVar:Dog:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_3_1_dog_vigilance | SpellDescription$ Create that many 3/1 green Dog creature tokens with vigilance. +SVar:Cat:DB$ ReplaceToken | Type$ ReplaceToken | TokenScript$ g_2_2_cat_haste | SpellDescription$ Create that many 2/2 green Cat creature tokens with haste. +SVar:Dog:DB$ ReplaceToken | Type$ ReplaceToken | TokenScript$ g_3_1_dog_vigilance | SpellDescription$ Create that many 3/1 green Dog creature tokens with vigilance. AI:RemoveDeck:Random DeckHas:Type$Cat|Dog DeckNeeds:Ability$Token diff --git a/forge-gui/res/cardsfolder/k/kynaios_and_tiro_of_meletis.txt b/forge-gui/res/cardsfolder/k/kynaios_and_tiro_of_meletis.txt index 863fa07d15b..d08f2a1a49f 100644 --- a/forge-gui/res/cardsfolder/k/kynaios_and_tiro_of_meletis.txt +++ b/forge-gui/res/cardsfolder/k/kynaios_and_tiro_of_meletis.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Soldier PT:2/8 T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, draw a card. Each player may put a land card from their hand onto the battlefield, then each opponent who didn't draws a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ EachPlayLand -SVar:EachPlayLand:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | DefinedPlayer$ Player | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DrawAbstainers +SVar:EachPlayLand:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | DefinedPlayer$ Player | Putter$ Owner | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DrawAbstainers SVar:DrawAbstainers:DB$ Draw | Defined$ OppNonRememberedOwner | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:At the beginning of your end step, draw a card. Each player may put a land card from their hand onto the battlefield, then each opponent who didn't draws a card. diff --git a/forge-gui/res/cardsfolder/l/land_equilibrium.txt b/forge-gui/res/cardsfolder/l/land_equilibrium.txt index 056106f3578..bd5a9567f20 100644 --- a/forge-gui/res/cardsfolder/l/land_equilibrium.txt +++ b/forge-gui/res/cardsfolder/l/land_equilibrium.txt @@ -1,8 +1,8 @@ Name:Land Equilibrium ManaCost:2 U U Types:Enchantment -R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Battlefield | ValidCard$ Land.OppCtrl+ControllerControlsAtLeastAsManyLand | ReplaceWith$ MoveToPlay | Description$ If an opponent who controls at least as many lands as you do would put a land onto the battlefield, that player instead puts that land onto the battlefield then sacrifices a land. -SVar:MoveToPlay:DB$ ChangeZone | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | SubAbility$ SacLand -SVar:SacLand:DB$ Sacrifice | SacValid$ Land | Defined$ ReplacedCardController +R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Battlefield | ValidPutter$ Opponent.withAtLeast0MoreLandsThanYou | ValidCard$ Land | ReplaceWith$ MoveToPlay | Description$ If an opponent who controls at least as many lands as you do would put a land onto the battlefield, that player instead puts that land onto the battlefield then sacrifices a land. +SVar:MoveToPlay:DB$ ChangeZone | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | SubAbility$ SacLand | Putter$ ReplacedPutter +SVar:SacLand:DB$ Sacrifice | SacValid$ Land | Defined$ ReplacedPutter DeckHas:Ability$Sacrifice Oracle:If an opponent who controls at least as many lands as you do would put a land onto the battlefield, that player instead puts that land onto the battlefield then sacrifices a land. diff --git a/forge-gui/res/cardsfolder/m/magister_of_worth.txt b/forge-gui/res/cardsfolder/m/magister_of_worth.txt index f4ee442f337..a1c1b7560e7 100644 --- a/forge-gui/res/cardsfolder/m/magister_of_worth.txt +++ b/forge-gui/res/cardsfolder/m/magister_of_worth.txt @@ -5,7 +5,7 @@ PT:4/4 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigVote | TriggerDescription$ Will of the Council — When CARDNAME enters, starting with you, each player votes for grace or condemnation. If grace gets more votes, each player returns each creature card from their graveyard to the battlefield. If condemnation gets more votes or the vote is tied, destroy all creatures other than CARDNAME. SVar:TrigVote:DB$ Vote | Defined$ Player | VoteGrace$ MagisterofWorthZombify | VoteCondemnation$ MagisterofWorthDestroy | Tied$ MagisterofWorthDestroy | VoteType$ Grace,Condemnation | AILogic$ GraceOrCondemnation -SVar:MagisterofWorthZombify:DB$ ChangeZoneAll | ChangeType$ Creature | Origin$ Graveyard | Destination$ Battlefield +SVar:MagisterofWorthZombify:DB$ ChangeZoneAll | ChangeType$ Creature | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner SVar:MagisterofWorthDestroy:DB$ DestroyAll | ValidCards$ Creature.Other AI:RemoveDeck:Random Oracle:Flying\nWill of the council — When Magister of Worth enters, starting with you, each player votes for grace or condemnation. If grace gets more votes, each player returns each creature card from their graveyard to the battlefield. If condemnation gets more votes or the vote is tied, destroy all creatures other than Magister of Worth. diff --git a/forge-gui/res/cardsfolder/m/myr_servitor.txt b/forge-gui/res/cardsfolder/m/myr_servitor.txt index 69a8404efe5..bd1f57262ec 100644 --- a/forge-gui/res/cardsfolder/m/myr_servitor.txt +++ b/forge-gui/res/cardsfolder/m/myr_servitor.txt @@ -3,6 +3,6 @@ ManaCost:1 Types:Artifact Creature Myr PT:1/1 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self | PresentZone$ Battlefield | Execute$ TrigReturn | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is on the battlefield, each player returns all cards named Myr Servitor from their graveyard to the battlefield. -SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.namedMyr Servitor | Origin$ Graveyard | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.namedMyr Servitor | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner DeckHints:Name$Myr Servitor Oracle:At the beginning of your upkeep, if Myr Servitor is on the battlefield, each player returns all cards named Myr Servitor from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/n/natures_wrath.txt b/forge-gui/res/cardsfolder/n/natures_wrath.txt index 0d61edf2302..286020bacda 100644 --- a/forge-gui/res/cardsfolder/n/natures_wrath.txt +++ b/forge-gui/res/cardsfolder/n/natures_wrath.txt @@ -3,9 +3,9 @@ ManaCost:4 G G Types:Enchantment K:UpkeepCost:G T:Mode$ ChangesZone | ValidCard$ Island,Card.Blue | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigSacrificeBlue | TriggerDescription$ Whenever a player puts an Island or blue permanent onto the battlefield, that player sacrifices an Island or blue permanent. -SVar:TrigSacrificeBlue:DB$ Sacrifice | Defined$ TriggeredCardController | SacValid$ Island,Card.Blue | SacMessage$ Island or a blue permanent +SVar:TrigSacrificeBlue:DB$ Sacrifice | Defined$ TriggeredPutter| SacValid$ Island,Card.Blue | SacMessage$ Island or a blue permanent T:Mode$ ChangesZone | ValidCard$ Swamp,Card.Black | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigSacrificeBlack | TriggerDescription$ Whenever a player puts an Swamp or black permanent onto the battlefield, that player sacrifices a Swamp or black permanent. -SVar:TrigSacrificeBlack:DB$ Sacrifice | Defined$ TriggeredCardController | SacValid$ Swamp,Card.Black | SacMessage$ Swamp or a black permanent +SVar:TrigSacrificeBlack:DB$ Sacrifice | Defined$ TriggeredPutter | SacValid$ Swamp,Card.Black | SacMessage$ Swamp or a black permanent SVar:NonStackingEffect:True AI:RemoveDeck:Random Oracle:At the beginning of your upkeep, sacrifice Nature's Wrath unless you pay {G}.\nWhenever a player puts an Island or blue permanent onto the battlefield, that player sacrifices an Island or blue permanent.\nWhenever a player puts a Swamp or black permanent onto the battlefield, that player sacrifices a Swamp or black permanent. diff --git a/forge-gui/res/cardsfolder/o/oath_of_druids.txt b/forge-gui/res/cardsfolder/o/oath_of_druids.txt index 380751be34a..736204d132e 100644 --- a/forge-gui/res/cardsfolder/o/oath_of_druids.txt +++ b/forge-gui/res/cardsfolder/o/oath_of_druids.txt @@ -3,7 +3,7 @@ ManaCost:1 G Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigOathofDruids | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player chooses target player who controls more creatures than they do and is their opponent. The first player may reveal cards from the top of their library until they reveal a creature card. If the first player does, that player puts that card onto the battlefield and all other cards revealed this way into their graveyard. SVar:TrigOathofDruids:DB$ Pump | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Player.OpponentToActive+withMoreCreaturesThanActive | TgtPrompt$ Choose target player who controls more creatures than you and is your opponent | IsCurse$ True | SubAbility$ DBDig -SVar:DBDig:DB$ DigUntil | Defined$ TriggeredPlayer | Valid$ Creature | ValidDescription$ creature card | FoundDestination$ Battlefield | RevealedDestination$ Graveyard | AILogic$ OathOfDruids | Optional$ True +SVar:DBDig:DB$ DigUntil | Defined$ TriggeredPlayer | Valid$ Creature | ValidDescription$ creature card | FoundDestination$ Battlefield | RevealedDestination$ Graveyard | AILogic$ OathOfDruids | Optional$ True | Putter$ Owner SVar:NeedsToPlayVar:Z GEY SVar:Z:Count$Valid Creature.YouDontCtrl+inZoneBattlefield SVar:Y:Count$Valid Creature.YouCtrl+inZoneBattlefield diff --git a/forge-gui/res/cardsfolder/o/oath_of_lieges.txt b/forge-gui/res/cardsfolder/o/oath_of_lieges.txt index e174fdcd218..5eb83337304 100644 --- a/forge-gui/res/cardsfolder/o/oath_of_lieges.txt +++ b/forge-gui/res/cardsfolder/o/oath_of_lieges.txt @@ -2,7 +2,7 @@ Name:Oath of Lieges ManaCost:1 W Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ LiegesSearch | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player chooses target player who controls more lands than they do and is their opponent. The first player may search their library for a basic land card, put that card onto the battlefield, then shuffle. -SVar:LiegesSearch:DB$ ChangeZone | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Player.OpponentToActive+withMoreLandsThanActive | TgtPrompt$ Choose target opponent who controls more land than you | DefinedPlayer$ TriggeredPlayer | Chooser$ TriggeredPlayer | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Optional$ True | ShuffleNonMandatory$ True +SVar:LiegesSearch:DB$ ChangeZone | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Player.OpponentToActive+withMoreLandsThanActive | TgtPrompt$ Choose target opponent who controls more land than you | DefinedPlayer$ TriggeredPlayer | Chooser$ TriggeredPlayer | Putter$ Owner | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | Optional$ True | ShuffleNonMandatory$ True SVar:NeedsToPlayVar:Z GEY SVar:Z:Count$Valid Land.YouDontCtrl+inZoneBattlefield SVar:Y:Count$Valid Land.YouCtrl+inZoneBattlefield diff --git a/forge-gui/res/cardsfolder/o/old_growth_dryads.txt b/forge-gui/res/cardsfolder/o/old_growth_dryads.txt index b11bf4391b0..f78ea3ba02d 100644 --- a/forge-gui/res/cardsfolder/o/old_growth_dryads.txt +++ b/forge-gui/res/cardsfolder/o/old_growth_dryads.txt @@ -3,5 +3,5 @@ ManaCost:G Types:Creature Dryad PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, each opponent may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | DefinedPlayer$ Player.Opponent | ChangeNum$ 1 | ShuffleNonMandatory$ True +SVar:TrigChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | DefinedPlayer$ Player.Opponent | Putter$ Owner | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:When Old-Growth Dryads enters, each opponent may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/o/overburden.txt b/forge-gui/res/cardsfolder/o/overburden.txt index b0b753b67a1..8b5ae78a080 100644 --- a/forge-gui/res/cardsfolder/o/overburden.txt +++ b/forge-gui/res/cardsfolder/o/overburden.txt @@ -2,6 +2,6 @@ Name:Overburden ManaCost:1 U Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken | TriggerZones$ Battlefield | Execute$ TrigBounce | TriggerDescription$ Whenever a player puts a nontoken creature onto the battlefield, that player returns a land they control to its owner's hand. -SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | ChangeType$ Land | ChangeNum$ 1 | Mandatory$ True | DefinedPlayer$ TriggeredCardController | Chooser$ TriggeredCardController | Hidden$ True +SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | ChangeType$ Land | ChangeNum$ 1 | Mandatory$ True | DefinedPlayer$ TriggeredPutter | Chooser$ TriggeredPutter | Hidden$ True AI:RemoveDeck:Random Oracle:Whenever a player puts a nontoken creature onto the battlefield, that player returns a land they control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/p/parallax_tide.txt b/forge-gui/res/cardsfolder/p/parallax_tide.txt index 1d91ecb561a..6ffa02e8e87 100644 --- a/forge-gui/res/cardsfolder/p/parallax_tide.txt +++ b/forge-gui/res/cardsfolder/p/parallax_tide.txt @@ -4,7 +4,7 @@ Types:Enchantment K:Fading:5 A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Land | TgtPrompt$ Select target land | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target land. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, each player returns to the battlefield all cards they own exiled with CARDNAME. -SVar:TrigReturn:DB$ ChangeZone | Defined$ ExiledWith | Origin$ Exile | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZone | Defined$ ExiledWith | Origin$ Exile | Destination$ Battlefield | Putter$ Owner SVar:PlayMain1:TRUE AI:RemoveDeck:All Oracle:Fading 5 (This enchantment enters with five fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.)\nRemove a fade counter from Parallax Tide: Exile target land.\nWhen Parallax Tide leaves the battlefield, each player returns to the battlefield all cards they own exiled with Parallax Tide. diff --git a/forge-gui/res/cardsfolder/p/parallax_wave.txt b/forge-gui/res/cardsfolder/p/parallax_wave.txt index fda362efe3b..2c536ee9b5d 100644 --- a/forge-gui/res/cardsfolder/p/parallax_wave.txt +++ b/forge-gui/res/cardsfolder/p/parallax_wave.txt @@ -4,7 +4,7 @@ Types:Enchantment K:Fading:5 A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, each player returns to the battlefield all cards they own exiled with CARDNAME. -SVar:TrigReturn:DB$ ChangeZone | Defined$ ExiledWith | Origin$ Exile | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZone | Defined$ ExiledWith | Origin$ Exile | Destination$ Battlefield | Putter$ Owner SVar:PlayMain1:TRUE AI:RemoveDeck:All Oracle:Fading 5 (This enchantment enters with five fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.)\nRemove a fade counter from Parallax Wave: Exile target creature.\nWhen Parallax Wave leaves the battlefield, each player returns to the battlefield all cards they own exiled with Parallax Wave. diff --git a/forge-gui/res/cardsfolder/p/path_to_exile.txt b/forge-gui/res/cardsfolder/p/path_to_exile.txt index 0f64e9a4ef6..699e19d06f4 100644 --- a/forge-gui/res/cardsfolder/p/path_to_exile.txt +++ b/forge-gui/res/cardsfolder/p/path_to_exile.txt @@ -2,5 +2,5 @@ Name:Path to Exile ManaCost:W Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature | SubAbility$ DBChange | StackDescription$ Exile {c:Targeted}. {p:TargetedController} may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle their library. | SpellDescription$ Exile target creature. Its controller may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | StackDescription$ None +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True | StackDescription$ None Oracle:Exile target creature. Its controller may search their library for a basic land card, put that card onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/p/patriarchs_bidding.txt b/forge-gui/res/cardsfolder/p/patriarchs_bidding.txt index 51658f9d7e8..5a00c19a4a2 100644 --- a/forge-gui/res/cardsfolder/p/patriarchs_bidding.txt +++ b/forge-gui/res/cardsfolder/p/patriarchs_bidding.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseType | SubAbility$ DBBidding | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a creature type. Each player returns all creature cards of a type chosen this way from their graveyard to the battlefield. SVar:DBChooseType:DB$ ChooseType | Defined$ Player.IsRemembered | Type$ Creature | AILogic$ MostProminentInComputerGraveyard | SubAbility$ DBRemember SVar:DBRemember:DB$ PumpAll | ValidCards$ Creature.ChosenType | RememberPumped$ True | PumpZone$ Graveyard -SVar:DBBidding:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered | Origin$ Graveyard | Destination$ Battlefield | SubAbility$ DBCleanup +SVar:DBBidding:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:Each player chooses a creature type. Each player returns all creature cards of a type chosen this way from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/p/pendant_of_prosperity.txt b/forge-gui/res/cardsfolder/p/pendant_of_prosperity.txt index cd0c9b3beea..c180fd0a546 100644 --- a/forge-gui/res/cardsfolder/p/pendant_of_prosperity.txt +++ b/forge-gui/res/cardsfolder/p/pendant_of_prosperity.txt @@ -8,5 +8,5 @@ SVar:DBCleanup:DB$ Cleanup | ClearChosenPlayer$ True A:AB$ Draw | Cost$ 2 T | NumCards$ 1 | SubAbility$ DBChangeZone | SpellDescription$ Draw a card, then you may put a land card from your hand onto the battlefield. CARDNAME's owner draws a card, then that player may put a land card from their hand onto the battlefield. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ 1 | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ CardOwner | NumCards$ 1 | SubAbility$ DBChangeZone2 -SVar:DBChangeZone2:DB$ ChangeZone | DefinedPlayer$ CardOwner | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ 1 +SVar:DBChangeZone2:DB$ ChangeZone | DefinedPlayer$ CardOwner | Putter$ Owner | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ 1 Oracle:Pendant of Prosperity enters under the control of an opponent of your choice.\n{2}, {T}: Draw a card, then you may put a land card from your hand onto the battlefield. Pendant of Prosperity's owner draws a card, then that player may put a land card from their hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/p/polymorph.txt b/forge-gui/res/cardsfolder/p/polymorph.txt index 916f7a9df6a..f81a5250312 100644 --- a/forge-gui/res/cardsfolder/p/polymorph.txt +++ b/forge-gui/res/cardsfolder/p/polymorph.txt @@ -2,6 +2,6 @@ Name:Polymorph ManaCost:3 U Types:Sorcery A:SP$ Destroy | NoRegen$ True | ValidTgts$ Creature | AILogic$ Polymorph | TgtPrompt$ Select target creature | SubAbility$ DBDig | SpellDescription$ Destroy target creature. It can't be regenerated. Its controller reveals cards from the top of their library until they reveal a creature card. The player puts that card onto the battlefield, then shuffles all other cards revealed this way into their library. -SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True +SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | Putter$ Owner AI:RemoveDeck:All Oracle:Destroy target creature. It can't be regenerated. Its controller reveals cards from the top of their library until they reveal a creature card. The player puts that card onto the battlefield, then shuffles all other cards revealed this way into their library. diff --git a/forge-gui/res/cardsfolder/p/proteus_staff.txt b/forge-gui/res/cardsfolder/p/proteus_staff.txt index ed347c22595..6178a682927 100644 --- a/forge-gui/res/cardsfolder/p/proteus_staff.txt +++ b/forge-gui/res/cardsfolder/p/proteus_staff.txt @@ -2,7 +2,7 @@ Name:Proteus Staff ManaCost:3 Types:Artifact A:AB$ ChangeZone | Cost$ 2 U T | SorcerySpeed$ True | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | ValidTgts$ Creature | AILogic$ Polymorph | TgtPrompt$ Select target creature | SubAbility$ DBDigUntil | SpellDescription$ Put target creature on the bottom of its owner's library. That creature's controller reveals cards from the top of their library until they reveal a creature card. The player puts that card onto the battlefield and the rest on the bottom of their library in any order. Activate only as a sorcery. -SVar:DBDigUntil:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 +SVar:DBDigUntil:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | Putter$ Owner AI:RemoveDeck:All AI:RemoveDeck:Random DeckNeeds:Color$Blue diff --git a/forge-gui/res/cardsfolder/p/pyrrhic_revival.txt b/forge-gui/res/cardsfolder/p/pyrrhic_revival.txt index 31ba38a6b86..6c8538fcd9c 100644 --- a/forge-gui/res/cardsfolder/p/pyrrhic_revival.txt +++ b/forge-gui/res/cardsfolder/p/pyrrhic_revival.txt @@ -1,6 +1,6 @@ Name:Pyrrhic Revival ManaCost:3 WB WB WB Types:Sorcery -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | WithCountersType$ M1M1 | Defined$ ValidGraveyard Creature | AILogic$ ReanimateAll | SpellDescription$ Each player returns each creature card from their graveyard to the battlefield with an additional -1/-1 counter on it. +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | WithCountersType$ M1M1 | Defined$ ValidGraveyard Creature | Putter$ Owner | AILogic$ ReanimateAll | SpellDescription$ Each player returns each creature card from their graveyard to the battlefield with an additional -1/-1 counter on it. SVar:IsReanimatorCard:TRUE Oracle:Each player returns each creature card from their graveyard to the battlefield with an additional -1/-1 counter on it. diff --git a/forge-gui/res/cardsfolder/r/reweave.txt b/forge-gui/res/cardsfolder/r/reweave.txt index 7b160df3d31..973a1839f8d 100644 --- a/forge-gui/res/cardsfolder/r/reweave.txt +++ b/forge-gui/res/cardsfolder/r/reweave.txt @@ -3,7 +3,7 @@ ManaCost:5 U Types:Instant Arcane K:Splice:Arcane:2 U U A:SP$ SacrificeAll | Defined$ Targeted | ValidTgts$ Permanent | SubAbility$ DBDigUntil | RememberSacrificed$ True | StackDescription$ {p:TargetedController} destroys {c:Targeted}. If {p:TargetedController} does, | SpellDescription$ Target permanent's controller sacrifices it. If the player does, they reveal cards from the top of their library until they reveal a permanent card that shares a card type with the sacrificed permanent, put that card onto the battlefield, then shuffle. -SVar:DBDigUntil:DB$ DigUntil | Defined$ RememberedController | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | Valid$ Permanent.sharesCardTypeWith RememberedLKI | ValidDescription$ permanent card that shares a card type with the sacrificed permanent | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | StackDescription$ they reveal cards from the top of their library until they reveal a permanent card that shares a card type with {c:Targeted}, put that card onto the battlefield, then shuffle their library. | SubAbility$ DBCleanup +SVar:DBDigUntil:DB$ DigUntil | Defined$ RememberedController | Putter$ Owner | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | Valid$ Permanent.sharesCardTypeWith RememberedLKI | ValidDescription$ permanent card that shares a card type with the sacrificed permanent | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | StackDescription$ they reveal cards from the top of their library until they reveal a permanent card that shares a card type with {c:Targeted}, put that card onto the battlefield, then shuffle their library. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All DeckHints:Type$Arcane diff --git a/forge-gui/res/cardsfolder/r/roar_of_reclamation.txt b/forge-gui/res/cardsfolder/r/roar_of_reclamation.txt index 21a93f791f4..5b9d737f70f 100644 --- a/forge-gui/res/cardsfolder/r/roar_of_reclamation.txt +++ b/forge-gui/res/cardsfolder/r/roar_of_reclamation.txt @@ -1,6 +1,6 @@ Name:Roar of Reclamation ManaCost:5 W W Types:Sorcery -A:SP$ ChangeZoneAll | ChangeType$ Artifact | Origin$ Graveyard | Destination$ Battlefield | SpellDescription$ Each player returns all artifact cards from their graveyard to the battlefield. +A:SP$ ChangeZoneAll | ChangeType$ Artifact | Origin$ Graveyard | Destination$ Battlefield | Putter$ Owner | SpellDescription$ Each player returns all artifact cards from their graveyard to the battlefield. AI:RemoveDeck:Random Oracle:Each player returns all artifact cards from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/r/rootweaver_druid.txt b/forge-gui/res/cardsfolder/r/rootweaver_druid.txt index cd2027a8f69..a64fb407b2a 100644 --- a/forge-gui/res/cardsfolder/r/rootweaver_druid.txt +++ b/forge-gui/res/cardsfolder/r/rootweaver_druid.txt @@ -6,8 +6,8 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBSearch | ChangeZoneTable$ True | SubAbility$ DBCleanup SVar:DBSearch:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Optional$ True | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Land.Basic+RememberedPlayerCtrl | ChangeNum$ 3 | RememberChanged$ True | NoReveal$ True | ShuffleNonMandatory$ True | SubAbility$ DBChoose SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Card.IsRemembered+RememberedPlayerCtrl | ChoiceZone$ Library | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose a card to put on your opponent's battlefield | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBGive -SVar:DBGive:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | NoLooking$ True | Defined$ ChosenCard | GainControl$ True | Tapped$ True | NoShuffle$ True | SubAbility$ DBKeep -SVar:DBKeep:DB$ ChangeZoneAll | Origin$ Library | Destination$ Battlefield | ChangeType$ Card.IsRemembered+RememberedPlayerCtrl | Tapped$ True | SubAbility$ DBClearChosen +SVar:DBGive:DB$ ChangeZone | Putter$ Owner | Origin$ Library | Destination$ Battlefield | NoLooking$ True | Defined$ ChosenCard | GainControl$ True | Tapped$ True | NoShuffle$ True | SubAbility$ DBKeep +SVar:DBKeep:DB$ ChangeZoneAll | Putter$ Owner | Origin$ Library | Destination$ Battlefield | ChangeType$ Card.IsRemembered+RememberedPlayerCtrl | Tapped$ True | SubAbility$ DBClearChosen SVar:DBClearChosen:DB$ Cleanup | ClearChosenCard$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:When Rootweaver Druid enters, each opponent may search their library for up to three basic land cards. They each put one of those cards onto the battlefield tapped under your control and the rest onto the battlefield tapped under their control. Then each player who searched their library this way shuffles. diff --git a/forge-gui/res/cardsfolder/s/sadistic_augermage.txt b/forge-gui/res/cardsfolder/s/sadistic_augermage.txt index c461e86a9c9..972af5622dd 100644 --- a/forge-gui/res/cardsfolder/s/sadistic_augermage.txt +++ b/forge-gui/res/cardsfolder/s/sadistic_augermage.txt @@ -3,5 +3,5 @@ ManaCost:2 B Types:Creature Human Wizard PT:3/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME dies, each player puts a card from their hand on top of their library. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Library | LibraryPosition$ 0 | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | DefinedPlayer$ Player +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Library | LibraryPosition$ 0 | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | DefinedPlayer$ Player | Putter$ Owner Oracle:When Sadistic Augermage dies, each player puts a card from their hand on top of their library. diff --git a/forge-gui/res/cardsfolder/s/scheming_symmetry.txt b/forge-gui/res/cardsfolder/s/scheming_symmetry.txt index f51e2d68817..9fed165f2a4 100644 --- a/forge-gui/res/cardsfolder/s/scheming_symmetry.txt +++ b/forge-gui/res/cardsfolder/s/scheming_symmetry.txt @@ -1,6 +1,6 @@ Name:Scheming Symmetry ManaCost:B Types:Sorcery -A:SP$ ChangeZone | DefinedPlayer$ Targeted | ValidTgts$ Player | TargetMin$ 2 | TargetMax$ 2 | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Card | ChangeNum$ 1 | StackDescription$ SpellDescription | SpellDescription$ Choose two target players. Each of them searches their library for a card, then shuffles and puts that card on top. +A:SP$ ChangeZone | DefinedPlayer$ Targeted | ValidTgts$ Player | TargetMin$ 2 | TargetMax$ 2 | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Card | ChangeNum$ 1 | Putter$ Owner | StackDescription$ SpellDescription | SpellDescription$ Choose two target players. Each of them searches their library for a card, then shuffles and puts that card on top. AI:RemoveDeck:All Oracle:Choose two target players. Each of them searches their library for a card, then shuffles and puts that card on top. diff --git a/forge-gui/res/cardsfolder/s/second_sunrise.txt b/forge-gui/res/cardsfolder/s/second_sunrise.txt index d57aa160fe2..db6b1f78541 100644 --- a/forge-gui/res/cardsfolder/s/second_sunrise.txt +++ b/forge-gui/res/cardsfolder/s/second_sunrise.txt @@ -1,5 +1,5 @@ Name:Second Sunrise ManaCost:1 W W Types:Instant -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.ThisTurnEnteredFrom_Battlefield,Creature.ThisTurnEnteredFrom_Battlefield,Enchantment.ThisTurnEnteredFrom_Battlefield,Land.ThisTurnEnteredFrom_Battlefield | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. +A:SP$ ChangeZone | Putter$ Owner | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.ThisTurnEnteredFrom_Battlefield,Creature.ThisTurnEnteredFrom_Battlefield,Enchantment.ThisTurnEnteredFrom_Battlefield,Land.ThisTurnEnteredFrom_Battlefield | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. Oracle:Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/s/shape_anew.txt b/forge-gui/res/cardsfolder/s/shape_anew.txt index cbf59905969..d58a9cc4fa9 100644 --- a/forge-gui/res/cardsfolder/s/shape_anew.txt +++ b/forge-gui/res/cardsfolder/s/shape_anew.txt @@ -2,5 +2,5 @@ Name:Shape Anew ManaCost:3 U Types:Sorcery A:SP$ SacrificeAll | Defined$ Targeted | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SubAbility$ DBDig | SpellDescription$ The controller of target artifact sacrifices it, then reveals cards from the top of their library until they reveal an artifact card. That player puts that card onto the battlefield, then shuffles all other cards revealed this way into their library. -SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Artifact | ValidDescription$ artifact | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True +SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Putter$ Owner | Valid$ Artifact | ValidDescription$ artifact | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True Oracle:The controller of target artifact sacrifices it, then reveals cards from the top of their library until they reveal an artifact card. That player puts that card onto the battlefield, then shuffles all other cards revealed this way into their library. diff --git a/forge-gui/res/cardsfolder/s/show_and_tell.txt b/forge-gui/res/cardsfolder/s/show_and_tell.txt index 159e5f8ccaa..2710b8d6fb0 100644 --- a/forge-gui/res/cardsfolder/s/show_and_tell.txt +++ b/forge-gui/res/cardsfolder/s/show_and_tell.txt @@ -1,7 +1,7 @@ Name:Show and Tell ManaCost:2 U Types:Sorcery -A:SP$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature,Artifact,Enchantment,Land | DefinedPlayer$ Player | ChangeNum$ 1 | SpellDescription$ Each player may put an artifact, creature, enchantment, or land card from their hand onto the battlefield. +A:SP$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature,Artifact,Enchantment,Land | DefinedPlayer$ Player | Putter$ Owner | ChangeNum$ 1 | SpellDescription$ Each player may put an artifact, creature, enchantment, or land card from their hand onto the battlefield. SVar:NeedsToPlayVar:Y GE1 SVar:Y:Count$ValidHand Permanent.YouCtrl+cmcGE4 Oracle:Each player may put an artifact, creature, enchantment, or land card from their hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt b/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt index 467001e97fb..0b0c892623d 100644 --- a/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt +++ b/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt @@ -2,7 +2,7 @@ Name:Sundering Eruption ManaCost:2 R Types:Sorcery A:SP$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. Creatures without flying can't block this turn. -SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ CantBlockEffect +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | Tapped$ True | ChangeNum$ 1 | DefinedPlayer$ TargetedController | Putter$ Owner | ShuffleNonMandatory$ True | SubAbility$ CantBlockEffect SVar:CantBlockEffect:DB$ Effect | StaticAbilities$ KWPump | AILogic$ Evasion | SpellDescription$ Creatures without flying can't block this turn. SVar:KWPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.withoutFlying | AddHiddenKeyword$ CARDNAME can't block. | Description$ Creatures without flying can't block this turn. SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/t/tasha_unholy_archmage.txt b/forge-gui/res/cardsfolder/t/tasha_unholy_archmage.txt index 99b58d50997..1653e589879 100644 --- a/forge-gui/res/cardsfolder/t/tasha_unholy_archmage.txt +++ b/forge-gui/res/cardsfolder/t/tasha_unholy_archmage.txt @@ -5,7 +5,7 @@ Loyalty:4 A:AB$ Effect | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Triggers$ AttackTrigger | Duration$ UntilYourNextTurn | AILogic$ Main2 | SpellDescription$ Until your next turn, whenever a creature attacks you or CARDNAME, put a -1/-1 counter on that creature. SVar:AttackTrigger:Mode$ Attacks | ValidCard$ Creature | Attacked$ You,Card.EffectSource | TriggerZones$ Command | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature attacks you or EFFECTSOURCE, put a -1/-1 counter on that creature. SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredAttackerLKICopy | CounterType$ M1M1 | CounterNum$ 1 -A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Opponent | Hidden$ True | ChangeType$ Creature.TargetedPlayerCtrl | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | Chooser$ Targeted | Mandatory$ True | RememberChanged$ True | SubAbility$ DBPump | StackDescription$ SpellDescription | SpellDescription$ Target opponent puts a creature card of their choice from their graveyard onto the battlefield under your control. +A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Opponent | Hidden$ True | ChangeType$ Creature.TargetedPlayerCtrl | Putter$ Owner | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | Chooser$ Targeted | Mandatory$ True | RememberChanged$ True | SubAbility$ DBPump | StackDescription$ SpellDescription | SpellDescription$ Target opponent puts a creature card of their choice from their graveyard onto the battlefield under your control. SVar:DBPump:DB$ Animate | Keywords$ Ward:2 | Defined$ Remembered | Duration$ Permanent | StackDescription$ That creature gains ward 2. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ DigUntil | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Amount$ 3 | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Graveyard | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals cards from the top of their library until they reveal three creature cards. Put those cards onto the battlefield under your control. That player puts the rest into their graveyard. diff --git a/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt b/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt index 525d15dd97e..be1de6e92bf 100644 --- a/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt +++ b/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt @@ -3,7 +3,7 @@ ManaCost:3 G Types:Sorcery A:SP$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ 1 | Hidden$ True | NoShuffle$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles. SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBSearchAgain | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to search your library for a land card and put it onto the battlefield? -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCount +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Putter$ Owner | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCount SVar:DBCount:DB$ StoreSVar | SVar$ X | Type$ CountSVar | Expression$ X/Plus.1 SVar:DBSearchAgain:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ X | Hidden$ True | Shuffle$ True | StackDescription$ None | SubAbility$ DBReset SVar:DBReset:DB$ StoreSVar | SVar$ X | Type$ Number | Expression$ 0 diff --git a/forge-gui/res/cardsfolder/t/tempt_with_immortality.txt b/forge-gui/res/cardsfolder/t/tempt_with_immortality.txt index d5588295ae3..7e65c063735 100644 --- a/forge-gui/res/cardsfolder/t/tempt_with_immortality.txt +++ b/forge-gui/res/cardsfolder/t/tempt_with_immortality.txt @@ -3,7 +3,7 @@ ManaCost:4 B Types:Sorcery A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Tempting offer — Return a creature card from your graveyard to the battlefield. Each opponent may return a creature card from their graveyard to the battlefield. For each opponent who does, return a creature card from your graveyard to the battlefield. SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBReturn -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | RememberChanged$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Putter$ Owner | ChangeNum$ 1 | Hidden$ True | RememberChanged$ True SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ X | Hidden$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/t/tempting_wurm.txt b/forge-gui/res/cardsfolder/t/tempting_wurm.txt index 007ae6055c3..5ef738188e9 100644 --- a/forge-gui/res/cardsfolder/t/tempting_wurm.txt +++ b/forge-gui/res/cardsfolder/t/tempting_wurm.txt @@ -4,7 +4,7 @@ Types:Creature Wurm PT:5/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ EachOpponent | TriggerDescription$ When CARDNAME enters, each opponent may put any number of artifact, creature, enchantment, and/or land cards from their hand onto the battlefield. SVar:EachOpponent:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ TemptingChange -SVar:TemptingChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact,Creature,Enchantment,Land | DefinedPlayer$ Remembered | ChangeNum$ X +SVar:TemptingChange:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact,Creature,Enchantment,Land | DefinedPlayer$ Remembered | Putter$ Owner | ChangeNum$ X SVar:X:Count$ValidHand Artifact.RememberedPlayerCtrl,Creature.RememberedPlayerCtrl,Enchantment.RememberedPlayerCtrl,Land.RememberedPlayerCtrl SVar:NeedsToPlayVar:Y LE2 SVar:Y:Count$ValidHand Card.OppOwn diff --git a/forge-gui/res/cardsfolder/t/the_beamtown_bullies.txt b/forge-gui/res/cardsfolder/t/the_beamtown_bullies.txt index 22dd9ae9b21..2a55dc4bc21 100644 --- a/forge-gui/res/cardsfolder/t/the_beamtown_bullies.txt +++ b/forge-gui/res/cardsfolder/t/the_beamtown_bullies.txt @@ -5,7 +5,7 @@ PT:4/4 K:Vigilance K:Haste A:AB$ Pump | Cost$ T | ValidTgts$ Player.Opponent+Active | TgtPrompt$ Select target opponent whose turn it is | SubAbility$ DBChangeZone | StackDescription$ {p:Targeted} | SpellDescription$ Target opponent whose turn it is -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | DefinedPlayer$ ParentTarget | ValidTgts$ Creature.nonLegendary+YouOwn | TgtPrompt$ Select target nonlegendary creature card from your graveyard | GainControl$ ParentTarget | SubAbility$ DBAnimate | StackDescription$ puts {c:Targeted} onto the battlefield under their control. | SpellDescription$ puts target nonlegendary creature card from your graveyard onto the battlefield under their control. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | DefinedPlayer$ ParentTarget | Putter$ ParentTarget | ValidTgts$ Creature.nonLegendary+YouOwn | TgtPrompt$ Select target nonlegendary creature card from your graveyard | GainControl$ ParentTarget | SubAbility$ DBAnimate | StackDescription$ puts {c:Targeted} onto the battlefield under their control. | SpellDescription$ puts target nonlegendary creature card from your graveyard onto the battlefield under their control. SVar:DBAnimate:DB$ Animate | Keywords$ Haste | Defined$ Targeted | Duration$ Permanent | SubAbility$ DBGoad | StackDescription$ SpellDescription | SpellDescription$ It gains haste. SVar:DBGoad:DB$ Goad | Defined$ Targeted | SubAbility$ DelTrig | SpellDescription$ Goad it. SVar:DelTrig:DB$ DelayedTrigger | RememberObjects$ Targeted.Creature | Mode$ Phase | Phase$ End of Turn | Execute$ TrigExile | TriggerDescription$ At the beginning of the next end step, exile it. | SpellDescription$ At the beginning of the next end step, exile it. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) diff --git a/forge-gui/res/cardsfolder/t/the_great_aurora.txt b/forge-gui/res/cardsfolder/t/the_great_aurora.txt index 7ed280c39c4..e7d547da00e 100644 --- a/forge-gui/res/cardsfolder/t/the_great_aurora.txt +++ b/forge-gui/res/cardsfolder/t/the_great_aurora.txt @@ -7,7 +7,7 @@ SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Card.RememberedPlayerOwn | Origin SVar:DBDraw:DB$ Draw | Defined$ Remembered | NumCards$ Remembered$Amount | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:RepeatLands:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBAurora | SubAbility$ ExileAurora -SVar:DBAurora:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | DefinedPlayer$ Remembered | Chooser$ Remembered | ChangeType$ Land | ChangeNum$ HandSize +SVar:DBAurora:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | DefinedPlayer$ Remembered | Putter$ Owner | Chooser$ Remembered | ChangeType$ Land | ChangeNum$ HandSize SVar:HandSize:Count$ValidHand Land.RememberedPlayerCtrl SVar:ExileAurora:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | Defined$ Self Oracle:Each player shuffles all cards from their hand and all permanents they own into their library, then draws that many cards. Each player may put any number of land cards from their hand onto the battlefield. Exile The Great Aurora. diff --git a/forge-gui/res/cardsfolder/t/thelons_chant.txt b/forge-gui/res/cardsfolder/t/thelons_chant.txt index d7f7a2ccc95..7a9f69d21f1 100644 --- a/forge-gui/res/cardsfolder/t/thelons_chant.txt +++ b/forge-gui/res/cardsfolder/t/thelons_chant.txt @@ -3,6 +3,6 @@ ManaCost:1 G G Types:Enchantment K:UpkeepCost:G T:Mode$ ChangesZone | ValidCard$ Swamp | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever a player puts a Swamp onto the battlefield, CARDNAME deals 3 damage to that player unless the player puts a -1/-1 counter on a creature they control. -SVar:TrigDmg:DB$ DealDamage | Defined$ TriggeredCardController | NumDmg$ 3 | UnlessCost$ AddCounter<1/M1M1/Creature.YouCtrl/a creature you control> | UnlessPayer$ TriggeredCardController +SVar:TrigDmg:DB$ DealDamage | Defined$ TriggeredPutter | NumDmg$ 3 | UnlessCost$ AddCounter<1/M1M1/Creature.YouCtrl/a creature you control> | UnlessPayer$ TriggeredPutter AI:RemoveDeck:Random Oracle:At the beginning of your upkeep, sacrifice Thelon's Chant unless you pay {G}.\nWhenever a player puts a Swamp onto the battlefield, Thelon's Chant deals 3 damage to that player unless the player puts a -1/-1 counter on a creature they control. diff --git a/forge-gui/res/cardsfolder/t/thieves_auction.txt b/forge-gui/res/cardsfolder/t/thieves_auction.txt index a12f2d7cd08..3fc11c43d36 100644 --- a/forge-gui/res/cardsfolder/t/thieves_auction.txt +++ b/forge-gui/res/cardsfolder/t/thieves_auction.txt @@ -5,6 +5,6 @@ A:SP$ ChangeZoneAll | ChangeType$ Permanent.nonToken | Origin$ Battlefield | Des SVar:DBRepeatChoose:DB$ Repeat | RepeatSubAbility$ DBRepeat | RepeatDefined$ Remembered | RepeatPresent$ Card | StackDescription$ None SVar:DBRepeat:DB$ RepeatEach | StartingWith$ You | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Card.IsRemembered | ForgetChosen$ True | ChoiceZone$ Exile | SubAbility$ DBGainControl -SVar:DBGainControl:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ Player.IsRemembered | Tapped$ True +SVar:DBGainControl:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ Player.IsRemembered | Putter$ Owner | Tapped$ True AI:RemoveDeck:All Oracle:Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under their control. Repeat this process until all cards exiled this way have been chosen. diff --git a/forge-gui/res/cardsfolder/t/tourachs_chant.txt b/forge-gui/res/cardsfolder/t/tourachs_chant.txt index 978407686ba..5d193d66f79 100644 --- a/forge-gui/res/cardsfolder/t/tourachs_chant.txt +++ b/forge-gui/res/cardsfolder/t/tourachs_chant.txt @@ -3,6 +3,6 @@ ManaCost:1 B B Types:Enchantment K:UpkeepCost:B T:Mode$ ChangesZone | ValidCard$ Forest | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever a player puts a Forest onto the battlefield, CARDNAME deals 3 damage to that player unless they put a -1/-1 counter on a creature they control. -SVar:TrigDmg:DB$ DealDamage | Defined$ TriggeredCardController | NumDmg$ 3 | UnlessCost$ AddCounter<1/M1M1/Creature.YouCtrl/a creature you control> | UnlessPayer$ TriggeredCardController +SVar:TrigDmg:DB$ DealDamage | Defined$ TriggeredPutter | NumDmg$ 3 | UnlessCost$ AddCounter<1/M1M1/Creature.YouCtrl/a creature you control> | UnlessPayer$ TriggeredPutter AI:RemoveDeck:Random Oracle:At the beginning of your upkeep, sacrifice Tourach's Chant unless you pay {B}.\nWhenever a player puts a Forest onto the battlefield, Tourach's Chant deals 3 damage to that player unless they put a -1/-1 counter on a creature they control. diff --git a/forge-gui/res/cardsfolder/t/transmogrify.txt b/forge-gui/res/cardsfolder/t/transmogrify.txt index 3aa21d9788e..75c394b2003 100644 --- a/forge-gui/res/cardsfolder/t/transmogrify.txt +++ b/forge-gui/res/cardsfolder/t/transmogrify.txt @@ -2,5 +2,5 @@ Name:Transmogrify ManaCost:3 R Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | NoRegen$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBDig | SpellDescription$ Exile target creature. That creature's controller reveals cards from the top of their library until they reveal a creature card. That player puts that card onto the battlefield, then shuffles the rest into their library. -SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True +SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | Putter$ Owner Oracle:Exile target creature. That creature's controller reveals cards from the top of their library until they reveal a creature card. That player puts that card onto the battlefield, then shuffles the rest into their library. diff --git a/forge-gui/res/cardsfolder/t/twilights_call.txt b/forge-gui/res/cardsfolder/t/twilights_call.txt index f8d25c28955..aa822d3f9bd 100644 --- a/forge-gui/res/cardsfolder/t/twilights_call.txt +++ b/forge-gui/res/cardsfolder/t/twilights_call.txt @@ -2,6 +2,6 @@ Name:Twilight's Call ManaCost:4 B B Types:Sorcery K:MayFlashCost:2 -A:SP$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature | SpellDescription$ Each player returns all creature cards from their graveyard to the battlefield. +A:SP$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature | Putter$ Owner | SpellDescription$ Each player returns all creature cards from their graveyard to the battlefield. SVar:IsReanimatorCard:TRUE Oracle:You may cast Twilight's Call as though it had flash if you pay {2} more to cast it. (You may cast it any time you could cast an instant.)\nEach player returns all creature cards from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/v/volatile_fault.txt b/forge-gui/res/cardsfolder/v/volatile_fault.txt index 2f335b71539..b4eaf76a789 100644 --- a/forge-gui/res/cardsfolder/v/volatile_fault.txt +++ b/forge-gui/res/cardsfolder/v/volatile_fault.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land Cave A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. A:AB$ Destroy | Cost$ 1 T Sac<1/CARDNAME> | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls | SubAbility$ DBSearch | AILogic$ GhostQuarter | SpellDescription$ Destroy target nonbasic land an opponent controls. That player may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBTreasure | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | Putter$ Owner | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBTreasure | StackDescription$ That land's controller may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. SVar:DBTreasure:DB$ Token | TokenScript$ c_a_treasure_sac DeckHas:Ability$Sacrifice|Token & Type$Treasure|Artifact Oracle:{T}: Add {C}.\n{1}, {T}, Sacrifice Volatile Fault: Destroy target nonbasic land an opponent controls. That player may search their library for a basic land card, put it onto the battlefield, then shuffle. You create a Treasure token. diff --git a/forge-gui/res/cardsfolder/w/warp_world.txt b/forge-gui/res/cardsfolder/w/warp_world.txt index 7c22513667a..b7b6f1c0fd5 100644 --- a/forge-gui/res/cardsfolder/w/warp_world.txt +++ b/forge-gui/res/cardsfolder/w/warp_world.txt @@ -6,8 +6,8 @@ SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Permanent.RememberedPlayerOwn | I SVar:DBDig:DB$ PeekAndReveal | Defined$ Remembered | PeekAmount$ WarpX | NoPeek$ True | RememberRevealed$ True | SubAbility$ DBCleanImprint SVar:DBCleanImprint:DB$ Cleanup | ClearImprinted$ True SVar:WarpX:Imprinted$Amount -SVar:ChangePermanent:DB$ ChangeZoneAll | ChangeType$ Artifact.IsRemembered,Creature.IsRemembered,Land.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ ChangeEnchantment -SVar:ChangeEnchantment:DB$ ChangeZoneAll | ChangeType$ Enchantment.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom +SVar:ChangePermanent:DB$ ChangeZoneAll | Putter$ Owner | ChangeType$ Artifact.IsRemembered,Creature.IsRemembered,Land.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ ChangeEnchantment +SVar:ChangeEnchantment:DB$ ChangeZoneAll | Putter$ Owner | ChangeType$ Enchantment.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom SVar:GotoBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Each player shuffles all permanents they own into their library, then reveals that many cards from the top of their library. Each player puts all artifact, creature, and land cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of their library. diff --git a/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt b/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt index 1e2d4e58252..fb70fab39a9 100644 --- a/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt +++ b/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt @@ -6,5 +6,5 @@ K:Flying K:First Strike T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters, destroy up to one target nonbasic land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land.nonBasic | TgtPrompt$ Select up to one target nonbasic land | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBSearch | AILogic$ GhostQuarter -SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True +SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | DefinedPlayer$ TargetedController | Putter$ Owner | ChangeType$ Land.Basic | ChangeNum$ 1 | Tapped$ True Oracle:Flying, first strike\nWhen White Orchid Phantom enters, destroy up to one target nonbasic land. Its controller may search their library for a basic land card, put it onto the battlefield tapped, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wild_magic_surge.txt b/forge-gui/res/cardsfolder/w/wild_magic_surge.txt index 7110b61722c..4387b8bf8fe 100644 --- a/forge-gui/res/cardsfolder/w/wild_magic_surge.txt +++ b/forge-gui/res/cardsfolder/w/wild_magic_surge.txt @@ -2,7 +2,7 @@ Name:Wild Magic Surge ManaCost:R R Types:Instant A:SP$ Destroy | ValidTgts$ Permanent.OppCtrl | RememberLKI$ True | AlwaysRemember$ True | TgtPrompt$ Select target permanent an opponent controls | SubAbility$ DBDigUntil | SpellDescription$ Destroy target permanent an opponent controls. Its controller reveals cards from the top of their library until they reveal a permanent card that shares a card type with that permanent. They put that card onto the battlefield and the rest on the bottom of their library in a random order. -SVar:DBDigUntil:DB$ DigUntil | Defined$ RememberedController | Valid$ Permanent.sharesCardTypeWith RememberedLKI | ValidDescription$ permanent card that shares a card type with the destroyed permanent | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | SubAbility$ DBCleanup +SVar:DBDigUntil:DB$ DigUntil | Defined$ RememberedController | Valid$ Permanent.sharesCardTypeWith RememberedLKI | ValidDescription$ permanent card that shares a card type with the destroyed permanent | FoundDestination$ Battlefield | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | Putter$ Owner | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:Destroy target permanent an opponent controls. Its controller reveals cards from the top of their library until they reveal a permanent card that shares a card type with that permanent. They put that card onto the battlefield and the rest on the bottom of their library in a random order. diff --git a/forge-gui/res/cardsfolder/w/winds_of_abandon.txt b/forge-gui/res/cardsfolder/w/winds_of_abandon.txt index 202b5843423..57bc7df6e92 100644 --- a/forge-gui/res/cardsfolder/w/winds_of_abandon.txt +++ b/forge-gui/res/cardsfolder/w/winds_of_abandon.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | SubAbility$ DBGetLandsAll | RememberLKI$ True | SpellDescription$ Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle. SVar:DBGetLandsAll:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBGetLandsOne | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:DBGetLandsOne:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ X | DefinedPlayer$ Player.IsRemembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 +SVar:DBGetLandsOne:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ X | DefinedPlayer$ Player.IsRemembered | Putter$ Owner | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 SVar:X:RememberedLKI$FilterControlledByRemembered_Number$1 K:Overload:4 W W Oracle:Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle.\nOverload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")