diff --git a/forge-game/src/main/java/forge/game/ability/ApiType.java b/forge-game/src/main/java/forge/game/ability/ApiType.java index af91ff5d542..5db6e18ac9d 100644 --- a/forge-game/src/main/java/forge/game/ability/ApiType.java +++ b/forge-game/src/main/java/forge/game/ability/ApiType.java @@ -188,7 +188,8 @@ public enum ApiType { ChangeZoneResolve (ChangeZoneResolveEffect.class), InternalEtbReplacement (ETBReplacementEffect.class), InternalLegendaryRule (CharmEffect.class), - InternalIgnoreEffect (CharmEffect.class); + InternalIgnoreEffect (CharmEffect.class), + UpdateRemember (UpdateRememberEffect.class); private final SpellAbilityEffect instanceEffect; diff --git a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java index a29fe2bb548..7301ce9f0d6 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java @@ -2,6 +2,7 @@ package forge.game.ability.effects; import forge.StaticData; import forge.game.Game; +import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardCollection; @@ -13,6 +14,7 @@ public class MakeCardEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { for (final Player player : getTargetPlayers(sa)) { + final Card source = sa.getHostCard(); final Game game = player.getGame(); String name = sa.getParamOrDefault("Name", ""); @@ -22,7 +24,9 @@ public class MakeCardEffect extends SpellAbilityEffect { } else { continue; } - + } + if (sa.hasParam("DefinedName")) { + name = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedName"), sa).getFirst().getName(); } final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Library")); int amount = sa.hasParam("Amount") ? Integer.parseInt(sa.getParam("Amount")) : 1; diff --git a/forge-game/src/main/java/forge/game/ability/effects/UpdateRememberEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UpdateRememberEffect.java new file mode 100644 index 00000000000..0401bd71405 --- /dev/null +++ b/forge-game/src/main/java/forge/game/ability/effects/UpdateRememberEffect.java @@ -0,0 +1,13 @@ +package forge.game.ability.effects; + +import forge.game.ability.SpellAbilityEffect; +import forge.game.card.Card; +import forge.game.spellability.SpellAbility; + +public class UpdateRememberEffect extends SpellAbilityEffect { + @Override + public void resolve(SpellAbility sa) { + final Card host = sa.getHostCard(); + host.updateRemembered(); + } +} diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 179d090c15b..443be2eeae7 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1038,6 +1038,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { rememberedObjects.clear(); view.updateRemembered(this); } + public final void updateRemembered() { + view.updateRemembered(this); + } public final CardCollectionView getImprintedCards() { return CardCollection.getView(imprintedCards); diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 43a103b3460..e49fdd5b69f 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -2,6 +2,7 @@ package forge.game.card; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import forge.StaticData; import forge.card.CardDb; import forge.card.ColorSet; @@ -33,6 +34,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.Collections; import java.util.List; +import java.util.Set; public class CardProperty { @@ -761,6 +763,17 @@ public class CardProperty { return false; } } + } else if (property.equals("Party")) { + boolean isParty = false; + Set partyTypes = Sets.newHashSet("Cleric", "Rogue", "Warrior", "Wizard"); + Set cTypes = card.getType().getCreatureTypes(); + for (String t : partyTypes) { + if (cTypes.contains(t)) { + isParty = true; + break; + } + } + return isParty; } else if (property.startsWith("sharesCreatureTypeWith")) { if (property.equals("sharesCreatureTypeWith")) { if (!card.sharesCreatureTypeWith(source)) { diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 5cced7cc806..da699e64b8c 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -442,8 +442,16 @@ public class CardView extends GameEntityView { sb.append("\r\nRemembered: \r\n"); for (final Object o : c.getRemembered()) { if (o != null) { - sb.append(o.toString()); - sb.append("\r\n"); + if (o instanceof Card && c.isImmutable() && c.getName().contains("Perpetual Effect")) { + Card rc = (Card) o; + if (!rc.getGame().getCardState(rc).getZone().getZoneType().isHidden()) { + sb.append(o.toString()); + sb.append("\r\n"); + } + } else { + sb.append(o.toString()); + sb.append("\r\n"); + } } } set(TrackableProperty.Remembered, sb.toString()); diff --git a/forge-gui/res/cardsfolder/f/freyalise_skyshroud_partisan.txt b/forge-gui/res/cardsfolder/f/freyalise_skyshroud_partisan.txt index 272a8373f80..56acd8667d7 100644 --- a/forge-gui/res/cardsfolder/f/freyalise_skyshroud_partisan.txt +++ b/forge-gui/res/cardsfolder/f/freyalise_skyshroud_partisan.txt @@ -2,10 +2,10 @@ Name:Freyalise, Skyshroud Partisan ManaCost:1 G G Types:Legendary Planeswalker Freyalise Loyalty:4 -A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Elf | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBRandom | StackDescription$ SpellDescription | SpellDescription$ Choose up to one target Elf. Untap it. It and a random Elf creature card in your hand each perpetually gets +1/+1. +A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Elf | TgtPrompt$ Select up to one target Elf | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBRandom | StackDescription$ SpellDescription | SpellDescription$ Choose up to one target Elf. Untap it. It and a random Elf creature card in your hand each perpetually gets +1/+1. SVar:DBRandom:DB$ ChooseCard | Defined$ You | Choices$ Elf.YouOwn | ChoiceZone$ Hand | AtRandom$ True | Amount$ 1 | SubAbility$ DBEffect | StackDescription$ None -SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted,ChosenCard | StaticAbilities$ PerpetualP1P1 | Name$ Freyalise, Skyshroud Partisan's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.IsRemembered | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ These cards perpetually get +1/+1. +SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ PerpetualP1P1 | Name$ Freyalise, Skyshroud Partisan's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup +SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.IsRemembered,Card.ChosenCard | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The target Elf and randomly chosen card perpetually get +1/+1. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True A:AB$ ChangeZone | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.Elf | ChangeNum$ 1 | StackDescription$ SpellDescription | SpellDescription$ Seek an Elf card. A:AB$ MakeCard | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Regal Force | Zone$ Battlefield | SpellDescription$ Conjure a Regal Force card onto the battlefield. diff --git a/forge-gui/res/cardsfolder/l/leonin_sanctifier.txt b/forge-gui/res/cardsfolder/l/leonin_sanctifier.txt index 9d88a1a17e4..02181d8b91c 100644 --- a/forge-gui/res/cardsfolder/l/leonin_sanctifier.txt +++ b/forge-gui/res/cardsfolder/l/leonin_sanctifier.txt @@ -6,7 +6,7 @@ K:Lifelink T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose a creature card in your hand. It perpetually gains lifelink. SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose a creature card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualLifelink | Name$ Leonin Sanctifier's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualLifelink:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Lifelink | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gains lifelink. +SVar:PerpetualLifelink:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Lifelink | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains lifelink. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True DeckHas:Ability$LifeGain Oracle:Lifelink\nWhen Leonin Sanctifier enters the battlefield, choose a creature card in your hand. It perpetually gains lifelink. diff --git a/forge-gui/res/cardsfolder/l/longtusk_stalker.txt b/forge-gui/res/cardsfolder/l/longtusk_stalker.txt index 31b04e3e598..6c83240b25b 100644 --- a/forge-gui/res/cardsfolder/l/longtusk_stalker.txt +++ b/forge-gui/res/cardsfolder/l/longtusk_stalker.txt @@ -8,7 +8,7 @@ SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum A:AB$ Effect | Cost$ PayEnergy<2> | StaticAbilities$ SelfPerpetualP1P0 | Name$ Longtusk Stalker's Perpetual Effect | Duration$ Permanent | SubAbility$ DBChooseCard | SpellDescription$ CARDNAME perpetually gets +1/+0. You may choose a creature card in your hand. If you do, that card perpetually gets +1/+0. SVar:SelfPerpetualP1P0:Mode$ Continuous | Affected$ Card.EffectSource | AddPower$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ EFFECTSOURCE perpetually gets +1/+0. SVar:DBChooseCard:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose up to one creature card in your hand | MinAmount$ 0 | Amount$ 1 | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | ConditionDefined$ ChosenCard | ConditionPresent$ Card | StaticAbilities$ PerpetualP1P0 | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualP1P0:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gets +1/+0. +SVar:DBEffect:DB$ Effect | ConditionDefined$ ChosenCard | ConditionPresent$ Card | StaticAbilities$ PerpetualP1P0 | Name$ Longtusk Stalker's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup +SVar:PerpetualP1P0:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gets +1/+0. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True Oracle:Whenever Longtusk Stalker enters the battlefield or attacks, you get {E}.\nPay {E}{E}: Longtusk Stalker perpetually gets +1/+0. You may choose a creature card in your hand. If you do, that card perpetually gets +1/+0. diff --git a/forge-gui/res/cardsfolder/m/mentor_of_evos_isle.txt b/forge-gui/res/cardsfolder/m/mentor_of_evos_isle.txt index cdf6e7a9837..d75a2ef55de 100644 --- a/forge-gui/res/cardsfolder/m/mentor_of_evos_isle.txt +++ b/forge-gui/res/cardsfolder/m/mentor_of_evos_isle.txt @@ -6,6 +6,6 @@ K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose a creature card in your hand. It perpetually gains flying. SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose a creature card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualFlying | Name$ Mentor of Evos Isle's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualFlying:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Flying | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gains flying. +SVar:PerpetualFlying:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Flying | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains flying. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True Oracle:Flying\nWhen Mentor of Evos Isle enters the battlefield, choose a creature card in your hand. It perpetually gains flying. diff --git a/forge-gui/res/cardsfolder/p/plaguecrafters_familiar.txt b/forge-gui/res/cardsfolder/p/plaguecrafters_familiar.txt index dc23d41e976..68f7075fcf5 100644 --- a/forge-gui/res/cardsfolder/p/plaguecrafters_familiar.txt +++ b/forge-gui/res/cardsfolder/p/plaguecrafters_familiar.txt @@ -6,6 +6,6 @@ K:Deathtouch T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose a creature card in your hand. It perpetually gains deathtouch. SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose a creature card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualDeathtouch | Name$ Plaguecrafter's Familiar's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualDeathtouch:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Deathtouch | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gains deathtouch. +SVar:PerpetualDeathtouch:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Deathtouch | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains deathtouch. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True Oracle:Deathtouch\nWhen Plaguecrafter's Familiar enters the battlefield, choose a creature card in your hand. It perpetually gains deathtouch. diff --git a/forge-gui/res/cardsfolder/r/reckless_ringleader.txt b/forge-gui/res/cardsfolder/r/reckless_ringleader.txt index a09655ae3d0..515331db821 100644 --- a/forge-gui/res/cardsfolder/r/reckless_ringleader.txt +++ b/forge-gui/res/cardsfolder/r/reckless_ringleader.txt @@ -6,6 +6,6 @@ K:Haste T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose a creature card in your hand. It perpetually gains haste. SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose a creature card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualHaste | Name$ Reckless Ringleader's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualHaste:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Haste | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gains haste. +SVar:PerpetualHaste:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Haste | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains haste. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True Oracle:Haste\nWhen Reckless Ringleader enters the battlefield, choose a creature card in your hand. It perpetually gains haste. diff --git a/forge-gui/res/cardsfolder/s/sarkhan_wanderer_to_shiv.txt b/forge-gui/res/cardsfolder/s/sarkhan_wanderer_to_shiv.txt index aa3fb1b50ee..455e7a4dc0a 100644 --- a/forge-gui/res/cardsfolder/s/sarkhan_wanderer_to_shiv.txt +++ b/forge-gui/res/cardsfolder/s/sarkhan_wanderer_to_shiv.txt @@ -2,11 +2,12 @@ Name:Sarkhan, Wanderer to Shiv ManaCost:3 R Types:Legendary Planeswalker Sarkhan Loyalty:4 -A:AB$ PumpAll | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidCards$ Dragon.YouOwn | RememberAllPumped$ True | PumpZone$ Hand | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ DragonReduceCost,DragonAltCost | Duration$ Permanent | Name$ Sarkhan, Wanderer to Shiv's Perpetual Effect | SubAbility$ DBCleanup | SpellDescription$ Dragon cards in your hand perpetually gain "This spell costs {1} less to cast," and "You may pay {X} rather than pay this spell's mana cost, where X is its mana value." -SVar:DragonReduceCost:Mode$ ReduceCost | ValidCard$ Card.IsRemembered | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. -SVar:DragonAltCost:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Alternative Cost:ConvertedManaCost | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ You may pay {X} rather than pay this spell's mana cost, where X is its mana value. -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +A:AB$ Effect | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | RememberObjects$ ValidHand Dragon.YouOwn | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Sarkhan, Wanderer to Shiv's Perpetual Effect | SpellDescription$ Dragon cards in your hand perpetually gain "This spell costs {1} less to cast," and "You may pay {X} rather than pay this spell's mana cost, where X is its mana value." +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ DragonReduceCost & DragonAltCost | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Dragon cards in your hand perpetually gain "This spell costs {1} less to cast," and "You may pay {X} rather than pay this spell's mana cost, where X is its mana value." +SVar:DragonReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. +SVar:DragonAltCost:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:ConvertedManaCost | Description$ You may pay {X} rather than pay this spell's mana cost, where X is its mana value. +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember A:AB$ MakeCard | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Name$ Shivan Dragon | Zone$ Hand | SpellDescription$ Conjure a Shivan Dragon card into your hand. A:AB$ DealDamage | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 3 | SpellDescription$ CARDNAME deals 3 damage to target creature. DeckHints:Type$Dragon diff --git a/forge-gui/res/cardsfolder/t/tome_of_the_infinite.txt b/forge-gui/res/cardsfolder/t/tome_of_the_infinite.txt index 9fd7194ce02..53b4d0c8107 100644 --- a/forge-gui/res/cardsfolder/t/tome_of_the_infinite.txt +++ b/forge-gui/res/cardsfolder/t/tome_of_the_infinite.txt @@ -2,8 +2,12 @@ Name:Tome of the Infinite ManaCost:2 U Types:Legendary Artifact A:AB$ NameCard | Cost$ U T | Defined$ You | AtRandom$ True | ChooseFromList$ Light of Hope,Swords to Plowshares,Force Spike,Ponder,Dark Ritual,Duress,Assault Strobe,Lightning Bolt,Fog,Giant Growth | SubAbility$ DBConjure | StackDescription$ SpellDescription | SpellDescription$ Conjure a random card from CARDNAME's spellbook into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." -SVar:DBConjure:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | RememberMade$ True | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ SpendAnyMana | Duration$ Permanent | Name$ Tome of the Infinite's Perpetual Effect | SubAbility$ DBCleanup -SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True +SVar:DBConjure:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | RememberMade$ True | SubAbility$ DBClearName +SVar:DBClearName:DB$ Cleanup | ClearNamedCard$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Tome of the Infinite's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | AddStaticAbility$ SpendAnyMana | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The conjured card perpetually gains "You may spend mana as though it were mana of any color to cast this spell." +SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AffectedZone$ Stack | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember Oracle:{U}, {T}: Conjure a random card from Tome of the Infinite's spellbook into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." diff --git a/forge-gui/res/cardsfolder/upcoming/absorb_energy.txt b/forge-gui/res/cardsfolder/upcoming/absorb_energy.txt new file mode 100644 index 00000000000..5394ec2fda4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/absorb_energy.txt @@ -0,0 +1,11 @@ +Name:Absorb Energy +ManaCost:1 U U +Types:Instant +A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | RememberCountered$ True | SubAbility$ DBEffect | SpellDescription$ Counter target spell. +SVar:DBEffect:DB$ Effect | ImprintCards$ Remembered | RememberObjects$ ValidHand Card.YouOwn+sharesCardTypeWith Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Absorb Energy's Perpetual Effect | SubAbility$ DBCleanup | SpellDescription$ Cards in your hand that share a card type with that spell perpetually gain "This spell costs {1} less to cast." +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ PerpetualReduceCost | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Cards in your hand that share a card type with that [imprinted] spell perpetually gain "This spell costs {1} less to cast." +SVar:PerpetualReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Counter target spell. Cards in your hand that share a card type with that spell perpetually gain "This spell costs {1} less to cast." diff --git a/forge-gui/res/cardsfolder/upcoming/angel_of_unity.txt b/forge-gui/res/cardsfolder/upcoming/angel_of_unity.txt new file mode 100644 index 00000000000..f001839b588 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/angel_of_unity.txt @@ -0,0 +1,16 @@ +Name:Angel of Unity +ManaCost:1 W +Types:Creature Angel Cleric +PT:1/3 +K:Flying +K:Lifelink +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ Whenever CARDNAME enters the battlefield or you cast a party spell, choose a party creature card in your hand. It perpetually gets +1/+1. (A party card or spell is a Cleric, Rogue, Warrior, or Wizard.) +T:Mode$ SpellCast | ValidCard$ Card.Party | ValidActivatingPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or you cast a party spell, choose a party creature card in your hand. It perpetually gets +1/+1. (A party card or spell is a Cleric, Rogue, Warrior, or Wizard.) +SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Creature.Party+YouOwn | ChoiceTitle$ Choose a party creature card in your hand | Amount$ 1 | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualP1P1 | Name$ Angel of Unity's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup +SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gets +1/+1. +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +DeckHas:Ability$Party & Ability$LifeGain +SVar:BuffedBy:Cleric,Rogue,Warrior,Wizard +DeckHints:Type$Rogue|Warrior|Wizard +Oracle:Flying, lifelink\nWhenever Angel of Unity enters the battlefield or you cast a party spell, choose a party creature card in your hand. It perpetually gets +1/+1. (A party card or spell is a Cleric, Rogue, Warrior, or Wizard.) diff --git a/forge-gui/res/cardsfolder/upcoming/antique_collector.txt b/forge-gui/res/cardsfolder/upcoming/antique_collector.txt new file mode 100644 index 00000000000..da1111ba074 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/antique_collector.txt @@ -0,0 +1,16 @@ +Name:Antique Collector +ManaCost:1 G +Types:Creature Human Rogue +PT:2/2 +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.powerLE2 | Description$ CARDNAME can't be blocked by creatures with power 2 or less. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME enters the battlefield, creatures you control perpetually gain "When this creature dies, you may shuffle it into its owner's library if it's in your graveyard. If you do, investigate." +SVar:TrigEffect:DB$ Effect | RememberObjects$ Valid Creature.YouCtrl | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Antique Collector's Perpetual Effect +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddTrigger$ DiesTrigger | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Creatures you control perpetually gain "When this creature dies, you may shuffle it into its owner's library if it's in your graveyard. If you do, investigate." +SVar:DiesTrigger:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | OptionalDecider$ You | TriggerDescription$ When this creature dies, you may shuffle it into its owner's library if it's in your graveyard. If you do, investigate. +SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredNewCardLKICopy | RememberChanged$ True | SubAbility$ DBInvestigate +SVar:DBInvestigate:DB$ Investigate | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +DeckHas:Ability$Investigate & Ability$Token +Oracle:Antique Collector can't be blocked by creatures with power 2 or less.\nWhen Antique Collector enters the battlefield, creatures you control perpetually gain "When this creature dies, you may shuffle it into its owner's library if it's in your graveyard. If you do, investigate." diff --git a/forge-gui/res/cardsfolder/upcoming/assemble_from_parts.txt b/forge-gui/res/cardsfolder/upcoming/assemble_from_parts.txt new file mode 100644 index 00000000000..9700321209f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/assemble_from_parts.txt @@ -0,0 +1,10 @@ +Name:Assemble from Parts +ManaCost:B +Types:Instant +A:SP$ Effect | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature card in your graveyard | StaticAbilities$ Assembly | RememberObjects$ Targeted | Name$ Assemble from Part's Perpetual Effect | Duration$ Permanent | StackDescription$ {c:Targeted} perpetually gains "{3} {B}, Exile this card from your graveyard: Shuffle it into your library. Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. Activate only as a sorcery." | SpellDescription$ Target creature card in your graveyard perpetually gains "{3} {B}, Exile this card from your graveyard: Shuffle it into your library. Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. Activate only as a sorcery." +SVar:Assembly:Mode$ Continuous | Affected$ Card.IsRemembered | AddAbility$ ABShuffle | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Target creature card in your graveyard perpetually gains "{3} {B}, Exile this card from your graveyard: Shuffle it into your library. Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. Activate only as a sorcery." +SVar:ABShuffle:AB$ ChangeZone | Cost$ 3 B ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | Origin$ All | Destination$ Library | Shuffle$ True | Defined$ Self | SubAbility$ DBCopy | SorcerySpeed$ True | StackDescription$ Shuffle CARDNAME into your library. | SpellDescription$ Shuffle it into your library. Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. Activate only as a sorcery. +SVar:DBCopy:DB$ CopyPermanent | Defined$ Self | SetPower$ 4 | SetToughness$ 4 | AddTypes$ Zombie | SetColor$ Black | StackDescription$ Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. +SVar:AIPreference:ExileFromGraveCost$Creature.YouOwn+inZoneGraveyard +DeckHas:Ability$Token & Ability$Graveyard +Oracle:Target creature card in your graveyard perpetually gains "{3} {B}, Exile this card from your graveyard: Shuffle it into your library. Create a token that's a copy of it, except it's a 4/4 black Zombie in addition to its other types. Activate only as a sorcery." diff --git a/forge-gui/res/cardsfolder/upcoming/begin_anew.txt b/forge-gui/res/cardsfolder/upcoming/begin_anew.txt new file mode 100644 index 00000000000..ca8c9228eef --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/begin_anew.txt @@ -0,0 +1,9 @@ +Name:Begin Anew +ManaCost:G G W W +Types:Sorcery +A:SP$ DestroyAll | ValidCards$ Creature | SubAbility$ DBEffect | SpellDescription$ Destroy all creatures. +SVar:DBEffect:DB$ Effect | RememberObjects$ ValidHand Creature.YouOwn | StaticAbilities$ PerpetualP1P1 | Duration$ Permanent | Triggers$ Update | Name$ Begin Anew's Perpetual Effect | SpellDescription$ Creature cards in your hand perpetually get +1/+1. +SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.IsRemembered | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Creature cards in your hand perpetually get +1/+1. +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +Oracle:Destroy all creatures. Creature cards in your hand perpetually get +1/+1. diff --git a/forge-gui/res/cardsfolder/upcoming/brittle_blast.txt b/forge-gui/res/cardsfolder/upcoming/brittle_blast.txt new file mode 100644 index 00000000000..6d7be329746 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brittle_blast.txt @@ -0,0 +1,10 @@ +Name:Brittle Blast +ManaCost:2 R +Types:Instant +A:SP$ Effect | RememberObjects$ Valid Creature.OppCtrl,Valid Planeswalker.OppCtrl | StaticAbilities$ MakeBrittle | Duration$ Permanent | Name$ Brittle Blast's Perpetual Effect | SubAbility$ DBDamage | SpellDescription$ Creatures and planeswalkers your opponents control perpetually gain "If this permanent would die, exile it instead." +SVar:MakeBrittle:Mode$ Continuous | Affected$ Card.IsRemembered | AddReplacementEffects$ BrittleExile | AddSVar$ BrittleRep | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Creatures and planeswalkers your opponents control perpetually gain "If this permanent would die, exile it instead." +SVar:BrittleExile:Event$ Moved | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | ReplaceWith$ BrittleRep | Description$ If this permanent would die, exile it instead. +SVar:BrittleRep:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 5 | SpellDescription$ CARDNAME deals 5 damage to target creature or planeswalker. +SVar:PlayMain1:TRUE +Oracle:Creatures and planeswalkers your opponents control perpetually gain "If this permanent would die, exile it instead." Brittle Blast deals 5 damage to target creature or planeswalker. diff --git a/forge-gui/res/cardsfolder/upcoming/clone_crafter.txt b/forge-gui/res/cardsfolder/upcoming/clone_crafter.txt new file mode 100644 index 00000000000..862e76e58f9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/clone_crafter.txt @@ -0,0 +1,15 @@ +Name:Clone Crafter +ManaCost:1 U +Types:Creature Human Wizard +PT:1/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ Whenever CARDNAME enters the battlefield, conjure a duplicate of a random creature card from your opponent's library into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." +SVar:TrigChoose:DB$ ChooseCard | Choices$ Creature.OppCtrl | ChoiceZone$ Library | AtRandom$ True | SubAbility$ DBConjure +SVar:DBConjure:DB$ MakeCard | DefinedName$ ChosenCard | Zone$ Hand | RememberMade$ True | SubAbility$ DBClearChosen +SVar:DBClearChosen:DB$ Cleanup | ClearChosenCard$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Clone Crafter's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | AddStaticAbility$ SpendAnyMana | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The conjured card perpetually gains "You may spend mana as though it were mana of any color to cast this spell." +SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AffectedZone$ Stack | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +Oracle:When Clone Crafter enters the battlefield, conjure a duplicate of a random creature card from your opponent's library into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." diff --git a/forge-gui/res/cardsfolder/upcoming/conductive_current.txt b/forge-gui/res/cardsfolder/upcoming/conductive_current.txt new file mode 100644 index 00000000000..b8dc2e6fbae --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/conductive_current.txt @@ -0,0 +1,12 @@ +Name:Conductive Current +ManaCost:R R R +Types:Sorcery +A:SP$ DamageAll | NumDmg$ 3 | ValidCards$ Creature | ValidDescription$ each creature. | SubAbility$ DBChoose | SpellDescription$ CARDNAME deals 3 damage to each creature. +SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Instant.YouOwn,Sorcery.YouOwn | ChoiceTitle$ Choose an instant or sorcery card in your hand | Amount$ 1 | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Name$ Conductive Current's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddReplacementEffects$ PerpDamageRep | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains "If this spell would deal noncombat damage to a permanent or player, it deals that much damage plus 2 instead." +SVar:PerpDamageRep:Event$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Permanent,Player | ReplaceWith$ DmgPlus2 | Description$ If this spell would deal noncombat damage to a permanent or player, it deals that much damage plus 2 instead. +SVar:DmgPlus2:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X +SVar:X:ReplaceCount$DamageAmount/Plus.2 +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +Oracle:Conductive Current deals 3 damage to each creature. Choose an instant or sorcery card in your hand. It perpetually gains "If this spell would deal noncombat damage to a permanent or player, it deals that much damage plus 2 instead." diff --git a/forge-gui/res/cardsfolder/upcoming/discover_the_formula.txt b/forge-gui/res/cardsfolder/upcoming/discover_the_formula.txt new file mode 100644 index 00000000000..81c3ad361a1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/discover_the_formula.txt @@ -0,0 +1,10 @@ +Name:Discover the Formula +ManaCost:4 U U +Types:Instant +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeNum$ 3 | ChangeType$ Card.nonLand | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Seek three nonland cards, then nonland cards in your hand perpetually gain "This spell costs {1} less to cast." +SVar:DBEffect:DB$ Effect | RememberObjects$ ValidHand Card.nonLand+YouOwn | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Discover the Formula's Perpetual Effect +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ ReduceCost | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Each nonland card in your hand perpetually gains "This spell costs {1} less to cast." +SVar:ReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +Oracle:Seek three nonland cards, then nonland cards in your hand perpetually gain "This spell costs {1} less to cast." diff --git a/forge-gui/res/cardsfolder/upcoming/divine_purge.txt b/forge-gui/res/cardsfolder/upcoming/divine_purge.txt new file mode 100644 index 00000000000..874b96335ef --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/divine_purge.txt @@ -0,0 +1,12 @@ +Name:Divine Purge +ManaCost:1 W W +Types:Sorcery +A:SP$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Artifact.powerLE3,Creature.powerLE3 | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile all artifacts and creatures with mana value 3 or less. They perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped." For as long as each of them remain exiled, its owner may play it. +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Name$ Divine Purge's Perpetual Effect | SubAbility$ DBMayPlayEffect +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ RaiseCost & ETBTappedDesc | EffectZone$ Command | AddKeyword$ CARDNAME enters the battlefield tapped. | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | SubAbility$ DBMayPlayEffect | Description$ The exiled cards perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped." +SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | Description$ This spell costs {2} more to cast. +SVar:ETBTappedDesc:Mode$ Continuous | Affected$ Card.Self | Description$ This permanent enters the battlefield tapped. +SVar:DBMayPlayEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ OwnerMayPlay | Duration$ Permanent | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | SpellDescription$ For as long as each of them remain exiled, its owner may play it. +SVar:OwnerMayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Exile | MayPlay$ True | EffectZone$ Command | MayPlayPlayer$ CardOwner | Description$ For as long as each of these remain exiled, its owner may play it. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Exile all artifacts and creatures with mana value 3 or less. They perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped." For as long as each of them remain exiled, its owner may play it. diff --git a/forge-gui/res/cardsfolder/upcoming/ethereal_escort.txt b/forge-gui/res/cardsfolder/upcoming/ethereal_escort.txt new file mode 100644 index 00000000000..acd2fcf188c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ethereal_escort.txt @@ -0,0 +1,14 @@ +Name:Ethereal Escort +ManaCost:2 W +Types:Creature Spirit +PT:3/3 +K:Lifelink +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, choose a card in your hand. It perpetually gains lifelink. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, choose a card in your hand. It perpetually gains lifelink. +SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.YouOwn | ChoiceTitle$ Choose a card in your hand | Amount$ 1 | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualLifelink | Name$ Ethereal Escort's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup +SVar:PerpetualLifelink:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Lifelink | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains lifelink. +SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True +SVar:HasAttackEffect:TRUE +DeckHas:Ability$LifeGain +Oracle:Lifelink\nWhenever Ethereal Escort enters the battlefield or attacks, choose a card in your hand. It perpetually gains lifelink. diff --git a/forge-gui/res/cardsfolder/upcoming/fearsome_whelp.txt b/forge-gui/res/cardsfolder/upcoming/fearsome_whelp.txt new file mode 100644 index 00000000000..28c35e72d31 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fearsome_whelp.txt @@ -0,0 +1,13 @@ +Name:Fearsome Whelp +ManaCost:1 R +Types:Creature Dragon +PT:1/1 +K:Flying +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ At the beginning of your end step, each Dragon card in your hand perpetually gains "This spell costs {1} less to cast." +SVar:TrigEffect:DB$ Effect | RememberObjects$ ValidHand Dragon.YouOwn | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Fearsome Whelp's Perpetual Effect +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ DragonReduceCost | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Each Dragon card in your hand perpetually gains "This spell costs {1} less to cast." +SVar:DragonReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +DeckHints:Type$Dragon +Oracle:Flying\nAt the beginning of your end step, each Dragon card in your hand perpetually gains "This spell costs {1} less to cast. diff --git a/forge-gui/res/cardsfolder/upcoming/garruk_wrath_of_the_wilds.txt b/forge-gui/res/cardsfolder/upcoming/garruk_wrath_of_the_wilds.txt new file mode 100644 index 00000000000..f8554b1ae2c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/garruk_wrath_of_the_wilds.txt @@ -0,0 +1,15 @@ +Name:Garruk, Wrath of the Wilds +ManaCost:2 G G +Types:Legendary Planeswalker Garruk +Loyalty:3 +A:AB$ ChooseCard | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose up to one creature card in your hand | Amount$ 1 | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Choose a creature card in your hand. It perpetually gets +1/+1 and perpetually gains "This spell costs {1} less to cast." +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualAbility,PerpetualP1P1 | Duration$ Permanent | Name$ Garruk, Wrath of the Wilds's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.ChosenCard | AddStaticAbility$ ReduceCost | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gets +1/+1 and perpetually gains "This spell costs {1} less to cast." +SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Secondary$ True +SVar:ReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. +A:AB$ NameCard | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Draft$ True | Defined$ You | ChooseFromList$ Mosscoat Goriak,Sylvan Brushstrider,Murasa Rootgrazer,Dire Wolf Prowler,Ferocious Pup,Pestilent Wolf,Garruk’s Uprising,Dawntreader Elk,Nessian Hornbeetle,Territorial Scythecat,Trufflesnout,Wary Okapi,Scurrid Colony,Barkhide Troll,Underdark Basilisk | SubAbility$ DBMakeCard | StackDescription$ SpellDescription | SpellDescription$ Draft a card from CARDNAME's spellbook and put it onto the battlefield. +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Battlefield | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearNamedCard$ True | ClearChosenCard$ True +A:AB$ PumpAll | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | NumAtt$ +3 | NumDef$ +3 | KW$ Trample | SpellDescription$ Until end of turn, creatures you control get +3/+3 and gain trample. +Oracle:[+1]: Choose a creature card in your hand. It perpetually gets +1/+1 and perpetually gains "This spell costs {1} less to cast."\n[−1]: Draft a card from Garruk, Wrath of the Wild's spellbook and put it onto the battlefield.\n[−5]: Until end of turn, creatures you control get +3/+3 and gain trample. + diff --git a/forge-gui/res/cardsfolder/upcoming/geistchanneler.txt b/forge-gui/res/cardsfolder/upcoming/geistchanneler.txt index c0c75bed617..e01c87a9251 100644 --- a/forge-gui/res/cardsfolder/upcoming/geistchanneler.txt +++ b/forge-gui/res/cardsfolder/upcoming/geistchanneler.txt @@ -4,8 +4,9 @@ Types:Creature Human Wizard PT:1/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose an instant or sorcery card in your hand with mana value 3 or greater. It perpetually gains "This spell costs {2} less to cast." SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Instant.YouOwn+cmcGE3,Sorcery.YouOwn+cmcGE3 | ChoiceTitle$ Choose an instant or sorcery card in your hand with mana value 3 or greater | Amount$ 1 | AILogic$ BestCard | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualReduce | Name$ Geistchanneler's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualReduce:Mode$ ReduceCost | ValidCard$ Card.ChosenCard | Amount$ 2 | AddKeyword$ Haste | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This spell perpetually costs {2} less to cast. +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualAbility | Name$ Geistchanneler's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.ChosenCard | AddStaticAbility$ PerpetualReduce | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains "This spell costs {2} less to cast." +SVar:PerpetualReduce:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | Description$ This spell costs {2} less to cast. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True DeckHints:Type$Instant|Sorcery SVar:NeedsToPlayVar:X GE1 diff --git a/forge-gui/res/cardsfolder/upcoming/gutmorn_pactbound_servant.txt b/forge-gui/res/cardsfolder/upcoming/gutmorn_pactbound_servant.txt new file mode 100644 index 00000000000..41d2436f4bb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gutmorn_pactbound_servant.txt @@ -0,0 +1,20 @@ +Name:Gutmorn, Pactbound Servant +ManaCost:2 B +Types:Legendary Creature Demon +PT:1/3 +K:Flying +K:Deathtouch +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBDiscard | TriggerDescription$ Whenever CARDNAME enters the battlefield, each player discards a nonland card. +SVar:DBDiscard:DB$ Discard | Defined$ Player | DiscardValid$ Card.nonLand | Mode$ TgtChoose | AILogic$ DiscardUncastableAndExcess +T:Mode$ Discarded | TriggerZones$ Battlefield | Execute$ TrigChoosePlayer | PlayerTurn$ True | TriggerController$ TriggeredCardController | TriggerDescription$ Whenever a player discards a card during your turn, they choose another player. That player conjures a duplicate of that card into their hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." +SVar:TrigChoosePlayer:DB$ ChoosePlayer | Defined$ TriggeredCardOwner | Choices$ Player.Other | ChoiceTitle$ Choose another player | SubAbility$ DBConjure +SVar:DBConjure:DB$ MakeCard | Defined$ ChosenPlayer | DefinedName$ TriggeredCard | Zone$ Hand | RememberMade$ True | SubAbility$ DBClearChosen +SVar:DBClearChosen:DB$ Cleanup | ClearChosenPlayer$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Gutmorn, Pactbound Servant's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | AddStaticAbility$ SpendAnyMana | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The conjured card perpetually gains "You may spend mana as though it were mana of any color to cast this spell." +SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AffectedZone$ Stack | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember +DeckHas:Ability$Discard +Oracle:Flying, deathtouch\nWhenever Gutmorn, Pactbound Servant enters the battlefield, each player discards a nonland card.\nWhenever a player discards a card during your turn, they choose another player. That player conjures a duplicate of that card into their hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." diff --git a/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt b/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt index b551d1e5d7f..ebafd8d2a9e 100644 --- a/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt +++ b/forge-gui/res/cardsfolder/upcoming/ominous_traveler.txt @@ -4,10 +4,14 @@ Types:Creature Human PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraft | TriggerDescription$ When CARDNAME enters the battlefield, draft a card from CARDNAME's spellbook. That card perpetually gains "You may spend mana as though it were mana of any color to cast this spell" and "When you cast this spell, return a card named Ominous Traveler you control to its owner's hand." SVar:TrigDraft:DB$ NameCard | Draft$ True | Defined$ You | ChooseFromList$ Dominating Vampire,Vampire Socialite,Stromkirk Bloodthief,Falkenrath Pit Fighter,Wolfkin Outcast,Howlpack Piper,Tovolar; Dire Overlord,Patrician Geist,Shipwreck Sifters,Steelclad Spirit,Heron-Blessed Geist,Archghoul of Thraben,Champion of the Perished,Headless Rider,Bladestitched Skaab | SubAbility$ DBMakeCard -SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | RememberMade$ True | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | Triggers$ CastTrigger | StaticAbilities$ SpendAnyMana | Duration$ Permanent | Name$ Ominous Traveler's Perpetual Effect | SubAbility$ DBCleanup -SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.IsRemembered | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. -SVar:CastTrigger:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Execute$ TrigReturn | TriggerDescription$ When you cast this spell, return a card named Ominous Traveler you control to its owner's hand. +SVar:DBMakeCard:DB$ MakeCard | Name$ ChosenName | Zone$ Hand | RememberMade$ True | SubAbility$ DBClearName +SVar:DBClearName:DB$ Cleanup | ClearNamedCard$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | Triggers$ CastTrigger | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Ominous Traveler's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualAbility:Mode$ Continuous | AddStaticAbility$ SpendAnyMana | AddTrigger$ CastTrigger | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The conjured card perpetually gains "You may spend mana as though it were mana of any color to cast this spell" and "When you cast this spell, return a card named Ominous Traveler you control to its owner's hand." +SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AffectedZone$ Stack | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME | Description$ You may spend mana as though it were mana of any color to cast this spell. +SVar:CastTrigger:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When you cast this spell, return a card named Ominous Traveler you control to its owner's hand. SVar:TrigReturn:DB$ ChangeZone | ChangeType$ Card.namedOminous Traveler+YouCtrl | ChangeNum$ 1 | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearNamedCard$ True +SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate +SVar:DBUpdate:DB$ UpdateRemember Oracle:When Ominous Traveler enters the battlefield, draft a card from Ominous Traveler's spellbook. That card perpetually gains "You may spend mana as though it were mana of any color to cast this spell" and "When you cast this spell, return a card named Ominous Traveler you control to its owner's hand." diff --git a/forge-gui/res/cardsfolder/v/veteran_charger.txt b/forge-gui/res/cardsfolder/v/veteran_charger.txt index 0077b0928df..936be263aec 100644 --- a/forge-gui/res/cardsfolder/v/veteran_charger.txt +++ b/forge-gui/res/cardsfolder/v/veteran_charger.txt @@ -5,6 +5,6 @@ PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, choose a creature card in your hand. It perpetually gets +2/+2. SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Hand | Choices$ Card.Creature+YouOwn | ChoiceTitle$ Choose a creature card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualP2P2 | Name$ Veteran Charger's Perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup -SVar:PerpetualP2P2:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 2 | AddToughness$ 2 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gets +2/+2. +SVar:PerpetualP2P2:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ 2 | AddToughness$ 2 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gets +2/+2. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True Oracle:When Veteran Charger enters the battlefield, choose a creature card in your hand. It perpetually gets +2/+2. diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index 81d954e5f8c..b0b890aa802 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import forge.game.card.*; +import forge.util.collect.FCollectionView; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Sets; @@ -16,7 +18,6 @@ import forge.card.ColorSet; import forge.card.MagicColor; import forge.card.mana.ManaCostShard; import forge.game.GameView; -import forge.game.card.Card; import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; import forge.game.zone.ZoneType; @@ -429,7 +430,17 @@ public class CardDetailUtil { area.append("\n"); } area.append("(chosen cards: "); - area.append(Lang.joinHomogenous(card.getChosenCards())); + if (card.isImmutable() && card.getName().contains("Perpetual Effect")) { + List chosenToShow = new ArrayList<>(); + for (CardView cc : card.getChosenCards()) { + if (!cc.getZone().isHidden()) { + chosenToShow.add(cc); + } + } + area.append(Lang.joinHomogenous(chosenToShow)); + } else { + area.append(Lang.joinHomogenous(card.getChosenCards())); + } area.append(")"); }