diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index 5a2631fdba9..0ee21b66df9 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -59,7 +59,6 @@ import forge.game.spellability.SpellAbility; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.CardTranslation; -import forge.util.FileSection; import forge.util.Localizer; import forge.util.TextUtil; import forge.util.Visitor; @@ -881,11 +880,7 @@ public class ReplacementHandler { return parseReplacement(repParse, host, intrinsic, host); } public static ReplacementEffect parseReplacement(final String repParse, final Card host, final boolean intrinsic, final IHasSVars sVarHolder) { - return ReplacementHandler.parseReplacement(parseParams(repParse), host, intrinsic, sVarHolder); - } - - public static Map parseParams(final String repParse) { - return FileSection.parseToMap(repParse, FileSection.DOLLAR_SIGN_KV_SEPARATOR); + return ReplacementHandler.parseReplacement(AbilityFactory.getMapParams(repParse), host, intrinsic, sVarHolder); } /** diff --git a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java index 729694181fd..0f4c4a7cc12 100644 --- a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java +++ b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java @@ -534,8 +534,8 @@ public class TargetRestrictions { num++; } } - } + // TODO this may count some SA twice return num + getAllCandidates(sa, isTargeted).size(); } diff --git a/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt b/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt index d708a53a78d..efdd2c0b5cb 100644 --- a/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt +++ b/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt @@ -8,6 +8,5 @@ A:AB$ ChangeZone | Cost$ 2 W T | ValidTgts$ Creature.Other | Mandatory$ True | T SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigBounce | RememberObjects$ RememberedLKI | TriggerDescription$ Return that card to the battlefield under its owner's control at the beginning of the next end step. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TrigBounce:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRememberedLKI -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ ChangeZone | Cost$ 2 W T Exert<1/CARDNAME> | Mandatory$ True | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | Duration$ UntilHostLeavesPlay | SpellDescription$ Exile another target creature until CARDNAME leaves the battlefield. (An exerted creature won't untap during your next untap step.) Oracle:Flying, vigilance\n{2}{W}, {T}: Exile another target creature. Return that card to the battlefield under its owner's control at the beginning of the next end step.\n{2}{W}, {T}, Exert Angel of Condemnation: Exile another target creature until Angel of Condemnation leaves the battlefield. (An exerted creature won't untap during your next untap step.) diff --git a/forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt b/forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt index 4629003283d..ac7715ab42c 100644 --- a/forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt +++ b/forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt @@ -3,7 +3,7 @@ ManaCost:1 W B Types:Enchantment Saga K:Saga:3:DBChoose,DBChoose,DBChangeZone SVar:DBChoose:DB$ ChooseCard | Choices$ Creature.YouCtrl | Mandatory$ True | SubAbility$ DBEffect | SpellDescription$ Choose a creature you control. Until your next turn, all damage that would be dealt to creatures you control is dealt to that creature instead. -SVar:DBEffect:DB$ Effect | ReplacementEffects$ DamageEvent | ExileOnMoved$ True | RememberObjects$ ChosenCard | Duration$ UntilYourNextTurn +SVar:DBEffect:DB$ Effect | ReplacementEffects$ DamageEvent | ExileOnMoved$ Battlefield | RememberObjects$ ChosenCard | Duration$ UntilYourNextTurn SVar:DamageEvent:Event$ DamageDone | ActiveZones$ Command | ValidTarget$ Creature.YouCtrl | ReplaceWith$ GideonSac | DamageTarget$ Remembered | Description$ All damage that would be dealt this turn to creatures you control is dealt to the chosen creature instead (if it's still on the battlefield). SVar:GideonSac:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouOwn | WithCountersType$ Flying | AnimateSubAbility$ Animate | SpellDescription$ Return target creature card from your graveyard to the battlefield with a flying counter on it. That creature is an Angel Warrior in addition to its other types. diff --git a/forge-gui/res/cardsfolder/c/celestial_sword.txt b/forge-gui/res/cardsfolder/c/celestial_sword.txt index 643ab99f186..958f4ef087d 100644 --- a/forge-gui/res/cardsfolder/c/celestial_sword.txt +++ b/forge-gui/res/cardsfolder/c/celestial_sword.txt @@ -1,5 +1,5 @@ Name:Celestial Sword ManaCost:6 Types:Artifact -A:AB$ Pump | Cost$ 3 T | NumAtt$ +3 | NumDef$ +3 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AtEOT$ Sacrifice | SpellDescription$ Target creature you control gets +3/+3 until end of turn. Its controller sacrifices it at the beginning of the next end step. +A:AB$ Pump | Cost$ 3 T | NumAtt$ +3 | NumDef$ +3 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AtEOT$ SacrificeCtrl | SpellDescription$ Target creature you control gets +3/+3 until end of turn. Its controller sacrifices it at the beginning of the next end step. Oracle:{3}, {T}: Target creature you control gets +3/+3 until end of turn. Its controller sacrifices it at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt index 6bbe85b1fe8..4f2da64676d 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt @@ -8,8 +8,7 @@ SVar:RevealCard:DB$ Reveal | RevealDefined$ Self | SubAbility$ CounterFirstSpell SVar:CounterFirstSpellEffect:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBEffect SVar:DBEffect:DB$ Effect | Triggers$ TrigCounter | EffectOwner$ Player.IsRemembered | Duration$ Permanent SVar:TrigCounter:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigCounterSpell | OneOff$ True | TriggerZones$ Command | TriggerDescription$ Whenever an opponent casts a spell for the first time, counter that spell unless that player pays {1}. -SVar:TrigCounterSpell:DB$ Counter | Defined$ TriggeredSpellAbility | UnlessCost$ 1 | UnlessPayer$ You | SubAbility$ RemoveEffect -SVar:RemoveEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:TrigCounterSpell:DB$ Counter | Defined$ TriggeredSpellAbility | UnlessCost$ 1 | UnlessPayer$ You SVar:SpellsNeedExtraManaEffect:1 T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | Execute$ CounterSpellOpp | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent casts a spell, counter it unless that player pays {1}. SVar:CounterSpellOpp:DB$ Counter | Defined$ TriggeredSpellAbility | UnlessCost$ 1 | UnlessPayer$ TriggeredActivator diff --git a/forge-gui/res/cardsfolder/d/dimensional_breach.txt b/forge-gui/res/cardsfolder/d/dimensional_breach.txt index fb61cbf125a..52d12c030f3 100644 --- a/forge-gui/res/cardsfolder/d/dimensional_breach.txt +++ b/forge-gui/res/cardsfolder/d/dimensional_breach.txt @@ -2,12 +2,9 @@ Name:Dimensional Breach ManaCost:5 W W Types:Sorcery A:SP$ ChangeZoneAll | Cost$ 5 W W | ChangeType$ Permanent | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile all permanents. For as long as any of those cards remain exiled, at the beginning of each player's upkeep, that player returns one of the exiled cards they own to the battlefield. -SVar:DBEffect:DB$ Effect | Triggers$ TrigUpkeep,TrigCleanup | RememberObjects$ Remembered | Duration$ Permanent | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | Triggers$ TrigUpkeep | RememberObjects$ Remembered | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TrigUpkeep:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ BreachReturn | TriggerZones$ Command | TriggerController$ TriggeredPlayer | CheckSVar$ BreachX | SVarCompare$ GE1 | TriggerDescription$ At the beginning of each player's upkeep, that player returns one of the exiled cards they own to the battlefield. SVar:BreachReturn:DB$ ChooseCard | Defined$ TriggeredPlayer | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose a card to return to the battlefield | Choices$ Card.IsRemembered+ActivePlayerCtrl | ChoiceZone$ Exile | SubAbility$ MoveChosen SVar:MoveChosen:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | ForgetChanged$ True -SVar:TrigCleanup:Mode$ Always | CheckSVar$ BreachX | SVarCompare$ EQ0 | Static$ True | Execute$ BreachCleanup | TriggerZones$ Command -SVar:BreachCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile -SVar:BreachX:Count$ValidExile Card.IsRemembered Oracle:Exile all permanents. For as long as any of those cards remain exiled, at the beginning of each player's upkeep, that player returns one of the exiled cards they own to the battlefield. diff --git a/forge-gui/res/cardsfolder/f/flickerform.txt b/forge-gui/res/cardsfolder/f/flickerform.txt index 0b4a34e1f1f..bde87878e84 100644 --- a/forge-gui/res/cardsfolder/f/flickerform.txt +++ b/forge-gui/res/cardsfolder/f/flickerform.txt @@ -3,16 +3,15 @@ ManaCost:1 W Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AITgts$ Creature.nonToken | AILogic$ Pump -A:AB$ Pump | Cost$ 2 W W | Defined$ Enchanted | ImprintCards$ Enchanted | StackDescription$ None | SubAbility$ DBRemAura | SpellDescription$ Exile enchanted creature and all Auras attached to it. At the beginning of the next end step, return that card to the battlefield under its owner's control. If you do, return the other cards exiled this way to the battlefield under their owners' control attached to that creature. +A:AB$ Pump | Cost$ 2 W W | Defined$ Enchanted | ImprintCards$ Enchanted | StackDescription$ SpellDescription | SubAbility$ DBRemAura | SpellDescription$ Exile enchanted creature and all Auras attached to it. At the beginning of the next end step, return that card to the battlefield under its owner's control. If you do, return the other cards exiled this way to the battlefield under their owners' control attached to that creature. SVar:DBRemAura:DB$ PumpAll | ValidCards$ Card.IsImprinted,Aura.AttachedTo Creature.IsImprinted | RememberAllPumped$ True | StackDescription$ None | SubAbility$ DBChangeZoneAll SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsRemembered | SubAbility$ DelayedEffect SVar:DelayedEffect:DB$ Effect | Name$ Flickerform Effect | Triggers$ TrigEOT | RememberObjects$ Remembered | ImprintCards$ Imprinted | Duration$ Permanent | SubAbility$ DBCleanup -SVar:TrigEOT:Mode$ Phase | Phase$ End of Turn | Execute$ FlickerformReturn | TriggerZones$ Command | TriggerDescription$ At the beginning of the next end step, return that card to the battlefield under its owner's control. +SVar:TrigEOT:Mode$ Phase | Phase$ End of Turn | Execute$ FlickerformReturn | OneOff$ True | TriggerZones$ Command | TriggerDescription$ At the beginning of the next end step, return that card to the battlefield under its owner's control. SVar:FlickerformReturn:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered+IsImprinted | Origin$ Exile | Destination$ Battlefield | SubAbility$ ClearImprint SVar:ClearImprint:DB$ Cleanup | ClearImprinted$ True | SubAbility$ FlickerformAttach -SVar:FlickerformAttach:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Aura.IsRemembered | Zone$ Exile | RepeatSubAbility$ DBAllAuraAttach | SubAbility$ FlickerformCleanup +SVar:FlickerformAttach:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Aura.IsRemembered | Zone$ Exile | RepeatSubAbility$ DBAllAuraAttach SVar:DBAllAuraAttach:DB$ ChangeZone | Defined$ Imprinted | Origin$ Exile | Destination$ Battlefield | AttachedTo$ Valid Creature.IsRemembered -SVar:FlickerformCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True AI:RemoveDeck:All SVar:NonStackingAttachEffect:True diff --git a/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt b/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt index d16c7e894d7..2eb5c9440a0 100644 --- a/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt +++ b/forge-gui/res/cardsfolder/g/gideons_sacrifice.txt @@ -2,7 +2,7 @@ Name:Gideon's Sacrifice ManaCost:W Types:Instant A:SP$ ChooseCard | Cost$ W | Choices$ Creature.YouCtrl,Planeswalker.YouCtrl | Mandatory$ True | SubAbility$ DBEffect | SpellDescription$ Choose a creature or planeswalker you control. All damage that would be dealt this turn to you and permanents you control is dealt to the chosen permanent instead (if it's still on the battlefield). -SVar:DBEffect:DB$ Effect | ReplacementEffects$ DamageEvent | ExileOnMoved$ True | RememberObjects$ ChosenCard +SVar:DBEffect:DB$ Effect | ReplacementEffects$ DamageEvent | ExileOnMoved$ Battlefield | RememberObjects$ ChosenCard SVar:DamageEvent:Event$ DamageDone | ActiveZones$ Command | ValidTarget$ You,Permanent.YouCtrl | ReplaceWith$ GideonSac | DamageTarget$ Remembered | Description$ All damage that would be dealt this turn to you and permanents you control is dealt to the chosen permanent instead (if it's still on the battlefield). SVar:GideonSac:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card SVar:NeedsToPlayVar:Z GE1 diff --git a/forge-gui/res/cardsfolder/g/goblin_polka_band.txt b/forge-gui/res/cardsfolder/g/goblin_polka_band.txt index 27265a7ef34..744ae70c4b7 100644 --- a/forge-gui/res/cardsfolder/g/goblin_polka_band.txt +++ b/forge-gui/res/cardsfolder/g/goblin_polka_band.txt @@ -2,7 +2,7 @@ Name:Goblin Polka Band ManaCost:R R Types:Creature Goblin PT:1/1 -A:AB$ Tap | Announce$ TgtNum | AnnounceTitle$ any number of creatures to target | Cost$ X 2 T | XColor$ R | CostDesc$ {2}, {T}: | ValidTgts$ Creature.untapped | TargetMin$ TgtNum | TargetMax$ TgtNum | TargetsAtRandom$ True | RememberTargets$ True | AILogic$ GoblinPolkaBand | SubAbility$ GoblinHangover | SpellDescription$ Tap any number of random target creatures. Goblins tapped in this way do not untap during their controllers' next untap phases. This ability costs {R} more to activate for each target. +A:AB$ Tap | Announce$ TgtNum | AnnounceTitle$ any number of creatures to target | Cost$ X 2 T | XColor$ R | CostDesc$ {2}, {T}: | ValidTgts$ Creature.untapped | TargetMin$ TgtNum | TargetMax$ TgtNum | TargetsAtRandom$ True | RememberTapped$ True | AILogic$ GoblinPolkaBand | SubAbility$ GoblinHangover | SpellDescription$ Tap any number of random target creatures. Goblins tapped in this way do not untap during their controllers' next untap phases. This ability costs {R} more to activate for each target. SVar:GoblinHangover:DB$ PumpAll | ValidCards$ Goblin.IsRemembered | KW$ HIDDEN This card doesn't untap during your next untap step. | Duration$ Permanent SVar:TgtNum:Number$0 SVar:X:SVar$TgtNum diff --git a/forge-gui/res/cardsfolder/g/goblin_ski_patrol.txt b/forge-gui/res/cardsfolder/g/goblin_ski_patrol.txt index 5b33198c76f..f25d60bd29a 100644 --- a/forge-gui/res/cardsfolder/g/goblin_ski_patrol.txt +++ b/forge-gui/res/cardsfolder/g/goblin_ski_patrol.txt @@ -2,6 +2,6 @@ Name:Goblin Ski Patrol ManaCost:1 R Types:Creature Goblin PT:1/1 -A:AB$ Pump | Cost$ 1 R | Defined$ Self | NumAtt$ +2 | KW$ Flying | Duration$ Permanent | ActivationLimit$ 1 | IsPresent$ Mountain.Snow+YouCtrl | AtEOT$ Sacrifice | SpellDescription$ CARDNAME gets +2/+0 and gains flying. Its controller sacrifices it at the beginning of the next end step. Activate only once and only if you control a snow Mountain. +A:AB$ Pump | Cost$ 1 R | Defined$ Self | NumAtt$ +2 | KW$ Flying | Duration$ Permanent | GameActivationLimit$ 1 | IsPresent$ Mountain.Snow+YouCtrl | AtEOT$ SacrificeCtrl | SpellDescription$ CARDNAME gets +2/+0 and gains flying. Its controller sacrifices it at the beginning of the next end step. Activate only once and only if you control a snow Mountain. AI:RemoveDeck:All Oracle:{1}{R}: Goblin Ski Patrol gets +2/+0 and gains flying. Its controller sacrifices it at the beginning of the next end step. Activate only once and only if you control a snow Mountain. diff --git a/forge-gui/res/cardsfolder/h/horn_of_plenty.txt b/forge-gui/res/cardsfolder/h/horn_of_plenty.txt index 063ce5f543c..2399f797d8c 100644 --- a/forge-gui/res/cardsfolder/h/horn_of_plenty.txt +++ b/forge-gui/res/cardsfolder/h/horn_of_plenty.txt @@ -2,9 +2,8 @@ Name:Horn of Plenty ManaCost:6 Types:Artifact T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ DelayedTrigEff | TriggerDescription$ Whenever a player casts a spell, they may pay {1}. If the player does, they draw a card at the beginning of the next end step. -SVar:DelayedTrigEff:DB$ Effect | Triggers$ EOTTrig | RememberObjects$ TriggeredActivator | UnlessCost$ 1 | UnlessPayer$ TriggeredActivator | UnlessSwitched$ True -SVar:EOTTrig:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Command | Execute$ TrigDraw | TriggerDescription$ Draw a card at the beginning of the next end step. -SVar:TrigDraw:DB$ Draw | Defined$ Player.IsRemembered | NumCards$ 1 | SubAbility$ RemoveEff -SVar:RemoveEff:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:DelayedTrigEff:DB$ Effect | Duration$ Permanent | Triggers$ EOTTrig | RememberObjects$ TriggeredActivator | UnlessCost$ 1 | UnlessPayer$ TriggeredActivator | UnlessSwitched$ True +SVar:EOTTrig:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Command | Execute$ TrigDraw | OneOff$ True | TriggerDescription$ Draw a card at the beginning of the next end step. +SVar:TrigDraw:DB$ Draw | Defined$ Player.IsRemembered | NumCards$ 1 AI:RemoveDeck:Random Oracle:Whenever a player casts a spell, they may pay {1}. If the player does, they draw a card at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/i/ixalans_binding.txt b/forge-gui/res/cardsfolder/i/ixalans_binding.txt index 93f461f3cc2..1fed10a8561 100644 --- a/forge-gui/res/cardsfolder/i/ixalans_binding.txt +++ b/forge-gui/res/cardsfolder/i/ixalans_binding.txt @@ -2,12 +2,8 @@ Name:Ixalan's Binding ManaCost:3 W Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target nonland permanent an opponent controls until CARDNAME leaves the battlefield. -SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | ConditionPresent$ Card.Self | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | Triggers$ ComeBack | RememberObjects$ Targeted | ImprintCards$ Self | StaticAbilities$ NoCast | ConditionPresent$ Card.Self | Duration$ Permanent | ForgetOnMoved$ Exile -SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ That permanent is exiled until EFFECTSOURCE leaves the battlefield -SVar:TrigReturn:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered | SubAbility$ ExileSelf -SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self -SVar:NoCast:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card.sharesNameWith Remembered | Caster$ Opponent | Description$ Your opponents can't cast spells with the same name as the exiled card. +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | Duration$ UntilHostLeavesPlay +S:Mode$ CantBeCast | ValidCard$ Card.sharesNameWith ValidExile Card.ExiledWithSource | Caster$ Opponent | Description$ Your opponents can't cast spells with the same name as the exiled card. SVar:PlayMain1:TRUE SVar:OblivionRing:TRUE Oracle:When Ixalan's Binding enters the battlefield, exile target nonland permanent an opponent controls until Ixalan's Binding leaves the battlefield.\nYour opponents can't cast spells with the same name as the exiled card. diff --git a/forge-gui/res/cardsfolder/l/lumbering_battlement.txt b/forge-gui/res/cardsfolder/l/lumbering_battlement.txt index cfa1f75e4fe..f1e5eb647cb 100644 --- a/forge-gui/res/cardsfolder/l/lumbering_battlement.txt +++ b/forge-gui/res/cardsfolder/l/lumbering_battlement.txt @@ -4,18 +4,9 @@ Types:Creature Beast PT:4/5 K:Vigilance T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile any number of other nontoken creatures you control until it leaves the battlefield. -SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | Hidden$ True | ChangeType$ Creature.nonToken+Other+YouCtrl | ChangeNum$ MaxTgts | SelectPrompt$ Choose any number of other nontoken creatures you control | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | Triggers$ ComeBack | RememberObjects$ RememberedCard | ImprintCards$ Self | ConditionPresent$ Card.Self | Duration$ Permanent | ForgetOnMoved$ Exile -SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ That creature is exiled until EFFECTSOURCE leaves the battlefield -SVar:TrigReturn:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered | SubAbility$ ExileSelf -SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Hidden$ True | ChangeType$ Creature.nonToken+Other+YouCtrl | ChangeNum$ MaxTgts | SelectPrompt$ Choose any number of other nontoken creatures you control | Duration$ UntilHostLeavesPlay S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +2/+2 for each card exiled with it. -#Triggers to forget remembered on this -T:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Exile | Destination$ Any | TriggerZones$ Battlefield | Static$ True | Execute$ TrigForget -SVar:TrigForget:DB$ Pump | ForgetObjects$ TriggeredCard -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Static$ True | Execute$ TrigForgetAll -SVar:TrigForgetAll:DB$ Cleanup | ClearRemembered$ True -SVar:X:Count$ValidExile Card.IsRemembered+ExiledWithSource/Times.2 +SVar:X:Count$ValidExile Card.ExiledWithSource/Times.2 SVar:MaxTgts:Count$Valid Creature.nonToken+Other+YouCtrl AI:RemoveDeck:Random Oracle:Vigilance\nWhen Lumbering Battlement enters the battlefield, exile any number of other nontoken creatures you control until it leaves the battlefield.\nLumbering Battlement gets +2/+2 for each card exiled with it. diff --git a/forge-gui/res/cardsfolder/m/mindleecher.txt b/forge-gui/res/cardsfolder/m/mindleecher.txt index f28924e0a19..bada2a96a31 100644 --- a/forge-gui/res/cardsfolder/m/mindleecher.txt +++ b/forge-gui/res/cardsfolder/m/mindleecher.txt @@ -5,12 +5,8 @@ PT:5/5 K:Mutate:4 B K:Flying T:Mode$ Mutates | ValidCard$ Card.Self | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature mutates, exile the top card of each opponent's library face down. You may look at and play those cards for as long as they remain exiled. -SVar:TrigExile:DB$ Mill | Defined$ Player.Opponent | NumCards$ 1 | Destination$ Exile | RememberMilled$ True | ExileFaceDown$ True | NoReveal$ True | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STPlay | Duration$ Permanent | Triggers$ TrigCleanup,TrigCleanup2 | ForgetOnMoved$ Exile | SubAbility$ DBCleanup +SVar:TrigExile:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Defined$ Opponent | DestinationZone$ Exile | RememberChanged$ True | ExileFaceDown$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STPlay | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:STPlay:Mode$ Continuous | MayLookAt$ You | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may look at and play a card as long as it remains exiled. -SVar:TrigCleanup:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Exile | Destination$ Any | TriggerZones$ Command | Execute$ DBExileSelf | Static$ True -SVar:TrigCleanup2:Mode$ Phase | Phase$ Cleanup | Static$ True | CheckSVar$ X | SVarCompare$ EQ0 | Execute$ DBExileSelf -SVar:DBExileSelf:DB$ ChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | Defined$ Self | Origin$ Command | Destination$ Exile -SVar:X:Count$ValidExile Card.IsRemembered Oracle:Mutate {4}{B} (If you cast this spell for its mutate cost, put it over or under target non-Human creature you own. They mutate into the creature on top plus all abilities from under it.)\nFlying\nWhenever this creature mutates, exile the top card of each opponent's library face down. You may look at and play those cards for as long as they remain exiled. diff --git a/forge-gui/res/cardsfolder/m/mnemonic_betrayal.txt b/forge-gui/res/cardsfolder/m/mnemonic_betrayal.txt index 341609189ce..53b291b5c15 100644 --- a/forge-gui/res/cardsfolder/m/mnemonic_betrayal.txt +++ b/forge-gui/res/cardsfolder/m/mnemonic_betrayal.txt @@ -2,7 +2,7 @@ Name:Mnemonic Betrayal ManaCost:1 U B Types:Sorcery A:SP$ ChangeZoneAll | Cost$ 1 U B | Defined$ Player.Opponent | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile all card from all opponents' graveyards. You may cast those cards this turn, and you may spend it as though it were mana of any type to cast those spells. At the beginning of the next end step, if any of those cards remain exiled, return them to their owner's graveyards. Exile CARDNAME. -SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DelTrig +SVar:DBEffect:DB$ Effect | Duration$ Permanent | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DelTrig SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreType$ True | EffectZone$ Command | Affected$ Card.nonLand+IsRemembered | AffectedZone$ Exile | Description$ You may cast those cards this turn, and you may spend mana as though it were mana of any type to cast those spells. SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ RememberedLKI | TriggerDescription$ At the beginning of the next end step, if any of those cards remain exiled, return them to their owner's graveyards. | SubAbility$ ExileSelf SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Graveyard diff --git a/forge-gui/res/cardsfolder/o/obzedat_ghost_council.txt b/forge-gui/res/cardsfolder/o/obzedat_ghost_council.txt index 8b512141482..8f1da8421b5 100644 --- a/forge-gui/res/cardsfolder/o/obzedat_ghost_council.txt +++ b/forge-gui/res/cardsfolder/o/obzedat_ghost_council.txt @@ -8,8 +8,7 @@ SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigExile | OptionalDecider$ You | TriggerDescription$ At the beginning of your end step you may exile NICKNAME. If you do, return it to the battlefield under it's owner's control at the beginning of your next upkeep. It gains haste. SVar:TrigExile:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBDelaytrig SVar:DBDelaytrig:DB$ Effect | Name$ Obzedat Effect | Triggers$ TrigEOT | RememberObjects$ Self | Duration$ Permanent -SVar:TrigEOT:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ ObzedatReturn | TriggerDescription$ Return CARDNAME to the battlefield under it's owner's control. It gains haste. +SVar:TrigEOT:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ ObzedatReturn | OneOff$ True | TriggerDescription$ Return CARDNAME to the battlefield under it's owner's control. It gains haste. SVar:ObzedatReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ ObzedatPump -SVar:ObzedatPump:DB$ Pump | Defined$ Remembered | KW$ Haste | Duration$ Permanent | SubAbility$ ObzedatCleanup -SVar:ObzedatCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:ObzedatPump:DB$ Pump | Defined$ Remembered | KW$ Haste | Duration$ Permanent Oracle:When Obzedat, Ghost Council enters the battlefield, target opponent loses 2 life and you gain 2 life.\nAt the beginning of your end step, you may exile Obzedat. If you do, return it to the battlefield under its owner's control at the beginning of your next upkeep. It gains haste. diff --git a/forge-gui/res/cardsfolder/upcoming/dynaheir_invoker_adept.txt b/forge-gui/res/cardsfolder/upcoming/dynaheir_invoker_adept.txt index cdde32ee1ed..baccb44c80d 100644 --- a/forge-gui/res/cardsfolder/upcoming/dynaheir_invoker_adept.txt +++ b/forge-gui/res/cardsfolder/upcoming/dynaheir_invoker_adept.txt @@ -5,8 +5,7 @@ PT:4/4 K:Haste S:Mode$ ActivateAbilityAsIfHaste | ValidCard$ Creature.Other+YouCtrl+inZoneBattlefield | Description$ You may activate abilities of other creatures you control as though those creatures had haste. A:AB$ Effect | Cost$ T | Triggers$ ActivateTrig | SpellDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. -SVar:ActivateTrig:Mode$ AbilityCast | ValidSA$ SpellAbility.nonManaAbility+ManaSpent GE4 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. -SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | SubAbility$ DBExileSelf -SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:ActivateTrig:Mode$ AbilityCast | ValidSA$ SpellAbility.nonManaAbility+ManaSpent GE4 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopy | OneOff$ True | TriggerDescription$ When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. +SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True SVar:BuffedBy:Creature.hasActivatedAbility Oracle:Haste\nYou may activate abilities of other creatures you control as though those creatures had haste.\n{T}: When you next activate an ability that isn't a mana ability this turn by spending four or more mana to activate it, copy that ability. You may choose new targets for the copy. diff --git a/forge-gui/res/cardsfolder/v/vines_of_vastwood.txt b/forge-gui/res/cardsfolder/v/vines_of_vastwood.txt index d7f7ace9fc7..42e8b30f317 100644 --- a/forge-gui/res/cardsfolder/v/vines_of_vastwood.txt +++ b/forge-gui/res/cardsfolder/v/vines_of_vastwood.txt @@ -3,9 +3,7 @@ ManaCost:G Types:Instant K:Kicker:G A:SP$ Pump | Cost$ G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ X | NumDef$ X | SubAbility$ DBEffect | SpellDescription$ Target creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn. -SVar:DBEffect:DB$ Effect | Defined$ Targeted | AILogic$ Always | StaticAbilities$ STCantTarget | RememberObjects$ Targeted | Triggers$ TrigCleanup +SVar:DBEffect:DB$ Effect | Defined$ Targeted | AILogic$ Always | StaticAbilities$ STCantTarget | RememberObjects$ Targeted | ExileOnMoved$ Battlefield SVar:STCantTarget:Mode$ CantTarget | EffectZone$ Command | ValidCard$ Card.IsRemembered | Activator$ Player.Opponent | Description$ Target creature can't be the target of spells or abilities your opponents control this turn. -SVar:TrigCleanup:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ DBCleanup | Static$ True -SVar:DBCleanup:DB$ ChangeZone | Origin$ Command | Destination$ Exile SVar:X:Count$Kicked.4.0 Oracle:Kicker {G} (You may pay an additional {G} as you cast this spell.)\nTarget creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn. diff --git a/forge-gui/res/cardsfolder/z/zevlor_elturel_exile.txt b/forge-gui/res/cardsfolder/z/zevlor_elturel_exile.txt index 13f096f29ae..a8539b97bba 100644 --- a/forge-gui/res/cardsfolder/z/zevlor_elturel_exile.txt +++ b/forge-gui/res/cardsfolder/z/zevlor_elturel_exile.txt @@ -4,10 +4,9 @@ Types:Legendary Creature Tiefling Warrior PT:4/2 K:Haste A:AB$ Effect | Cost$ 2 T | Triggers$ SpellCast | SpellDescription$ When you next cast an instant or sorcery spell that targets only a single opponent or a single permanent an opponent controls this turn, for each other opponent, choose that player or a permanent they control, copy that spell, and the copy targets the chosen player or permanent. -SVar:SpellCast:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | IsSingleTarget$ True | TargetsValid$ Opponent,Permanent.OppCtrl | Execute$ TrigRepeat | TriggerZones$ Battlefield | TriggerDescription$ When you next cast an instant or sorcery spell that targets only a single opponent or a single permanent an opponent controls this turn, for each other opponent, choose that player or a permanent they control, copy that spell, and the copy targets the chosen player or permanent. -SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ OppNonTriggeredSpellAbilityTargetOrController | RepeatSubAbility$ DBCopy | SubAbility$ ExileSelf +SVar:SpellCast:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | IsSingleTarget$ True | TargetsValid$ Opponent,Permanent.OppCtrl+inZoneBattlefield | Execute$ TrigRepeat | OneOff$ True | TriggerZones$ Battlefield | TriggerDescription$ When you next cast an instant or sorcery spell that targets only a single opponent or a single permanent an opponent controls this turn, for each other opponent, choose that player or a permanent they control, copy that spell, and the copy targets the chosen player or permanent. +SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ OppNonTriggeredSpellAbilityTargetOrController | RepeatSubAbility$ DBCopy SVar:DBCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ You | CopyForEachCanTarget$ Player.IsRemembered,Permanent.RememberedPlayerCtrl | ChooseOnlyOne$ True -SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self DeckNeeds:Type$Instant|Sorcery AI:RemoveDeck:Random Oracle:Haste\n{2}, {T}: When you next cast an instant or sorcery spell that targets only a single opponent or a single permanent an opponent controls this turn, for each other opponent, choose that player or a permanent they control, copy that spell, and the copy targets the chosen player or permanent.