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 f3323a8b814..7f8ef748e2f 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1388,6 +1388,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final boolean hasDoubleStrike() { return hasKeyword(Keyword.DOUBLE_STRIKE); } + + public final boolean hasDoubleTeam() { + return hasKeyword(Keyword.DOUBLE_TEAM); + } public final boolean hasSecondStrike() { return hasDoubleStrike() || !hasFirstStrike(); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index cb3ef24e228..25bcd2abb76 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1063,6 +1063,22 @@ public class CardFactoryUtil { dethroneTrigger.setOverridingAbility(AbilityFactory.getAbility(abString, card)); inst.addTrigger(dethroneTrigger); + } else if (keyword.equals("Double Team")) { + final String doubleteamScript = "Mode$ Attacks | ValidCard$ Card.Self+nonToken | TriggerZones$ Battlefield | TriggerDescription$ (" + inst.getReminderText() + ")"; + final String makeString = "DB$ MakeCard | DefinedName$ Self | Zone$ Hand | RememberMade$ True"; + final String forgetString = "DB$ Effect | Duration$ Permanent | RememberObjects$ Remembered | ImprintCards$ TriggeredAttacker | StaticAbilities$ RemoveDoubleTeamMade"; + final String madeforgetmadeString = "Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered,Card.IsImprinted | RemoveKeyword$ Double Team | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Both cards perpetually lose double team."; + final String CleanupString = "DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True"; + final Trigger trigger = TriggerHandler.parseTrigger(doubleteamScript, card, intrinsic); + final SpellAbility youMake = AbilityFactory.getAbility(makeString, card); + final AbilitySub forget = (AbilitySub) AbilityFactory.getAbility(forgetString, card); + final AbilitySub Cleanup = (AbilitySub) AbilityFactory.getAbility(CleanupString, card); + forget.setSVar("RemoveDoubleTeamMade",madeforgetmadeString); + youMake.setSubAbility(forget); + forget.setSubAbility(Cleanup); + trigger.setOverridingAbility(youMake); + + inst.addTrigger(trigger); } else if (keyword.startsWith("Echo")) { final String[] k = keyword.split(":"); final String cost = k[1]; 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 352ced47d8c..a176696afcd 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1364,6 +1364,7 @@ public class CardView extends GameEntityView { public boolean hasDefender() { return get(TrackableProperty.HasDefender); } public boolean hasDivideDamage() { return get(TrackableProperty.HasDivideDamage); } public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); } + public boolean hasDoubleTeam() { return get(TrackableProperty.HasDoubleTeam); } public boolean hasFirstStrike() { return get(TrackableProperty.HasFirstStrike); } public boolean hasFlying() { return get(TrackableProperty.HasFlying); } public boolean hasFear() { return get(TrackableProperty.HasFear); } diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index e293c449d2d..fc31d2c3a8e 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -60,6 +60,7 @@ public enum Keyword { DEVOID("Devoid", SimpleKeyword.class, true, "This card has no color."), DISTURB("Disturb", KeywordWithCost.class, false, "You may cast this card from your graveyard transformed for its disturb cost."), DOUBLE_STRIKE("Double Strike", SimpleKeyword.class, true, "This creature deals both first-strike and regular combat damage."), + DOUBLE_TEAM("Double Team", SimpleKeyword.class, true, "When this creature attacks, if it's not a token, conjure a duplicate of it into your hand. Then both cards perpetually lose double team."), DREDGE("Dredge", KeywordWithAmount.class, false, "If you would draw a card, instead you may put exactly {%d:card} from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card."), ECHO("Echo", KeywordWithCost.class, false, "At the beginning of your upkeep, if this permanent came under your control since the beginning of your last upkeep, sacrifice it unless you pay %s."), EMBALM("Embalm", KeywordWithCost.class, false, "%s, Exile this card from your graveyard: Create a token that's a copy of this card, except it's white, it has no mana cost, and it's a Zombie in addition to its other types. Embalm only as a sorcery."), diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 62dbe8e9b96..c97649b0c1e 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -138,6 +138,7 @@ public enum TrackableProperty { HasDefender(TrackableTypes.BooleanType), HasDivideDamage(TrackableTypes.BooleanType), HasDoubleStrike(TrackableTypes.BooleanType), + HasDoubleTeam(TrackableTypes.BooleanType), HasFirstStrike(TrackableTypes.BooleanType), HasFlying(TrackableTypes.BooleanType), HasFear(TrackableTypes.BooleanType), diff --git a/forge-gui-mobile/src/forge/card/CardZoom.java b/forge-gui-mobile/src/forge/card/CardZoom.java index e911c46dd10..80f1ae7b14d 100644 --- a/forge-gui-mobile/src/forge/card/CardZoom.java +++ b/forge-gui-mobile/src/forge/card/CardZoom.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map.Entry; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Align; diff --git a/forge-gui/res/cardsfolder/d/divine_purge.txt b/forge-gui/res/cardsfolder/d/divine_purge.txt index 874b96335ef..aacd559143e 100644 --- a/forge-gui/res/cardsfolder/d/divine_purge.txt +++ b/forge-gui/res/cardsfolder/d/divine_purge.txt @@ -1,7 +1,7 @@ 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. +A:SP$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Artifact.cmcLE3,Creature.cmcLE3 | 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. diff --git a/forge-gui/res/cardsfolder/p/patriars_humiliation.txt b/forge-gui/res/cardsfolder/p/patriars_humiliation.txt index 6293473f7de..d993425e24b 100644 --- a/forge-gui/res/cardsfolder/p/patriars_humiliation.txt +++ b/forge-gui/res/cardsfolder/p/patriars_humiliation.txt @@ -2,7 +2,7 @@ Name:Patriar's Humiliation ManaCost:W Types:Instant A:SP$ Effect | StaticAbilities$ PerpetualLoss | RememberObjects$ Targeted | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | Name$ Patriar's Humiliation's Perpetual Effect | Duration$ Permanent | SubAbility$ DBDealDamage | SpellDescription$ Target creature perpetually loses all abilities. -SVar:PerpetualLoss:Mode$ Continuous | Affected$ Card.IsRemembered | RemoveAllAbilities$ True | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature loses all abilities. +SVar:PerpetualLoss:Mode$ Continuous | Affected$ Card.IsRemembered | RemoveAllAbilities$ True | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually loses all abilities. SVar:DBDealDamage:DB$ DealDamage | NumDmg$ X | Defined$ Targeted | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals damage to it equal to the number of creatures you control. SVar:X:Count$Valid Creature.YouCtrl Oracle:Target creature perpetually loses all abilities, then Patriar's Humiliation deals damage to it equal to the number of creatures you control. diff --git a/forge-gui/res/cardsfolder/upcoming/archangel_of_wrath.txt b/forge-gui/res/cardsfolder/upcoming/archangel_of_wrath.txt new file mode 100644 index 00000000000..23804482b00 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/archangel_of_wrath.txt @@ -0,0 +1,12 @@ +Name:Archangel of Wrath +ManaCost:2 W W +Types:Creature Angel +PT:3/4 +K:Kicker:B:R +K:Flying +K:Lifelink +T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked | Origin$ Any | Destination$ Battlefield | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked, it deals 2 damage to any target. +T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked | Origin$ Any | Destination$ Battlefield | CheckSVar$ X | SVarCompare$ EQ2 | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked twice, it deals 2 damage to any target. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 +SVar:X:Count$TimesKicked +Oracle:Kicker {B} and/or {R} (You may pay an additional {B} and/or {R} as you cast this spell.)\nFlying, lifelink\nWhen Archangel of Wrath enters the battlefield, if it was kicked, it deals 2 damage to any target.\nWhen Archangel of Wrath enters the battlefield, if it was kicked twice, it deals 2 damage to any target. diff --git a/forge-gui/res/cardsfolder/upcoming/aron_benalias_ruin.txt b/forge-gui/res/cardsfolder/upcoming/aron_benalias_ruin.txt new file mode 100644 index 00000000000..756700264b3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aron_benalias_ruin.txt @@ -0,0 +1,8 @@ +Name:Aron, Benalia's Ruin +ManaCost:W W B +Types:Legendary Creature Phyrexian Human +PT:3/3 +K:Menace +A:AB$ PutCounterAll | Cost$ W B T Sac<1/Creature.Other/another creature> | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on each creature you control. +DeckHas:Ability$Counters|Sacrifice +Oracle:Menace\n{W}{B}, {T}, Sacrifice another creature: Put a +1/+1 counter on each creature you control. diff --git a/forge-gui/res/cardsfolder/upcoming/garna_bloodfist_of_keld.txt b/forge-gui/res/cardsfolder/upcoming/garna_bloodfist_of_keld.txt new file mode 100644 index 00000000000..e98d549a33b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/garna_bloodfist_of_keld.txt @@ -0,0 +1,11 @@ +Name:Garna, Bloodfist of Keld +ManaCost:1 B R R +Types:Legendary Creature Human Berserker +PT:4/3 +T:Mode$ ChangesZone | ValidCard$ Creature.Other+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigBranch | TriggerZones$ Battlefield | TriggerDescription$ Whenever another creature you control dies, draw a card if it was attacking. Otherwise, CARDNAME deals 1 damage to each opponent. +SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GE1 | TrueSubAbility$ DBDraw | FalseSubAbility$ DBDamage +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 +SVar:DBDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 1 +SVar:X:TriggeredCard$Valid Creature.attacking +DeckHas:Ability$Sacrifice +Oracle:Whenever another creature you control dies, draw a card if it was attacking. Otherwise, Garna, Bloodfist of Keld deals 1 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/upcoming/genasi_rabble_rouser.txt b/forge-gui/res/cardsfolder/upcoming/genasi_rabble_rouser.txt new file mode 100644 index 00000000000..48cc67b15e2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/genasi_rabble_rouser.txt @@ -0,0 +1,7 @@ +Name:Genasi Rabble-Rouser +ManaCost:1 R +Types:Creature Elemental Shaman +K:Double Team +A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature.YouCtrl+namedGenasi Rabble-Rouser | NumAtt$ +1 | SpellDescription$ Creatures you control named Genasi Rabble-Rouser get +1/+0 until end of turn. +DeckHints:Name$Genasi Rabble-Rouser +Oracle:Double team\n{1}{R}: Creatures you control named Genasi Rabble-Rouser gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/giant_fire_beetles.txt b/forge-gui/res/cardsfolder/upcoming/giant_fire_beetles.txt new file mode 100644 index 00000000000..360556ffa46 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/giant_fire_beetles.txt @@ -0,0 +1,7 @@ +Name:Giant Fire Beetles +ManaCost:2 R +Types:Creature Insect +PT:2/2 +K:Double Team +K:Menace +Oracle:Menace\nDouble team diff --git a/forge-gui/res/cardsfolder/upcoming/gnoll_hunting_party.txt b/forge-gui/res/cardsfolder/upcoming/gnoll_hunting_party.txt new file mode 100644 index 00000000000..d194a5492a3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gnoll_hunting_party.txt @@ -0,0 +1,10 @@ +Name:Gnoll Hunting Party +ManaCost:5 R +Types:Creature Gnoll +PT:5/5 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature you attacked with this turn. +S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ First Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, CARDNAME has first strike. +SVar:X:Count$AttackersDeclared +K:Double Team +SVar:PlayMain2:TRUE +Oracle:This spell costs {1} less to cast for each creature you attacked with this turn.\nDouble team\nAs long as it's your turn, Gnoll Hunting Party has first strike. diff --git a/forge-gui/res/cardsfolder/upcoming/golden_argosy.txt b/forge-gui/res/cardsfolder/upcoming/golden_argosy.txt new file mode 100644 index 00000000000..bbfe596f4f8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/golden_argosy.txt @@ -0,0 +1,15 @@ +Name:Golden Argosy +ManaCost:4 +Types:Artifact Vehicle +PT:3/6 +T:Mode$ BecomesCrewed | ValidVehicle$ Card.Self | Execute$ RememberCrew | Static$ True +SVar:RememberCrew:DB$ PumpAll | ValidCards$ Creature.TriggeredCrew | RememberAllPumped$ True +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigFlicker | TriggerDescription$ Whenever CARDNAME attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step. +SVar:TrigFlicker:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered | Mandatory$ True | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ RememberedLKI | SubAbility$ DBCleanup | TriggerDescription$ Return them to the battlefield tapped under their owner's control at the beginning of the next end step. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRemembered | Tapped$ True +T:Mode$ Phase | Phase$ End of Turn | Static$ True | Execute$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:Crew:1 +SVar:HasAttackEffect:TRUE +Oracle:Whenever Golden Argosy attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step.\nCrew 1 (Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.) diff --git a/forge-gui/res/cardsfolder/upcoming/lizardfolk_librarians.txt b/forge-gui/res/cardsfolder/upcoming/lizardfolk_librarians.txt new file mode 100644 index 00000000000..9b4f7f01c87 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lizardfolk_librarians.txt @@ -0,0 +1,8 @@ +Name:Lizardfolk Librarians +ManaCost:3 U +Types:Creature Lizard +PT:2/1 +K:Double Team +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 2. +SVar:TrigScry:DB$ Scry | ScryNum$ 2 +Oracle:Double team\When Lizardfolk Librarians enters the battlefield, scry 2. diff --git a/forge-gui/res/cardsfolder/upcoming/moradins_disciples.txt b/forge-gui/res/cardsfolder/upcoming/moradins_disciples.txt new file mode 100644 index 00000000000..afe342d5d8a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/moradins_disciples.txt @@ -0,0 +1,8 @@ +Name:Moradin's Disciples +ManaCost:3 W +Types:Creature Dwarf Cleric +PT:2/3 +K:Double Team +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBTap | TriggerDescription$ Whenever CARDNAME attacks, tap target creature defending player controls. +SVar:DBTap:DB$ Tap | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredDefendingPlayer | TargetMax$ 1 | TgtPrompt$ Select target creature defending player controls +Oracle:Double team\nWhenever Moradin's Disciples attacks, tap target creature defending player controls. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/ranger_squadron.txt b/forge-gui/res/cardsfolder/upcoming/ranger_squadron.txt new file mode 100644 index 00000000000..108e500babb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ranger_squadron.txt @@ -0,0 +1,7 @@ +Name:Ranger Squadron +ManaCost:4 W W +Types:Creature Cat Ranger +PT:3/4 +K:Flying +K:Double Team +Oracle:Flying\nDouble Team \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/rona_sheoldreds_faithful.txt b/forge-gui/res/cardsfolder/upcoming/rona_sheoldreds_faithful.txt new file mode 100644 index 00000000000..33f9174a66f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rona_sheoldreds_faithful.txt @@ -0,0 +1,11 @@ +Name:Rona, Sheoldred's Faithful +ManaCost:1 U B B +Types:Legendary Creature Human Wizard +PT:3/4 +T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever you cast an instant or sorcery spell, each opponent loses 1 life. +SVar:TrigDrain:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 1 +SVar:AltCost:Cost$ 1 U B B Discard<2/Card> | ActivationZone$ Graveyard | Description$ You may cast CARDNAME from your graveyard by discarding two cards in addition to paying its other costs. +DeckHas:Ability$Discard|Graveyard +DeckNeeds:Type$Instant|Sorcery +SVar:DiscardMe:1 +Oracle:Whenever you cast an instant or sorcery spell, each opponent loses 1 life.\nYou may cast Rona, Sheoldred's Faithful from your graveyard by discarding two cards in addition to paying its other costs. diff --git a/forge-gui/res/cardsfolder/upcoming/ronas_vortex.txt b/forge-gui/res/cardsfolder/upcoming/ronas_vortex.txt new file mode 100644 index 00000000000..fb1ad727538 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ronas_vortex.txt @@ -0,0 +1,8 @@ +Name:Rona's Vortex +ManaCost:U +Types:Instant +K:Kicker:2 B +A:SP$ ChangeZone | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SpellDescription$ Return target creature or planeswalker you don't control to its owner's hand. If this spell was kicked, put that permanent on the bottom of its owner's library instead. +SVar:DBChangeZone:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | Condition$ Kicked +SVar:X:Count$TimesKicked +Oracle:Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.)\nReturn target creature or planeswalker you don't control to its owner's hand. If this spell was kicked, put that permanent on the bottom of its owner's library instead. diff --git a/forge-gui/res/cardsfolder/upcoming/seatower_imprisonment.txt b/forge-gui/res/cardsfolder/upcoming/seatower_imprisonment.txt new file mode 100644 index 00000000000..c49cb221f5a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/seatower_imprisonment.txt @@ -0,0 +1,9 @@ +Name:Seatower Imprisonment +ManaCost:2 W W +Types:Enchantment Aura +K:Enchant creature or planeswalker you don't control +A:SP$ Attach | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ Curse +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure a card named Soldiers of the Watch onto the battlefield. +SVar:TrigConjure:DB$ MakeCard | Name$ Soldiers of the Watch | Zone$ Battlefield +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. & CARDNAME's activated abilities can't be activated. | Description$ Enchanted permanent can't attack or block and its activated abilities can't be activated. +Oracle:Enchant creature or planeswalker you don't control\nWhen Seatower Imprisonment enters the battlefield, conjure a card named Soldiers of the Watch onto the battlefield.\nEnchanted permanent can't attack or block and its activated abilities can't be activated. diff --git a/forge-gui/res/cardsfolder/upcoming/soldiers_of_the_watch.txt b/forge-gui/res/cardsfolder/upcoming/soldiers_of_the_watch.txt new file mode 100644 index 00000000000..7ffb9277231 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/soldiers_of_the_watch.txt @@ -0,0 +1,6 @@ +Name:Soldiers of the Watch +ManaCost:1 W +Types:Creature Human Soldier +PT:2/1 +K:Double Team +Oracle:Double Team \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/sworn_to_the_legion.txt b/forge-gui/res/cardsfolder/upcoming/sworn_to_the_legion.txt new file mode 100644 index 00000000000..a7cd72cd301 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sworn_to_the_legion.txt @@ -0,0 +1,11 @@ +Name:Sworn to the Legion +ManaCost:4 W W +Types:Enchantment +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ DBEffect | TriggerDescription$ When CARDNAME enters the battlefield, nontoken creatures you control perpetually gain double team. +SVar:DBEffect:DB$ Effect | RememberObjects$ Valid Creature.YouCtrl+nonToken | StaticAbilities$ PerpetualDoubleTeam | Name$ Sworn to the Legion's Perpetual Effect | Duration$ Permanent +SVar:PerpetualDoubleTeam:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Double Team | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Nontoken creatures you control perpetually gain double team. +T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ DBEffectCast | TriggerDescription$ Whenever you cast a creature spell, it perpetually gains double team. +SVar:DBEffectCast:DB$ Effect | RememberObjects$ TriggeredCard | StaticAbilities$ PerpetualDoubleTeamCast | Name$ Sworn to the Legion's Perpetual Effect | Duration$ Permanent +SVar:PerpetualDoubleTeamCast:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Double Team | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gains double team. +SVar:BuffedBy:Creature +Oracle:When Sworn to the Legion enters the battlefield, nontoken creatures you control perpetually gain double team.\nWhenever you cast a creature spell, it perpetually gains double team. diff --git a/forge-gui/res/cardsfolder/upcoming/tiefling_outcasts.txt b/forge-gui/res/cardsfolder/upcoming/tiefling_outcasts.txt new file mode 100644 index 00000000000..3c0df1ec579 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tiefling_outcasts.txt @@ -0,0 +1,8 @@ +Name:Tiefling Outcasts +ManaCost:R +Types:Creature Tiefling Peasant +PT:1/1 +K:Double Team +S:Mode$ Continuous | Affected$ Demon.Other+YouCtrl,Devil.Other+YouCtrl,Imp.Other+YouCtrl,Tiefling.Other+YouCtrl | AddPower$ 1 | Description$ Other Demons, Devils, Imps, and Tieflings you control get +1/+0. +DeckHints:Type$Demon|Devil|Imp|Tiefling +Oracle:Double Team\nOther Demons, Devils, Imps, and Tieflings you control get +1/+0. diff --git a/forge-gui/res/cardsfolder/upcoming/ulder_ravengard_marshal.txt b/forge-gui/res/cardsfolder/upcoming/ulder_ravengard_marshal.txt new file mode 100644 index 00000000000..04128aee82d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ulder_ravengard_marshal.txt @@ -0,0 +1,10 @@ +Name:Ulder Ravengard, Marshal +ManaCost:1 R W +Types:Legendary Creature Human Noble Soldier +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpEOT | TriggerDescription$ When CARDNAME enters the battlefield, another target nontoken creature you control gains double team until end of turn. +SVar:TrigPumpEOT:DB$ Pump | ValidTgts$ Creature.YouCtrl+nonToken+Other | TgtPrompt$ Select another target nontoken creature you control | KW$ Double Team +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigConjure | TriggerDescription$ Whenever NICKNAME attacks, conjure a duplicate of another target nontoken attacking creature into your hand. +SVar:TrigConjure:DB$ MakeCard | ValidTgts$ Creature.attacking+Other+nonToken | TgtPrompt$ Select another target nontoken creature that is attacking | DefinedName$ Targeted | Zone$ Hand +SVar:HasAttackEffect:TRUE +Oracle:When Ulder Ravengard, Marshal enters the battlefield, another target nontoken creature you control gains double team until end of turn.\nWhenever Ulder Ravengard attacks, conjure a duplicate of another target nontoken attacking creature into your hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/warriors_of_tiamat.txt b/forge-gui/res/cardsfolder/upcoming/warriors_of_tiamat.txt new file mode 100644 index 00000000000..b3c0f03651f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/warriors_of_tiamat.txt @@ -0,0 +1,7 @@ +Name:Warriors of Tiamat +ManaCost:4 R +Types:Creature Dragon Warrior +PT:4/2 +K:Haste +K:Double Team +Oracle:Haste\nDouble Team \ No newline at end of file