From 2f6fe05447cef84f190583b7de6534ef7bd2cb97 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 25 Mar 2025 20:14:32 -0400 Subject: [PATCH 01/34] [TDM] update spoiler --- Mage.Sets/src/mage/sets/TarkirDragonstorm.java | 6 +++--- Utils/mtg-cards-data.txt | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index dd9b0c10239..ea79097d3ad 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -12,7 +12,7 @@ import java.util.List; */ public final class TarkirDragonstorm extends ExpansionSet { - private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Ureni's Rebuff", "Winternight Stories"); + private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Unending Whisper", "Ureni's Rebuff", "Winternight Stories"); private static final TarkirDragonstorm instance = new TarkirDragonstorm(); public static TarkirDragonstorm getInstance() { @@ -43,7 +43,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Breaching Dragonstorm", 101, Rarity.UNCOMMON, mage.cards.b.BreachingDragonstorm.class)); cards.add(new SetCardInfo("Call the Spirit Dragons", 174, Rarity.MYTHIC, mage.cards.c.CallTheSpiritDragons.class)); cards.add(new SetCardInfo("Caustic Exhale", 74, Rarity.COMMON, mage.cards.c.CausticExhale.class)); - cards.add(new SetCardInfo("Channeled Dragonfire", 423, Rarity.UNCOMMON, mage.cards.c.ChanneledDragonfire.class)); + cards.add(new SetCardInfo("Channeled Dragonfire", 102, Rarity.UNCOMMON, mage.cards.c.ChanneledDragonfire.class)); cards.add(new SetCardInfo("Coordinated Maneuver", 6, Rarity.COMMON, mage.cards.c.CoordinatedManeuver.class)); cards.add(new SetCardInfo("Cori Mountain Monastery", 252, Rarity.RARE, mage.cards.c.CoriMountainMonastery.class)); cards.add(new SetCardInfo("Cori Mountain Stalwart", 175, Rarity.UNCOMMON, mage.cards.c.CoriMountainStalwart.class)); @@ -63,7 +63,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Dusyut Earthcarver", 141, Rarity.COMMON, mage.cards.d.DusyutEarthcarver.class)); cards.add(new SetCardInfo("Duty Beyond Death", 10, Rarity.UNCOMMON, mage.cards.d.DutyBeyondDeath.class)); cards.add(new SetCardInfo("Embermouth Sentinel", 242, Rarity.COMMON, mage.cards.e.EmbermouthSentinel.class)); - cards.add(new SetCardInfo("Encroaching Dragonstorm", 424, Rarity.UNCOMMON, mage.cards.e.EncroachingDragonstorm.class)); + cards.add(new SetCardInfo("Encroaching Dragonstorm", 142, Rarity.UNCOMMON, mage.cards.e.EncroachingDragonstorm.class)); cards.add(new SetCardInfo("Equilibrium Adept", 106, Rarity.UNCOMMON, mage.cards.e.EquilibriumAdept.class)); cards.add(new SetCardInfo("Evolving Wilds", 255, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); cards.add(new SetCardInfo("Fangkeeper's Familiar", 183, Rarity.RARE, mage.cards.f.FangkeepersFamiliar.class)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 28faf3fc369..db10c001662 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57208,16 +57208,19 @@ Dragonback Lancer|Tarkir: Dragonstorm|9|C|{3}{W}|Creature - Human Soldier|3|3|Fl Duty Beyond Death|Tarkir: Dragonstorm|10|U|{1}{W}|Instant|||As an additional cost to cast this spell, sacrifice a creature.$Creatures you control gain indestructible until end of turn. Put a +1/+1 counter on each creature you control.| Elspeth, Storm Slayer|Tarkir: Dragonstorm|11|M|{3}{W}{W}|Legendary Planeswalker - Elspeth|5|If one or more tokens would be created under your control, twice that many of those tokens are created instead.$+1: Create a 1/1 white Soldier creature token.$0: Put a +1/+1 counter on each creature you control. Those creatures gain flying until your next turn.$-3: Destroy target creature an opponent controls with mana value 3 or greater.| Fortress Kin-Guard|Tarkir: Dragonstorm|12|C|{1}{W}|Creature - Dog Soldier|1|2|When this creature enters, it endures 1.| +Lightfoot Technique|Tarkir: Dragonstorm|14|C|{1}{W}|Instant|||Put a +1/+1 counter on target creature. It gains flying and indestructible until end of turn.| Loxodon Battle Priest|Tarkir: Dragonstorm|15|U|{4}{W}|Creature - Elephant Cleric|3|5|At the beginning of combat on your turn, put a +1/+1 counter on another target creature you control.| Mardu Devotee|Tarkir: Dragonstorm|16|C|{W}|Creature - Human Scout|1|2|When this creature enters, scry 2.${1}: Add {R}, {W}, or {B}. Activate only once each turn.| Rally the Monastery|Tarkir: Dragonstorm|19|U|{3}{W}|Instant|||This spell costs {2} less to cast if you've cast another spell this turn.$Choose one --$* Create two 1/1 white Monk creature tokens with prowess.$* Up to two target creatures you control each get +2/+2 until end of turn.$* Destroy target creature with power 4 or greater.| Rebellious Strike|Tarkir: Dragonstorm|20|C|{1}{W}|Instant|||Target creature gets +3/+0 until end of turn.$Draw a card.| Riling Dawnbreaker|Tarkir: Dragonstorm|21|C|{4}{W}|Creature - Dragon|3|4|Flying, vigilance$At the beginning of combat on your turn, another target creature you control gets +1/+0 until end of turn.| Signaling Roar|Tarkir: Dragonstorm|21|C|{1}{W}|Sorcery - Omen|3|4|Create a 2/2 white Soldier creature token.| +Sage of the Skies|Tarkir: Dragonstorm|22|R|{2}{W}|Creature - Human Monk|2|3|When you cast this spell, if you've cast another spell this turn, copy this spell.$Flying, lifelink| Salt Road Packbeast|Tarkir: Dragonstorm|23|C|{5}{W}|Creature - Beast|4|3|This spell costs {1} less to cast for each creature you control.$When this creature enters, draw a card.| Smile at Death|Tarkir: Dragonstorm|24|M|{3}{W}{W}|Enchantment|||At the beginning of your upkeep, return up to two target creature cards with power 2 or less from your graveyard to the battlefield. Put a +1/+1 counter on each of those creatures.| Static Snare|Tarkir: Dragonstorm|26|U|{4}{W}|Enchantment|||Flash$This spell costs {1} less to cast for each attacking creature.$When this enchantment enters, exile target artifact or creature an opponent controls until this enchantment leaves the battlefield.| Stormplain Detainment|Tarkir: Dragonstorm|28|C|{2}{W}|Enchantment|||When this enchantment enters, exile target nonland permanent an opponent controls until this enchantment leaves the battlefield.| +Sunpearl Kirin|Tarkir: Dragonstorm|29|U|{1}{W}|Creature - Kirin|2|1|Flash$Flying$When this creature enters, return up to one other target nonland permanent you control to its owner's hand. If it was a token, draw a card.| Teeming Dragonstorm|Tarkir: Dragonstorm|30|U|{3}{W}|Enchantment|||When this enchantment enters, create two 2/2 white Soldier creature tokens.$When a Dragon you control enters, return this enchantment to its owner's hand.| Tempest Hawk|Tarkir: Dragonstorm|31|C|{2}{W}|Creature - Bird|2|2|Flying$Whenever this creature deals combat damage to a player, you may search your library for a card named Tempest Hawk, reveal it, put it into your hand, then shuffle.$A deck can have any number of cards named Tempest Hawk.| United Battlefront|Tarkir: Dragonstorm|32|R|{3}{W}|Sorcery|||Look at the top seven cards of your library. Put up to two noncreature, nonland permanent cards with mana value 3 or less from among them onto the battlefield. Put the rest on the bottom of your library in a random order.| @@ -57231,6 +57234,7 @@ Dragonologist|Tarkir: Dragonstorm|42|R|{2}{U}|Creature - Human Wizard|1|3|When t Dragonstorm Forecaster|Tarkir: Dragonstorm|43|U|{U}|Creature - Human Scout|0|3|{2}, {T}: Search your library for a card named Dragonstorm Globe or Boulderborn Dragon, reveal it, put it into your hand, then shuffle.| Essence Anchor|Tarkir: Dragonstorm|44|U|{2}{U}|Artifact|||At the beginning of your upkeep, surveil 1.${T}: Create a 2/2 black Zombie Druid creature token. Activate only during your turn and only if a card left your graveyard this turn.| Fresh Start|Tarkir: Dragonstorm|46|U|{1}{U}|Enchantment - Aura|||Flash$Enchant creature$Enchanted creature gets -5/-0 and loses all abilities.| +Humbling Elder|Tarkir: Dragonstorm|48|C|{U}|Creature - Human Monk|1|2|Flash$When this creature enters, target creature an opponent controls gets -2/-0 until end of turn.| Kishla Trawlers|Tarkir: Dragonstorm|50|U|{2}{U}|Creature - Human Citizen|3|2|When this creature enters, you may exile a creature card from your graveyard. When you do, return target instant or sorcery card from your graveyard to your hand.| Marang River Regent|Tarkir: Dragonstorm|51|R|{4}{U}{U}|Creature - Dragon|6|7|Flying$When this creature enters, return up to two other target nonland permanents to their owners' hands.| Coil and Catch|Tarkir: Dragonstorm|51|R|{3}{U}|Instant - Omen|6|7|Draw three cards, then discard a card.| @@ -57241,6 +57245,7 @@ Snowmelt Stag|Tarkir: Dragonstorm|57|C|{3}{U}|Creature - Elemental Elk|2|5|Vigil Spectral Denial|Tarkir: Dragonstorm|58|U|{X}{U}|Instant|||This spell costs {1} less to cast for each creature you control with power 4 or greater.$Counter target spell unless its controller pays {X}.| Taigam, Master Opportunist|Tarkir: Dragonstorm|60|M|{1}{U}|Legendary Creature - Human Monk|2|2|Flurry -- Whenever you cast your second spell each turn, copy it, then exile the spell you cast with four time counters on it. If it doesn't have suspend, it gains suspend.| Temur Devotee|Tarkir: Dragonstorm|61|C|{1}{U}|Creature - Human Druid|3|3|Defender${1}: Add {G}, {U}, or {R}. Activate only once each turn.| +Unending Whisper|Tarkir: Dragonstorm|62|C|{U}|Sorcery|||Draw a card.$Harmonize {5}{U}| Ureni's Rebuff|Tarkir: Dragonstorm|63|U|{1}{U}|Sorcery|||Return target creature to its owner's hand.$Harmonize {5}{U}| Winternight Stories|Tarkir: Dragonstorm|67|R|{2}{U}|Sorcery|||Draw three cards. Then discard two cards unless you discard a creature card.$Harmonize {4}{U}| Abzan Devotee|Tarkir: Dragonstorm|68|C|{1}{B}|Creature - Dog Cleric|2|1|{1}: Add {W}, {B}, or {G}. Activate only once each turn.${2}{B}: Return this card from your graveyard to your hand.| @@ -57250,6 +57255,7 @@ Caustic Exhale|Tarkir: Dragonstorm|74|C|{B}|Instant|||As an additional cost to c Corroding Dragonstorm|Tarkir: Dragonstorm|75|U|{1}{B}|Enchantment|||When this enchantment enters, each opponent loses 2 life and you gain 2 life. Surveil 2.$When a Dragon you control enters, return this enchantment to its owner's hand.| Cruel Truths|Tarkir: Dragonstorm|76|C|{3}{B}|Instant|||Surveil 2, then draw two cards. You lose 2 life.| Desperate Measures|Tarkir: Dragonstorm|78|U|{B}|Instant|||Target creature gets +1/-1 until end of turn. When it dies under your control this turn, draw two cards.| +Dragon's Prey|Tarkir: Dragonstorm|79|C|{2}{B}|Instant|||This spell costs 2 more to cast if it targets a Dragon.$Destroy target creature.| Feral Deathgorger|Tarkir: Dragonstorm|80|C|{5}{B}|Creature - Dragon|3|5|Flying, deathtouch$When this creature enters, exile up to two target cards from a single graveyard.| Dusk Sight|Tarkir: Dragonstorm|80|C|{1}{B}|Sorcery - Omen|3|5|Put a +1/+1 counter on up to one target creature. Draw a card.| Krumar Initiate|Tarkir: Dragonstorm|84|U|{1}{B}|Creature - Human Cleric|2|2|{X}{B}, {T}, Pay X life: This creature endures X. Activate only as a sorcery.| @@ -57263,6 +57269,7 @@ Unrooted Ancestor|Tarkir: Dragonstorm|96|U|{2}{B}|Creature - Spirit Cleric|3|2|F Venerated Stormsinger|Tarkir: Dragonstorm|97|U|{3}{B}|Creature - Orc Cleric|3|3|Mobilize 1$Whenever this creature or another creature you control dies, each opponent loses 1 life and you gain 1 life.| Yathan Tombguard|Tarkir: Dragonstorm|100|U|{2}{B}|Creature - Human Warrior|2|3|Menace$Whenever a creature you control with a counter on it deals combat damage to a player, you draw a card and you lose 1 life.| Breaching Dragonstorm|Tarkir: Dragonstorm|101|U|{4}{R}|Enchantment|||When this enchantment enters, exile cards from the top of your library until you exile a nonland card. You may cast it without paying its mana cost if that spell's mana value is 8 or less. If you don't, put that card into your hand.$When a Dragon you control enters, return this enchantment to its owner's hand.| +Channeled Dragonfire|Tarkir: Dragonstorm|102|U|{R}|Sorcery|||Channeled Dragonfire deals 2 damage to any target.$Harmonize {5}{R}{R}| Cori-Steel Cutter|Tarkir: Dragonstorm|103|R|{1}{R}|Artifact - Equipment|||Equipped creature gets +1/+1 and has trample and haste.$Flurry -- Whenever you cast your second spell each turn, create a 1/1 white Monk creature token with prowess. You may attach this Equipment to it.$Equip {1}{R}| Devoted Duelist|Tarkir: Dragonstorm|104|C|{1}{R}|Creature - Goblin Monk|2|1|Haste$Flurry -- Whenever you cast your second spell each turn, this creature deals 1 damage to each opponent.| Dracogenesis|Tarkir: Dragonstorm|105|M|{6}{R}{R}|Enchantment|||You may cast Dragon spells without paying their mana costs.| @@ -57287,6 +57294,7 @@ Claim Territory|Tarkir: Dragonstorm|136|R|{2}{G}|Sorcery - Omen|4|5|Search your Craterhoof Behemoth|Tarkir: Dragonstorm|138|M|{5}{G}{G}{G}|Creature - Beast|5|5|Haste$When this creature enters, creatures you control gain trample and get +X/+X until end of turn, where X is the number of creatures you control.| Dragonbroods' Relic|Tarkir: Dragonstorm|140|U|{1}{G}|Artifact|||{T}, Tap an untapped creature you control: Add one mana of any color.${3}{W}{U}{B}{R}{G}, Sacrifice this artifact: Create a 4/4 Dragon creature token named Reliquary Dragon that's all colors. It has flying, lifelink, and "When this token enters, it deals 3 damage to any target." Activate only as a sorcery.| Dusyut Earthcarver|Tarkir: Dragonstorm|141|C|{5}{G}|Creature - Elephant Druid|4|4|Reach$When this creature enters, it endures 3.| +Encroaching Dragonstorm|Tarkir: Dragonstorm|142|U|{3}{G}|Enchantment|||When this enchantment enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.$When a Dragon you control enters, return this enchantment to its owner's hand.| Herd Heirloom|Tarkir: Dragonstorm|144|R|{1}{G}|Artifact|||{T}: Add one mana of any color. Spend this mana only to cast a creature spell.${T}: Until end of turn, target creature you control with power 4 or greater gains trample and "Whenever this creature deals combat damage to a player, draw a card."| Heritage Reclamation|Tarkir: Dragonstorm|145|C|{1}{G}|Instant|||Choose one --$* Destroy target artifact.$* Destroy target enchantment.$* Exile up to one target card from a graveyard. Draw a card.| Lasyd Prowler|Tarkir: Dragonstorm|149|R|{2}{G}{G}|Creature - Snake Ranger|5|5|When this creature enters, you may mill cards equal to the number of lands you control.$Renew -- {1}{G}, Exile this card from your graveyard: Put X +1/+1 counters on target creature, where X is the number of land cards in your graveyard. Activate only as a sorcery.| @@ -57315,7 +57323,9 @@ Dragonback Assault|Tarkir: Dragonstorm|179|M|{3}{G}{U}{R}|Enchantment|||When thi Effortless Master|Tarkir: Dragonstorm|181|U|{2}{U}{R}|Creature - Orc Monk|4|3|Vigilance$Menace$This creature enters with two +1/+1 counters on it if you've cast two or more spells this turn.| Eshki Dragonclaw|Tarkir: Dragonstorm|182|R|{1}{G}{U}{R}|Legendary Creature - Human Warrior|4|4|Vigilance, trample, ward {1}$At the beginning of combat on your turn, if you've cast both a creature spell and a noncreature spell this turn, draw a card and put two +1/+1 counters on Eshki Dragonclaw.| Fangkeeper's Familiar|Tarkir: Dragonstorm|183|R|{1}{B}{G}{U}|Creature - Snake|3|3|Flash$When this creature enters, choose one --$* You gain 3 life and surveil 3.$* Destroy target enchantment.$* Counter target creature spell.| +Felothar, Dawn of the Abzan|Tarkir: Dragonstorm|184|R|{W}{B}{G}|Legendary Creature - Human Warrior|3|3|Trample$Whenever Felothar enters or attacks, you may sacrifice a nonland permanent. When you do, put a +1/+1 counter on each creature you control.| Flamehold Grappler|Tarkir: Dragonstorm|185|R|{U}{R}{W}|Creature - Human Monk|3|3|First strike$When this creature enters, copy the next spell you cast this turn when you cast it. You may choose new targets for the copy.| +Frontline Rush|Tarkir: Dragonstorm|186|U|{R}{W}|Instant|||Choose one --$* Create two 1/1 red Goblin creature tokens.$* Target creature gets +X/+X until end of turn, where X is the number of creatures you control.| Frostcliff Siege|Tarkir: Dragonstorm|187|R|{1}{U}{R}|Enchantment|||As this enchantment enters, choose Jeskai or Temur.$* Jeskai -- Whenever one or more creatures you control deal combat damage to a player, draw a card.$* Temur -- Creatures you control get +1/+0 and have trample and haste.| Glacial Dragonhunt|Tarkir: Dragonstorm|188|U|{U}{R}|Sorcery|||Draw a card, then you may discard a card. When you discard a nonland card this way, Glacial Dragonhunt deals 3 damage to target creature.$Harmonize {4}{U}{R}| Glacierwood Siege|Tarkir: Dragonstorm|189|R|{1}{G}{U}|Enchantment|||As this enchantment enters, choose Temur or Sultai.$* Temur -- Whenever you cast an instant or sorcery spell, target player mills four cards.$* Sultai -- You may play lands from your graveyard.| @@ -57323,6 +57333,9 @@ Gurmag Nightwatch|Tarkir: Dragonstorm|190|C|{2/B}{2/G}{2/U}|Creature - Human Ran Hollowmurk Siege|Tarkir: Dragonstorm|192|R|{B}{G}|Enchantment|||As this enchantment enters, choose Sultai or Abzan.$* Sultai -- Whenever a counter is put on a creature you control, draw a card. This ability triggers only once each turn.$* Abzan -- Whenever you attack, put a +1/+1 counter on target attacking creature. It gains menace until end of turn.| Host of the Hereafter|Tarkir: Dragonstorm|193|U|{2}{B}{G}|Creature - Zombie Warlock|2|2|This creature enters with two +1/+1 counters on it.$Whenever this creature or another creature you control dies, if it had counters on it, put its counters on up to one target creature you control.| Inevitable Defeat|Tarkir: Dragonstorm|194|R|{1}{R}{W}{B}|Instant|||This spell can't be countered.$Exile target nonland permanent. Its controller loses 3 life and you gain 3 life.| +Jeskai Revelation|Tarkir: Dragonstorm|196|M|{4}{U}{R}{W}|Instant|||Return target spell or permanent to its owner's hand. Jeskai Revelation deals 4 damage to any target. Create two 1/1 white Monk creature tokens with prowess. Draw two cards. You gain 4 life.| +Karakyk Guardian|Tarkir: Dragonstorm|198|U|{3}{G}{U}{R}|Creature -- Dragon|6|5|Flying, vigilance, trample$This creature has hexproof if it hasn't dealt damage yet.| +Kin-Tree Severance|Tarkir: Dragonstorm|200|U|{2/W}{2/B}{2/G}|Instant|||Exile target permanent with mana value 3 or greater.| Kishla Skimmer|Tarkir: Dragonstorm|201|U|{G}{U}|Creature - Bird Scout|2|2|Flying$Whenever a card leaves your graveyard during your turn, draw a card. This ability triggers only once each turn.| Kotis, the Fangkeeper|Tarkir: Dragonstorm|202|R|{1}{B}{G}{U}|Legendary Creature - Zombie Warrior|2|1|Indestructible$Whenever Kotis deals combat damage to a player, exile the top X cards of their library, where X is the amount of damage dealt. You may cast any number of spells with mana value X or less from among them without paying their mana costs.| Lie in Wait|Tarkir: Dragonstorm|203|U|{B}{G}{U}|Sorcery|||Return target creature card from your graveyard to your hand. Lie in Wait deals damage equal to that card's power to target creature.| @@ -57350,6 +57363,7 @@ Stalwart Successor|Tarkir: Dragonstorm|227|U|{1}{B}{G}|Creature - Human Warrior| Temur Battlecrier|Tarkir: Dragonstorm|228|R|{G}{U}{R}|Creature - Orc Ranger|4|3|During your turn, spells you cast cost {1} less to cast for each creature you control with power 4 or greater.| Temur Tawnyback|Tarkir: Dragonstorm|229|C|{2/G}{2/U}{2/R}|Creature - Beast|4|3|When this creature enters, draw a card, then discard a card.| Teval, Arbiter of Virtue|Tarkir: Dragonstorm|230|M|{2}{B}{G}{U}|Legendary Creature - Spirit Dragon|6|6|Flying, lifelink$Spells you cast have delve.$Whenever you cast a spell, you lose life equal to its mana value.| +Thunder of Unity|Tarkir: Dragonstorm|231|R|{R}{W}{B}|Enchantment - Saga|||(As this Saga enters step, add a lore counter. Sacrifice after III.)$I -- You draw two cards and you lose 2 life.$II, III -- Whenever a creature you control enters this turn, each opponent loses 1 life and you gain 1 life.| Twinmaw Stormbrood|Tarkir: Dragonstorm|232|U|{5}{W}|Creature - Dragon|5|4|Flying$When this creature enters, you gain 5 life.| Charring Bite|Tarkir: Dragonstorm|232|U|{1}{R}|Sorcery - Omen|5|4|Charring Bite deals 5 damage to target creature without flying.| Ureni, the Song Unending|Tarkir: Dragonstorm|233|M|{5}{G}{U}{R}|Legendary Creature - Spirit Dragon|10|10|Flying, protection from white and from black$When Ureni enters, it deals X damage divided as you choose among any number of target creatures and/or planeswalkers your opponents control, where X is the number of lands you control.| @@ -57398,8 +57412,6 @@ Swamp|Tarkir: Dragonstorm|281|C||Basic Land - Swamp|||({T}: Add {B}.)| Mountain|Tarkir: Dragonstorm|283|C||Basic Land - Mountain|||({T}: Add {R}.)| Forest|Tarkir: Dragonstorm|285|C||Basic Land - Forest|||({T}: Add {G}.)| Strategic Betrayal|Tarkir: Dragonstorm|422|U|{1}{B}|Sorcery|||Target opponent exiles a creature they control and their graveyard.| -Channeled Dragonfire|Tarkir: Dragonstorm|423|U|{R}|Sorcery|||Channeled Dragonfire deals 2 damage to any target.$Harmonize {5}{R}{R}| -Encroaching Dragonstorm|Tarkir: Dragonstorm|424|U|{3}{G}|Enchantment|||When this enchantment enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.$When a Dragon you control enters, return this enchantment to its owner's hand.| Betor, Ancestor's Voice|Tarkir: Dragonstorm Commander|1|M|{2}{W}{B}{G}|Legendary Creature - Spirit Dragon|3|5|Flying, lifelink$At the beginning of your end step, put a number of +1/+1 counters on up to one other target creature you control equal to the amount of life you gained this turn. Return up to one target creature card with mana value less than or equal to the amount of life you lost this turn from your graveyard to the battlefield.| Elsha, Threefold Master|Tarkir: Dragonstorm Commander|2|M|{U}{R}{W}|Legendary Creature - Djinn Monk|1|1|Trample$Prowess$Whenever Elsha deals combat damage to a player, create that many 1/1 white Monk creature tokens with prowess.| Eshki, Temur's Roar|Tarkir: Dragonstorm Commander|3|M|{G}{U}{R}|Legendary Creature - Human Warrior|2|2|Whenever you cast a creature spell, put a +1/+1 counter on Eshki. If that spell's power is 4 or greater, draw a card. If that spell's power is 6 or greater, Eshki deals damage equal to Eshki's power to each opponent.| From ed3e364ccafdc2293bbc379485e3329802fa9d04 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 25 Mar 2025 20:21:32 -0400 Subject: [PATCH 02/34] [TDM] Implement Kin-Tree Severance --- .../src/mage/cards/k/KinTreeSeverance.java | 41 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KinTreeSeverance.java diff --git a/Mage.Sets/src/mage/cards/k/KinTreeSeverance.java b/Mage.Sets/src/mage/cards/k/KinTreeSeverance.java new file mode 100644 index 00000000000..570dd1c941d --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KinTreeSeverance.java @@ -0,0 +1,41 @@ +package mage.cards.k; + +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KinTreeSeverance extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("permanent with mana value 3 or greater"); + + static { + filter.add(new ManaValuePredicate(ComparisonType.MORE_THAN, 2)); + } + + public KinTreeSeverance(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2/W}{2/B}{2/G}"); + + // Exile target permanent with mana value 3 or greater. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + } + + private KinTreeSeverance(final KinTreeSeverance card) { + super(card); + } + + @Override + public KinTreeSeverance copy() { + return new KinTreeSeverance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index ea79097d3ad..ec074b93748 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -80,6 +80,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jeskai Devotee", 110, Rarity.COMMON, mage.cards.j.JeskaiDevotee.class)); cards.add(new SetCardInfo("Jeskai Monument", 244, Rarity.UNCOMMON, mage.cards.j.JeskaiMonument.class)); cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Loxodon Battle Priest", 15, Rarity.UNCOMMON, mage.cards.l.LoxodonBattlePriest.class)); cards.add(new SetCardInfo("Mardu Devotee", 16, Rarity.COMMON, mage.cards.m.MarduDevotee.class)); From a74019ac378a36ef69aa18ba4c4d432f8452ff1a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 25 Mar 2025 20:22:21 -0400 Subject: [PATCH 03/34] [TDM] Implement Unending Whisper --- .../src/mage/cards/u/UnendingWhisper.java | 34 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/u/UnendingWhisper.java diff --git a/Mage.Sets/src/mage/cards/u/UnendingWhisper.java b/Mage.Sets/src/mage/cards/u/UnendingWhisper.java new file mode 100644 index 00000000000..80f8f4beeb5 --- /dev/null +++ b/Mage.Sets/src/mage/cards/u/UnendingWhisper.java @@ -0,0 +1,34 @@ +package mage.cards.u; + +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.HarmonizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class UnendingWhisper extends CardImpl { + + public UnendingWhisper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}"); + + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + + // Harmonize {5}{U} + this.addAbility(new HarmonizeAbility(this, "{5}{U}")); + } + + private UnendingWhisper(final UnendingWhisper card) { + super(card); + } + + @Override + public UnendingWhisper copy() { + return new UnendingWhisper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index ec074b93748..48ece66ec9f 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -132,6 +132,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Ugin, Eye of the Storms", 1, Rarity.MYTHIC, mage.cards.u.UginEyeOfTheStorms.class)); cards.add(new SetCardInfo("Underfoot Underdogs", 129, Rarity.COMMON, mage.cards.u.UnderfootUnderdogs.class)); cards.add(new SetCardInfo("Undergrowth Leopard", 165, Rarity.COMMON, mage.cards.u.UndergrowthLeopard.class)); + cards.add(new SetCardInfo("Unending Whisper", 62, Rarity.COMMON, mage.cards.u.UnendingWhisper.class)); cards.add(new SetCardInfo("United Battlefront", 32, Rarity.RARE, mage.cards.u.UnitedBattlefront.class)); cards.add(new SetCardInfo("Unrooted Ancestor", 96, Rarity.UNCOMMON, mage.cards.u.UnrootedAncestor.class)); cards.add(new SetCardInfo("Ureni's Rebuff", 63, Rarity.UNCOMMON, mage.cards.u.UrenisRebuff.class)); From 836fcd888d630ba401caed6da8e41106bb970ab3 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:47:22 -0400 Subject: [PATCH 04/34] [TDM] update spoiler --- .../src/mage/sets/TarkirDragonstorm.java | 2 +- Utils/mtg-cards-data.txt | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 48ece66ec9f..98c93535168 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -12,7 +12,7 @@ import java.util.List; */ public final class TarkirDragonstorm extends ExpansionSet { - private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Unending Whisper", "Ureni's Rebuff", "Winternight Stories"); + private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Synchronized Charge", "Unending Whisper", "Ureni's Rebuff", "Winternight Stories"); private static final TarkirDragonstorm instance = new TarkirDragonstorm(); public static TarkirDragonstorm getInstance() { diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index db10c001662..0a032592c4e 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57201,6 +57201,7 @@ Sephiroth, Planet's Heir|Final Fantasy|553|M|{4}{U}{B}|Legendary Creature - Huma Ugin, Eye of the Storms|Tarkir: Dragonstorm|1|M|{7}|Legendary Planeswalker - Ugin|7|When you cast this spell, exile up to one target permanent that's one or more colors.$Whenever you cast a colorless spell, exile up to one target permanent that's one or more colors.$+2: You gain 3 life and draw a card.$0: Add {C}{C}{C}.$-11: Search your library for any number of colorless nonland cards, exile them, then shuffle. Until end of turn, you may cast those cards without paying their mana costs.| Anafenza, Unyielding Lineage|Tarkir: Dragonstorm|2|R|{2}{W}|Legendary Creature - Spirit Soldier|2|2|Flash$First strike$Whenever another nontoken creature you control dies, Anafenza endures 2.| Bearer of Glory|Tarkir: Dragonstorm|4|C|{1}{W}|Creature - Human Soldier|2|1|During your turn, this creature has first strike.${4}{W}: Creatures you control get +1/+1 until end of turn.| +Clarion Conqueror|Tarkir: Dragonstorm|5|R|{2}{W}|Creature - Dragon|3|3|Flying$Activated abilities of artifacts, creatures, and planeswalkers can't be activated.| Coordinated Maneuver|Tarkir: Dragonstorm|6|C|{1}{W}|Instant|||Choose one --$* Coordinated Maneuver deals damage equal to the number of creatures you control to target creature or planeswalker.$* Destroy target enchantment.| Dalkovan Packbeasts|Tarkir: Dragonstorm|7|U|{2}{W}|Creature - Ox|0|4|Vigilance$Mobilize 3| Descendant of Storms|Tarkir: Dragonstorm|8|U|{W}|Creature - Human Soldier|2|1|Whenever this creature attacks, you may pay {1}{W}. If you do, it endures 1.| @@ -57211,6 +57212,7 @@ Fortress Kin-Guard|Tarkir: Dragonstorm|12|C|{1}{W}|Creature - Dog Soldier|1|2|Wh Lightfoot Technique|Tarkir: Dragonstorm|14|C|{1}{W}|Instant|||Put a +1/+1 counter on target creature. It gains flying and indestructible until end of turn.| Loxodon Battle Priest|Tarkir: Dragonstorm|15|U|{4}{W}|Creature - Elephant Cleric|3|5|At the beginning of combat on your turn, put a +1/+1 counter on another target creature you control.| Mardu Devotee|Tarkir: Dragonstorm|16|C|{W}|Creature - Human Scout|1|2|When this creature enters, scry 2.${1}: Add {R}, {W}, or {B}. Activate only once each turn.| +Osseous Exhale|Tarkir: Dragonstorm|17|C|{1}{W}|Instant|||As an additional cost to cast this spell, you may behold a Dragon.$Osseous Exhale deals 5 damage to target attacking or blocking creature. If a Dragon was beheld, you gain 2 life.| Rally the Monastery|Tarkir: Dragonstorm|19|U|{3}{W}|Instant|||This spell costs {2} less to cast if you've cast another spell this turn.$Choose one --$* Create two 1/1 white Monk creature tokens with prowess.$* Up to two target creatures you control each get +2/+2 until end of turn.$* Destroy target creature with power 4 or greater.| Rebellious Strike|Tarkir: Dragonstorm|20|C|{1}{W}|Instant|||Target creature gets +3/+0 until end of turn.$Draw a card.| Riling Dawnbreaker|Tarkir: Dragonstorm|21|C|{4}{W}|Creature - Dragon|3|4|Flying, vigilance$At the beginning of combat on your turn, another target creature you control gets +1/+0 until end of turn.| @@ -57218,6 +57220,7 @@ Signaling Roar|Tarkir: Dragonstorm|21|C|{1}{W}|Sorcery - Omen|3|4|Create a 2/2 w Sage of the Skies|Tarkir: Dragonstorm|22|R|{2}{W}|Creature - Human Monk|2|3|When you cast this spell, if you've cast another spell this turn, copy this spell.$Flying, lifelink| Salt Road Packbeast|Tarkir: Dragonstorm|23|C|{5}{W}|Creature - Beast|4|3|This spell costs {1} less to cast for each creature you control.$When this creature enters, draw a card.| Smile at Death|Tarkir: Dragonstorm|24|M|{3}{W}{W}|Enchantment|||At the beginning of your upkeep, return up to two target creature cards with power 2 or less from your graveyard to the battlefield. Put a +1/+1 counter on each of those creatures.| +Starry-Eyed Skyrider|Tarkir: Dragonstorm|25|U|{2}{W}|Creature - Human Scout|1|3|Flying$Whenever this creature attacks, another target creature you control gains flying until end of turn.$Attacking tokens you control have flying.| Static Snare|Tarkir: Dragonstorm|26|U|{4}{W}|Enchantment|||Flash$This spell costs {1} less to cast for each attacking creature.$When this enchantment enters, exile target artifact or creature an opponent controls until this enchantment leaves the battlefield.| Stormplain Detainment|Tarkir: Dragonstorm|28|C|{2}{W}|Enchantment|||When this enchantment enters, exile target nonland permanent an opponent controls until this enchantment leaves the battlefield.| Sunpearl Kirin|Tarkir: Dragonstorm|29|U|{1}{W}|Creature - Kirin|2|1|Flash$Flying$When this creature enters, return up to one other target nonland permanent you control to its owner's hand. If it was a token, draw a card.| @@ -57230,6 +57233,7 @@ Agent of Kotis|Tarkir: Dragonstorm|36|C|{1}{U}|Creature - Human Rogue|2|1|Renew Bewildering Blizzard|Tarkir: Dragonstorm|38|U|{4}{U}{U}|Instant|||Draw three cards. Creatures your opponents control get -3/-0 until end of turn.| Dirgur Island Dragon|Tarkir: Dragonstorm|40|C|{5}{U}|Creature - Dragon|4|4|Flying$Ward {2}| Skimming Strike|Tarkir: Dragonstorm|40|C|{1}{U}|Instant - Omen|4|4|Tap up to one target creature. Draw a card.| +Dispelling Exhale|Tarkir: Dragonstorm|41|C|{1}{U}|Instant|||As an additional cost to cast this spell, you may behold a Dragon.$Counter target spell unless its controller pays {2}. If a Dragon was beheld, counter that spell unless its controller pays {4} instead.| Dragonologist|Tarkir: Dragonstorm|42|R|{2}{U}|Creature - Human Wizard|1|3|When this creature enters, look at the top six cards of your library. You may reveal an instant, sorcery, or Dragon card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.$Untapped Dragons you control have hexproof.| Dragonstorm Forecaster|Tarkir: Dragonstorm|43|U|{U}|Creature - Human Scout|0|3|{2}, {T}: Search your library for a card named Dragonstorm Globe or Boulderborn Dragon, reveal it, put it into your hand, then shuffle.| Essence Anchor|Tarkir: Dragonstorm|44|U|{2}{U}|Artifact|||At the beginning of your upkeep, surveil 1.${T}: Create a 2/2 black Zombie Druid creature token. Activate only during your turn and only if a card left your graveyard this turn.| @@ -57237,16 +57241,17 @@ Fresh Start|Tarkir: Dragonstorm|46|U|{1}{U}|Enchantment - Aura|||Flash$Enchant c Humbling Elder|Tarkir: Dragonstorm|48|C|{U}|Creature - Human Monk|1|2|Flash$When this creature enters, target creature an opponent controls gets -2/-0 until end of turn.| Kishla Trawlers|Tarkir: Dragonstorm|50|U|{2}{U}|Creature - Human Citizen|3|2|When this creature enters, you may exile a creature card from your graveyard. When you do, return target instant or sorcery card from your graveyard to your hand.| Marang River Regent|Tarkir: Dragonstorm|51|R|{4}{U}{U}|Creature - Dragon|6|7|Flying$When this creature enters, return up to two other target nonland permanents to their owners' hands.| -Coil and Catch|Tarkir: Dragonstorm|51|R|{3}{U}|Instant - Omen|6|7|Draw three cards, then discard a card.| Naga Fleshcrafter|Tarkir: Dragonstorm|52|R|{3}{U}|Creature - Snake Shapeshifter|0|0|You may have this creature enter as a copy of any creature on the battlefield.$Renew -- {2}{U}, Exile this card from your graveyard: Put a +1/+1 counter on target nonlegendary creature you control. Each other creature you control becomes a copy of that creature until end of turn. Activate only as a sorcery.| Ringing Strike Mastery|Tarkir: Dragonstorm|53|C|{U}|Enchantment - Aura|||Enchant creature$When this Aura enters, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchanted creature has "{5}: Untap this creature."| Roiling Dragonstorm|Tarkir: Dragonstorm|55|U|{1}{U}|Enchantment|||When this enchantment enters, draw two cards, then discard a card.$When a Dragon you control enters, return this enchantment to its owner's hand.| Snowmelt Stag|Tarkir: Dragonstorm|57|C|{3}{U}|Creature - Elemental Elk|2|5|Vigilance$During your turn, this creature has base power and toughness 5/2.${5}{U}{U}: This creature can't be blocked this turn.| Spectral Denial|Tarkir: Dragonstorm|58|U|{X}{U}|Instant|||This spell costs {1} less to cast for each creature you control with power 4 or greater.$Counter target spell unless its controller pays {X}.| +Stillness in Motion|Tarkir: Dragonstorm|59|R|{1}{U}|Enchantment|||At the beginning of your upkeep, mill three cards. Then if you have no cards in your library, exile this enchantment and put five cards from your graveyard on top of your library in any order.| Taigam, Master Opportunist|Tarkir: Dragonstorm|60|M|{1}{U}|Legendary Creature - Human Monk|2|2|Flurry -- Whenever you cast your second spell each turn, copy it, then exile the spell you cast with four time counters on it. If it doesn't have suspend, it gains suspend.| Temur Devotee|Tarkir: Dragonstorm|61|C|{1}{U}|Creature - Human Druid|3|3|Defender${1}: Add {G}, {U}, or {R}. Activate only once each turn.| Unending Whisper|Tarkir: Dragonstorm|62|C|{U}|Sorcery|||Draw a card.$Harmonize {5}{U}| Ureni's Rebuff|Tarkir: Dragonstorm|63|U|{1}{U}|Sorcery|||Return target creature to its owner's hand.$Harmonize {5}{U}| +Wingspan Stride|Tarkir: Dragonstorm|66|C|{U}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has flying.${2}{U}: Return this Aura to its owner's hand.| Winternight Stories|Tarkir: Dragonstorm|67|R|{2}{U}|Sorcery|||Draw three cards. Then discard two cards unless you discard a creature card.$Harmonize {4}{U}| Abzan Devotee|Tarkir: Dragonstorm|68|C|{1}{B}|Creature - Dog Cleric|2|1|{1}: Add {W}, {B}, or {G}. Activate only once each turn.${2}{B}: Return this card from your graveyard to your hand.| Alesha's Legacy|Tarkir: Dragonstorm|72|C|{1}{B}|Instant|||Target creature you control gains deathtouch and indestructible until end of turn.| @@ -57255,18 +57260,20 @@ Caustic Exhale|Tarkir: Dragonstorm|74|C|{B}|Instant|||As an additional cost to c Corroding Dragonstorm|Tarkir: Dragonstorm|75|U|{1}{B}|Enchantment|||When this enchantment enters, each opponent loses 2 life and you gain 2 life. Surveil 2.$When a Dragon you control enters, return this enchantment to its owner's hand.| Cruel Truths|Tarkir: Dragonstorm|76|C|{3}{B}|Instant|||Surveil 2, then draw two cards. You lose 2 life.| Desperate Measures|Tarkir: Dragonstorm|78|U|{B}|Instant|||Target creature gets +1/-1 until end of turn. When it dies under your control this turn, draw two cards.| -Dragon's Prey|Tarkir: Dragonstorm|79|C|{2}{B}|Instant|||This spell costs 2 more to cast if it targets a Dragon.$Destroy target creature.| +Dragon's Prey|Tarkir: Dragonstorm|79|C|{2}{B}|Instant|||This spell costs {2} more to cast if it targets a Dragon.$Destroy target creature.| Feral Deathgorger|Tarkir: Dragonstorm|80|C|{5}{B}|Creature - Dragon|3|5|Flying, deathtouch$When this creature enters, exile up to two target cards from a single graveyard.| Dusk Sight|Tarkir: Dragonstorm|80|C|{1}{B}|Sorcery - Omen|3|5|Put a +1/+1 counter on up to one target creature. Draw a card.| Krumar Initiate|Tarkir: Dragonstorm|84|U|{1}{B}|Creature - Human Cleric|2|2|{X}{B}, {T}, Pay X life: This creature endures X. Activate only as a sorcery.| Qarsi Revenant|Tarkir: Dragonstorm|86|R|{1}{B}{B}|Creature - Vampire|3|3|Flying, deathtouch, lifelink$Renew -- {2}{B}, Exile this card from your graveyard: Put a flying counter, a deathtouch counter, and a lifelink counter on target creature. Activate only as a sorcery.| Rot-Curse Rakshasa|Tarkir: Dragonstorm|87|M|{1}{B}|Creature - Demon|5|5|Trample$Decayed$Renew -- {X}{B}{B}, Exile this card from your graveyard: Put a decayed counter on each of X target creatures. Activate only as a sorcery.| Scavenger Regent|Tarkir: Dragonstorm|90|R|{3}{B}|Creature - Dragon|4|4|Flying$Ward--Discard a card.| -Exude Toxin|Tarkir: Dragonstorm|90|R|{X}{B}{B}|Sorcery - Omen|4|4|Each non-Dragon creature gets -X/-X until end of turn.| The Sibsig Ceremony|Tarkir: Dragonstorm|91|R|{B}{B}{B}|Legendary Enchantment|||Creature spells you cast cost {2} less to cast.$Whenever a creature you control enters, if you cast it, destroy that creature, then create a 2/2 black Zombie Druid creature token.| Sidisi, Regent of the Mire|Tarkir: Dragonstorm|92|R|{1}{B}|Legendary Creature - Zombie Snake Warlock|1|3|{T}, Sacrifice a creature you control with mana value X other than Sidisi: Return target creature card with mana value X plus 1 from your graveyard to the battlefield. Activate only as a sorcery.| +Sinkhole Surveyor|Tarkir: Dragonstorm|93|R|{1}{B}|Creature - Bird Scout|1|3|Flying$Whenever this creature attacks, you lose 1 life and this creature endures 1.| Unrooted Ancestor|Tarkir: Dragonstorm|96|U|{2}{B}|Creature - Spirit Cleric|3|2|Flash${1}, Sacrifice another creature: This creature gains indestructible until end of turn. Tap it.| Venerated Stormsinger|Tarkir: Dragonstorm|97|U|{3}{B}|Creature - Orc Cleric|3|3|Mobilize 1$Whenever this creature or another creature you control dies, each opponent loses 1 life and you gain 1 life.| +Wail of War|Tarkir: Dragonstorm|98|U|{2}{B}|Instant|||Choose one --$* Creatures target opponent controls get -1/-1 until end of turn.$* Return up to two target creature cards from your graveyard to your hand.| +Worthy Cost|Tarkir: Dragonstorm|99|C|{B}|Sorcery|||As an additional cost to cast this spell, sacrifice a creature.$Exile target creature or planeswalker.| Yathan Tombguard|Tarkir: Dragonstorm|100|U|{2}{B}|Creature - Human Warrior|2|3|Menace$Whenever a creature you control with a counter on it deals combat damage to a player, you draw a card and you lose 1 life.| Breaching Dragonstorm|Tarkir: Dragonstorm|101|U|{4}{R}|Enchantment|||When this enchantment enters, exile cards from the top of your library until you exile a nonland card. You may cast it without paying its mana cost if that spell's mana value is 8 or less. If you don't, put that card into your hand.$When a Dragon you control enters, return this enchantment to its owner's hand.| Channeled Dragonfire|Tarkir: Dragonstorm|102|U|{R}|Sorcery|||Channeled Dragonfire deals 2 damage to any target.$Harmonize {5}{R}{R}| @@ -57274,9 +57281,13 @@ Cori-Steel Cutter|Tarkir: Dragonstorm|103|R|{1}{R}|Artifact - Equipment|||Equipp Devoted Duelist|Tarkir: Dragonstorm|104|C|{1}{R}|Creature - Goblin Monk|2|1|Haste$Flurry -- Whenever you cast your second spell each turn, this creature deals 1 damage to each opponent.| Dracogenesis|Tarkir: Dragonstorm|105|M|{6}{R}{R}|Enchantment|||You may cast Dragon spells without paying their mana costs.| Equilibrium Adept|Tarkir: Dragonstorm|106|U|{3}{R}|Creature - Dog Monk|2|4|When this creature enters, exile the top card of your library. Until the end of your next turn, you may play that card.$Flurry -- Whenever you cast your second spell each turn, this creature gains double strike until end of turn.| +Fire-Rim Form|Tarkir: Dragonstorm|107|C|{1}{R}|Enchantment - Aura|||Flash$Enchant creature$When this Aura enters, enchanted creature gains first strike until end of turn.$Enchanted creature gets +2/+0.| Jeskai Devotee|Tarkir: Dragonstorm|110|C|{1}{R}|Creature - Orc Monk|2|2|Flurry -- Whenever you cast your second spell each turn, this creature gets +1/+1 until end of turn.${1}: Add {U}, {R}, or {W}. Activate only once each turn.| Magmatic Hellkite|Tarkir: Dragonstorm|111|R|{2}{R}{R}|Creature - Dragon|4|5|Flying$When this creature enters, destroy target nonbasic land an opponent controls. Its controller searches their library for a basic land card, puts it onto the battlefield tapped with a stun counter on it, then shuffles.| +Meticulous Artisan|Tarkir: Dragonstorm|112|C|{3}{R}|Creature - Djinn Artificer|3|3|Prowess$When this creature enters, create a Treasure token.| +Molten Exhale|Tarkir: Dragonstorm|113|C|{1}{R}|Sorcery|||You may cast this spell as though it had flash if you behold a Dragon as an additional cost to cast it.$Molten Exhale deals 4 damage to target creature or planeswalker.| Narset's Rebuke|Tarkir: Dragonstorm|114|C|{4}{R}|Instant|||Narset's Rebuke deals 5 damage to target creature. Add {U}{R}{W}. If that creature would die this turn, exile it instead.| +Reverberating Summons|Tarkir: Dragonstorm|117|U|{1}{R}|Enchantment|||At the beginning of each combat, if you've cast two or more spells this turn, this enchantment becomes a 3/3 Monk creature with haste in addition to its other types until end of turn.${1}{R}, Discard your hand, Sacrifice this enchantment: Draw two cards.| Sarkhan, Dragon Ascendant|Tarkir: Dragonstorm|118|R|{1}{R}|Legendary Creature - Human Druid|2|2|When Sarkhan enters, you may behold a Dragon. If you do, create a Treasure token.$Whenever a Dragon you control enters, put a +1/+1 counter on Sarkhan. Until end of turn, Sarkhan becomes a Dragon in addition to its other types and gains flying.| Seize Opportunity|Tarkir: Dragonstorm|119|C|{2}{R}|Instant|||Choose one --$* Exile the top two cards of your library. Until the end of your next turn, you may play those cards.$* Up to two target creatures each get +2/+1 until end of turn.| Shock Brigade|Tarkir: Dragonstorm|120|C|{1}{R}|Creature - Goblin Soldier|1|3|Menace$Mobilize 1| @@ -57297,8 +57308,10 @@ Dusyut Earthcarver|Tarkir: Dragonstorm|141|C|{5}{G}|Creature - Elephant Druid|4| Encroaching Dragonstorm|Tarkir: Dragonstorm|142|U|{3}{G}|Enchantment|||When this enchantment enters, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.$When a Dragon you control enters, return this enchantment to its owner's hand.| Herd Heirloom|Tarkir: Dragonstorm|144|R|{1}{G}|Artifact|||{T}: Add one mana of any color. Spend this mana only to cast a creature spell.${T}: Until end of turn, target creature you control with power 4 or greater gains trample and "Whenever this creature deals combat damage to a player, draw a card."| Heritage Reclamation|Tarkir: Dragonstorm|145|C|{1}{G}|Instant|||Choose one --$* Destroy target artifact.$* Destroy target enchantment.$* Exile up to one target card from a graveyard. Draw a card.| +Krotiq Nestguard|Tarkir: Dragonstorm|148|C|{2}{G}|Creature - Insect|4|4|Defender${2}{G}: This creature can attack this turn as though it didn't have defender.| Lasyd Prowler|Tarkir: Dragonstorm|149|R|{2}{G}{G}|Creature - Snake Ranger|5|5|When this creature enters, you may mill cards equal to the number of lands you control.$Renew -- {1}{G}, Exile this card from your graveyard: Put X +1/+1 counters on target creature, where X is the number of land cards in your graveyard. Activate only as a sorcery.| Nature's Rhythm|Tarkir: Dragonstorm|150|R|{X}{G}{G}|Sorcery|||Search your library for a creature card with mana value X or less, put it onto the battlefield, then shuffle.$Harmonize {X}{G}{G}{G}{G}| +Piercing Exhale|Tarkir: Dragonstorm|151|C|{1}{G}|Instant|||As an additional cost to cast this spell, you may behold a Dragon.$Target creature you control deals damage equal to its power to target creature or planeswalker. If a Dragon was beheld, surveil 2.| Rite of Renewal|Tarkir: Dragonstorm|153|U|{3}{G}|Sorcery|||Return up to two target permanent cards from your graveyard to your hand. Target player shuffles up to four target cards from their graveyard into their library. Exile Rite of Renewal.| Roamer's Routine|Tarkir: Dragonstorm|154|C|{2}{G}|Sorcery|||Search your library for a basic land card, put it onto the battlefield tapped, then shuffle.$Harmonize {4}{G}| Sagu Wildling|Tarkir: Dragonstorm|157|C|{4}{G}|Creature - Dragon|3|3|Flying$When this creature enters, you gain 3 life.| @@ -57307,8 +57320,11 @@ Sarkhan's Resolve|Tarkir: Dragonstorm|158|C|{1}{G}|Instant|||Choose one --$* Tar Snakeskin Veil|Tarkir: Dragonstorm|159|C|{G}|Instant|||Put a +1/+1 counter on target creature you control. It gains hexproof until end of turn.| Sultai Devotee|Tarkir: Dragonstorm|160|C|{1}{G}|Creature - Zombie Snake Druid|2|1|Deathtouch${1}: Add {B}, {G}, or {U}. Activate only once each turn.| Surrak, Elusive Hunter|Tarkir: Dragonstorm|161|R|{2}{G}|Legendary Creature - Human Warrior|4|3|This spell can't be countered.$Trample$Whenever a creature you control or a creature spell you control becomes the target of a spell or ability an opponent controls, draw a card.| +Synchronized Charge|Tarkir: Dragonstorm|162|U|{1}{G}|Sorcery|||Distribute two +1/+1 counters among one or two target creatures you control. Creatures you control with counters on them gain vigilance and trample until end of turn.$Harmonize {4}{G}| Undergrowth Leopard|Tarkir: Dragonstorm|165|C|{1}{G}|Creature - Cat|2|2|Vigilance${1}, Sacrifice this creature: Destroy target artifact or enchantment.| +Warden of the Grove|Tarkir: Dragonstorm|166|R|{2}{G}|Creature - Hydra|2|2|At the beginning of your end step, put a +1/+1 counter on this creature.$Whenever another nontoken creature you control enters, it endures X, where X is the number of counters on this creature.| All-Out Assault|Tarkir: Dragonstorm|167|M|{2}{R}{W}{B}|Enchantment|||Creatures you control get +1/+1 and have deathtouch.$When this enchantment enters, if it's your main phase, there is an additional combat phase after this phase followed by an additional main phase. When you next attack this turn, untap each creature you control.| +Armament Dragon|Tarkir: Dragonstorm|168|U|{3}{W}{B}{G}|Creature -- Dragon|3|4|Flying$When this creature enters, distribute three +1/+1 counters among one, two, or three target creatures you control.| Auroral Procession|Tarkir: Dragonstorm|169|U|{G}{U}|Instant|||Return target card from your graveyard to your hand.| Awaken the Honored Dead|Tarkir: Dragonstorm|170|R|{B}{G}{U}|Enchantment - Saga|||(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I -- Destroy target nonland permanent.$II -- Mill three cards.$III -- You may discard a card. When you do, return target creature or land card from your graveyard to your hand.| Barrensteppe Siege|Tarkir: Dragonstorm|171|R|{2}{W}{B}|Enchantment|||As this enchantment enters, choose Abzan or Mardu.$* Abzan -- At the beginning of your end step, put a +1/+1 counter on each creature you control.$* Mardu -- At the beginning of your end step, if a creature died under your control this turn, each opponent sacrifices a creature of their choice.| @@ -57330,11 +57346,15 @@ Frostcliff Siege|Tarkir: Dragonstorm|187|R|{1}{U}{R}|Enchantment|||As this encha Glacial Dragonhunt|Tarkir: Dragonstorm|188|U|{U}{R}|Sorcery|||Draw a card, then you may discard a card. When you discard a nonland card this way, Glacial Dragonhunt deals 3 damage to target creature.$Harmonize {4}{U}{R}| Glacierwood Siege|Tarkir: Dragonstorm|189|R|{1}{G}{U}|Enchantment|||As this enchantment enters, choose Temur or Sultai.$* Temur -- Whenever you cast an instant or sorcery spell, target player mills four cards.$* Sultai -- You may play lands from your graveyard.| Gurmag Nightwatch|Tarkir: Dragonstorm|190|C|{2/B}{2/G}{2/U}|Creature - Human Ranger|3|3|When this creature enters, look at the top three cards of your library. You may put one of those cards back on top of your library. Put the rest into your graveyard.| +Hardened Tactician|Tarkir: Dragonstorm|191|U|{1}{W}{B}|Creature - Human Warrior|2|4|{1}, Sacrifice a token: Draw a card.| Hollowmurk Siege|Tarkir: Dragonstorm|192|R|{B}{G}|Enchantment|||As this enchantment enters, choose Sultai or Abzan.$* Sultai -- Whenever a counter is put on a creature you control, draw a card. This ability triggers only once each turn.$* Abzan -- Whenever you attack, put a +1/+1 counter on target attacking creature. It gains menace until end of turn.| Host of the Hereafter|Tarkir: Dragonstorm|193|U|{2}{B}{G}|Creature - Zombie Warlock|2|2|This creature enters with two +1/+1 counters on it.$Whenever this creature or another creature you control dies, if it had counters on it, put its counters on up to one target creature you control.| Inevitable Defeat|Tarkir: Dragonstorm|194|R|{1}{R}{W}{B}|Instant|||This spell can't be countered.$Exile target nonland permanent. Its controller loses 3 life and you gain 3 life.| +Jeskai Brushmaster|Tarkir: Dragonstorm|195|U|{1}{U}{R}{W}|Creature - Orc Monk|2|4|Double strike$Prowess| Jeskai Revelation|Tarkir: Dragonstorm|196|M|{4}{U}{R}{W}|Instant|||Return target spell or permanent to its owner's hand. Jeskai Revelation deals 4 damage to any target. Create two 1/1 white Monk creature tokens with prowess. Draw two cards. You gain 4 life.| +Jeskai Shrinekeeper|Tarkir: Dragonstorm|197|U|{2}{U}{R}{W}|Creature - Dragon|3|3|Flying, haste$Whenever this creature deals combat damage to a player, you gain 1 life and draw a card.| Karakyk Guardian|Tarkir: Dragonstorm|198|U|{3}{G}{U}{R}|Creature -- Dragon|6|5|Flying, vigilance, trample$This creature has hexproof if it hasn't dealt damage yet.| +Kheru Goldkeeper|Tarkir: Dragonstorm|199|U|{1}{B}{G}{U}|Creature - Dragon|3|3|Flying$Whenever one or more cards leave your graveyard during your turn, create a Treasure token.$Renew -- {2}{B}{G}{U}, Exile this card from your graveyard: Put two +1/+1 counters and a flying counter on target creature. Activate only as a sorcery.| Kin-Tree Severance|Tarkir: Dragonstorm|200|U|{2/W}{2/B}{2/G}|Instant|||Exile target permanent with mana value 3 or greater.| Kishla Skimmer|Tarkir: Dragonstorm|201|U|{G}{U}|Creature - Bird Scout|2|2|Flying$Whenever a card leaves your graveyard during your turn, draw a card. This ability triggers only once each turn.| Kotis, the Fangkeeper|Tarkir: Dragonstorm|202|R|{1}{B}{G}{U}|Legendary Creature - Zombie Warrior|2|1|Indestructible$Whenever Kotis deals combat damage to a player, exile the top X cards of their library, where X is the amount of damage dealt. You may cast any number of spells with mana value X or less from among them without paying their mana costs.| @@ -57352,6 +57372,7 @@ Rediscover the Way|Tarkir: Dragonstorm|215|R|{U}{R}{W}|Enchantment - Saga|||(As Reigning Victor|Tarkir: Dragonstorm|216|C|{2/R}{2/W}{2/B}|Creature - Orc Warrior|3|3|Mobilize 1$When this creature enters, target creature gets +1/+0 and gains indestructible until end of turn.| Revival of the Ancestors|Tarkir: Dragonstorm|218|R|{1}{W}{B}{G}|Enchantment - Saga|||(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I -- Create three 1/1 white Spirit creature tokens.$II -- Distribute three +1/+1 counters among one, two, or three target creatures you control.$III -- Creatures you control gain trample and lifelink until end of turn.| Riverwheel Sweep|Tarkir: Dragonstorm|219|U|{2/U}{2/R}{2/W}|Sorcery|||Tap target creature. Put three stun counters on it.$Exile the top two cards of your library. Choose one of them. Until the end of your next turn, you may play that card.| +Roar of Endless Song|Tarkir: Dragonstorm|220|R|{2}{G}{U}{R}|Enchantment - Saga|||(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I, II -- Create a 5/5 green Elephant creature token.$III -- Double the power and toughness of each creature you control until end of turn.| Runescale Stormbrood|Tarkir: Dragonstorm|221|U|{3}{R}|Creature - Dragon|2|4|Flying$Whenever you cast a noncreature spell or a Dragon spell, this creature gets +2/+0 until end of turn.| Chilling Screech|Tarkir: Dragonstorm|221|U|{1}{U}|Instant - Omen|2|4|Counter target spell with mana value 2 or less.| Severance Priest|Tarkir: Dragonstorm|222|R|{W}{B}{G}|Creature - Djinn Cleric|3|3|Deathtouch$When this creature enters, target opponent reveals their hand. You may choose a nonland card from it. If you do, exile that card.$When this creature leaves the battlefield, the exiled card's owner creates an X/X white Spirit creature token, where X is the mana value of the exiled card.| From e50401daa77ae338ca296267ba45201b2742b4fc Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:50:47 -0400 Subject: [PATCH 05/34] [TDM] Implement Worthy Cost --- Mage.Sets/src/mage/cards/w/WorthyCost.java | 37 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 38 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WorthyCost.java diff --git a/Mage.Sets/src/mage/cards/w/WorthyCost.java b/Mage.Sets/src/mage/cards/w/WorthyCost.java new file mode 100644 index 00000000000..f7520ee460b --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WorthyCost.java @@ -0,0 +1,37 @@ +package mage.cards.w; + +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WorthyCost extends CardImpl { + + public WorthyCost(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); + + // As an additional cost to cast this spell, sacrifice a creature. + this.getSpellAbility().addCost(new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE)); + + // Exile target creature or planeswalker. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + } + + private WorthyCost(final WorthyCost card) { + super(card); + } + + @Override + public WorthyCost copy() { + return new WorthyCost(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 98c93535168..164de7a52f0 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -141,6 +141,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Watcher of the Wayside", 249, Rarity.COMMON, mage.cards.w.WatcherOfTheWayside.class)); cards.add(new SetCardInfo("Wind-Scarred Crag", 271, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); cards.add(new SetCardInfo("Winternight Stories", 67, Rarity.RARE, mage.cards.w.WinternightStories.class)); + cards.add(new SetCardInfo("Worthy Cost", 99, Rarity.COMMON, mage.cards.w.WorthyCost.class)); cards.add(new SetCardInfo("Yathan Tombguard", 100, Rarity.UNCOMMON, mage.cards.y.YathanTombguard.class)); cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); From 8cd4c958dd921f2fff3bbdbb7ad970b79f8924d6 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:52:14 -0400 Subject: [PATCH 06/34] [TDM] Implement Wingspan Stride --- .../src/mage/cards/w/WingspanStride.java | 59 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 60 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WingspanStride.java diff --git a/Mage.Sets/src/mage/cards/w/WingspanStride.java b/Mage.Sets/src/mage/cards/w/WingspanStride.java new file mode 100644 index 00000000000..41c42f11c7e --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WingspanStride.java @@ -0,0 +1,59 @@ +package mage.cards.w; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WingspanStride extends CardImpl { + + public WingspanStride(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.addAbility(new EnchantAbility(auraTarget)); + + // Enchanted creature gets +1/+1 and has flying. + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1)); + ability.addEffect(new GainAbilityAttachedEffect( + FlyingAbility.getInstance(), AttachmentType.AURA + ).setText("and has flying")); + this.addAbility(ability); + + // {2}{U}: Return this Aura to its owner's hand. + this.addAbility(new SimpleActivatedAbility(new ReturnToHandSourceEffect(), new ManaCostsImpl<>("{2}{U}"))); + } + + private WingspanStride(final WingspanStride card) { + super(card); + } + + @Override + public WingspanStride copy() { + return new WingspanStride(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 164de7a52f0..298d86a4484 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -140,6 +140,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Voice of Victory", 33, Rarity.RARE, mage.cards.v.VoiceOfVictory.class)); cards.add(new SetCardInfo("Watcher of the Wayside", 249, Rarity.COMMON, mage.cards.w.WatcherOfTheWayside.class)); cards.add(new SetCardInfo("Wind-Scarred Crag", 271, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); + cards.add(new SetCardInfo("Wingspan Stride", 66, Rarity.COMMON, mage.cards.w.WingspanStride.class)); cards.add(new SetCardInfo("Winternight Stories", 67, Rarity.RARE, mage.cards.w.WinternightStories.class)); cards.add(new SetCardInfo("Worthy Cost", 99, Rarity.COMMON, mage.cards.w.WorthyCost.class)); cards.add(new SetCardInfo("Yathan Tombguard", 100, Rarity.UNCOMMON, mage.cards.y.YathanTombguard.class)); From 5b4beb734fb77ceabd0dd8398fb6324740e08bff Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:52:56 -0400 Subject: [PATCH 07/34] [TDM] Implement Meticulous Artisan --- .../src/mage/cards/m/MeticulousArtisan.java | 43 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MeticulousArtisan.java diff --git a/Mage.Sets/src/mage/cards/m/MeticulousArtisan.java b/Mage.Sets/src/mage/cards/m/MeticulousArtisan.java new file mode 100644 index 00000000000..be0c47019f1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MeticulousArtisan.java @@ -0,0 +1,43 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.permanent.token.TreasureToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MeticulousArtisan extends CardImpl { + + public MeticulousArtisan(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + + this.subtype.add(SubType.DJINN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Prowess + this.addAbility(new ProwessAbility()); + + // When this creature enters, create a Treasure token. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new TreasureToken()))); + } + + private MeticulousArtisan(final MeticulousArtisan card) { + super(card); + } + + @Override + public MeticulousArtisan copy() { + return new MeticulousArtisan(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 298d86a4484..3dcb3809c9a 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -85,6 +85,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Loxodon Battle Priest", 15, Rarity.UNCOMMON, mage.cards.l.LoxodonBattlePriest.class)); cards.add(new SetCardInfo("Mardu Devotee", 16, Rarity.COMMON, mage.cards.m.MarduDevotee.class)); cards.add(new SetCardInfo("Mardu Monument", 245, Rarity.UNCOMMON, mage.cards.m.MarduMonument.class)); + cards.add(new SetCardInfo("Meticulous Artisan", 112, Rarity.COMMON, mage.cards.m.MeticulousArtisan.class)); cards.add(new SetCardInfo("Monastery Messenger", 208, Rarity.COMMON, mage.cards.m.MonasteryMessenger.class)); cards.add(new SetCardInfo("Mountain", 283, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mox Jasper", 246, Rarity.MYTHIC, mage.cards.m.MoxJasper.class)); From 18037f9821f3f0cfb1d54bc83d1315e4faf26144 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:54:13 -0400 Subject: [PATCH 08/34] [TDM] Implement Krotiq Nestguard --- .../src/mage/cards/k/KrotiqNestguard.java | 45 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KrotiqNestguard.java diff --git a/Mage.Sets/src/mage/cards/k/KrotiqNestguard.java b/Mage.Sets/src/mage/cards/k/KrotiqNestguard.java new file mode 100644 index 00000000000..c1af4abfc9f --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KrotiqNestguard.java @@ -0,0 +1,45 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.CanAttackAsThoughItDidntHaveDefenderSourceEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KrotiqNestguard extends CardImpl { + + public KrotiqNestguard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.subtype.add(SubType.INSECT); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {2}{G}: This creature can attack this turn as though it didn't have defender. + this.addAbility(new SimpleActivatedAbility( + new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{2}{G}") + )); + } + + private KrotiqNestguard(final KrotiqNestguard card) { + super(card); + } + + @Override + public KrotiqNestguard copy() { + return new KrotiqNestguard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 3dcb3809c9a..fc616ec5389 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -82,6 +82,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); + cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); cards.add(new SetCardInfo("Loxodon Battle Priest", 15, Rarity.UNCOMMON, mage.cards.l.LoxodonBattlePriest.class)); cards.add(new SetCardInfo("Mardu Devotee", 16, Rarity.COMMON, mage.cards.m.MarduDevotee.class)); cards.add(new SetCardInfo("Mardu Monument", 245, Rarity.UNCOMMON, mage.cards.m.MarduMonument.class)); From 25067d6e64194869110f5257ca0d9a72df613744 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 12:54:47 -0400 Subject: [PATCH 09/34] [TDM] Implement Jeskai Brushmaster --- .../src/mage/cards/j/JeskaiBrushmaster.java | 41 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/j/JeskaiBrushmaster.java diff --git a/Mage.Sets/src/mage/cards/j/JeskaiBrushmaster.java b/Mage.Sets/src/mage/cards/j/JeskaiBrushmaster.java new file mode 100644 index 00000000000..300162d69f8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JeskaiBrushmaster.java @@ -0,0 +1,41 @@ +package mage.cards.j; + +import mage.MageInt; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JeskaiBrushmaster extends CardImpl { + + public JeskaiBrushmaster(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}{W}"); + + this.subtype.add(SubType.ORC); + this.subtype.add(SubType.MONK); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Double strike + this.addAbility(DoubleStrikeAbility.getInstance()); + + // Prowess + this.addAbility(new ProwessAbility()); + } + + private JeskaiBrushmaster(final JeskaiBrushmaster card) { + super(card); + } + + @Override + public JeskaiBrushmaster copy() { + return new JeskaiBrushmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index fc616ec5389..7c957c560a3 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -77,6 +77,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Inevitable Defeat", 194, Rarity.RARE, mage.cards.i.InevitableDefeat.class)); cards.add(new SetCardInfo("Island", 279, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jade-Cast Sentinel", 243, Rarity.COMMON, mage.cards.j.JadeCastSentinel.class)); + cards.add(new SetCardInfo("Jeskai Brushmaster", 195, Rarity.UNCOMMON, mage.cards.j.JeskaiBrushmaster.class)); cards.add(new SetCardInfo("Jeskai Devotee", 110, Rarity.COMMON, mage.cards.j.JeskaiDevotee.class)); cards.add(new SetCardInfo("Jeskai Monument", 244, Rarity.UNCOMMON, mage.cards.j.JeskaiMonument.class)); cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); From 06201a768a6b065a1d9013221ba6fdd01d51e4a3 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 13:07:45 -0400 Subject: [PATCH 10/34] [TDM] Implement Kheru Goldkeeper --- Mage.Sets/src/mage/cards/a/AttunedHunter.java | 10 ++-- .../src/mage/cards/k/KheruGoldkeeper.java | 55 +++++++++++++++++++ Mage.Sets/src/mage/cards/t/ThranVigil.java | 22 +++++--- .../src/mage/sets/TarkirDragonstorm.java | 1 + .../CardsLeaveGraveyardTriggeredAbility.java | 12 +++- 5 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java diff --git a/Mage.Sets/src/mage/cards/a/AttunedHunter.java b/Mage.Sets/src/mage/cards/a/AttunedHunter.java index 1693ec4685f..1f891f599c6 100644 --- a/Mage.Sets/src/mage/cards/a/AttunedHunter.java +++ b/Mage.Sets/src/mage/cards/a/AttunedHunter.java @@ -2,8 +2,6 @@ package mage.cards.a; import mage.MageInt; import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; -import mage.abilities.condition.common.MyTurnCondition; -import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -11,6 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; +import mage.filter.StaticFilters; import java.util.UUID; @@ -31,10 +30,9 @@ public final class AttunedHunter extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever one or more cards leave your graveyard during your turn, put a +1/+1 counter on this creature. - this.addAbility(new ConditionalTriggeredAbility( - new CardsLeaveGraveyardTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())), - MyTurnCondition.instance, "Whenever one or more cards leave your graveyard " + - "during your turn, put a +1/+1 counter on this creature." + this.addAbility(new CardsLeaveGraveyardTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + StaticFilters.FILTER_CARD_CARDS, true )); } diff --git a/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java b/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java new file mode 100644 index 00000000000..e82ca09547e --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java @@ -0,0 +1,55 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; +import mage.abilities.common.RenewAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TreasureToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KheruGoldkeeper extends CardImpl { + + public KheruGoldkeeper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}{U}"); + + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever one or more cards leave your graveyard during your turn, create a Treasure token. + this.addAbility(new CardsLeaveGraveyardTriggeredAbility( + new CreateTokenEffect(new TreasureToken()), + StaticFilters.FILTER_CARD_CARDS, true + )); + + // Renew -- {2}{B}{G}{U}, Exile this card from your graveyard: Put two +1/+1 counters and a flying counter on target creature. Activate only as a sorcery. + this.addAbility(new RenewAbility( + "{2}{B}{G}{U}", + CounterType.P1P1.createInstance(2), + CounterType.FLYING.createInstance() + )); + } + + private KheruGoldkeeper(final KheruGoldkeeper card) { + super(card); + } + + @Override + public KheruGoldkeeper copy() { + return new KheruGoldkeeper(this); + } +} diff --git a/Mage.Sets/src/mage/cards/t/ThranVigil.java b/Mage.Sets/src/mage/cards/t/ThranVigil.java index 8d4a2cad490..8638188717c 100644 --- a/Mage.Sets/src/mage/cards/t/ThranVigil.java +++ b/Mage.Sets/src/mage/cards/t/ThranVigil.java @@ -2,14 +2,13 @@ package mage.cards.t; import mage.abilities.Ability; import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; -import mage.abilities.condition.common.MyTurnCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.StaticFilters; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -19,16 +18,21 @@ import java.util.UUID; */ public final class ThranVigil extends CardImpl { + private static final FilterCard filter = new FilterCard("artifact and/or creature cards"); + + static { + filter.add(Predicates.or( + CardType.ARTIFACT.getPredicate(), + CardType.CREATURE.getPredicate() + )); + } + public ThranVigil(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); // Whenever one or more artifact and/or creature cards leave your graveyard during your turn, put a +1/+1 counter on target creature you control. - Ability ability = new ConditionalInterveningIfTriggeredAbility( - new CardsLeaveGraveyardTriggeredAbility( - new AddCountersTargetEffect(CounterType.P1P1.createInstance()), - StaticFilters.FILTER_CARD_ARTIFACT_OR_CREATURE - ), MyTurnCondition.instance, "Whenever one or more artifact and/or creature cards " + - "leave your graveyard during your turn, put a +1/+1 counter on target creature you control." + Ability ability = new CardsLeaveGraveyardTriggeredAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), filter, true ); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 7c957c560a3..7028a44b67b 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -81,6 +81,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jeskai Devotee", 110, Rarity.COMMON, mage.cards.j.JeskaiDevotee.class)); cards.add(new SetCardInfo("Jeskai Monument", 244, Rarity.UNCOMMON, mage.cards.j.JeskaiMonument.class)); cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Kheru Goldkeeper", 199, Rarity.UNCOMMON, mage.cards.k.KheruGoldkeeper.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); diff --git a/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java index 9c82a0e589b..3e7e2ea1c9c 100644 --- a/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java @@ -18,20 +18,27 @@ import java.util.Objects; public class CardsLeaveGraveyardTriggeredAbility extends TriggeredAbilityImpl { private final FilterCard filter; + private final boolean yourTurn; public CardsLeaveGraveyardTriggeredAbility(Effect effect) { this(effect, StaticFilters.FILTER_CARD_CARDS); } public CardsLeaveGraveyardTriggeredAbility(Effect effect, FilterCard filter) { + this(effect, filter, false); + } + + public CardsLeaveGraveyardTriggeredAbility(Effect effect, FilterCard filter, boolean yourTurn) { super(Zone.BATTLEFIELD, effect, false); this.filter = filter; - setTriggerPhrase("Whenever one or more " + filter + " leave your graveyard, "); + this.yourTurn = yourTurn; + setTriggerPhrase("Whenever one or more " + filter + " leave your graveyard" + (yourTurn ? " during your turn" : "") + ", "); } private CardsLeaveGraveyardTriggeredAbility(final CardsLeaveGraveyardTriggeredAbility ability) { super(ability); this.filter = ability.filter; + this.yourTurn = ability.yourTurn; } @Override @@ -41,6 +48,9 @@ public class CardsLeaveGraveyardTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { + if (yourTurn && !isControlledBy(game.getActivePlayerId())) { + return false; + } ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event; return zEvent != null && Zone.GRAVEYARD == zEvent.getFromZone() From 22e7780a888ab1dfee3bf47808e772bc3fe84776 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 13:08:38 -0400 Subject: [PATCH 11/34] [TDM] Implement Sinkhole Surveyor --- .../src/mage/cards/s/SinkholeSurveyor.java | 46 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SinkholeSurveyor.java diff --git a/Mage.Sets/src/mage/cards/s/SinkholeSurveyor.java b/Mage.Sets/src/mage/cards/s/SinkholeSurveyor.java new file mode 100644 index 00000000000..f6fe5ad7989 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SinkholeSurveyor.java @@ -0,0 +1,46 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.keyword.EndureSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SinkholeSurveyor extends CardImpl { + + public SinkholeSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + + this.subtype.add(SubType.BIRD); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever this creature attacks, you lose 1 life and this creature endures 1. + Ability ability = new AttacksTriggeredAbility(new LoseLifeSourceControllerEffect(1)); + ability.addEffect(new EndureSourceEffect(1, "{this}").concatBy("and")); + this.addAbility(ability); + } + + private SinkholeSurveyor(final SinkholeSurveyor card) { + super(card); + } + + @Override + public SinkholeSurveyor copy() { + return new SinkholeSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 7028a44b67b..ac44152ab90 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -115,6 +115,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Seize Opportunity", 119, Rarity.COMMON, mage.cards.s.SeizeOpportunity.class)); cards.add(new SetCardInfo("Shiko, Paragon of the Way", 223, Rarity.MYTHIC, mage.cards.s.ShikoParagonOfTheWay.class)); cards.add(new SetCardInfo("Shock Brigade", 120, Rarity.COMMON, mage.cards.s.ShockBrigade.class)); + cards.add(new SetCardInfo("Sinkhole Surveyor", 93, Rarity.RARE, mage.cards.s.SinkholeSurveyor.class)); cards.add(new SetCardInfo("Skirmish Rhino", 224, Rarity.UNCOMMON, mage.cards.s.SkirmishRhino.class)); cards.add(new SetCardInfo("Smile at Death", 24, Rarity.MYTHIC, mage.cards.s.SmileAtDeath.class)); cards.add(new SetCardInfo("Snakeskin Veil", 159, Rarity.COMMON, mage.cards.s.SnakeskinVeil.class)); From 9ff9f71452e68a6a376f86d5cf634f4589e7519c Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 13:09:59 -0400 Subject: [PATCH 12/34] [TDM] Implement Jeskai Shrinekeeper --- .../src/mage/cards/j/JeskaiShrinekeeper.java | 49 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/j/JeskaiShrinekeeper.java diff --git a/Mage.Sets/src/mage/cards/j/JeskaiShrinekeeper.java b/Mage.Sets/src/mage/cards/j/JeskaiShrinekeeper.java new file mode 100644 index 00000000000..dc400accf57 --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JeskaiShrinekeeper.java @@ -0,0 +1,49 @@ +package mage.cards.j; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JeskaiShrinekeeper extends CardImpl { + + public JeskaiShrinekeeper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{R}{W}"); + + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // Whenever this creature deals combat damage to a player, you gain 1 life and draw a card. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new GainLifeEffect(1)); + ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and")); + this.addAbility(ability); + } + + private JeskaiShrinekeeper(final JeskaiShrinekeeper card) { + super(card); + } + + @Override + public JeskaiShrinekeeper copy() { + return new JeskaiShrinekeeper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index ac44152ab90..4a8b05c953d 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -80,6 +80,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jeskai Brushmaster", 195, Rarity.UNCOMMON, mage.cards.j.JeskaiBrushmaster.class)); cards.add(new SetCardInfo("Jeskai Devotee", 110, Rarity.COMMON, mage.cards.j.JeskaiDevotee.class)); cards.add(new SetCardInfo("Jeskai Monument", 244, Rarity.UNCOMMON, mage.cards.j.JeskaiMonument.class)); + cards.add(new SetCardInfo("Jeskai Shrinekeeper", 197, Rarity.UNCOMMON, mage.cards.j.JeskaiShrinekeeper.class)); cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kheru Goldkeeper", 199, Rarity.UNCOMMON, mage.cards.k.KheruGoldkeeper.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); From 608c524eb95fa2598ecd28dd22c367ee56fcef82 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 13:12:30 -0400 Subject: [PATCH 13/34] [TDM] Implement Lightfoot Technique --- .../src/mage/cards/l/LightfootTechnique.java | 38 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 39 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/l/LightfootTechnique.java diff --git a/Mage.Sets/src/mage/cards/l/LightfootTechnique.java b/Mage.Sets/src/mage/cards/l/LightfootTechnique.java new file mode 100644 index 00000000000..4d9cb4069e2 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LightfootTechnique.java @@ -0,0 +1,38 @@ +package mage.cards.l; + +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class LightfootTechnique extends CardImpl { + + public LightfootTechnique(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); + + // Put a +1/+1 counter on target creature. It gains flying and indestructible until end of turn. + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance()).setText("it gains flying")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()).setText("and indestructible until end of turn")); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private LightfootTechnique(final LightfootTechnique card) { + super(card); + } + + @Override + public LightfootTechnique copy() { + return new LightfootTechnique(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 4a8b05c953d..9e79d538eca 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -86,6 +86,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); + cards.add(new SetCardInfo("Lightfoot Technique", 14, Rarity.COMMON, mage.cards.l.LightfootTechnique.class)); cards.add(new SetCardInfo("Loxodon Battle Priest", 15, Rarity.UNCOMMON, mage.cards.l.LoxodonBattlePriest.class)); cards.add(new SetCardInfo("Mardu Devotee", 16, Rarity.COMMON, mage.cards.m.MarduDevotee.class)); cards.add(new SetCardInfo("Mardu Monument", 245, Rarity.UNCOMMON, mage.cards.m.MarduMonument.class)); From 4440c7cdcb417dc23d7b205036aebc2d42fcf4d1 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 16:28:39 -0400 Subject: [PATCH 14/34] [TDM] Implement Piercing Exhale --- .../src/mage/cards/p/PiercingExhale.java | 45 +++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + .../common/BeheldDragonCondition.java | 26 ++++++ .../keyword/BeholdDragonAbility.java | 91 +++++++++++++++++++ 4 files changed, 163 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PiercingExhale.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/BeheldDragonCondition.java create mode 100644 Mage/src/main/java/mage/abilities/keyword/BeholdDragonAbility.java diff --git a/Mage.Sets/src/mage/cards/p/PiercingExhale.java b/Mage.Sets/src/mage/cards/p/PiercingExhale.java new file mode 100644 index 00000000000..b9a1ef912a0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PiercingExhale.java @@ -0,0 +1,45 @@ +package mage.cards.p; + +import mage.abilities.condition.common.BeheldDragonCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DamageWithPowerFromOneToAnotherTargetEffect; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.abilities.keyword.BeholdDragonAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class PiercingExhale extends CardImpl { + + public PiercingExhale(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); + + // As an additional cost to cast this spell, you may behold a Dragon. + this.addAbility(new BeholdDragonAbility()); + + // Target creature you control deals damage equal to its power to target creature or planeswalker. If a Dragon was beheld, surveil 2. + this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new SurveilEffect(2), BeheldDragonCondition.instance, + "if a Dragon was beheld, surveil 2" + )); + } + + private PiercingExhale(final PiercingExhale card) { + super(card); + } + + @Override + public PiercingExhale copy() { + return new PiercingExhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 9e79d538eca..c5bfe6d06a7 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -100,6 +100,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Neriv, Heart of the Storm", 210, Rarity.MYTHIC, mage.cards.n.NerivHeartOfTheStorm.class)); cards.add(new SetCardInfo("Nomad Outpost", 263, Rarity.UNCOMMON, mage.cards.n.NomadOutpost.class)); cards.add(new SetCardInfo("Opulent Palace", 264, Rarity.UNCOMMON, mage.cards.o.OpulentPalace.class)); + cards.add(new SetCardInfo("Piercing Exhale", 151, Rarity.COMMON, mage.cards.p.PiercingExhale.class)); cards.add(new SetCardInfo("Plains", 277, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Qarsi Revenant", 86, Rarity.RARE, mage.cards.q.QarsiRevenant.class)); cards.add(new SetCardInfo("Rakshasa's Bargain", 214, Rarity.UNCOMMON, mage.cards.r.RakshasasBargain.class)); diff --git a/Mage/src/main/java/mage/abilities/condition/common/BeheldDragonCondition.java b/Mage/src/main/java/mage/abilities/condition/common/BeheldDragonCondition.java new file mode 100644 index 00000000000..ca7e543bbe2 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/BeheldDragonCondition.java @@ -0,0 +1,26 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.keyword.BeholdDragonAbility; +import mage.game.Game; +import mage.util.CardUtil; + +/** + * Checks if the spell was cast with the alternate behold a Dragon cost + * + * @author TheElk801 + */ +public enum BeheldDragonCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + return CardUtil.checkSourceCostsTagExists(game, source, BeholdDragonAbility.BEHOLD_DRAGON_ACTIVATION_VALUE_KEY); + } + + @Override + public String toString() { + return "Dragon was beheld"; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/BeholdDragonAbility.java b/Mage/src/main/java/mage/abilities/keyword/BeholdDragonAbility.java new file mode 100644 index 00000000000..9c9d6fd5bbc --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/BeholdDragonAbility.java @@ -0,0 +1,91 @@ +package mage.abilities.keyword; + +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.StaticAbility; +import mage.abilities.costs.*; +import mage.abilities.costs.common.BeholdDragonCost; +import mage.abilities.costs.common.CollectEvidenceCost; +import mage.abilities.hint.common.EvidenceHint; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; + +/** + * @author TheElk801 + */ +public class BeholdDragonAbility extends StaticAbility implements OptionalAdditionalSourceCosts { + + private static final String promptString = "Behold a Dragon"; + private static final String keywordText = "As an additional cost to cast this spell, you may behold a Dragon"; + private static final String reminderText = "Choose a Dragon you control or reveal a Dragon card from your hand."; + private final String rule; + + public static final String BEHOLD_DRAGON_ACTIVATION_VALUE_KEY = "beholdDragonActivation"; + + protected OptionalAdditionalCost additionalCost; + + public static OptionalAdditionalCost makeCost() { + OptionalAdditionalCost cost = new OptionalAdditionalCostImpl(keywordText , reminderText, new BeholdDragonCost()); + cost.setRepeatable(false); + return cost; + } + public BeholdDragonAbility( ) { + super(Zone.STACK, null); + this.additionalCost = makeCost(); + this.rule = additionalCost.getName() + ". " + additionalCost.getReminderText(); + this.setRuleAtTheTop(true); + } + + private BeholdDragonAbility(final BeholdDragonAbility ability) { + super(ability); + this.rule = ability.rule; + this.additionalCost = ability.additionalCost.copy(); + } + + @Override + public BeholdDragonAbility copy() { + return new BeholdDragonAbility(this); + } + + public void resetCost() { + if (additionalCost != null) { + additionalCost.reset(); + } + } + + @Override + public void addOptionalAdditionalCosts(Ability ability, Game game) { + if (!(ability instanceof SpellAbility)) { + return; + } + + Player player = game.getPlayer(ability.getControllerId()); + if (player == null) { + return; + } + + this.resetCost(); + boolean canPay = additionalCost.canPay(ability, this, ability.getControllerId(), game); + if (!canPay || !player.chooseUse(Outcome.Exile, promptString + '?', ability, game)) { + return; + } + + additionalCost.activate(); + for (Cost cost : ((Costs) additionalCost)) { + ability.getCosts().add(cost.copy()); + } + ability.setCostsTag(BEHOLD_DRAGON_ACTIVATION_VALUE_KEY, null); + } + + @Override + public String getCastMessageSuffix() { + return additionalCost.getCastSuffixMessage(0); + } + + @Override + public String getRule() { + return rule; + } +} From 3818d85a0bb62c7d24995e35575e8941d6372131 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 16:33:20 -0400 Subject: [PATCH 15/34] [TDM] Implement Osseous Exhale --- Mage.Sets/src/mage/cards/o/OsseousExhale.java | 43 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/o/OsseousExhale.java diff --git a/Mage.Sets/src/mage/cards/o/OsseousExhale.java b/Mage.Sets/src/mage/cards/o/OsseousExhale.java new file mode 100644 index 00000000000..5323451fb8a --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OsseousExhale.java @@ -0,0 +1,43 @@ +package mage.cards.o; + +import mage.abilities.condition.common.BeheldDragonCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.BeholdDragonAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetAttackingOrBlockingCreature; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class OsseousExhale extends CardImpl { + + public OsseousExhale(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); + + // As an additional cost to cast this spell, you may behold a Dragon. + this.addAbility(new BeholdDragonAbility()); + + // Osseous Exhale deals 5 damage to target attacking or blocking creature. If a Dragon was beheld, you gain 2 life. + this.getSpellAbility().addEffect(new DamageTargetEffect(5)); + this.getSpellAbility().addTarget(new TargetAttackingOrBlockingCreature()); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new GainLifeEffect(2), BeheldDragonCondition.instance, + "if a Dragon was beheld, you gain 2 life" + )); + } + + private OsseousExhale(final OsseousExhale card) { + super(card); + } + + @Override + public OsseousExhale copy() { + return new OsseousExhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index c5bfe6d06a7..63b5bebc1d7 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -100,6 +100,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Neriv, Heart of the Storm", 210, Rarity.MYTHIC, mage.cards.n.NerivHeartOfTheStorm.class)); cards.add(new SetCardInfo("Nomad Outpost", 263, Rarity.UNCOMMON, mage.cards.n.NomadOutpost.class)); cards.add(new SetCardInfo("Opulent Palace", 264, Rarity.UNCOMMON, mage.cards.o.OpulentPalace.class)); + cards.add(new SetCardInfo("Osseous Exhale", 17, Rarity.COMMON, mage.cards.o.OsseousExhale.class)); cards.add(new SetCardInfo("Piercing Exhale", 151, Rarity.COMMON, mage.cards.p.PiercingExhale.class)); cards.add(new SetCardInfo("Plains", 277, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Qarsi Revenant", 86, Rarity.RARE, mage.cards.q.QarsiRevenant.class)); From 070b1550f6754528f8e81324a36f483b04161744 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Wed, 26 Mar 2025 16:37:58 -0400 Subject: [PATCH 16/34] [TDM] Implement Dispelling Exhale --- .../src/mage/cards/d/DispellingExhale.java | 42 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 43 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DispellingExhale.java diff --git a/Mage.Sets/src/mage/cards/d/DispellingExhale.java b/Mage.Sets/src/mage/cards/d/DispellingExhale.java new file mode 100644 index 00000000000..5125df363e4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DispellingExhale.java @@ -0,0 +1,42 @@ +package mage.cards.d; + +import mage.abilities.condition.common.BeheldDragonCondition; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.keyword.BeholdDragonAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DispellingExhale extends CardImpl { + + public DispellingExhale(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // As an additional cost to cast this spell, you may behold a Dragon. + this.addAbility(new BeholdDragonAbility()); + + // Counter target spell unless its controller pays {2}. If a Dragon was beheld, counter that spell unless its controller pays {4} instead. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new CounterUnlessPaysEffect(new GenericManaCost(4)), + new CounterUnlessPaysEffect(new GenericManaCost(2)), + BeheldDragonCondition.instance, "counter target spell unless its controller pays {2}. " + + "If a Dragon was beheld, counter that spell unless its controller pays {4} instead" + )); + } + + private DispellingExhale(final DispellingExhale card) { + super(card); + } + + @Override + public DispellingExhale copy() { + return new DispellingExhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 63b5bebc1d7..420170c1d9f 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -55,6 +55,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Descendant of Storms", 8, Rarity.UNCOMMON, mage.cards.d.DescendantOfStorms.class)); cards.add(new SetCardInfo("Devoted Duelist", 104, Rarity.COMMON, mage.cards.d.DevotedDuelist.class)); cards.add(new SetCardInfo("Dismal Backwater", 254, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); + cards.add(new SetCardInfo("Dispelling Exhale", 41, Rarity.COMMON, mage.cards.d.DispellingExhale.class)); cards.add(new SetCardInfo("Dracogenesis", 105, Rarity.MYTHIC, mage.cards.d.Dracogenesis.class)); cards.add(new SetCardInfo("Dragonback Assault", 179, Rarity.MYTHIC, mage.cards.d.DragonbackAssault.class)); cards.add(new SetCardInfo("Dragonback Lancer", 9, Rarity.COMMON, mage.cards.d.DragonbackLancer.class)); From b64bd7d1ccef16a1cf5dfd9b5fa72bd394f6f7a9 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:47:32 -0400 Subject: [PATCH 17/34] [TDM] update spoiler --- Mage.Sets/src/mage/sets/TarkirDragonstorm.java | 2 +- Utils/mtg-cards-data.txt | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 420170c1d9f..30b252a0d29 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -12,7 +12,7 @@ import java.util.List; */ public final class TarkirDragonstorm extends ExpansionSet { - private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Synchronized Charge", "Unending Whisper", "Ureni's Rebuff", "Winternight Stories"); + private static final List unfinished = Arrays.asList("Channeled Dragonfire", "Glacial Dragonhunt", "Mammoth Bellow", "Nature's Rhythm", "Roamer's Routine", "Songcrafter Mage", "Synchronized Charge", "Unending Whisper", "Ureni's Rebuff", "Winternight Stories"); private static final TarkirDragonstorm instance = new TarkirDragonstorm(); public static TarkirDragonstorm getInstance() { diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 0a032592c4e..a0fe9ba1069 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57228,8 +57228,10 @@ Teeming Dragonstorm|Tarkir: Dragonstorm|30|U|{3}{W}|Enchantment|||When this ench Tempest Hawk|Tarkir: Dragonstorm|31|C|{2}{W}|Creature - Bird|2|2|Flying$Whenever this creature deals combat damage to a player, you may search your library for a card named Tempest Hawk, reveal it, put it into your hand, then shuffle.$A deck can have any number of cards named Tempest Hawk.| United Battlefront|Tarkir: Dragonstorm|32|R|{3}{W}|Sorcery|||Look at the top seven cards of your library. Put up to two noncreature, nonland permanent cards with mana value 3 or less from among them onto the battlefield. Put the rest on the bottom of your library in a random order.| Voice of Victory|Tarkir: Dragonstorm|33|R|{1}{W}|Creature - Human Bard|1|3|Mobilize 2$Your opponents can't cast spells during your turn.| +Wayspeaker Bodyguard|Tarkir: Dragonstorm|34|U|{3}{W}|Creature - Orc Monk|3|4|When this creature enters, return target nonland permanent card with mana value 2 or less from your graveyard to your hand.$Flurry -- Whenever you cast your second spell each turn, tap target creature an opponent controls.| Aegis Sculptor|Tarkir: Dragonstorm|35|U|{3}{U}|Creature - Bird Wizard|2|3|Flying$Ward {2}$At the beginning of your upkeep, you may exile two cards from your graveyard. If you do, put a +1/+1 counter on this creature.| Agent of Kotis|Tarkir: Dragonstorm|36|C|{1}{U}|Creature - Human Rogue|2|1|Renew -- {3}{U}, Exile this card from your graveyard: Put two +1/+1 counters on target creature. Activate only as a sorcery.| +Ambling Stormshell|Tarkir: Dragonstorm|37|R|{3}{U}{U}|Creature - Turtle|5|9|Ward {2}$Whenever this creature attacks, put three stun counters on it and draw three cards.$Whenever you cast a Turtle spell, untap this creature.| Bewildering Blizzard|Tarkir: Dragonstorm|38|U|{4}{U}{U}|Instant|||Draw three cards. Creatures your opponents control get -3/-0 until end of turn.| Dirgur Island Dragon|Tarkir: Dragonstorm|40|C|{5}{U}|Creature - Dragon|4|4|Flying$Ward {2}| Skimming Strike|Tarkir: Dragonstorm|40|C|{1}{U}|Instant - Omen|4|4|Tap up to one target creature. Draw a card.| @@ -57238,9 +57240,11 @@ Dragonologist|Tarkir: Dragonstorm|42|R|{2}{U}|Creature - Human Wizard|1|3|When t Dragonstorm Forecaster|Tarkir: Dragonstorm|43|U|{U}|Creature - Human Scout|0|3|{2}, {T}: Search your library for a card named Dragonstorm Globe or Boulderborn Dragon, reveal it, put it into your hand, then shuffle.| Essence Anchor|Tarkir: Dragonstorm|44|U|{2}{U}|Artifact|||At the beginning of your upkeep, surveil 1.${T}: Create a 2/2 black Zombie Druid creature token. Activate only during your turn and only if a card left your graveyard this turn.| Fresh Start|Tarkir: Dragonstorm|46|U|{1}{U}|Enchantment - Aura|||Flash$Enchant creature$Enchanted creature gets -5/-0 and loses all abilities.| +Highspire Bell-Ringer|Tarkir: Dragonstorm|47|C|{2}{U}|Creature - Djinn Monk|1|4|Flying$The second spell you cast each turn costs {1} less to cast.| Humbling Elder|Tarkir: Dragonstorm|48|C|{U}|Creature - Human Monk|1|2|Flash$When this creature enters, target creature an opponent controls gets -2/-0 until end of turn.| Kishla Trawlers|Tarkir: Dragonstorm|50|U|{2}{U}|Creature - Human Citizen|3|2|When this creature enters, you may exile a creature card from your graveyard. When you do, return target instant or sorcery card from your graveyard to your hand.| Marang River Regent|Tarkir: Dragonstorm|51|R|{4}{U}{U}|Creature - Dragon|6|7|Flying$When this creature enters, return up to two other target nonland permanents to their owners' hands.| +Coil and Catch|Tarkir: Dragonstorm|51|R|{3}{U}|Instant - Omen|6|7|Draw three cards, then discard a card.| Naga Fleshcrafter|Tarkir: Dragonstorm|52|R|{3}{U}|Creature - Snake Shapeshifter|0|0|You may have this creature enter as a copy of any creature on the battlefield.$Renew -- {2}{U}, Exile this card from your graveyard: Put a +1/+1 counter on target nonlegendary creature you control. Each other creature you control becomes a copy of that creature until end of turn. Activate only as a sorcery.| Ringing Strike Mastery|Tarkir: Dragonstorm|53|C|{U}|Enchantment - Aura|||Enchant creature$When this Aura enters, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchanted creature has "{5}: Untap this creature."| Roiling Dragonstorm|Tarkir: Dragonstorm|55|U|{1}{U}|Enchantment|||When this enchantment enters, draw two cards, then discard a card.$When a Dragon you control enters, return this enchantment to its owner's hand.| @@ -57259,6 +57263,7 @@ Avenger of the Fallen|Tarkir: Dragonstorm|73|R|{2}{B}|Creature - Human Warrior|2 Caustic Exhale|Tarkir: Dragonstorm|74|C|{B}|Instant|||As an additional cost to cast this spell, behold a Dragon or pay {1}.$Target creature gets -3/-3 until end of turn.| Corroding Dragonstorm|Tarkir: Dragonstorm|75|U|{1}{B}|Enchantment|||When this enchantment enters, each opponent loses 2 life and you gain 2 life. Surveil 2.$When a Dragon you control enters, return this enchantment to its owner's hand.| Cruel Truths|Tarkir: Dragonstorm|76|C|{3}{B}|Instant|||Surveil 2, then draw two cards. You lose 2 life.| +Delta Bloodflies|Tarkir: Dragonstorm|77|C|{1}{B}|Creature - Insect|1|2|Flying$Whenever this creature attacks, if you control a creature with a counter on it, each opponent loses 1 life.| Desperate Measures|Tarkir: Dragonstorm|78|U|{B}|Instant|||Target creature gets +1/-1 until end of turn. When it dies under your control this turn, draw two cards.| Dragon's Prey|Tarkir: Dragonstorm|79|C|{2}{B}|Instant|||This spell costs {2} more to cast if it targets a Dragon.$Destroy target creature.| Feral Deathgorger|Tarkir: Dragonstorm|80|C|{5}{B}|Creature - Dragon|3|5|Flying, deathtouch$When this creature enters, exile up to two target cards from a single graveyard.| @@ -57267,6 +57272,7 @@ Krumar Initiate|Tarkir: Dragonstorm|84|U|{1}{B}|Creature - Human Cleric|2|2|{X}{ Qarsi Revenant|Tarkir: Dragonstorm|86|R|{1}{B}{B}|Creature - Vampire|3|3|Flying, deathtouch, lifelink$Renew -- {2}{B}, Exile this card from your graveyard: Put a flying counter, a deathtouch counter, and a lifelink counter on target creature. Activate only as a sorcery.| Rot-Curse Rakshasa|Tarkir: Dragonstorm|87|M|{1}{B}|Creature - Demon|5|5|Trample$Decayed$Renew -- {X}{B}{B}, Exile this card from your graveyard: Put a decayed counter on each of X target creatures. Activate only as a sorcery.| Scavenger Regent|Tarkir: Dragonstorm|90|R|{3}{B}|Creature - Dragon|4|4|Flying$Ward--Discard a card.| +Exude Toxin|Tarkir: Dragonstorm|90|R|{X}{B}{B}|Sorcery - Omen|4|4|Each non-Dragon creature gets -X/-X until end of turn.| The Sibsig Ceremony|Tarkir: Dragonstorm|91|R|{B}{B}{B}|Legendary Enchantment|||Creature spells you cast cost {2} less to cast.$Whenever a creature you control enters, if you cast it, destroy that creature, then create a 2/2 black Zombie Druid creature token.| Sidisi, Regent of the Mire|Tarkir: Dragonstorm|92|R|{1}{B}|Legendary Creature - Zombie Snake Warlock|1|3|{T}, Sacrifice a creature you control with mana value X other than Sidisi: Return target creature card with mana value X plus 1 from your graveyard to the battlefield. Activate only as a sorcery.| Sinkhole Surveyor|Tarkir: Dragonstorm|93|R|{1}{B}|Creature - Bird Scout|1|3|Flying$Whenever this creature attacks, you lose 1 life and this creature endures 1.| @@ -57291,6 +57297,7 @@ Reverberating Summons|Tarkir: Dragonstorm|117|U|{1}{R}|Enchantment|||At the begi Sarkhan, Dragon Ascendant|Tarkir: Dragonstorm|118|R|{1}{R}|Legendary Creature - Human Druid|2|2|When Sarkhan enters, you may behold a Dragon. If you do, create a Treasure token.$Whenever a Dragon you control enters, put a +1/+1 counter on Sarkhan. Until end of turn, Sarkhan becomes a Dragon in addition to its other types and gains flying.| Seize Opportunity|Tarkir: Dragonstorm|119|C|{2}{R}|Instant|||Choose one --$* Exile the top two cards of your library. Until the end of your next turn, you may play those cards.$* Up to two target creatures each get +2/+1 until end of turn.| Shock Brigade|Tarkir: Dragonstorm|120|C|{1}{R}|Creature - Goblin Soldier|1|3|Menace$Mobilize 1| +Shocking Sharpshooter|Tarkir: Dragonstorm|121|U|{1}{R}|Creature - Human Archer|1|3|Reach$Whenever another creature you control enters, this creature deals 1 damage to target opponent.| Stormscale Scion|Tarkir: Dragonstorm|123|M|{4}{R}{R}|Creature - Dragon|4|4|Flying$Other Dragons you control get +1/+1.$Storm| Stormshriek Feral|Tarkir: Dragonstorm|124|C|{4}{R}|Creature - Dragon|3|3|Flying, haste${1}{R}: This creature gets +1/+0 until end of turn.| Flush Out|Tarkir: Dragonstorm|124|C|{1}{R}|Sorcery - Omen|3|3|Discard a card. If you do, draw two cards.| @@ -57299,6 +57306,7 @@ Sunset Strikemaster|Tarkir: Dragonstorm|126|U|{1}{R}|Creature - Human Monk|3|1|{ Tersa Lightshatter|Tarkir: Dragonstorm|127|R|{2}{R}|Legendary Creature - Orc Wizard|3|3|Haste$When Tersa Lightshatter enters, discard up to two cards, then draw that many cards.$Whenever Tersa Lightshatter attacks, if there are seven or more cards in your graveyard, exile a card at random from your graveyard. You may play that card this turn.| Underfoot Underdogs|Tarkir: Dragonstorm|129|C|{2}{R}|Creature - Goblin Warrior|1|2|When this creature enters, create a 1/1 red Goblin creature token.${1}, {T}: Target creature you control with power 2 or less can't be blocked this turn.| War Effort|Tarkir: Dragonstorm|131|U|{3}{R}|Enchantment|||Creatures you control get +1/+0.$Whenever you attack, create a 1/1 red Warrior creature token that's tapped and attacking. Sacrifice it at the beginning of the next end step.| +Zurgo's Vanguard|Tarkir: Dragonstorm|133|U|{2}{R}|Creature - Dog Soldier|*|3|Mobilize 1$This creature's power is equal to the number of creatures you control.| Attuned Hunter|Tarkir: Dragonstorm|135|U|{2}{G}|Creature - Human Ranger|3|3|Trample$Whenever one or more cards leave your graveyard during your turn, put a +1/+1 counter on this creature.| Bloomvine Regent|Tarkir: Dragonstorm|136|R|{3}{G}{G}|Creature - Dragon|4|5|Flying$Whenever this creature or another Dragon you control enters, you gain 3 life.| Claim Territory|Tarkir: Dragonstorm|136|R|{2}{G}|Sorcery - Omen|4|5|Search your library for up to two basic Forest cards, reveal them, put one onto the battlefield tapped and the other into your hand, then shuffle.| @@ -57321,6 +57329,7 @@ Snakeskin Veil|Tarkir: Dragonstorm|159|C|{G}|Instant|||Put a +1/+1 counter on ta Sultai Devotee|Tarkir: Dragonstorm|160|C|{1}{G}|Creature - Zombie Snake Druid|2|1|Deathtouch${1}: Add {B}, {G}, or {U}. Activate only once each turn.| Surrak, Elusive Hunter|Tarkir: Dragonstorm|161|R|{2}{G}|Legendary Creature - Human Warrior|4|3|This spell can't be countered.$Trample$Whenever a creature you control or a creature spell you control becomes the target of a spell or ability an opponent controls, draw a card.| Synchronized Charge|Tarkir: Dragonstorm|162|U|{1}{G}|Sorcery|||Distribute two +1/+1 counters among one or two target creatures you control. Creatures you control with counters on them gain vigilance and trample until end of turn.$Harmonize {4}{G}| +Traveling Botanist|Tarkir: Dragonstorm|164|U|{1}{G}|Creature - Dog Scout|2|3|Whenever this creature becomes tapped, look at the top card of your library. If it's a land card, you may reveal it and put it into your hand. If you don't put the card into your hand, you may put it into your graveyard.| Undergrowth Leopard|Tarkir: Dragonstorm|165|C|{1}{G}|Creature - Cat|2|2|Vigilance${1}, Sacrifice this creature: Destroy target artifact or enchantment.| Warden of the Grove|Tarkir: Dragonstorm|166|R|{2}{G}|Creature - Hydra|2|2|At the beginning of your end step, put a +1/+1 counter on this creature.$Whenever another nontoken creature you control enters, it endures X, where X is the number of counters on this creature.| All-Out Assault|Tarkir: Dragonstorm|167|M|{2}{R}{W}{B}|Enchantment|||Creatures you control get +1/+1 and have deathtouch.$When this enchantment enters, if it's your main phase, there is an additional combat phase after this phase followed by an additional main phase. When you next attack this turn, untap each creature you control.| @@ -57359,6 +57368,7 @@ Kin-Tree Severance|Tarkir: Dragonstorm|200|U|{2/W}{2/B}{2/G}|Instant|||Exile tar Kishla Skimmer|Tarkir: Dragonstorm|201|U|{G}{U}|Creature - Bird Scout|2|2|Flying$Whenever a card leaves your graveyard during your turn, draw a card. This ability triggers only once each turn.| Kotis, the Fangkeeper|Tarkir: Dragonstorm|202|R|{1}{B}{G}{U}|Legendary Creature - Zombie Warrior|2|1|Indestructible$Whenever Kotis deals combat damage to a player, exile the top X cards of their library, where X is the amount of damage dealt. You may cast any number of spells with mana value X or less from among them without paying their mana costs.| Lie in Wait|Tarkir: Dragonstorm|203|U|{B}{G}{U}|Sorcery|||Return target creature card from your graveyard to your hand. Lie in Wait deals damage equal to that card's power to target creature.| +Mammoth Bellow|Tarkir: Dragonstorm|205|U|{2}{G}{U}{R}|Sorcery|||Create a 5/5 green Elephant creature token.$Harmonize {5}{G}{U}{R}| Marshal of the Lost|Tarkir: Dragonstorm|207|U|{2}{W}{B}|Creature - Orc Warrior|3|3|Deathtouch$Whenever you attack, target creature gets +X/+X until end of turn, where X is the number of attacking creatures.| Monastery Messenger|Tarkir: Dragonstorm|208|C|{2/U}{2/R}{2/W}|Creature - Bird Scout|2|3|Flying, vigilance$When this creature enters, put up to one target noncreature, nonland card from your graveyard on top of your library.| Narset, Jeskai Waymaster|Tarkir: Dragonstorm|209|R|{U}{R}{W}|Legendary Creature - Human Monk|3|4|At the beginning of your end step, you may discard your hand. If you do, draw cards equal to the number of spells you've cast this turn.| From 575bcc0a526e635b8f6bace9625324f82106a24d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:48:31 -0400 Subject: [PATCH 18/34] [TDC] update spoiler and reprints --- .../mage/sets/TarkirDragonstormCommander.java | 119 +++++++++++++++ Utils/mtg-cards-data.txt | 143 +++++++++++++++++- 2 files changed, 258 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java b/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java index 8496f1d071a..f87dc17574a 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java @@ -20,38 +20,57 @@ public final class TarkirDragonstormCommander extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Abrade", 203, Rarity.UNCOMMON, mage.cards.a.Abrade.class)); + cards.add(new SetCardInfo("Access Tunnel", 337, Rarity.UNCOMMON, mage.cards.a.AccessTunnel.class)); cards.add(new SetCardInfo("Adarkar Wastes", 338, Rarity.RARE, mage.cards.a.AdarkarWastes.class)); cards.add(new SetCardInfo("Adeline, Resplendent Cathar", 108, Rarity.RARE, mage.cards.a.AdelineResplendentCathar.class)); cards.add(new SetCardInfo("Amphin Mutineer", 143, Rarity.RARE, mage.cards.a.AmphinMutineer.class)); cards.add(new SetCardInfo("Ancestral Vision", 144, Rarity.RARE, mage.cards.a.AncestralVision.class)); cards.add(new SetCardInfo("Angel of Invention", 109, Rarity.MYTHIC, mage.cards.a.AngelOfInvention.class)); + cards.add(new SetCardInfo("Anguished Unmaking", 279, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class)); + cards.add(new SetCardInfo("Arasta of the Endless Web", 244, Rarity.RARE, mage.cards.a.ArastaOfTheEndlessWeb.class)); + cards.add(new SetCardInfo("Arboreal Grazer", 245, Rarity.COMMON, mage.cards.a.ArborealGrazer.class)); cards.add(new SetCardInfo("Arcane Signet", 105, Rarity.UNCOMMON, mage.cards.a.ArcaneSignet.class)); cards.add(new SetCardInfo("Archmage Emeritus", 145, Rarity.RARE, mage.cards.a.ArchmageEmeritus.class)); cards.add(new SetCardInfo("Aron, Benalia's Ruin", 280, Rarity.UNCOMMON, mage.cards.a.AronBenaliasRuin.class)); cards.add(new SetCardInfo("Ash Barrens", 339, Rarity.COMMON, mage.cards.a.AshBarrens.class)); + cards.add(new SetCardInfo("Assault Formation", 246, Rarity.RARE, mage.cards.a.AssaultFormation.class)); + cards.add(new SetCardInfo("Atarka, World Render", 281, Rarity.RARE, mage.cards.a.AtarkaWorldRender.class)); + cards.add(new SetCardInfo("Atsushi, the Blazing Sky", 204, Rarity.MYTHIC, mage.cards.a.AtsushiTheBlazingSky.class)); cards.add(new SetCardInfo("Avenger of Zendikar", 247, Rarity.MYTHIC, mage.cards.a.AvengerOfZendikar.class)); + cards.add(new SetCardInfo("Axebane Guardian", 248, Rarity.COMMON, mage.cards.a.AxebaneGuardian.class)); cards.add(new SetCardInfo("Azorius Signet", 312, Rarity.UNCOMMON, mage.cards.a.AzoriusSignet.class)); + cards.add(new SetCardInfo("Baldin, Century Herdmaster", 110, Rarity.RARE, mage.cards.b.BaldinCenturyHerdmaster.class)); cards.add(new SetCardInfo("Baral and Kari Zev", 282, Rarity.RARE, mage.cards.b.BaralAndKariZev.class)); cards.add(new SetCardInfo("Baral's Expertise", 146, Rarity.RARE, mage.cards.b.BaralsExpertise.class)); cards.add(new SetCardInfo("Bastion of Remembrance", 171, Rarity.UNCOMMON, mage.cards.b.BastionOfRemembrance.class)); cards.add(new SetCardInfo("Battlefield Forge", 340, Rarity.RARE, mage.cards.b.BattlefieldForge.class)); + cards.add(new SetCardInfo("Beast Within", 249, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class)); cards.add(new SetCardInfo("Beetleback Chief", 205, Rarity.UNCOMMON, mage.cards.b.BeetlebackChief.class)); + cards.add(new SetCardInfo("Behind the Scenes", 172, Rarity.UNCOMMON, mage.cards.b.BehindTheScenes.class)); cards.add(new SetCardInfo("Betor, Ancestor's Voice", 1, Rarity.MYTHIC, mage.cards.b.BetorAncestorsVoice.class)); cards.add(new SetCardInfo("Big Score", 206, Rarity.COMMON, mage.cards.b.BigScore.class)); cards.add(new SetCardInfo("Bitter Triumph", 173, Rarity.UNCOMMON, mage.cards.b.BitterTriumph.class)); cards.add(new SetCardInfo("Blade of Selves", 313, Rarity.RARE, mage.cards.b.BladeOfSelves.class)); + cards.add(new SetCardInfo("Blasphemous Act", 207, Rarity.RARE, mage.cards.b.BlasphemousAct.class)); + cards.add(new SetCardInfo("Blight Pile", 174, Rarity.UNCOMMON, mage.cards.b.BlightPile.class)); cards.add(new SetCardInfo("Bojuka Bog", 341, Rarity.COMMON, mage.cards.b.BojukaBog.class)); cards.add(new SetCardInfo("Boros Signet", 314, Rarity.UNCOMMON, mage.cards.b.BorosSignet.class)); + cards.add(new SetCardInfo("Bountiful Landscape", 342, Rarity.COMMON, mage.cards.b.BountifulLandscape.class)); cards.add(new SetCardInfo("Caldera Pyremaw", 33, Rarity.RARE, mage.cards.c.CalderaPyremaw.class)); + cards.add(new SetCardInfo("Canopy Vista", 343, Rarity.RARE, mage.cards.c.CanopyVista.class)); cards.add(new SetCardInfo("Canyon Slough", 344, Rarity.RARE, mage.cards.c.CanyonSlough.class)); + cards.add(new SetCardInfo("Carven Caryatid", 250, Rarity.UNCOMMON, mage.cards.c.CarvenCaryatid.class)); cards.add(new SetCardInfo("Cascade Bluffs", 345, Rarity.RARE, mage.cards.c.CascadeBluffs.class)); cards.add(new SetCardInfo("Castle Ardenvale", 346, Rarity.RARE, mage.cards.c.CastleArdenvale.class)); cards.add(new SetCardInfo("Castle Embereth", 347, Rarity.RARE, mage.cards.c.CastleEmbereth.class)); cards.add(new SetCardInfo("Casualties of War", 98, Rarity.RARE, mage.cards.c.CasualtiesOfWar.class)); cards.add(new SetCardInfo("Caves of Koilos", 348, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); cards.add(new SetCardInfo("Cephalid Coliseum", 349, Rarity.UNCOMMON, mage.cards.c.CephalidColiseum.class)); + cards.add(new SetCardInfo("Chaos Warp", 208, Rarity.RARE, mage.cards.c.ChaosWarp.class)); cards.add(new SetCardInfo("Chittering Witch", 175, Rarity.RARE, mage.cards.c.ChitteringWitch.class)); + cards.add(new SetCardInfo("Cinder Glade", 350, Rarity.RARE, mage.cards.c.CinderGlade.class)); cards.add(new SetCardInfo("Clifftop Retreat", 351, Rarity.RARE, mage.cards.c.ClifftopRetreat.class)); + cards.add(new SetCardInfo("Colfenor's Urn", 315, Rarity.RARE, mage.cards.c.ColfenorsUrn.class)); cards.add(new SetCardInfo("Command Beacon", 352, Rarity.RARE, mage.cards.c.CommandBeacon.class)); cards.add(new SetCardInfo("Command Tower", 107, Rarity.COMMON, mage.cards.c.CommandTower.class)); cards.add(new SetCardInfo("Commander's Insignia", 111, Rarity.RARE, mage.cards.c.CommandersInsignia.class)); @@ -60,6 +79,7 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Consider", 148, Rarity.COMMON, mage.cards.c.Consider.class)); cards.add(new SetCardInfo("Consuming Aberration", 283, Rarity.RARE, mage.cards.c.ConsumingAberration.class)); cards.add(new SetCardInfo("Contaminated Aquifer", 353, Rarity.COMMON, mage.cards.c.ContaminatedAquifer.class)); + cards.add(new SetCardInfo("Crashing Drawbridge", 316, Rarity.COMMON, mage.cards.c.CrashingDrawbridge.class)); cards.add(new SetCardInfo("Crawling Sensation", 252, Rarity.UNCOMMON, mage.cards.c.CrawlingSensation.class)); cards.add(new SetCardInfo("Crypt of Agadeem", 354, Rarity.RARE, mage.cards.c.CryptOfAgadeem.class)); cards.add(new SetCardInfo("Cultivate", 253, Rarity.COMMON, mage.cards.c.Cultivate.class)); @@ -68,31 +88,49 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Darkwater Catacombs", 355, Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class)); cards.add(new SetCardInfo("Dauthi Voidwalker", 176, Rarity.RARE, mage.cards.d.DauthiVoidwalker.class)); cards.add(new SetCardInfo("Deadly Dispute", 177, Rarity.COMMON, mage.cards.d.DeadlyDispute.class)); + cards.add(new SetCardInfo("Deceptive Landscape", 356, Rarity.COMMON, mage.cards.d.DeceptiveLandscape.class)); cards.add(new SetCardInfo("Deep Analysis", 150, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Despark", 284, Rarity.UNCOMMON, mage.cards.d.Despark.class)); cards.add(new SetCardInfo("Disciple of Bolas", 178, Rarity.RARE, mage.cards.d.DiscipleOfBolas.class)); cards.add(new SetCardInfo("Dismantling Wave", 112, Rarity.RARE, mage.cards.d.DismantlingWave.class)); cards.add(new SetCardInfo("Divine Visitation", 113, Rarity.MYTHIC, mage.cards.d.DivineVisitation.class)); + cards.add(new SetCardInfo("Draconic Lore", 151, Rarity.COMMON, mage.cards.d.DraconicLore.class)); + cards.add(new SetCardInfo("Dragon Tempest", 94, Rarity.UNCOMMON, mage.cards.d.DragonTempest.class)); + cards.add(new SetCardInfo("Dragon's Hoard", 317, Rarity.RARE, mage.cards.d.DragonsHoard.class)); + cards.add(new SetCardInfo("Dragonlord Atarka", 285, Rarity.MYTHIC, mage.cards.d.DragonlordAtarka.class)); + cards.add(new SetCardInfo("Dragonlord Dromoka", 286, Rarity.MYTHIC, mage.cards.d.DragonlordDromoka.class)); + cards.add(new SetCardInfo("Dragonlord's Servant", 210, Rarity.UNCOMMON, mage.cards.d.DragonlordsServant.class)); + cards.add(new SetCardInfo("Dragonmaster Outcast", 211, Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); cards.add(new SetCardInfo("Dragonskull Summit", 357, Rarity.RARE, mage.cards.d.DragonskullSummit.class)); cards.add(new SetCardInfo("Dreamroot Cascade", 358, Rarity.RARE, mage.cards.d.DreamrootCascade.class)); cards.add(new SetCardInfo("Drownyard Temple", 359, Rarity.RARE, mage.cards.d.DrownyardTemple.class)); cards.add(new SetCardInfo("Electrodominance", 212, Rarity.RARE, mage.cards.e.Electrodominance.class)); + cards.add(new SetCardInfo("Elemental Bond", 254, Rarity.UNCOMMON, mage.cards.e.ElementalBond.class)); cards.add(new SetCardInfo("Eliminate the Competition", 179, Rarity.RARE, mage.cards.e.EliminateTheCompetition.class)); cards.add(new SetCardInfo("Emeria Angel", 114, Rarity.RARE, mage.cards.e.EmeriaAngel.class)); cards.add(new SetCardInfo("Exotic Orchard", 360, Rarity.RARE, mage.cards.e.ExoticOrchard.class)); cards.add(new SetCardInfo("Expansion // Explosion", 287, Rarity.RARE, mage.cards.e.ExpansionExplosion.class)); + cards.add(new SetCardInfo("Expel the Interlopers", 115, Rarity.RARE, mage.cards.e.ExpelTheInterlopers.class)); cards.add(new SetCardInfo("Expressive Iteration", 288, Rarity.UNCOMMON, mage.cards.e.ExpressiveIteration.class)); + cards.add(new SetCardInfo("Faeburrow Elder", 289, Rarity.RARE, mage.cards.f.FaeburrowElder.class)); cards.add(new SetCardInfo("Faithless Looting", 213, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); cards.add(new SetCardInfo("Farseek", 255, Rarity.COMMON, mage.cards.f.Farseek.class)); + cards.add(new SetCardInfo("Feed the Swarm", 180, Rarity.COMMON, mage.cards.f.FeedTheSwarm.class)); cards.add(new SetCardInfo("Fellwar Stone", 318, Rarity.UNCOMMON, mage.cards.f.FellwarStone.class)); cards.add(new SetCardInfo("Ferrous Lake", 361, Rarity.RARE, mage.cards.f.FerrousLake.class)); cards.add(new SetCardInfo("Fetid Heath", 362, Rarity.RARE, mage.cards.f.FetidHeath.class)); cards.add(new SetCardInfo("Fetid Pools", 363, Rarity.RARE, mage.cards.f.FetidPools.class)); + cards.add(new SetCardInfo("Flooded Grove", 364, Rarity.RARE, mage.cards.f.FloodedGrove.class)); cards.add(new SetCardInfo("Forbidden Alchemy", 152, Rarity.COMMON, mage.cards.f.ForbiddenAlchemy.class)); cards.add(new SetCardInfo("Foreboding Landscape", 365, Rarity.COMMON, mage.cards.f.ForebodingLandscape.class)); + cards.add(new SetCardInfo("Fortified Village", 366, Rarity.RARE, mage.cards.f.FortifiedVillage.class)); cards.add(new SetCardInfo("Frantic Search", 153, Rarity.COMMON, mage.cards.f.FranticSearch.class)); + cards.add(new SetCardInfo("Frontier Siege", 256, Rarity.RARE, mage.cards.f.FrontierSiege.class)); + cards.add(new SetCardInfo("Gadrak, the Crown-Scourge", 214, Rarity.RARE, mage.cards.g.GadrakTheCrownScourge.class)); cards.add(new SetCardInfo("Ghostly Prison", 116, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); cards.add(new SetCardInfo("Gix, Yawgmoth Praetor", 181, Rarity.MYTHIC, mage.cards.g.GixYawgmothPraetor.class)); cards.add(new SetCardInfo("Glacial Fortress", 367, Rarity.RARE, mage.cards.g.GlacialFortress.class)); + cards.add(new SetCardInfo("Glorybringer", 215, Rarity.RARE, mage.cards.g.Glorybringer.class)); cards.add(new SetCardInfo("Goblin Electromancer", 99, Rarity.COMMON, mage.cards.g.GoblinElectromancer.class)); cards.add(new SetCardInfo("Goldnight Commander", 117, Rarity.UNCOMMON, mage.cards.g.GoldnightCommander.class)); cards.add(new SetCardInfo("Golgari Rot Farm", 368, Rarity.UNCOMMON, mage.cards.g.GolgariRotFarm.class)); @@ -102,23 +140,38 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Grenzo, Havoc Raiser", 216, Rarity.RARE, mage.cards.g.GrenzoHavocRaiser.class)); cards.add(new SetCardInfo("Grisly Salvage", 290, Rarity.COMMON, mage.cards.g.GrislySalvage.class)); cards.add(new SetCardInfo("Guttersnipe", 217, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); + cards.add(new SetCardInfo("Harbinger of the Hunt", 291, Rarity.RARE, mage.cards.h.HarbingerOfTheHunt.class)); cards.add(new SetCardInfo("Harrow", 258, Rarity.COMMON, mage.cards.h.Harrow.class)); cards.add(new SetCardInfo("Haughty Djinn", 154, Rarity.RARE, mage.cards.h.HaughtyDjinn.class)); cards.add(new SetCardInfo("Haunted Mire", 369, Rarity.COMMON, mage.cards.h.HauntedMire.class)); + cards.add(new SetCardInfo("Haven of the Spirit Dragon", 370, Rarity.RARE, mage.cards.h.HavenOfTheSpiritDragon.class)); cards.add(new SetCardInfo("Hedron Crab", 155, Rarity.UNCOMMON, mage.cards.h.HedronCrab.class)); + cards.add(new SetCardInfo("Hellkite Courser", 218, Rarity.MYTHIC, mage.cards.h.HellkiteCourser.class)); cards.add(new SetCardInfo("Hero of Bladehold", 119, Rarity.MYTHIC, mage.cards.h.HeroOfBladehold.class)); cards.add(new SetCardInfo("Hinterland Harbor", 371, Rarity.RARE, mage.cards.h.HinterlandHarbor.class)); + cards.add(new SetCardInfo("Hornet Nest", 259, Rarity.RARE, mage.cards.h.HornetNest.class)); cards.add(new SetCardInfo("Hour of Reckoning", 120, Rarity.RARE, mage.cards.h.HourOfReckoning.class)); cards.add(new SetCardInfo("Idol of Oblivion", 319, Rarity.RARE, mage.cards.i.IdolOfOblivion.class)); + cards.add(new SetCardInfo("Ikra Shidiqi, the Usurper", 100, Rarity.MYTHIC, mage.cards.i.IkraShidiqiTheUsurper.class)); + cards.add(new SetCardInfo("Indomitable Ancients", 121, Rarity.RARE, mage.cards.i.IndomitableAncients.class)); + cards.add(new SetCardInfo("Indulging Patrician", 292, Rarity.UNCOMMON, mage.cards.i.IndulgingPatrician.class)); + cards.add(new SetCardInfo("Infernal Grasp", 182, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class)); cards.add(new SetCardInfo("Irrigated Farmland", 372, Rarity.RARE, mage.cards.i.IrrigatedFarmland.class)); cards.add(new SetCardInfo("Isolated Chapel", 373, Rarity.RARE, mage.cards.i.IsolatedChapel.class)); cards.add(new SetCardInfo("Izzet Signet", 320, Rarity.COMMON, mage.cards.i.IzzetSignet.class)); + cards.add(new SetCardInfo("Jaddi Offshoot", 260, Rarity.UNCOMMON, mage.cards.j.JaddiOffshoot.class)); cards.add(new SetCardInfo("Jarad, Golgari Lich Lord", 293, Rarity.MYTHIC, mage.cards.j.JaradGolgariLichLord.class)); cards.add(new SetCardInfo("Junji, the Midnight Sky", 183, Rarity.MYTHIC, mage.cards.j.JunjiTheMidnightSky.class)); + cards.add(new SetCardInfo("Karplusan Forest", 374, Rarity.RARE, mage.cards.k.KarplusanForest.class)); cards.add(new SetCardInfo("Kaya, Geist Hunter", 294, Rarity.MYTHIC, mage.cards.k.KayaGeistHunter.class)); + cards.add(new SetCardInfo("Keiga, the Tide Star", 156, Rarity.RARE, mage.cards.k.KeigaTheTideStar.class)); + cards.add(new SetCardInfo("Kessig Wolf Run", 375, Rarity.RARE, mage.cards.k.KessigWolfRun.class)); + cards.add(new SetCardInfo("Kodama's Reach", 261, Rarity.COMMON, mage.cards.k.KodamasReach.class)); + cards.add(new SetCardInfo("Lathliss, Dragon Queen", 219, Rarity.RARE, mage.cards.l.LathlissDragonQueen.class)); cards.add(new SetCardInfo("Legion Loyalty", 122, Rarity.MYTHIC, mage.cards.l.LegionLoyalty.class)); cards.add(new SetCardInfo("Legion Warboss", 220, Rarity.RARE, mage.cards.l.LegionWarboss.class)); cards.add(new SetCardInfo("Lethal Scheme", 184, Rarity.RARE, mage.cards.l.LethalScheme.class)); + cards.add(new SetCardInfo("Leyline Tyrant", 221, Rarity.MYTHIC, mage.cards.l.LeylineTyrant.class)); cards.add(new SetCardInfo("Lier, Disciple of the Drowned", 157, Rarity.MYTHIC, mage.cards.l.LierDiscipleOfTheDrowned.class)); cards.add(new SetCardInfo("Life from the Loam", 96, Rarity.RARE, mage.cards.l.LifeFromTheLoam.class)); cards.add(new SetCardInfo("Lightning Greaves", 102, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); @@ -134,22 +187,32 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Mangara, the Diplomat", 124, Rarity.RARE, mage.cards.m.MangaraTheDiplomat.class)); cards.add(new SetCardInfo("Memorial to Folly", 377, Rarity.UNCOMMON, mage.cards.m.MemorialToFolly.class)); cards.add(new SetCardInfo("Meren of Clan Nel Toth", 297, Rarity.MYTHIC, mage.cards.m.MerenOfClanNelToth.class)); + cards.add(new SetCardInfo("Migration Path", 262, Rarity.UNCOMMON, mage.cards.m.MigrationPath.class)); cards.add(new SetCardInfo("Millikin", 321, Rarity.UNCOMMON, mage.cards.m.Millikin.class)); cards.add(new SetCardInfo("Mindblade Render", 187, Rarity.RARE, mage.cards.m.MindbladeRender.class)); cards.add(new SetCardInfo("Monastery Mentor", 125, Rarity.MYTHIC, mage.cards.m.MonasteryMentor.class)); cards.add(new SetCardInfo("Morbid Opportunist", 188, Rarity.UNCOMMON, mage.cards.m.MorbidOpportunist.class)); + cards.add(new SetCardInfo("Mossfire Valley", 378, Rarity.RARE, mage.cards.m.MossfireValley.class)); + cards.add(new SetCardInfo("Mosswort Bridge", 379, Rarity.RARE, mage.cards.m.MosswortBridge.class)); cards.add(new SetCardInfo("Multani, Yavimaya's Avatar", 263, Rarity.MYTHIC, mage.cards.m.MultaniYavimayasAvatar.class)); cards.add(new SetCardInfo("Myr Battlesphere", 322, Rarity.RARE, mage.cards.m.MyrBattlesphere.class)); cards.add(new SetCardInfo("Myriad Landscape", 380, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class)); cards.add(new SetCardInfo("Narset's Reversal", 92, Rarity.RARE, mage.cards.n.NarsetsReversal.class)); cards.add(new SetCardInfo("Necromantic Selection", 189, Rarity.RARE, mage.cards.n.NecromanticSelection.class)); cards.add(new SetCardInfo("Necropolis Fiend", 190, Rarity.RARE, mage.cards.n.NecropolisFiend.class)); + cards.add(new SetCardInfo("Nesting Dragon", 225, Rarity.RARE, mage.cards.n.NestingDragon.class)); + cards.add(new SetCardInfo("Nogi, Draco-Zealot", 226, Rarity.MYTHIC, mage.cards.n.NogiDracoZealot.class)); cards.add(new SetCardInfo("Noxious Gearhulk", 191, Rarity.MYTHIC, mage.cards.n.NoxiousGearhulk.class)); cards.add(new SetCardInfo("Nyx Weaver", 298, Rarity.UNCOMMON, mage.cards.n.NyxWeaver.class)); + cards.add(new SetCardInfo("Nyx-Fleece Ram", 126, Rarity.UNCOMMON, mage.cards.n.NyxFleeceRam.class)); cards.add(new SetCardInfo("Ob Nixilis, the Fallen", 192, Rarity.MYTHIC, mage.cards.o.ObNixilisTheFallen.class)); cards.add(new SetCardInfo("Ogre Battledriver", 227, Rarity.RARE, mage.cards.o.OgreBattledriver.class)); cards.add(new SetCardInfo("Ophiomancer", 193, Rarity.RARE, mage.cards.o.Ophiomancer.class)); + cards.add(new SetCardInfo("Opportunistic Dragon", 228, Rarity.RARE, mage.cards.o.OpportunisticDragon.class)); cards.add(new SetCardInfo("Opt", 158, Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Orzhov Signet", 323, Rarity.COMMON, mage.cards.o.OrzhovSignet.class)); + cards.add(new SetCardInfo("Overgrown Battlement", 264, Rarity.UNCOMMON, mage.cards.o.OvergrownBattlement.class)); + cards.add(new SetCardInfo("Overgrown Farmland", 381, Rarity.RARE, mage.cards.o.OvergrownFarmland.class)); cards.add(new SetCardInfo("Path of Ancestry", 382, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); cards.add(new SetCardInfo("Perilous Landscape", 383, Rarity.COMMON, mage.cards.p.PerilousLandscape.class)); cards.add(new SetCardInfo("Phyrexian Reclamation", 194, Rarity.UNCOMMON, mage.cards.p.PhyrexianReclamation.class)); @@ -159,73 +222,129 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Preordain", 161, Rarity.COMMON, mage.cards.p.Preordain.class)); cards.add(new SetCardInfo("Prismari Command", 299, Rarity.RARE, mage.cards.p.PrismariCommand.class)); cards.add(new SetCardInfo("Putrefy", 300, Rarity.UNCOMMON, mage.cards.p.Putrefy.class)); + cards.add(new SetCardInfo("Radiant Grove", 385, Rarity.COMMON, mage.cards.r.RadiantGrove.class)); cards.add(new SetCardInfo("Rampant Growth", 265, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Rapacious Dragon", 229, Rarity.UNCOMMON, mage.cards.r.RapaciousDragon.class)); + cards.add(new SetCardInfo("Rapid Hybridization", 162, Rarity.UNCOMMON, mage.cards.r.RapidHybridization.class)); + cards.add(new SetCardInfo("Reality Shift", 163, Rarity.UNCOMMON, mage.cards.r.RealityShift.class)); cards.add(new SetCardInfo("Reassembling Skeleton", 195, Rarity.UNCOMMON, mage.cards.r.ReassemblingSkeleton.class)); + cards.add(new SetCardInfo("Reflections of Littjara", 164, Rarity.RARE, mage.cards.r.ReflectionsOfLittjara.class)); cards.add(new SetCardInfo("Release the Dogs", 127, Rarity.UNCOMMON, mage.cards.r.ReleaseTheDogs.class)); cards.add(new SetCardInfo("Reliquary Tower", 386, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); + cards.add(new SetCardInfo("Rhox Faithmender", 128, Rarity.RARE, mage.cards.r.RhoxFaithmender.class)); cards.add(new SetCardInfo("Rite of Replication", 165, Rarity.RARE, mage.cards.r.RiteOfReplication.class)); cards.add(new SetCardInfo("River Kelpie", 166, Rarity.RARE, mage.cards.r.RiverKelpie.class)); + cards.add(new SetCardInfo("Rockfall Vale", 387, Rarity.RARE, mage.cards.r.RockfallVale.class)); + cards.add(new SetCardInfo("Rootbound Crag", 388, Rarity.RARE, mage.cards.r.RootboundCrag.class)); cards.add(new SetCardInfo("Rugged Prairie", 389, Rarity.RARE, mage.cards.r.RuggedPrairie.class)); cards.add(new SetCardInfo("Sakura-Tribe Elder", 266, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Sarkhan, Soul Aflame", 301, Rarity.MYTHIC, mage.cards.s.SarkhanSoulAflame.class)); cards.add(new SetCardInfo("Satyr Wayfinder", 267, Rarity.COMMON, mage.cards.s.SatyrWayfinder.class)); + cards.add(new SetCardInfo("Scourge of the Throne", 230, Rarity.RARE, mage.cards.s.ScourgeOfTheThrone.class)); + cards.add(new SetCardInfo("Seedborn Muse", 268, Rarity.RARE, mage.cards.s.SeedbornMuse.class)); + cards.add(new SetCardInfo("Selesnya Signet", 324, Rarity.COMMON, mage.cards.s.SelesnyaSignet.class)); cards.add(new SetCardInfo("Selfless Spirit", 129, Rarity.RARE, mage.cards.s.SelflessSpirit.class)); + cards.add(new SetCardInfo("Selvala's Stampede", 269, Rarity.RARE, mage.cards.s.SelvalasStampede.class)); cards.add(new SetCardInfo("Shadow Summoning", 101, Rarity.UNCOMMON, mage.cards.s.ShadowSummoning.class)); + cards.add(new SetCardInfo("Shadrix Silverquill", 302, Rarity.MYTHIC, mage.cards.s.ShadrixSilverquill.class)); + cards.add(new SetCardInfo("Shalai, Voice of Plenty", 130, Rarity.RARE, mage.cards.s.ShalaiVoiceOfPlenty.class)); cards.add(new SetCardInfo("Shattered Landscape", 390, Rarity.COMMON, mage.cards.s.ShatteredLandscape.class)); cards.add(new SetCardInfo("Shattered Sanctum", 391, Rarity.RARE, mage.cards.s.ShatteredSanctum.class)); + cards.add(new SetCardInfo("Sheltered Thicket", 392, Rarity.RARE, mage.cards.s.ShelteredThicket.class)); cards.add(new SetCardInfo("Shigeki, Jukai Visionary", 270, Rarity.RARE, mage.cards.s.ShigekiJukaiVisionary.class)); cards.add(new SetCardInfo("Shiny Impetus", 231, Rarity.COMMON, mage.cards.s.ShinyImpetus.class)); cards.add(new SetCardInfo("Shivan Reef", 393, Rarity.RARE, mage.cards.s.ShivanReef.class)); + cards.add(new SetCardInfo("Sidar Kondo of Jamuraa", 303, Rarity.MYTHIC, mage.cards.s.SidarKondoOfJamuraa.class)); cards.add(new SetCardInfo("Siege-Gang Commander", 232, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); + cards.add(new SetCardInfo("Skarrgan Hellkite", 233, Rarity.MYTHIC, mage.cards.s.SkarrganHellkite.class)); cards.add(new SetCardInfo("Skull Prophet", 304, Rarity.UNCOMMON, mage.cards.s.SkullProphet.class)); cards.add(new SetCardInfo("Skullclamp", 103, Rarity.UNCOMMON, mage.cards.s.Skullclamp.class)); cards.add(new SetCardInfo("Skycloud Expanse", 394, Rarity.RARE, mage.cards.s.SkycloudExpanse.class)); + cards.add(new SetCardInfo("Slaughter the Strong", 131, Rarity.UNCOMMON, mage.cards.s.SlaughterTheStrong.class)); cards.add(new SetCardInfo("Smoldering Marsh", 395, Rarity.RARE, mage.cards.s.SmolderingMarsh.class)); cards.add(new SetCardInfo("Sol Ring", 106, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); cards.add(new SetCardInfo("Solemn Simulacrum", 325, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); + cards.add(new SetCardInfo("Spit Flame", 234, Rarity.RARE, mage.cards.s.SpitFlame.class)); cards.add(new SetCardInfo("Springbloom Druid", 271, Rarity.COMMON, mage.cards.s.SpringbloomDruid.class)); + cards.add(new SetCardInfo("Staff of Compleation", 326, Rarity.MYTHIC, mage.cards.s.StaffOfCompleation.class)); + cards.add(new SetCardInfo("Steel Hellkite", 327, Rarity.RARE, mage.cards.s.SteelHellkite.class)); cards.add(new SetCardInfo("Stitcher's Supplier", 196, Rarity.UNCOMMON, mage.cards.s.StitchersSupplier.class)); + cards.add(new SetCardInfo("Storm's Wrath", 236, Rarity.RARE, mage.cards.s.StormsWrath.class)); cards.add(new SetCardInfo("Storm-Kiln Artist", 235, Rarity.UNCOMMON, mage.cards.s.StormKilnArtist.class)); + cards.add(new SetCardInfo("Stormbreath Dragon", 237, Rarity.MYTHIC, mage.cards.s.StormbreathDragon.class)); cards.add(new SetCardInfo("Stroke of Midnight", 132, Rarity.UNCOMMON, mage.cards.s.StrokeOfMidnight.class)); cards.add(new SetCardInfo("Sublime Epiphany", 167, Rarity.RARE, mage.cards.s.SublimeEpiphany.class)); cards.add(new SetCardInfo("Sulfur Falls", 396, Rarity.RARE, mage.cards.s.SulfurFalls.class)); cards.add(new SetCardInfo("Sun Titan", 133, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); + cards.add(new SetCardInfo("Sungrass Prairie", 397, Rarity.RARE, mage.cards.s.SungrassPrairie.class)); cards.add(new SetCardInfo("Sunken Hollow", 398, Rarity.RARE, mage.cards.s.SunkenHollow.class)); + cards.add(new SetCardInfo("Sunpetal Grove", 399, Rarity.RARE, mage.cards.s.SunpetalGrove.class)); + cards.add(new SetCardInfo("Swiftfoot Boots", 328, Rarity.UNCOMMON, mage.cards.s.SwiftfootBoots.class)); cards.add(new SetCardInfo("Swords to Plowshares", 134, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Sylvan Caryatid", 272, Rarity.RARE, mage.cards.s.SylvanCaryatid.class)); cards.add(new SetCardInfo("Talisman of Conviction", 329, Rarity.UNCOMMON, mage.cards.t.TalismanOfConviction.class)); + cards.add(new SetCardInfo("Talisman of Creativity", 330, Rarity.UNCOMMON, mage.cards.t.TalismanOfCreativity.class)); cards.add(new SetCardInfo("Talisman of Hierarchy", 331, Rarity.UNCOMMON, mage.cards.t.TalismanOfHierarchy.class)); + cards.add(new SetCardInfo("Talisman of Impulse", 332, Rarity.UNCOMMON, mage.cards.t.TalismanOfImpulse.class)); cards.add(new SetCardInfo("Talisman of Progress", 333, Rarity.UNCOMMON, mage.cards.t.TalismanOfProgress.class)); cards.add(new SetCardInfo("Tasigur, the Golden Fang", 197, Rarity.RARE, mage.cards.t.TasigurTheGoldenFang.class)); + cards.add(new SetCardInfo("Taurean Mauler", 238, Rarity.RARE, mage.cards.t.TaureanMauler.class)); cards.add(new SetCardInfo("Tear Asunder", 273, Rarity.UNCOMMON, mage.cards.t.TearAsunder.class)); cards.add(new SetCardInfo("Tempest Technique", 16, Rarity.RARE, mage.cards.t.TempestTechnique.class)); + cards.add(new SetCardInfo("Temple of Abandon", 400, Rarity.RARE, mage.cards.t.TempleOfAbandon.class)); cards.add(new SetCardInfo("Temple of Enlightenment", 401, Rarity.RARE, mage.cards.t.TempleOfEnlightenment.class)); cards.add(new SetCardInfo("Temple of Epiphany", 402, Rarity.RARE, mage.cards.t.TempleOfEpiphany.class)); cards.add(new SetCardInfo("Temple of Malady", 403, Rarity.RARE, mage.cards.t.TempleOfMalady.class)); + cards.add(new SetCardInfo("Temple of Mystery", 404, Rarity.RARE, mage.cards.t.TempleOfMystery.class)); + cards.add(new SetCardInfo("Temple of Plenty", 405, Rarity.RARE, mage.cards.t.TempleOfPlenty.class)); cards.add(new SetCardInfo("Temple of Silence", 406, Rarity.RARE, mage.cards.t.TempleOfSilence.class)); cards.add(new SetCardInfo("Temple of Triumph", 407, Rarity.RARE, mage.cards.t.TempleOfTriumph.class)); + cards.add(new SetCardInfo("Temple of the Dragon Queen", 104, Rarity.UNCOMMON, mage.cards.t.TempleOfTheDragonQueen.class)); cards.add(new SetCardInfo("Tempt with Vengeance", 239, Rarity.RARE, mage.cards.t.TemptWithVengeance.class)); + cards.add(new SetCardInfo("Temur Ascendancy", 305, Rarity.RARE, mage.cards.t.TemurAscendancy.class)); cards.add(new SetCardInfo("Terramorphic Expanse", 408, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); + cards.add(new SetCardInfo("Territorial Hellkite", 240, Rarity.RARE, mage.cards.t.TerritorialHellkite.class)); cards.add(new SetCardInfo("Teval, the Balanced Scale", 8, Rarity.MYTHIC, mage.cards.t.TevalTheBalancedScale.class)); cards.add(new SetCardInfo("Thalisse, Reverent Medium", 306, Rarity.UNCOMMON, mage.cards.t.ThalisseReverentMedium.class)); cards.add(new SetCardInfo("Think Twice", 168, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); cards.add(new SetCardInfo("Third Path Iconoclast", 307, Rarity.UNCOMMON, mage.cards.t.ThirdPathIconoclast.class)); + cards.add(new SetCardInfo("Thunderbreak Regent", 241, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class)); cards.add(new SetCardInfo("Time Wipe", 308, Rarity.RARE, mage.cards.t.TimeWipe.class)); cards.add(new SetCardInfo("Timeless Witness", 274, Rarity.UNCOMMON, mage.cards.t.TimelessWitness.class)); cards.add(new SetCardInfo("Tocasia's Welcome", 135, Rarity.RARE, mage.cards.t.TocasiasWelcome.class)); + cards.add(new SetCardInfo("Tower Defense", 275, Rarity.UNCOMMON, mage.cards.t.TowerDefense.class)); + cards.add(new SetCardInfo("Towering Titan", 276, Rarity.MYTHIC, mage.cards.t.ToweringTitan.class)); cards.add(new SetCardInfo("Treasure Cruise", 169, Rarity.COMMON, mage.cards.t.TreasureCruise.class)); + cards.add(new SetCardInfo("Tree of Redemption", 97, Rarity.MYTHIC, mage.cards.t.TreeOfRedemption.class)); cards.add(new SetCardInfo("Twilight Drover", 136, Rarity.RARE, mage.cards.t.TwilightDrover.class)); + cards.add(new SetCardInfo("Twilight Mire", 409, Rarity.RARE, mage.cards.t.TwilightMire.class)); cards.add(new SetCardInfo("Vanquish the Horde", 91, Rarity.RARE, mage.cards.v.VanquishTheHorde.class)); cards.add(new SetCardInfo("Vault of the Archangel", 410, Rarity.RARE, mage.cards.v.VaultOfTheArchangel.class)); cards.add(new SetCardInfo("Velomachus Lorehold", 309, Rarity.MYTHIC, mage.cards.v.VelomachusLorehold.class)); + cards.add(new SetCardInfo("Vengeful Ancestor", 242, Rarity.RARE, mage.cards.v.VengefulAncestor.class)); + cards.add(new SetCardInfo("Verix Bladewing", 243, Rarity.MYTHIC, mage.cards.v.VerixBladewing.class)); cards.add(new SetCardInfo("Veyran, Voice of Duality", 310, Rarity.MYTHIC, mage.cards.v.VeyranVoiceOfDuality.class)); cards.add(new SetCardInfo("Victimize", 198, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); cards.add(new SetCardInfo("Viscera Seer", 199, Rarity.COMMON, mage.cards.v.VisceraSeer.class)); + cards.add(new SetCardInfo("Wakestone Gargoyle", 137, Rarity.RARE, mage.cards.w.WakestoneGargoyle.class)); + cards.add(new SetCardInfo("Walking Bulwark", 334, Rarity.UNCOMMON, mage.cards.w.WalkingBulwark.class)); + cards.add(new SetCardInfo("Wall of Blossoms", 277, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("Wall of Limbs", 200, Rarity.UNCOMMON, mage.cards.w.WallOfLimbs.class)); + cards.add(new SetCardInfo("Wall of Omens", 138, Rarity.UNCOMMON, mage.cards.w.WallOfOmens.class)); + cards.add(new SetCardInfo("Wall of Reverence", 139, Rarity.RARE, mage.cards.w.WallOfReverence.class)); + cards.add(new SetCardInfo("Wall of Roots", 278, Rarity.COMMON, mage.cards.w.WallOfRoots.class)); cards.add(new SetCardInfo("Wayfarer's Bauble", 335, Rarity.COMMON, mage.cards.w.WayfarersBauble.class)); + cards.add(new SetCardInfo("Weathered Sentinels", 336, Rarity.RARE, mage.cards.w.WeatheredSentinels.class)); + cards.add(new SetCardInfo("Welcoming Vampire", 140, Rarity.RARE, mage.cards.w.WelcomingVampire.class)); cards.add(new SetCardInfo("Whirlwind of Thought", 311, Rarity.RARE, mage.cards.w.WhirlwindOfThought.class)); cards.add(new SetCardInfo("Windbrisk Heights", 411, Rarity.RARE, mage.cards.w.WindbriskHeights.class)); + cards.add(new SetCardInfo("Wingmantle Chaplain", 141, Rarity.UNCOMMON, mage.cards.w.WingmantleChaplain.class)); cards.add(new SetCardInfo("Woe Strider", 201, Rarity.RARE, mage.cards.w.WoeStrider.class)); cards.add(new SetCardInfo("Wonder", 170, Rarity.UNCOMMON, mage.cards.w.Wonder.class)); cards.add(new SetCardInfo("Woodland Cemetery", 412, Rarity.RARE, mage.cards.w.WoodlandCemetery.class)); cards.add(new SetCardInfo("Yahenni, Undying Partisan", 202, Rarity.RARE, mage.cards.y.YahenniUndyingPartisan.class)); + cards.add(new SetCardInfo("Yavimaya Coast", 413, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); cards.add(new SetCardInfo("Young Pyromancer", 95, Rarity.UNCOMMON, mage.cards.y.YoungPyromancer.class)); + cards.add(new SetCardInfo("Zetalpa, Primal Dawn", 142, Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class)); } } diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index a0fe9ba1069..70785ce4302 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57456,62 +57456,95 @@ Zurgo Stormrender|Tarkir: Dragonstorm Commander|10|M|{R}{W}{B}|Legendary Creatur Ainok Strike Leader|Tarkir: Dragonstorm Commander|11|R|{1}{W}|Creature - Dog Warrior|2|2|Whenever you attack with this creature and/or your commander, for each opponent, create a 1/1 red Goblin creature token that's tapped and attacking that player.$Sacrifice this creature: Creature tokens you control gain indestructible until end of turn.| Aligned Heart|Tarkir: Dragonstorm Commander|12|R|{2}{W}|Enchantment|||Flurry -- Whenever you cast your second spell each turn, put a rally counter on this enchantment. Then create a 1/1 white Monk creature token with prowess for each rally counter on it.| Ironwill Forger|Tarkir: Dragonstorm Commander|13|R|{3}{W}|Creature - Orc Artificer|3|3|Lieutenant -- At the beginning of combat on your turn, if you control your commander, target nonlegendary creature you control gains myriad until end of turn.| +Protector of the Wastes|Tarkir: Dragonstorm Commander|14|R|{4}{W}{W}|Creature - Dragon|5|5|Flying$When this creature enters or becomes monstrous, exile up to two target artifacts and/or enchantments controlled by different players.${4}{W}: Monstrosity 3.| +Reunion of the House|Tarkir: Dragonstorm Commander|15|R|{5}{W}{W}|Sorcery|||Return any number of target creature cards with total power 10 or less from your graveyard to the battlefield. Exile Reunion of the House.| Tempest Technique|Tarkir: Dragonstorm Commander|16|R|{3}{W}|Enchantment - Aura|||Storm$Enchant creature you control$Enchanted creature gets +1/+1 for each enchantment you control.| Will of the Mardu|Tarkir: Dragonstorm Commander|17|R|{2}{W}|Instant|||Choose one. If you control a commander as you cast this spell, you may choose both instead.$* Create a number of 1/1 red Warrior creature tokens equal to the number of creatures target player controls.$* Will of the Mardu deals damage to target creature equal to the number of creatures you control.| Adaptive Training Post|Tarkir: Dragonstorm Commander|18|R|{2}{U}|Artifact|||Whenever you cast an instant or sorcery spell, if this artifact has fewer than three charge counters on it, put a charge counter on it.$Remove three charge counters from this artifact: When you next cast an instant or sorcery spell this turn, copy it and you may choose new targets for the copy.| +Deceptive Frostkite|Tarkir: Dragonstorm Commander|19|R|{U}{U}|Creature - Dragon|1|1|Flying$You may have this creature enter as a copy of a creature you control with power 4 or greater, except it's a Dragon in addition to its other types and it has flying.| Diviner of Mist|Tarkir: Dragonstorm Commander|20|R|{4}{U}|Creature - Dragon|4|5|Flying$Whenever this creature attacks, mill four cards. You may cast an instant or sorcery spell from your graveyard with mana value 4 or less without paying its mana cost. If that spell would be put into your graveyard, exile it instead.| +Hammerhead Tyrant|Tarkir: Dragonstorm Commander|21|R|{4}{U}{U}|Creature - Dragon|6|6|Flying$Whenever you cast a spell, return up to one target nonland permanent an opponent controls with mana value less than or equal to that spell's mana value to its owner's hand.| Transcendent Dragon|Tarkir: Dragonstorm Commander|22|R|{4}{U}{U}|Creature - Dragon|4|3|Flash$Flying$When this creature enters, if you cast it, counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard, then you may cast it without paying its mana cost.| Voracious Bibliophile|Tarkir: Dragonstorm Commander|23|R|{3}{U}|Creature - Dragon|3|3|Flying, vigilance$Whenever you cast a spell with one or more targets, draw that many cards.| +Will of the Temur|Tarkir: Dragonstorm Commander|24|R|{5}{U}|Sorcery|||Choose one. If you control a commander as you cast this spell, you may choose both instead.$* Create a token that's a copy of target permanent, except it's a 4/4 Dragon creature with flying in addition to its other types.$* Target player draws cards equal to the greatest mana value among permanents you control.| Afterlife from the Loam|Tarkir: Dragonstorm Commander|25|R|{5}{B}{B}{B}|Sorcery|||Delve$For each player, choose up to one target creature card in that player's graveyard. Put those cards onto the battlefield under your control. They're Zombies in addition to their other types.| Bone Devourer|Tarkir: Dragonstorm Commander|26|R|{3}{B}|Creature - Dragon|2|2|Flash$Flying$This creature enters with a number of +1/+1 counters on it equal to the number of creatures that died this turn.$When this creature dies, you draw X cards and you lose X life, where X is the number of +1/+1 counters on it.| +Jaws of Defeat|Tarkir: Dragonstorm Commander|27|R|{3}{B}|Enchantment|||Whenever a creature you control enters, target opponent loses life equal to the difference between that creature's power and its toughness.| Teval's Judgment|Tarkir: Dragonstorm Commander|28|R|{2}{B}|Enchantment|||Whenever one or more cards leave your graveyard, choose one that hasn't been chosen this turn --$* Draw a card.$* Create a Treasure token.$* Create a 2/2 black Zombie Druid creature token.| +Tip the Scales|Tarkir: Dragonstorm Commander|29|R|{2}{B}|Sorcery|||Sacrifice a creature. When you do, all creatures get -X/-X until end of turn, where X is the sacrificed creature's toughness.| Welcome the Dead|Tarkir: Dragonstorm Commander|30|R|{3}{B}|Sorcery|||Draw two cards, then discard a card and you lose 2 life. Create X tapped 2/2 black Zombie Druid creature tokens, where X is the number of cards that were put into your graveyard from your hand or library this turn.$Flashback {5}{B}| +Will of the Abzan|Tarkir: Dragonstorm Commander|31|R|{3}{B}|Sorcery|||Choose one. If you control a commander as you cast this spell, you may choose both instead.$* Any number of target opponents each sacrifice a creature with the greatest power among creatures that player controls and lose 3 life.$* Return target creature card from your graveyard to the battlefield.| Within Range|Tarkir: Dragonstorm Commander|32|R|{3}{B}|Enchantment|||When this enchantment enters, create two 1/1 red Warrior creature tokens.$Whenever you attack, each opponent loses life equal to the number of creatures attacking them.| Caldera Pyremaw|Tarkir: Dragonstorm Commander|33|R|{3}{R}{R}|Creature - Dragon|3|3|Flying$Whenever you cast an instant or sorcery spell, put a +1/+1 counter on this creature. Then this creature deals damage equal to its power to target opponent.| Goldlust Triad|Tarkir: Dragonstorm Commander|34|R|{4}{R}|Creature - Dragon|4|3|Flying$Myriad$Whenever this creature deals combat damage to a player, create a Treasure token.| Infantry Shield|Tarkir: Dragonstorm Commander|35|R|{2}{R}|Artifact - Equipment|||Equipped creature has menace and mobilize X, where X is its power.$Equip {2}| +Parapet Thrasher|Tarkir: Dragonstorm Commander|36|R|{2}{R}{R}|Creature - Dragon|4|3|Flying$Whenever one or more Dragons you control deal combat damage to an opponent, choose one that hasn't been chosen this turn --$* Destroy target artifact that opponent controls.$* This creature deals 4 damage to each other opponent.$* Exile the top card of your library. You may play it this turn.| Redoubled Stormsinger|Tarkir: Dragonstorm Commander|37|R|{2}{R}|Creature - Orc Wizard|3|3|First strike$Whenever this creature attacks, for each creature token you control that entered this turn, create a tapped and attacking token that's a copy of that token. At the beginning of the next end step, sacrifice those tokens.| +Thundermane Dragon|Tarkir: Dragonstorm Commander|38|R|{3}{R}|Creature - Dragon|4|4|Flying$You may look at the top card of your library any time.$You may cast creature spells with power 4 or greater from the top of your library. If you cast a creature spell this way, it gains haste until end of turn.| Transforming Flourish|Tarkir: Dragonstorm Commander|39|R|{2}{R}|Instant|||Demonstrate$Destroy target artifact or creature you don't control. If that permanent is destroyed this way, its controller exiles cards from the top of their library until they exile a nonland card, then they may cast that card without paying its mana cost.| Will of the Jeskai|Tarkir: Dragonstorm Commander|40|R|{3}{R}|Sorcery|||Choose one. If you control a commander as you cast this spell, you may choose both instead.$* Each player may discard their hand and draw five cards.$* Each instant and sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost.| +Zenith Festival|Tarkir: Dragonstorm Commander|41|R|{X}{R}{R}|Sorcery|||Exile the top X cards of your library. You may play them until the end of your next turn.$Harmonize {X}{R}{R}| +Arbor Adherent|Tarkir: Dragonstorm Commander|42|R|{3}{G}|Creature - Dog Druid|2|4|{T}: Add one mana of any color.${T}: Add X mana of any one color, where X is the greatest toughness among other creatures you control.| +Become the Avalanche|Tarkir: Dragonstorm Commander|43|R|{4}{G}{G}|Sorcery|||Draw a card for each creature you control with power 4 or greater. Then creatures you control get +X/+X until end of turn, where X is the number of cards in your hand.| +Broodcaller Scourge|Tarkir: Dragonstorm Commander|44|R|{5}{G}{G}|Creature - Dragon|5|7|Flying$Whenever one or more Dragons you control deal combat damage to a player, you may put a permanent card with mana value less than or equal to that damage from your hand onto the battlefield.| +Canopy Gargantuan|Tarkir: Dragonstorm Commander|45|R|{5}{G}{G}|Creature - Dragon|7|7|Flying, ward {2}$At the beginning of your upkeep, put a number of +1/+1 counters on each other creature you control equal to that creature's toughness.| Floral Evoker|Tarkir: Dragonstorm Commander|46|R|{2}{G}|Creature - Snake Druid|2|3|Landfall -- Whenever a land you control enters, put a+1/+1 counter on this creature.${G}, Discard a creature card: Return target land card from your graveyard to the battlefield tapped.| +Rampart Architect|Tarkir: Dragonstorm Commander|47|R|{3}{G}|Creature - Elephant Advisor|3|4|Whenever this creature enters or attacks, create a 1/3 white Wall creature token with defender.$Whenever a creature you control with defender dies, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.| Steward of the Harvest|Tarkir: Dragonstorm Commander|48|R|{3}{G}|Creature - Human Druid|3|3|When this creature enters, exile up to three target land cards from your graveyard.$Creatures you control have all activated abilities of all land cards exiled with this creature.| Will of the Sultai|Tarkir: Dragonstorm Commander|49|R|{4}{G}|Sorcery|||Choose one. If you control a commander as you cast this spell, you may choose both instead.$* Target player mills three cards. Return all land cards from your graveyard to the battlefield tapped.$* Put X+1/+1 counters on target creature, where X is the number of lands you control. It gains trample until end of turn.| Colossal Grave-Reaver|Tarkir: Dragonstorm Commander|50|R|{6}{B}{G}|Creature - Dragon|7|6|Flying$Whenever this creature enters or attacks, mill three cards.$Whenever one or more creature cards are put into your graveyard from your library, put one of them onto the battlefield.| Vanquish the Horde|Tarkir: Dragonstorm Commander|91|R|{6}{W}{W}|Sorcery|||This spell costs {1} less to cast for each creature on the battlefield.$Destroy all creatures.| Narset's Reversal|Tarkir: Dragonstorm Commander|92|R|{U}{U}|Instant|||Copy target instant or sorcery spell, then return it to its owner's hand. You may choose new targets for the copy.| -Gravecrawler|Tarkir: Dragonstorm Commander|93|C|{B}|Creature - Zombie|2|1|This creature can't block.$You may cast this card from your graveyard as long as you control a Zombie.| +Gravecrawler|Tarkir: Dragonstorm Commander|93|R|{B}|Creature - Zombie|2|1|This creature can't block.$You may cast this card from your graveyard as long as you control a Zombie.| +Dragon Tempest|Tarkir: Dragonstorm Commander|94|U|{1}{R}|Enchantment|||Whenever a creature you control with flying enters, it gains haste until end of turn.$Whenever a Dragon you control enters, it deals X damage to any target, where X is the number of Dragons you control.| Young Pyromancer|Tarkir: Dragonstorm Commander|95|U|{1}{R}|Creature - Human Shaman|2|1|Whenever you cast an instant or sorcery spell, create a 1/1 red Elemental creature token.| Life from the Loam|Tarkir: Dragonstorm Commander|96|R|{1}{G}|Sorcery|||Return up to three target land cards from your graveyard to your hand.$Dredge 3| -Casualties of War|Tarkir: Dragonstorm Commander|98|C|{2}{B}{B}{G}{G}|Sorcery|||Choose one or more --$* Destroy target artifact.$* Destroy target creature.$* Destroy target enchantment.$* Destroy target land.$* Destroy target planeswalker.| +Tree of Redemption|Tarkir: Dragonstorm Commander|97|M|{3}{G}|Creature - Plant|0|13|Defender${T}: Exchange your life total with this creature's toughness.| +Casualties of War|Tarkir: Dragonstorm Commander|98|R|{2}{B}{B}{G}{G}|Sorcery|||Choose one or more --$* Destroy target artifact.$* Destroy target creature.$* Destroy target enchantment.$* Destroy target land.$* Destroy target planeswalker.| Goblin Electromancer|Tarkir: Dragonstorm Commander|99|C|{U}{R}|Creature - Goblin Wizard|2|2|Instant and sorcery spells you cast cost {1} less to cast.| +Ikra Shidiqi, the Usurper|Tarkir: Dragonstorm Commander|100|M|{3}{B}{G}|Legendary Creature - Snake Wizard|3|7|Menace$Whenever a creature you control deals combat damage to a player, you gain life equal to that creature's toughness.$Partner| Shadow Summoning|Tarkir: Dragonstorm Commander|101|U|{W}{B}|Sorcery|||Create two tapped 1/1 white Spirit creature tokens with flying.| Lightning Greaves|Tarkir: Dragonstorm Commander|102|U|{2}|Artifact - Equipment|||Equipped creature has haste and shroud.$Equip {0}| Skullclamp|Tarkir: Dragonstorm Commander|103|U|{1}|Artifact - Equipment|||Equipped creature gets +1/-1.$Whenever equipped creature dies, draw two cards.$Equip {1}| +Temple of the Dragon Queen|Tarkir: Dragonstorm Commander|104|U||Land|||As this land enters, you may reveal a Dragon card from your hand. This land enters tapped unless you revealed a Dragon card this way or you control a Dragon.$As this land enters, choose a color.${T}: Add one mana of the chosen color.| Arcane Signet|Tarkir: Dragonstorm Commander|105|U|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.| Sol Ring|Tarkir: Dragonstorm Commander|106|U|{1}|Artifact|||{T}: Add {C}{C}.| Command Tower|Tarkir: Dragonstorm Commander|107|C||Land|||{T}: Add one mana of any color in your commander's color identity.| Adeline, Resplendent Cathar|Tarkir: Dragonstorm Commander|108|R|{1}{W}{W}|Legendary Creature - Human Knight|*|4|Vigilance$Adeline's power is equal to the number of creatures you control.$Whenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control.| Angel of Invention|Tarkir: Dragonstorm Commander|109|M|{3}{W}{W}|Creature - Angel|2|1|Flying, vigilance, lifelink$Fabricate 2$Other creatures you control get +1/+1.| +Baldin, Century Herdmaster|Tarkir: Dragonstorm Commander|110|R|{4}{W}{W}|Legendary Creature - Human Warrior|0|7|As long as it's your turn, each creature assigns combat damage equal to its toughness rather than its power.$Whenever Baldin, Century Herdmaster attacks, up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand.| Commander's Insignia|Tarkir: Dragonstorm Commander|111|R|{2}{W}{W}|Enchantment|||Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.| Dismantling Wave|Tarkir: Dragonstorm Commander|112|R|{2}{W}|Sorcery|||For each opponent, destroy up to one target artifact or enchantment that player controls.$Cycling {6}{W}{W}$When you cycle this card, destroy all artifacts and enchantments.| Divine Visitation|Tarkir: Dragonstorm Commander|113|M|{3}{W}{W}|Enchantment|||If one or more creature tokens would be created under your control, that many 4/4 white Angel creature tokens with flying and vigilance are created instead.| Emeria Angel|Tarkir: Dragonstorm Commander|114|R|{2}{W}{W}|Creature - Angel|3|3|Flying$Landfall -- Whenever a land you control enters, you may create a 1/1 white Bird creature token with flying.| +Expel the Interlopers|Tarkir: Dragonstorm Commander|115|R|{3}{W}{W}|Sorcery|||Choose a number between 0 and 10. Destroy all creatures with power greater than or equal to the chosen number.| Ghostly Prison|Tarkir: Dragonstorm Commander|116|U|{2}{W}|Enchantment|||Creatures can't attack you unless their controller pays {2} for each creature they control that's attacking you.| Goldnight Commander|Tarkir: Dragonstorm Commander|117|U|{3}{W}|Creature - Human Cleric Soldier|2|2|Whenever another creature you control enters, creatures you control get +1/+1 until end of turn.| Grand Crescendo|Tarkir: Dragonstorm Commander|118|R|{X}{W}{W}|Instant|||Create X 1/1 green and white Citizen creature tokens. Creatures you control gain indestructible until end of turn.| Hero of Bladehold|Tarkir: Dragonstorm Commander|119|M|{2}{W}{W}|Creature - Human Knight|3|4|Battle cry$Whenever this creature attacks, create two 1/1 white Soldier creature tokens that are tapped and attacking.| Hour of Reckoning|Tarkir: Dragonstorm Commander|120|R|{4}{W}{W}{W}|Sorcery|||Convoke$Destroy all nontoken creatures.| +Indomitable Ancients|Tarkir: Dragonstorm Commander|121|R|{2}{W}{W}|Creature - Treefolk Warrior|2|10|| Legion Loyalty|Tarkir: Dragonstorm Commander|122|M|{6}{W}{W}|Enchantment|||Creatures you control have myriad.| Lingering Souls|Tarkir: Dragonstorm Commander|123|U|{2}{W}|Sorcery|||Create two 1/1 white Spirit creature tokens with flying.$Flashback {1}{B}| Mangara, the Diplomat|Tarkir: Dragonstorm Commander|124|R|{3}{W}|Legendary Creature - Human Cleric|2|4|Lifelink$Whenever an opponent attacks with creatures, if two or more of those creatures are attacking you and/or planeswalkers you control, draw a card.$Whenever an opponent casts their second spell each turn, draw a card.| Monastery Mentor|Tarkir: Dragonstorm Commander|125|M|{2}{W}|Creature - Human Monk|2|2|Prowess$Whenever you cast a noncreature spell, create a 1/1 white Monk creature token with prowess.| +Nyx-Fleece Ram|Tarkir: Dragonstorm Commander|126|U|{1}{W}|Enchantment Creature - Sheep|0|5|At the beginning of your upkeep, you gain 1 life.| Release the Dogs|Tarkir: Dragonstorm Commander|127|U|{3}{W}|Sorcery|||Create four 1/1 white Dog creature tokens.| +Rhox Faithmender|Tarkir: Dragonstorm Commander|128|R|{3}{W}|Creature - Rhino Monk|1|5|Lifelink$If you would gain life, you gain twice that much life instead.| Selfless Spirit|Tarkir: Dragonstorm Commander|129|R|{1}{W}|Creature - Spirit Cleric|2|1|Flying$Sacrifice this creature: Creatures you control gain indestructible until end of turn.| +Shalai, Voice of Plenty|Tarkir: Dragonstorm Commander|130|R|{3}{W}|Legendary Creature - Angel|3|4|Flying$You, planeswalkers you control, and other creatures you control have hexproof.${4}{G}{G}: Put a +1/+1 counter on each creature you control.| +Slaughter the Strong|Tarkir: Dragonstorm Commander|131|U|{1}{W}{W}|Sorcery|||Each player chooses any number of creatures they control with total power 4 or less, then sacrifices all other creatures they control.| Stroke of Midnight|Tarkir: Dragonstorm Commander|132|U|{2}{W}|Instant|||Destroy target nonland permanent. Its controller creates a 1/1 white Human creature token.| Sun Titan|Tarkir: Dragonstorm Commander|133|M|{4}{W}{W}|Creature - Giant|6|6|Vigilance$Whenever this creature enters or attacks, you may return target permanent card with mana value 3 or less from your graveyard to the battlefield.| Swords to Plowshares|Tarkir: Dragonstorm Commander|134|U|{W}|Instant|||Exile target creature. Its controller gains life equal to its power.| Tocasia's Welcome|Tarkir: Dragonstorm Commander|135|R|{2}{W}|Enchantment|||Whenever one or more creatures you control with mana value 3 or less enter, draw a card. This ability triggers only once each turn.| Twilight Drover|Tarkir: Dragonstorm Commander|136|R|{2}{W}|Creature - Spirit|1|1|Whenever a creature token leaves the battlefield, put a +1/+1 counter on this creature.${2}{W}, Remove a +1/+1 counter from this creature: Create two 1/1 white Spirit creature tokens with flying.| +Wakestone Gargoyle|Tarkir: Dragonstorm Commander|137|R|{3}{W}|Creature - Gargoyle|3|4|Defender, flying${1}{W}: Creatures you control with defender can attack this turn as though they didn't have defender.| +Wall of Omens|Tarkir: Dragonstorm Commander|138|U|{1}{W}|Creature - Wall|0|4|Defender$When this creature enters, draw a card.| +Wall of Reverence|Tarkir: Dragonstorm Commander|139|R|{3}{W}|Creature - Spirit Wall|1|6|Defender, flying$At the beginning of your end step, you may gain life equal to the power of target creature you control.| +Welcoming Vampire|Tarkir: Dragonstorm Commander|140|R|{2}{W}|Creature - Vampire|2|3|Flying$Whenever one or more other creatures you control with power 2 or less enter, draw a card. This ability triggers only once each turn.| +Wingmantle Chaplain|Tarkir: Dragonstorm Commander|141|U|{3}{W}|Creature - Human Cleric|0|3|Defender$When this creature enters, create a 1/1 white Bird creature token with flying for each creature with defender you control.$Whenever another creature you control with defender enters, create a 1/1 white Bird creature token with flying.| +Zetalpa, Primal Dawn|Tarkir: Dragonstorm Commander|142|R|{6}{W}{W}|Legendary Creature - Elder Dinosaur|4|8|Flying, double strike, vigilance, trample, indestructible| Amphin Mutineer|Tarkir: Dragonstorm Commander|143|R|{3}{U}|Creature - Salamander Pirate|3|3|When this creature enters, exile up to one target non-Salamander creature. That creature's controller creates a 4/3 blue Salamander Warrior creature token.$Encore {4}{U}{U}| Ancestral Vision|Tarkir: Dragonstorm Commander|144|R||Sorcery|||Suspend 4--{U}$Target player draws three cards.| Archmage Emeritus|Tarkir: Dragonstorm Commander|145|R|{2}{U}{U}|Creature - Human Wizard|2|2|Magecraft -- Whenever you cast or copy an instant or sorcery spell, draw a card.| @@ -57520,15 +57553,20 @@ Compulsive Research|Tarkir: Dragonstorm Commander|147|C|{2}{U}|Sorcery|||Target Consider|Tarkir: Dragonstorm Commander|148|C|{U}|Instant|||Surveil 1.$Draw a card.| Curse of the Swine|Tarkir: Dragonstorm Commander|149|R|{X}{U}{U}|Sorcery|||Exile X target creatures. For each creature exiled this way, its controller creates a 2/2 green Boar creature token.| Deep Analysis|Tarkir: Dragonstorm Commander|150|C|{3}{U}|Sorcery|||Target player draws two cards.$Flashback--{1}{U}, Pay 3 life.| +Draconic Lore|Tarkir: Dragonstorm Commander|151|C|{5}{U}|Instant|||This spell costs {2} less to cast if you control a Dragon.$Draw three cards.| Forbidden Alchemy|Tarkir: Dragonstorm Commander|152|C|{2}{U}|Instant|||Look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard.$Flashback {6}{B}| Frantic Search|Tarkir: Dragonstorm Commander|153|C|{2}{U}|Instant|||Draw two cards, then discard two cards. Untap up to three lands.| Haughty Djinn|Tarkir: Dragonstorm Commander|154|R|{1}{U}{U}|Creature - Djinn|*|4|Flying$Haughty Djinn's power is equal to the number of instant and sorcery cards in your graveyard.$Instant and sorcery spells you cast cost {1} less to cast.| Hedron Crab|Tarkir: Dragonstorm Commander|155|U|{U}|Creature - Crab|0|2|Landfall -- Whenever a land you control enters, target player mills three cards.| +Keiga, the Tide Star|Tarkir: Dragonstorm Commander|156|R|{5}{U}|Legendary Creature - Dragon Spirit|5|5|Flying$When Keiga dies, gain control of target creature.| Lier, Disciple of the Drowned|Tarkir: Dragonstorm Commander|157|M|{3}{U}{U}|Legendary Creature - Human Wizard|3|4|Spells can't be countered.$Each instant and sorcery card in your graveyard has flashback. The flashback cost is equal to that card's mana cost.| Opt|Tarkir: Dragonstorm Commander|158|C|{U}|Instant|||Scry 1.$Draw a card.| Ponder|Tarkir: Dragonstorm Commander|159|C|{U}|Sorcery|||Look at the top three cards of your library, then put them back in any order. You may shuffle.$Draw a card.| Pongify|Tarkir: Dragonstorm Commander|160|U|{U}|Instant|||Destroy target creature. It can't be regenerated. Its controller creates a 3/3 green Ape creature token.| Preordain|Tarkir: Dragonstorm Commander|161|C|{U}|Sorcery|||Scry 2, then draw a card.| +Rapid Hybridization|Tarkir: Dragonstorm Commander|162|U|{U}|Instant|||Destroy target creature. It can't be regenerated. That creature's controller creates a 3/3 green Frog Lizard creature token.| +Reality Shift|Tarkir: Dragonstorm Commander|163|U|{1}{U}|Instant|||Exile target creature. Its controller manifests the top card of their library.| +Reflections of Littjara|Tarkir: Dragonstorm Commander|164|R|{4}{U}|Enchantment|||As this enchantment enters, choose a creature type.$Whenever you cast a spell of the chosen type, copy that spell.| Rite of Replication|Tarkir: Dragonstorm Commander|165|R|{2}{U}{U}|Sorcery|||Kicker {5}$Create a token that's a copy of target creature. If this spell was kicked, create five of those tokens instead.| River Kelpie|Tarkir: Dragonstorm Commander|166|R|{3}{U}{U}|Creature - Beast|3|3|Whenever this creature or another permanent enters from a graveyard, draw a card.$Whenever a player casts a spell from a graveyard, draw a card.$Persist| Sublime Epiphany|Tarkir: Dragonstorm Commander|167|R|{4}{U}{U}|Instant|||Choose one or more --$* Counter target spell.$* Counter target activated or triggered ability.$* Return target nonland permanent to its owner's hand.$* Create a token that's a copy of target creature you control.$* Target player draws a card.| @@ -57536,13 +57574,17 @@ Think Twice|Tarkir: Dragonstorm Commander|168|C|{1}{U}|Instant|||Draw a card.$Fl Treasure Cruise|Tarkir: Dragonstorm Commander|169|C|{7}{U}|Sorcery|||Delve$Draw three cards.| Wonder|Tarkir: Dragonstorm Commander|170|U|{3}{U}|Creature - Incarnation|2|2|Flying$As long as this card is in your graveyard and you control an Island, creatures you control have flying.| Bastion of Remembrance|Tarkir: Dragonstorm Commander|171|U|{2}{B}|Enchantment|||When this enchantment enters, create a 1/1 white Human Soldier creature token.$Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life.| +Behind the Scenes|Tarkir: Dragonstorm Commander|172|U|{2}{B}|Enchantment|||Creatures you control have skulk.${4}{W}: Creatures you control get +1/+1 until end of turn.| Bitter Triumph|Tarkir: Dragonstorm Commander|173|U|{1}{B}|Instant|||As an additional cost to cast this spell, discard a card or pay 3 life.$Destroy target creature or planeswalker.| +Blight Pile|Tarkir: Dragonstorm Commander|174|U|{1}{B}|Creature - Phyrexian|3|3|Defender${2}{B}, {T}: Each opponent loses X life, where X is the number of creatures with defender you control.| Chittering Witch|Tarkir: Dragonstorm Commander|175|R|{3}{B}|Creature - Human Warlock|2|2|When this creature enters, create a number of 1/1 black Rat creature tokens equal to the number of opponents you have.${1}{B}, Sacrifice a creature: Target creature gets -2/-2 until end of turn.| Dauthi Voidwalker|Tarkir: Dragonstorm Commander|176|R|{B}{B}|Creature - Dauthi Rogue|3|2|Shadow$If a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it.${T}, Sacrifice this creature: Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost.| Deadly Dispute|Tarkir: Dragonstorm Commander|177|C|{1}{B}|Instant|||As an additional cost to cast this spell, sacrifice an artifact or creature.$Draw two cards and create a Treasure token.| Disciple of Bolas|Tarkir: Dragonstorm Commander|178|R|{3}{B}|Creature - Human Wizard|2|1|When this creature enters, sacrifice another creature. You gain X life and draw X cards, where X is that creature's power.| Eliminate the Competition|Tarkir: Dragonstorm Commander|179|R|{4}{B}|Sorcery|||As an additional cost to cast this spell, sacrifice X creatures.$Destroy X target creatures.| +Feed the Swarm|Tarkir: Dragonstorm Commander|180|C|{1}{B}|Sorcery|||Destroy target creature or enchantment an opponent controls. You lose life equal to that permanent's mana value.| Gix, Yawgmoth Praetor|Tarkir: Dragonstorm Commander|181|M|{1}{B}{B}|Legendary Creature - Phyrexian Praetor|3|3|Whenever a creature deals combat damage to one of your opponents, its controller may pay 1 life. If they do, they draw a card.${4}{B}{B}{B}, Discard X cards: Exile the top X cards of target opponent's library. You may play lands and cast spells from among cards exiled this way without paying their mana costs.| +Infernal Grasp|Tarkir: Dragonstorm Commander|182|U|{1}{B}|Instant|||Destroy target creature. You lose 2 life.| Junji, the Midnight Sky|Tarkir: Dragonstorm Commander|183|M|{3}{B}{B}|Legendary Creature - Dragon Spirit|5|5|Flying, menace$When Junji dies, choose one --$* Each opponent discards two cards and loses 2 life.$* Put target non-Dragon creature card from a graveyard onto the battlefield under your control. You lose 2 life.| Lethal Scheme|Tarkir: Dragonstorm Commander|184|R|{2}{B}{B}|Instant|||Convoke$Destroy target creature or planeswalker. Each creature that convoked Lethal Scheme connives.| Living Death|Tarkir: Dragonstorm Commander|185|R|{3}{B}{B}|Sorcery|||Each player exiles all creature cards from their graveyard, then sacrifices all creatures they control, then puts all cards they exiled this way onto the battlefield.| @@ -57559,55 +57601,112 @@ Reassembling Skeleton|Tarkir: Dragonstorm Commander|195|U|{1}{B}|Creature - Skel Stitcher's Supplier|Tarkir: Dragonstorm Commander|196|U|{B}|Creature - Zombie|1|1|When this creature enters or dies, mill three cards.| Tasigur, the Golden Fang|Tarkir: Dragonstorm Commander|197|R|{5}{B}|Legendary Creature - Human Shaman|4|5|Delve${2}{G/U}{G/U}: Mill two cards, then return a nonland card of an opponent's choice from your graveyard to your hand.| Victimize|Tarkir: Dragonstorm Commander|198|U|{2}{B}|Sorcery|||Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped.| +Wall of Limbs|Tarkir: Dragonstorm Commander|200|U|{2}{B}|Creature - Zombie Wall|0|3|Defender$Whenever you gain life, put a +1/+1 counter on this creature.${5}{B}{B}, Sacrifice this creature: Target player loses X life, where X is this creature's power.| Woe Strider|Tarkir: Dragonstorm Commander|201|R|{2}{B}|Creature - Horror|3|2|When this creature enters, create a 0/1 white Goat creature token.$Sacrifice another creature: Scry 1.$Escape--{3}{B}{B}, Exile four other cards from your graveyard.$This creature escapes with two +1/+1 counters on it.| Yahenni, Undying Partisan|Tarkir: Dragonstorm Commander|202|R|{2}{B}|Legendary Creature - Aetherborn Vampire|2|2|Haste$Whenever a creature an opponent controls dies, put a +1/+1 counter on Yahenni.$Sacrifice another creature: Yahenni gains indestructible until end of turn.| Abrade|Tarkir: Dragonstorm Commander|203|U|{1}{R}|Instant|||Choose one --$* Abrade deals 3 damage to target creature.$* Destroy target artifact.| +Atsushi, the Blazing Sky|Tarkir: Dragonstorm Commander|204|M|{2}{R}{R}|Legendary Creature - Dragon Spirit|4|4|Flying, trample$When Atsushi dies, choose one --$* Exile the top two cards of your library. Until the end of your next turn, you may play those cards.$* Create three Treasure tokens.| Beetleback Chief|Tarkir: Dragonstorm Commander|205|U|{2}{R}{R}|Creature - Goblin Warrior|2|2|When this creature enters, create two 1/1 red Goblin creature tokens.| Big Score|Tarkir: Dragonstorm Commander|206|C|{3}{R}|Instant|||As an additional cost to cast this spell, discard a card.$Draw two cards and create two Treasure tokens.| +Blasphemous Act|Tarkir: Dragonstorm Commander|207|R|{8}{R}|Sorcery|||This spell costs {1} less to cast for each creature on the battlefield.$Blasphemous Act deals 13 damage to each creature.| +Chaos Warp|Tarkir: Dragonstorm Commander|208|R|{2}{R}|Instant|||The owner of target permanent shuffles it into their library, then reveals the top card of their library. If it's a permanent card, they put it onto the battlefield.| Curse of Opulence|Tarkir: Dragonstorm Commander|209|U|{R}|Enchantment - Aura Curse|||Enchant player$Whenever enchanted player is attacked, create a Gold token. Each opponent attacking that player does the same.| +Dragonlord's Servant|Tarkir: Dragonstorm Commander|210|U|{1}{R}|Creature - Goblin Shaman|1|3|Dragon spells you cast cost {1} less to cast.| +Dragonmaster Outcast|Tarkir: Dragonstorm Commander|211|M|{R}|Creature - Human Shaman|1|1|At the beginning of your upkeep, if you control six or more lands, create a 5/5 red Dragon creature token with flying.| Electrodominance|Tarkir: Dragonstorm Commander|212|R|{X}{R}{R}|Instant|||Electrodominance deals X damage to any target. You may cast a spell with mana value X or less from your hand without paying its mana cost.| Faithless Looting|Tarkir: Dragonstorm Commander|213|C|{R}|Sorcery|||Draw two cards, then discard two cards.$Flashback {2}{R}| +Gadrak, the Crown-Scourge|Tarkir: Dragonstorm Commander|214|R|{2}{R}|Legendary Creature - Dragon|5|4|Flying$Gadrak can't attack unless you control four or more artifacts.$At the beginning of your end step, create a Treasure token for each nontoken creature that died this turn.| +Glorybringer|Tarkir: Dragonstorm Commander|215|R|{3}{R}{R}|Creature - Dragon|4|4|Flying, haste$You may exert this creature as it attacks. When you do, it deals 4 damage to target non-Dragon creature an opponent controls.| Grenzo, Havoc Raiser|Tarkir: Dragonstorm Commander|216|R|{R}{R}|Legendary Creature - Goblin Rogue|2|2|Whenever a creature you control deals combat damage to a player, choose one --$* Goad target creature that player controls.$* Exile the top card of that player's library. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast that spell.| Guttersnipe|Tarkir: Dragonstorm Commander|217|U|{2}{R}|Creature - Goblin Shaman|2|2|Whenever you cast an instant or sorcery spell, this creature deals 2 damage to each opponent.| +Hellkite Courser|Tarkir: Dragonstorm Commander|218|M|{4}{R}{R}|Creature - Dragon|6|5|Flying$When this creature enters, you may put a commander you own from the command zone onto the battlefield. It gains haste. Return it to the command zone at the beginning of the next end step.| +Lathliss, Dragon Queen|Tarkir: Dragonstorm Commander|219|R|{4}{R}{R}|Legendary Creature - Dragon|6|6|Flying$Whenever another nontoken Dragon you control enters, create a 5/5 red Dragon creature token with flying.${1}{R}: Dragons you control get +1/+0 until end of turn.| Legion Warboss|Tarkir: Dragonstorm Commander|220|R|{2}{R}|Creature - Goblin Soldier|2|2|Mentor$At the beginning of combat on your turn, create a 1/1 red Goblin creature token. That token gains haste until end of turn and attacks this combat if able.| +Leyline Tyrant|Tarkir: Dragonstorm Commander|221|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$You don't lose unspent red mana as steps and phases end.$When this creature dies, you may pay any amount of {R}. When you do, it deals that much damage to any target.| Loyal Apprentice|Tarkir: Dragonstorm Commander|222|U|{1}{R}|Creature - Human Artificer|2|1|Haste$Lieutenant -- At the beginning of combat on your turn, if you control your commander, create a 1/1 colorless Thopter artifact creature token with flying. That token gains haste until end of turn.| Mana Geyser|Tarkir: Dragonstorm Commander|223|C|{3}{R}{R}|Sorcery|||Add {R} for each tapped land your opponents control.| Manaform Hellkite|Tarkir: Dragonstorm Commander|224|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$Whenever you cast a noncreature spell, create an X/X red Dragon Illusion creature token with flying and haste, where X is the amount of mana spent to cast that spell. Exile that token at the beginning of the next end step.| +Nesting Dragon|Tarkir: Dragonstorm Commander|225|R|{3}{R}{R}|Creature - Dragon|5|4|Flying$Landfall -- Whenever a land you control enters, create a 0/2 red Dragon Egg creature token with defender and "When this token dies, create a 2/2 red Dragon creature token with flying and '{R}: This token gets +1/+0 until end of turn.'"| +Nogi, Draco-Zealot|Tarkir: Dragonstorm Commander|226|M|{1}{R}{R}|Legendary Creature - Kobold Shaman|3|3|Dragon spells you cast cost {1} less to cast.$Whenever Nogi attacks, if you control three or more Dragons, until end of turn, Nogi becomes a Dragon with base power and toughness 5/5 and gains flying.| Ogre Battledriver|Tarkir: Dragonstorm Commander|227|R|{2}{R}{R}|Creature - Ogre Warrior|3|3|Whenever another creature you control enters, that creature gets +2/+0 and gains haste until end of turn.| +Opportunistic Dragon|Tarkir: Dragonstorm Commander|228|R|{2}{R}{R}|Creature - Dragon|4|3|Flying$When this creature enters, choose target Human or artifact an opponent controls. For as long as this creature remains on the battlefield, gain control of that permanent, it loses all abilities, and it can't attack or block.| +Rapacious Dragon|Tarkir: Dragonstorm Commander|229|U|{4}{R}|Creature - Dragon|3|3|Flying$When this creature enters, create two Treasure tokens.| +Scourge of the Throne|Tarkir: Dragonstorm Commander|230|R|{4}{R}{R}|Creature - Dragon|5|5|Flying$Dethrone$Whenever this creature attacks for the first time each turn, if it's attacking the player with the most life or tied for most life, untap all attacking creatures. After this phase, there is an additional combat phase.| Shiny Impetus|Tarkir: Dragonstorm Commander|231|C|{2}{R}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+2 and is goaded.$Whenever enchanted creature attacks, you create a Treasure token.| Siege-Gang Commander|Tarkir: Dragonstorm Commander|232|R|{3}{R}{R}|Creature - Goblin|2|2|When this creature enters, create three 1/1 red Goblin creature tokens.${1}{R}, Sacrifice a Goblin: This creature deals 2 damage to any target.| +Skarrgan Hellkite|Tarkir: Dragonstorm Commander|233|M|{3}{R}{R}|Creature - Dragon|4|4|Riot$Flying${3}{R}: This creature deals 2 damage divided as you choose among one or two targets. Activate only if this creature has a +1/+1 counter on it.| +Spit Flame|Tarkir: Dragonstorm Commander|234|R|{2}{R}|Instant|||Spit Flame deals 4 damage to target creature.$Whenever a Dragon you control enters, you may pay {R}. If you do, return this card from your graveyard to your hand.| Storm-Kiln Artist|Tarkir: Dragonstorm Commander|235|U|{3}{R}|Creature - Dwarf Shaman|2|2|This creature gets +1/+0 for each artifact you control.$Magecraft -- Whenever you cast or copy an instant or sorcery spell, create a Treasure token.| +Storm's Wrath|Tarkir: Dragonstorm Commander|236|R|{2}{R}{R}|Sorcery|||Storm's Wrath deals 4 damage to each creature and each planeswalker.| +Stormbreath Dragon|Tarkir: Dragonstorm Commander|237|M|{3}{R}{R}|Creature - Dragon|4|4|Flying, haste, protection from white${5}{R}{R}: Monstrosity 3.$When this creature becomes monstrous, it deals damage to each opponent equal to the number of cards in that player's hand.| +Taurean Mauler|Tarkir: Dragonstorm Commander|238|R|{2}{R}|Creature - Shapeshifter|2|2|Changeling$Whenever an opponent casts a spell, you may put a +1/+1 counter on this creature.| Tempt with Vengeance|Tarkir: Dragonstorm Commander|239|R|{X}{R}|Sorcery|||Tempting offer -- Create X 1/1 red Elemental creature tokens with haste. Each opponent may create X 1/1 red Elemental creature tokens with haste. For each opponent who does, create X 1/1 red Elemental creature tokens with haste.| +Territorial Hellkite|Tarkir: Dragonstorm Commander|240|R|{2}{R}{R}|Creature - Dragon|6|5|Flying, haste$At the beginning of combat on your turn, choose an opponent at random that this creature didn't attack during your last combat. This creature attacks that player this combat if able. If you can't choose an opponent this way, tap this creature.| +Thunderbreak Regent|Tarkir: Dragonstorm Commander|241|R|{2}{R}{R}|Creature - Dragon|4|4|Flying$Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, this creature deals 3 damage to that player.| +Vengeful Ancestor|Tarkir: Dragonstorm Commander|242|R|{2}{R}{R}|Creature - Spirit Dragon|3|4|Flying$Whenever this creature enters or attacks, goad target creature.$Whenever a goaded creature attacks, it deals 1 damage to its controller.| +Verix Bladewing|Tarkir: Dragonstorm Commander|243|M|{2}{R}{R}|Legendary Creature - Dragon|4|4|Kicker {3}$Flying$When Verix enters, if it was kicked, create Karox Bladewing, a legendary 4/4 red Dragon creature token with flying.| +Arasta of the Endless Web|Tarkir: Dragonstorm Commander|244|R|{2}{G}{G}|Legendary Enchantment Creature - Spider|3|5|Reach$Whenever an opponent casts an instant or sorcery spell, create a 1/2 green Spider creature token with reach.| +Arboreal Grazer|Tarkir: Dragonstorm Commander|245|C|{G}|Creature - Sloth Beast|0|3|Reach$When this creature enters, you may put a land card from your hand onto the battlefield tapped.| +Assault Formation|Tarkir: Dragonstorm Commander|246|R|{1}{G}|Enchantment|||Each creature you control assigns combat damage equal to its toughness rather than its power.${G}: Target creature with defender can attack this turn as though it didn't have defender.${2}{G}: Creatures you control get +0/+1 until end of turn.| Avenger of Zendikar|Tarkir: Dragonstorm Commander|247|M|{5}{G}{G}|Creature - Elemental|5|5|When this creature enters, create a 0/1 green Plant creature token for each land you control.$Landfall -- Whenever a land you control enters, you may put a +1/+1 counter on each Plant creature you control.| +Axebane Guardian|Tarkir: Dragonstorm Commander|248|C|{2}{G}|Creature - Human Druid|0|3|Defender${T}: Add X mana in any combination of colors, where X is the number of creatures you control with defender.| +Beast Within|Tarkir: Dragonstorm Commander|249|U|{2}{G}|Instant|||Destroy target permanent. Its controller creates a 3/3 green Beast creature token.| +Carven Caryatid|Tarkir: Dragonstorm Commander|250|U|{1}{G}{G}|Creature - Spirit|2|5|Defender$When this creature enters, draw a card.| Conduit of Worlds|Tarkir: Dragonstorm Commander|251|R|{2}{G}{G}|Artifact|||You may play lands from your graveyard.${T}: Choose target nonland permanent card in your graveyard. If you haven't cast a spell this turn, you may cast that card. If you do, you can't cast additional spells this turn. Activate only as a sorcery.| Crawling Sensation|Tarkir: Dragonstorm Commander|252|U|{2}{G}|Enchantment|||At the beginning of your upkeep, you may mill two cards.$Whenever one or more land cards are put into your graveyard from anywhere for the first time each turn, create a 1/1 green Insect creature token.| Cultivate|Tarkir: Dragonstorm Commander|253|C|{2}{G}|Sorcery|||Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle.| -Farseek|Tarkir: Dragonstorm Commander|255|U|{1}{G}|Sorcery|||Search your library for a Plains, Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle.| +Elemental Bond|Tarkir: Dragonstorm Commander|254|U|{2}{G}|Enchantment|||Whenever a creature you control with power 3 or greater enters, draw a card.| +Farseek|Tarkir: Dragonstorm Commander|255|C|{1}{G}|Sorcery|||Search your library for a Plains, Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle.| +Frontier Siege|Tarkir: Dragonstorm Commander|256|R|{3}{G}|Enchantment|||As this enchantment enters, choose Khans or Dragons.$* Khans -- At the beginning of each of your main phases, add {G}{G}.$* Dragons -- Whenever a creature you control with flying enters, you may have it fight target creature you don't control.| Grapple with the Past|Tarkir: Dragonstorm Commander|257|C|{1}{G}|Instant|||Mill three cards, then you may return a creature or land card from your graveyard to your hand.| Harrow|Tarkir: Dragonstorm Commander|258|C|{2}{G}|Instant|||As an additional cost to cast this spell, sacrifice a land.$Search your library for up to two basic land cards, put them onto the battlefield, then shuffle.| +Hornet Nest|Tarkir: Dragonstorm Commander|259|R|{2}{G}|Creature - Insect|0|2|Defender$Whenever this creature is dealt damage, create that many 1/1 green Insect creature tokens with flying and deathtouch.| +Jaddi Offshoot|Tarkir: Dragonstorm Commander|260|U|{G}|Creature - Plant|0|3|Defender$Landfall -- Whenever a land you control enters, you gain 1 life.| +Kodama's Reach|Tarkir: Dragonstorm Commander|261|C|{2}{G}|Sorcery - Arcane|||Search your library for up to two basic land cards, reveal those cards, put one onto the battlefield tapped and the other into your hand, then shuffle.| +Migration Path|Tarkir: Dragonstorm Commander|262|U|{3}{G}|Sorcery|||Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.$Cycling {2}| Multani, Yavimaya's Avatar|Tarkir: Dragonstorm Commander|263|M|{4}{G}{G}|Legendary Creature - Elemental Avatar|0|0|Reach, trample$Multani gets +1/+1 for each land you control and each land card in your graveyard.${1}{G}, Return two lands you control to their owner's hand: Return Multani from your graveyard to your hand.| +Overgrown Battlement|Tarkir: Dragonstorm Commander|264|U|{1}{G}|Creature - Wall|0|4|Defender${T}: Add {G} for each creature you control with defender.| Rampant Growth|Tarkir: Dragonstorm Commander|265|C|{1}{G}|Sorcery|||Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.| Sakura-Tribe Elder|Tarkir: Dragonstorm Commander|266|C|{1}{G}|Creature - Snake Shaman|1|1|Sacrifice this creature: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.| Satyr Wayfinder|Tarkir: Dragonstorm Commander|267|C|{1}{G}|Creature - Satyr|1|1|When this creature enters, reveal the top four cards of your library. You may put a land card from among them into your hand. Put the rest into your graveyard.| +Seedborn Muse|Tarkir: Dragonstorm Commander|268|R|{3}{G}{G}|Creature - Spirit|2|4|Untap all permanents you control during each other player's untap step.| +Selvala's Stampede|Tarkir: Dragonstorm Commander|269|R|{4}{G}{G}|Sorcery|||Council's dilemma -- Starting with you, each player votes for wild or free. Reveal cards from the top of your library until you reveal a creature card for each wild vote. Put those creature cards onto the battlefield, then shuffle the rest into your library. You may put a permanent card from your hand onto the battlefield for each free vote.| Shigeki, Jukai Visionary|Tarkir: Dragonstorm Commander|270|R|{1}{G}|Legendary Enchantment Creature - Snake Druid|1|3|{1}{G}, {T}, Return Shigeki to its owner's hand: Reveal the top four cards of your library. You may put a land card from among them onto the battlefield tapped. Put the rest into your graveyard.$Channel -- {X}{X}{G}{G}, Discard this card: Return X target nonlegendary cards from your graveyard to your hand.| Springbloom Druid|Tarkir: Dragonstorm Commander|271|C|{2}{G}|Creature - Elf Druid|1|1|When this creature enters, you may sacrifice a land. If you do, search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle.| +Sylvan Caryatid|Tarkir: Dragonstorm Commander|272|R|{1}{G}|Creature - Plant|0|3|Defender, hexproof${T}: Add one mana of any color.| Tear Asunder|Tarkir: Dragonstorm Commander|273|U|{1}{G}|Instant|||Kicker {1}{B}$Exile target artifact or enchantment. If this spell was kicked, exile target nonland permanent instead.| Timeless Witness|Tarkir: Dragonstorm Commander|274|U|{2}{G}{G}|Creature - Human Shaman|2|1|When this creature enters, return target card from your graveyard to your hand.$Eternalize {5}{G}{G}| +Tower Defense|Tarkir: Dragonstorm Commander|275|U|{1}{G}|Instant|||Creatures you control get +0/+5 and gain reach until end of turn.| +Towering Titan|Tarkir: Dragonstorm Commander|276|M|{4}{G}{G}|Creature - Giant|0|0|This creature enters with X +1/+1 counters on it, where X is the total toughness of other creatures you control.$Sacrifice a creature with defender: All creatures gain trample until end of turn.| +Wall of Blossoms|Tarkir: Dragonstorm Commander|277|U|{1}{G}|Creature - Plant Wall|0|4|Defender$When this creature enters, draw a card.| +Wall of Roots|Tarkir: Dragonstorm Commander|278|C|{1}{G}|Creature - Plant Wall|0|5|Defender$Put a -0/-1 counter on this creature: Add {G}. Activate only once each turn.| +Anguished Unmaking|Tarkir: Dragonstorm Commander|279|R|{1}{W}{B}|Instant|||Exile target nonland permanent. You lose 3 life.| Aron, Benalia's Ruin|Tarkir: Dragonstorm Commander|280|U|{W}{W}{B}|Legendary Creature - Phyrexian Human|3|3|Menace${W}{B}, {T}, Sacrifice another creature: Put a +1/+1 counter on each creature you control.| +Atarka, World Render|Tarkir: Dragonstorm Commander|281|R|{5}{R}{G}|Legendary Creature - Dragon|6|4|Flying, trample$Whenever a Dragon you control attacks, it gains double strike until end of turn.| Baral and Kari Zev|Tarkir: Dragonstorm Commander|282|R|{1}{U}{R}|Legendary Creature - Human|2|4|First strike, menace$Whenever you cast your first instant or sorcery spell each turn, you may cast a spell with lesser mana value that shares a card type with it from your hand without paying its mana cost. If you don't, create First Mate Ragavan, a legendary 2/1 red Monkey Pirate creature token. It gains haste until end of turn.| Consuming Aberration|Tarkir: Dragonstorm Commander|283|R|{3}{U}{B}|Creature - Horror|*|*|Consuming Aberration's power and toughness are each equal to the number of cards in your opponents' graveyards.$Whenever you cast a spell, each opponent reveals cards from the top of their library until they reveal a land card, then puts those cards into their graveyard.| +Despark|Tarkir: Dragonstorm Commander|284|U|{W}{B}|Instant|||Exile target permanent with mana value 4 or greater.| +Dragonlord Atarka|Tarkir: Dragonstorm Commander|285|M|{5}{R}{G}|Legendary Creature - Elder Dragon|8|8|Flying, trample$When Dragonlord Atarka enters, it deals 5 damage divided as you choose among any number of target creatures and/or planeswalkers your opponents control.| +Dragonlord Dromoka|Tarkir: Dragonstorm Commander|286|M|{4}{G}{W}|Legendary Creature - Elder Dragon|5|7|This spell can't be countered.$Flying, lifelink$Your opponents can't cast spells during your turn.| Expansion // Explosion|Tarkir: Dragonstorm Commander|287|R|{U/R}{U/R}|Instant|||Copy target instant or sorcery spell with mana value 4 or less. You may choose new targets for the copy.$Explosion${X}{U}{U}{R}{R}$Instant$Explosion deals X damage to any target. Target player draws X cards.| Expressive Iteration|Tarkir: Dragonstorm Commander|288|U|{U}{R}|Sorcery|||Look at the top three cards of your library. Put one of them into your hand, put one of them on the bottom of your library, and exile one of them. You may play the exiled card this turn.| +Faeburrow Elder|Tarkir: Dragonstorm Commander|289|R|{1}{G}{W}|Creature - Treefolk Druid|0|0|Vigilance$This creature gets +1/+1 for each color among permanents you control.${T}: For each color among permanents you control, add one mana of that color.| Grisly Salvage|Tarkir: Dragonstorm Commander|290|C|{B}{G}|Instant|||Reveal the top five cards of your library. You may put a creature or land card from among them into your hand. Put the rest into your graveyard.| +Harbinger of the Hunt|Tarkir: Dragonstorm Commander|291|R|{3}{R}{G}|Creature - Dragon|5|3|Flying${2}{R}: This creature deals 1 damage to each creature without flying.${2}{G}: This creature deals 1 damage to each other creature with flying.| +Indulging Patrician|Tarkir: Dragonstorm Commander|292|U|{1}{W}{B}|Creature - Vampire Noble|1|4|Flying$Lifelink$At the beginning of your end step, if you gained 3 or more life this turn, each opponent loses 3 life.| Jarad, Golgari Lich Lord|Tarkir: Dragonstorm Commander|293|M|{B}{B}{G}{G}|Legendary Creature - Zombie Elf|2|2|Jarad gets +1/+1 for each creature card in your graveyard.${1}{B}{G}, Sacrifice another creature: Each opponent loses life equal to the sacrificed creature's power.$Sacrifice a Swamp and a Forest: Return this card from your graveyard to your hand.| Kaya, Geist Hunter|Tarkir: Dragonstorm Commander|294|M|{1}{W}{B}|Legendary Planeswalker - Kaya|3|+1: Creatures you control gain deathtouch until end of turn. Put a +1/+1 counter on up to one target creature token you control.$-2: Until end of turn, if one or more tokens would be created under your control, twice that many of those tokens are created instead.$-6: Exile all cards from all graveyards, then create a 1/1 white Spirit creature token with flying for each card exiled this way.| Lord of Extinction|Tarkir: Dragonstorm Commander|295|M|{3}{B}{G}|Creature - Elemental|*|*|Lord of Extinction's power and toughness are each equal to the number of cards in all graveyards.| Magma Opus|Tarkir: Dragonstorm Commander|296|M|{6}{U}{R}|Instant|||Magma Opus deals 4 damage divided as you choose among any number of targets. Tap two target permanents. Create a 4/4 blue and red Elemental creature token. Draw two cards.${U/R}{U/R}, Discard this card: Create a Treasure token.| -Meren of Clan Nel Toth|Tarkir: Dragonstorm Commander|297|R|{2}{B}{G}|Legendary Creature - Human Shaman|3|4|Whenever another creature you control dies, you get an experience counter.$At the beginning of your end step, choose target creature card in your graveyard. If that card's mana value is less than or equal to the number of experience counters you have, return it to the battlefield. Otherwise, put it into your hand.| +Meren of Clan Nel Toth|Tarkir: Dragonstorm Commander|297|M|{2}{B}{G}|Legendary Creature - Human Shaman|3|4|Whenever another creature you control dies, you get an experience counter.$At the beginning of your end step, choose target creature card in your graveyard. If that card's mana value is less than or equal to the number of experience counters you have, return it to the battlefield. Otherwise, put it into your hand.| Nyx Weaver|Tarkir: Dragonstorm Commander|298|U|{1}{B}{G}|Enchantment Creature - Spider|2|3|Reach$At the beginning of your upkeep, mill two cards.${1}{B}{G}, Exile this creature: Return target card from your graveyard to your hand.| Prismari Command|Tarkir: Dragonstorm Commander|299|R|{1}{U}{R}|Instant|||Choose two --$* Prismari Command deals 2 damage to any target.$* Target player draws two cards, then discards two cards.$* Target player creates a Treasure token.$* Destroy target artifact.| Putrefy|Tarkir: Dragonstorm Commander|300|U|{1}{B}{G}|Instant|||Destroy target artifact or creature. It can't be regenerated.| +Sarkhan, Soul Aflame|Tarkir: Dragonstorm Commander|301|M|{1}{U}{R}|Legendary Creature - Human Shaman|2|4|Dragon spells you cast cost {1} less to cast.$Whenever a Dragon you control enters, you may have Sarkhan become a copy of it until end of turn, except its name is Sarkhan, Soul Aflame and it's legendary in addition to its other types.| +Shadrix Silverquill|Tarkir: Dragonstorm Commander|302|M|{3}{W}{B}|Legendary Creature - Elder Dragon|2|5|Flying, double strike$At the beginning of combat on your turn, you may choose two. Each mode must target a different player.$* Target player creates a 2/1 white and black Inkling creature token with flying.$* Target player draws a card and loses 1 life.$* Target player puts a +1/+1 counter on each creature they control.| +Sidar Kondo of Jamuraa|Tarkir: Dragonstorm Commander|303|M|{2}{G}{W}|Legendary Creature - Human Knight|2|5|Flanking$Creatures your opponents control without flying or reach can't block creatures with power 2 or less.$Partner| Skull Prophet|Tarkir: Dragonstorm Commander|304|U|{B}{G}|Creature - Human Druid|3|1|{T}: Add {B} or {G}.${T}: Mill two cards.| +Temur Ascendancy|Tarkir: Dragonstorm Commander|305|R|{G}{U}{R}|Enchantment|||Creatures you control have haste.$Whenever a creature you control with power 4 or greater enters, you may draw a card.| Thalisse, Reverent Medium|Tarkir: Dragonstorm Commander|306|U|{3}{W}{B}|Legendary Creature - Human Cleric|3|4|At the beginning of each end step, create X 1/1 white Spirit creature tokens with flying, where X is the number of tokens you created this turn.| Third Path Iconoclast|Tarkir: Dragonstorm Commander|307|U|{U}{R}|Creature - Human Monk|2|1|Whenever you cast a noncreature spell, create a 1/1 colorless Soldier artifact creature token.| Time Wipe|Tarkir: Dragonstorm Commander|308|R|{2}{W}{W}{U}|Sorcery|||Return a creature you control to its owner's hand, then destroy all creatures.| @@ -57617,31 +57716,48 @@ Whirlwind of Thought|Tarkir: Dragonstorm Commander|311|R|{1}{U}{R}{W}|Enchantmen Azorius Signet|Tarkir: Dragonstorm Commander|312|U|{2}|Artifact|||{1}, {T}: Add {W}{U}.| Blade of Selves|Tarkir: Dragonstorm Commander|313|R|{2}|Artifact - Equipment|||Equipped creature has myriad.$Equip {4}| Boros Signet|Tarkir: Dragonstorm Commander|314|U|{2}|Artifact|||{1}, {T}: Add {R}{W}.| +Colfenor's Urn|Tarkir: Dragonstorm Commander|315|R|{3}|Artifact|||Whenever a creature with toughness 4 or greater is put into your graveyard from the battlefield, you may exile it.$At the beginning of the end step, if three or more cards have been exiled with this artifact, sacrifice it. If you do, return those cards to the battlefield under their owner's control.| +Crashing Drawbridge|Tarkir: Dragonstorm Commander|316|C|{2}|Artifact Creature - Wall|0|4|Defender${T}: Creatures you control gain haste until end of turn.| +Dragon's Hoard|Tarkir: Dragonstorm Commander|317|R|{3}|Artifact|||Whenever a Dragon you control enters, put a gold counter on this artifact.${T}, Remove a gold counter from this artifact: Draw a card.${T}: Add one mana of any color.| Fellwar Stone|Tarkir: Dragonstorm Commander|318|U|{2}|Artifact|||{T}: Add one mana of any color that a land an opponent controls could produce.| Idol of Oblivion|Tarkir: Dragonstorm Commander|319|R|{2}|Artifact|||{T}: Draw a card. Activate only if you created a token this turn.${8}, {T}, Sacrifice this artifact: Create a 10/10 colorless Eldrazi creature token.| Izzet Signet|Tarkir: Dragonstorm Commander|320|C|{2}|Artifact|||{1}, {T}: Add {U}{R}.| Millikin|Tarkir: Dragonstorm Commander|321|U|{2}|Artifact Creature - Construct|0|1|{T}, Mill a card: Add {C}.| Myr Battlesphere|Tarkir: Dragonstorm Commander|322|R|{7}|Artifact Creature - Myr Construct|4|7|When this creature enters, create four 1/1 colorless Myr artifact creature tokens.$Whenever this creature attacks, you may tap X untapped Myr you control. If you do, this creature gets +X/+0 until end of turn and deals X damage to the player or planeswalker it's attacking.| +Orzhov Signet|Tarkir: Dragonstorm Commander|323|C|{2}|Artifact|||{1}, {T}: Add {W}{B}.| +Selesnya Signet|Tarkir: Dragonstorm Commander|324|C|{2}|Artifact|||{1}, {T}: Add {G}{W}.| Solemn Simulacrum|Tarkir: Dragonstorm Commander|325|R|{4}|Artifact Creature - Golem|2|2|When this creature enters, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.$When this creature dies, you may draw a card.| +Staff of Compleation|Tarkir: Dragonstorm Commander|326|M|{3}|Artifact|||{T}, Pay 1 life: Destroy target permanent you own.${T}, Pay 2 life: Add one mana of any color.${T}, Pay 3 life: Proliferate.${T}, Pay 4 life: Draw a card.${5}: Untap this artifact.| +Steel Hellkite|Tarkir: Dragonstorm Commander|327|R|{6}|Artifact Creature - Dragon|5|5|Flying${2}: This creature gets +1/+0 until end of turn.${X}: Destroy each nonland permanent with mana value X whose controller was dealt combat damage by this creature this turn. Activate only once each turn.| +Swiftfoot Boots|Tarkir: Dragonstorm Commander|328|U|{2}|Artifact - Equipment|||Equipped creature has hexproof and haste.$Equip {1}| Talisman of Conviction|Tarkir: Dragonstorm Commander|329|U|{2}|Artifact|||{T}: Add {C}.${T}: Add {R} or {W}. This artifact deals 1 damage to you.| +Talisman of Creativity|Tarkir: Dragonstorm Commander|330|U|{2}|Artifact|||{T}: Add {C}.${T}: Add {U} or {R}. This artifact deals 1 damage to you.| Talisman of Hierarchy|Tarkir: Dragonstorm Commander|331|U|{2}|Artifact|||{T}: Add {C}.${T}: Add {W} or {B}. This artifact deals 1 damage to you.| +Talisman of Impulse|Tarkir: Dragonstorm Commander|332|U|{2}|Artifact|||{T}: Add {C}.${T}: Add {R} or {G}. This artifact deals 1 damage to you.| Talisman of Progress|Tarkir: Dragonstorm Commander|333|U|{2}|Artifact|||{T}: Add {C}.${T}: Add {W} or {U}. This artifact deals 1 damage to you.| +Walking Bulwark|Tarkir: Dragonstorm Commander|334|U|{1}|Artifact Creature - Golem|0|3|Defender${2}: Until end of turn, target creature with defender gains haste, can attack as though it didn't have defender, and assigns combat damage equal to its toughness rather than its power. Activate only as a sorcery.| Wayfarer's Bauble|Tarkir: Dragonstorm Commander|335|C|{1}|Artifact|||{2}, {T}, Sacrifice this artifact: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.| +Weathered Sentinels|Tarkir: Dragonstorm Commander|336|R|{3}|Artifact Creature - Wall|2|5|Defender, vigilance, reach, trample$This creature can attack players who attacked you during their last turn as though it didn't have defender.$Whenever this creature attacks, it gets +3/+3 and gains indestructible until end of turn.| +Access Tunnel|Tarkir: Dragonstorm Commander|337|U||Land|||{T}: Add {C}.${3}, {T}: Target creature with power 3 or less can't be blocked this turn.| Adarkar Wastes|Tarkir: Dragonstorm Commander|338|R||Land|||{T}: Add {C}.${T}: Add {W} or {U}. This land deals 1 damage to you.| Ash Barrens|Tarkir: Dragonstorm Commander|339|C||Land|||{T}: Add {C}.$Basic landcycling {1}| Battlefield Forge|Tarkir: Dragonstorm Commander|340|R||Land|||{T}: Add {C}.${T}: Add {R} or {W}. This land deals 1 damage to you.| Bojuka Bog|Tarkir: Dragonstorm Commander|341|C||Land|||This land enters tapped.$When this land enters, exile target player's graveyard.${T}: Add {B}.| +Bountiful Landscape|Tarkir: Dragonstorm Commander|342|C||Land|||{T}: Add {C}.${T}, Sacrifice this land: Search your library for a basic Forest, Island, or Mountain card, put it onto the battlefield tapped, then shuffle.$Cycling {G}{U}{R}| +Canopy Vista|Tarkir: Dragonstorm Commander|343|R||Land - Forest Plains|||({T}: Add {G} or {W}.)$This land enters tapped unless you control two or more basic lands.| Canyon Slough|Tarkir: Dragonstorm Commander|344|R||Land - Swamp Mountain|||({T}: Add {B} or {R}.)$This land enters tapped.$Cycling {2}| Cascade Bluffs|Tarkir: Dragonstorm Commander|345|R||Land|||{T}: Add {C}.${U/R}, {T}: Add {U}{U}, {U}{R}, or {R}{R}.| Castle Ardenvale|Tarkir: Dragonstorm Commander|346|R||Land|||This land enters tapped unless you control a Plains.${T}: Add {W}.${2}{W}{W}, {T}: Create a 1/1 white Human creature token.| Castle Embereth|Tarkir: Dragonstorm Commander|347|R||Land|||This land enters tapped unless you control a Mountain.${T}: Add {R}.${1}{R}{R}, {T}: Creatures you control get +1/+0 until end of turn.| Caves of Koilos|Tarkir: Dragonstorm Commander|348|R||Land|||{T}: Add {C}.${T}: Add {W} or {B}. This land deals 1 damage to you.| Cephalid Coliseum|Tarkir: Dragonstorm Commander|349|U||Land|||{T}: Add {U}. This land deals 1 damage to you.$Threshold -- {U}, {T}, Sacrifice this land: Target player draws three cards, then discards three cards. Activate only if seven or more cards are in your graveyard.| +Cinder Glade|Tarkir: Dragonstorm Commander|350|R||Land - Mountain Forest|||({T}: Add {R} or {G}.)$This land enters tapped unless you control two or more basic lands.| Clifftop Retreat|Tarkir: Dragonstorm Commander|351|R||Land|||This land enters tapped unless you control a Mountain or a Plains.${T}: Add {R} or {W}.| Command Beacon|Tarkir: Dragonstorm Commander|352|R||Land|||{T}: Add {C}.${T}, Sacrifice this land: Put your commander into your hand from the command zone.| Contaminated Aquifer|Tarkir: Dragonstorm Commander|353|C||Land - Island Swamp|||({T}: Add {U} or {B}.)$This land enters tapped.| Crypt of Agadeem|Tarkir: Dragonstorm Commander|354|R||Land|||This land enters tapped.${T}: Add {B}.${2}, {T}: Add {B} for each black creature card in your graveyard.| Darkwater Catacombs|Tarkir: Dragonstorm Commander|355|R||Land|||{1}, {T}: Add {U}{B}.| +Deceptive Landscape|Tarkir: Dragonstorm Commander|356|C||Land|||{T}: Add {C}.${T}, Sacrifice this land: Search your library for a basic Plains, Swamp, or Forest card, put it onto the battlefield tapped, then shuffle.$Cycling {W}{B}{G}| Dragonskull Summit|Tarkir: Dragonstorm Commander|357|R||Land|||This land enters tapped unless you control a Swamp or a Mountain.${T}: Add {B} or {R}.| Dreamroot Cascade|Tarkir: Dragonstorm Commander|358|R||Land|||This land enters tapped unless you control two or more other lands.${T}: Add {G} or {U}.| Drownyard Temple|Tarkir: Dragonstorm Commander|359|R||Land|||{T}: Add {C}.${3}: Return this card from your graveyard to the battlefield tapped.| @@ -57649,34 +57765,53 @@ Exotic Orchard|Tarkir: Dragonstorm Commander|360|R||Land|||{T}: Add one mana of Ferrous Lake|Tarkir: Dragonstorm Commander|361|R||Land|||{1}, {T}: Add {U}{R}.| Fetid Heath|Tarkir: Dragonstorm Commander|362|R||Land|||{T}: Add {C}.${W/B}, {T}: Add {W}{W}, {W}{B}, or {B}{B}.| Fetid Pools|Tarkir: Dragonstorm Commander|363|R||Land - Island Swamp|||({T}: Add {U} or {B}.)$This land enters tapped.$Cycling {2}| +Flooded Grove|Tarkir: Dragonstorm Commander|364|R||Land|||{T}: Add {C}.${G/U}, {T}: Add {G}{G}, {G}{U}, or {U}{U}.| Foreboding Landscape|Tarkir: Dragonstorm Commander|365|C||Land|||{T}: Add {C}.${T}, Sacrifice this land: Search your library for a basic Swamp, Forest, or Island card, put it onto the battlefield tapped, then shuffle.$Cycling {B}{G}{U}| +Fortified Village|Tarkir: Dragonstorm Commander|366|R||Land|||As this land enters, you may reveal a Forest or Plains card from your hand. If you don't, this land enters tapped.${T}: Add {G} or {W}.| Glacial Fortress|Tarkir: Dragonstorm Commander|367|R||Land|||This land enters tapped unless you control a Plains or an Island.${T}: Add {W} or {U}.| Golgari Rot Farm|Tarkir: Dragonstorm Commander|368|U||Land|||This land enters tapped.$When this land enters, return a land you control to its owner's hand.${T}: Add {B}{G}.| Haunted Mire|Tarkir: Dragonstorm Commander|369|C||Land - Swamp Forest|||({T}: Add {B} or {G}.)$This land enters tapped.| +Haven of the Spirit Dragon|Tarkir: Dragonstorm Commander|370|R||Land|||{T}: Add {C}.${T}: Add one mana of any color. Spend this mana only to cast a Dragon creature spell.${2}, {T}, Sacrifice this land: Return target Dragon creature card or Ugin planeswalker card from your graveyard to your hand.| Hinterland Harbor|Tarkir: Dragonstorm Commander|371|R||Land|||This land enters tapped unless you control a Forest or an Island.${T}: Add {G} or {U}.| Irrigated Farmland|Tarkir: Dragonstorm Commander|372|R||Land - Plains Island|||({T}: Add {W} or {U}.)$This land enters tapped.$Cycling {2}| Isolated Chapel|Tarkir: Dragonstorm Commander|373|R||Land|||This land enters tapped unless you control a Plains or a Swamp.${T}: Add {W} or {B}.| +Karplusan Forest|Tarkir: Dragonstorm Commander|374|R||Land|||{T}: Add {C}.${T}: Add {R} or {G}. This land deals 1 damage to you.| +Kessig Wolf Run|Tarkir: Dragonstorm Commander|375|R||Land|||{T}: Add {C}.${X}{R}{G}, {T}: Target creature gets +X/+0 and gains trample until end of turn.| Llanowar Wastes|Tarkir: Dragonstorm Commander|376|R||Land|||{T}: Add {C}.${T}: Add {B} or {G}. This land deals 1 damage to you.| Memorial to Folly|Tarkir: Dragonstorm Commander|377|U||Land|||This land enters tapped.${T}: Add {B}.${2}{B}, {T}, Sacrifice this land: Return target creature card from your graveyard to your hand.| +Mossfire Valley|Tarkir: Dragonstorm Commander|378|R||Land|||{1}, {T}: Add {R}{G}.| +Mosswort Bridge|Tarkir: Dragonstorm Commander|379|R||Land|||Hideaway 4$This land enters tapped.${T}: Add {G}.${G}, {T}: You may play the exiled card without paying its mana cost if creatures you control have total power 10 or greater.| Myriad Landscape|Tarkir: Dragonstorm Commander|380|U||Land|||This land enters tapped.${T}: Add {C}.${2}, {T}, Sacrifice this land: Search your library for up to two basic land cards that share a land type, put them onto the battlefield tapped, then shuffle.| +Overgrown Farmland|Tarkir: Dragonstorm Commander|381|R||Land|||This land enters tapped unless you control two or more other lands.${T}: Add {G} or {W}.| Path of Ancestry|Tarkir: Dragonstorm Commander|382|C||Land|||This land enters tapped.${T}: Add one mana of any color in your commander's color identity. When that mana is spent to cast a creature spell that shares a creature type with your commander, scry 1.| Perilous Landscape|Tarkir: Dragonstorm Commander|383|C||Land|||{T}: Add {C}.${T}, Sacrifice this land: Search your library for a basic Island, Mountain, or Plains card, put it onto the battlefield tapped, then shuffle.$Cycling {U}{R}{W}| Prairie Stream|Tarkir: Dragonstorm Commander|384|R||Land - Plains Island|||({T}: Add {W} or {U}.)$This land enters tapped unless you control two or more basic lands.| +Radiant Grove|Tarkir: Dragonstorm Commander|385|C||Land - Forest Plains|||({T}: Add {G} or {W}.)$This land enters tapped.| Reliquary Tower|Tarkir: Dragonstorm Commander|386|U||Land|||You have no maximum hand size.${T}: Add {C}.| +Rockfall Vale|Tarkir: Dragonstorm Commander|387|R||Land|||This land enters tapped unless you control two or more other lands.${T}: Add {R} or {G}.| +Rootbound Crag|Tarkir: Dragonstorm Commander|388|R||Land|||This land enters tapped unless you control a Mountain or a Forest.${T}: Add {R} or {G}.| Rugged Prairie|Tarkir: Dragonstorm Commander|389|R||Land|||{T}: Add {C}.${R/W}, {T}: Add {R}{R}, {R}{W}, or {W}{W}.| Shattered Landscape|Tarkir: Dragonstorm Commander|390|C||Land|||{T}: Add {C}.${T}, Sacrifice this land: Search your library for a basic Mountain, Plains, or Swamp card, put it onto the battlefield tapped, then shuffle.$Cycling {R}{W}{B}| Shattered Sanctum|Tarkir: Dragonstorm Commander|391|R||Land|||This land enters tapped unless you control two or more other lands.${T}: Add {W} or {B}.| +Sheltered Thicket|Tarkir: Dragonstorm Commander|392|R||Land - Mountain Forest|||({T}: Add {R} or {G}.)$This land enters tapped.$Cycling {2}| Shivan Reef|Tarkir: Dragonstorm Commander|393|R||Land|||{T}: Add {C}.${T}: Add {U} or {R}. This land deals 1 damage to you.| Skycloud Expanse|Tarkir: Dragonstorm Commander|394|R||Land|||{1}, {T}: Add {W}{U}.| Smoldering Marsh|Tarkir: Dragonstorm Commander|395|R||Land - Swamp Mountain|||({T}: Add {B} or {R}.)$This land enters tapped unless you control two or more basic lands.| Sulfur Falls|Tarkir: Dragonstorm Commander|396|R||Land|||This land enters tapped unless you control an Island or a Mountain.${T}: Add {U} or {R}.| +Sungrass Prairie|Tarkir: Dragonstorm Commander|397|R||Land|||{1}, {T}: Add {G}{W}.| Sunken Hollow|Tarkir: Dragonstorm Commander|398|R||Land - Island Swamp|||({T}: Add {U} or {B}.)$This land enters tapped unless you control two or more basic lands.| +Sunpetal Grove|Tarkir: Dragonstorm Commander|399|R||Land|||This land enters tapped unless you control a Forest or a Plains.${T}: Add {G} or {W}.| +Temple of Abandon|Tarkir: Dragonstorm Commander|400|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {R} or {G}.| Temple of Enlightenment|Tarkir: Dragonstorm Commander|401|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {W} or {U}.| Temple of Epiphany|Tarkir: Dragonstorm Commander|402|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {U} or {R}.| Temple of Malady|Tarkir: Dragonstorm Commander|403|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {B} or {G}.| +Temple of Mystery|Tarkir: Dragonstorm Commander|404|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {G} or {U}.| +Temple of Plenty|Tarkir: Dragonstorm Commander|405|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {G} or {W}.| Temple of Silence|Tarkir: Dragonstorm Commander|406|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {W} or {B}.| Temple of Triumph|Tarkir: Dragonstorm Commander|407|R||Land|||This land enters tapped.$When this land enters, scry 1.${T}: Add {R} or {W}.| Terramorphic Expanse|Tarkir: Dragonstorm Commander|408|C||Land|||{T}, Sacrifice this land: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle.| +Twilight Mire|Tarkir: Dragonstorm Commander|409|R||Land|||{T}: Add {C}.${B/G}, {T}: Add {B}{B}, {B}{G}, or {G}{G}.| Vault of the Archangel|Tarkir: Dragonstorm Commander|410|R||Land|||{T}: Add {C}.${2}{W}{B}, {T}: Creatures you control gain deathtouch and lifelink until end of turn.| Windbrisk Heights|Tarkir: Dragonstorm Commander|411|R||Land|||Hideaway 4$This land enters tapped.${T}: Add {W}.${W}, {T}: You may play the exiled card without paying its mana cost if you attacked with three or more creatures this turn.| Woodland Cemetery|Tarkir: Dragonstorm Commander|412|R||Land|||This land enters tapped unless you control a Swamp or a Forest.${T}: Add {B} or {G}.| +Yavimaya Coast|Tarkir: Dragonstorm Commander|413|R||Land|||{T}: Add {C}.${T}: Add {G} or {U}. This land deals 1 damage to you.| From 594df1af8006729f3f615f3708adb71ed36a6261 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:50:00 -0400 Subject: [PATCH 19/34] [TDM] Implement Shocking Sharpshooter --- .../mage/cards/s/ShockingSharpshooter.java | 49 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/ShockingSharpshooter.java diff --git a/Mage.Sets/src/mage/cards/s/ShockingSharpshooter.java b/Mage.Sets/src/mage/cards/s/ShockingSharpshooter.java new file mode 100644 index 00000000000..4a11ebfb60e --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/ShockingSharpshooter.java @@ -0,0 +1,49 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ShockingSharpshooter extends CardImpl { + + public ShockingSharpshooter(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARCHER); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Whenever another creature you control enters, this creature deals 1 damage to target opponent. + Ability ability = new EntersBattlefieldAllTriggeredAbility( + new DamageTargetEffect(1), StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL + ); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + private ShockingSharpshooter(final ShockingSharpshooter card) { + super(card); + } + + @Override + public ShockingSharpshooter copy() { + return new ShockingSharpshooter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 30b252a0d29..1537176ae50 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -120,6 +120,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Seize Opportunity", 119, Rarity.COMMON, mage.cards.s.SeizeOpportunity.class)); cards.add(new SetCardInfo("Shiko, Paragon of the Way", 223, Rarity.MYTHIC, mage.cards.s.ShikoParagonOfTheWay.class)); cards.add(new SetCardInfo("Shock Brigade", 120, Rarity.COMMON, mage.cards.s.ShockBrigade.class)); + cards.add(new SetCardInfo("Shocking Sharpshooter", 121, Rarity.UNCOMMON, mage.cards.s.ShockingSharpshooter.class)); cards.add(new SetCardInfo("Sinkhole Surveyor", 93, Rarity.RARE, mage.cards.s.SinkholeSurveyor.class)); cards.add(new SetCardInfo("Skirmish Rhino", 224, Rarity.UNCOMMON, mage.cards.s.SkirmishRhino.class)); cards.add(new SetCardInfo("Smile at Death", 24, Rarity.MYTHIC, mage.cards.s.SmileAtDeath.class)); From 017be2fdd94d320ced981d79818aab7ebb5f41a5 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:50:48 -0400 Subject: [PATCH 20/34] [TDM] Implement Mammoth Bellow --- Mage.Sets/src/mage/cards/m/MammothBellow.java | 35 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 36 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MammothBellow.java diff --git a/Mage.Sets/src/mage/cards/m/MammothBellow.java b/Mage.Sets/src/mage/cards/m/MammothBellow.java new file mode 100644 index 00000000000..565f408d61b --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MammothBellow.java @@ -0,0 +1,35 @@ +package mage.cards.m; + +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.HarmonizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.game.permanent.token.Elephant55Token; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MammothBellow extends CardImpl { + + public MammothBellow(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}{U}{R}"); + + // Create a 5/5 green Elephant creature token. + this.getSpellAbility().addEffect(new CreateTokenEffect(new Elephant55Token())); + + // Harmonize {5}{G}{U}{R} + this.addAbility(new HarmonizeAbility(this, "{5}{G}{U}{R}")); + } + + private MammothBellow(final MammothBellow card) { + super(card); + } + + @Override + public MammothBellow copy() { + return new MammothBellow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 1537176ae50..92c858cf099 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -89,6 +89,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); cards.add(new SetCardInfo("Lightfoot Technique", 14, Rarity.COMMON, mage.cards.l.LightfootTechnique.class)); cards.add(new SetCardInfo("Loxodon Battle Priest", 15, Rarity.UNCOMMON, mage.cards.l.LoxodonBattlePriest.class)); + cards.add(new SetCardInfo("Mammoth Bellow", 205, Rarity.UNCOMMON, mage.cards.m.MammothBellow.class)); cards.add(new SetCardInfo("Mardu Devotee", 16, Rarity.COMMON, mage.cards.m.MarduDevotee.class)); cards.add(new SetCardInfo("Mardu Monument", 245, Rarity.UNCOMMON, mage.cards.m.MarduMonument.class)); cards.add(new SetCardInfo("Meticulous Artisan", 112, Rarity.COMMON, mage.cards.m.MeticulousArtisan.class)); From 7bba753fa7c13d29e93d5cc8280454989b3c8513 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:54:22 -0400 Subject: [PATCH 21/34] [TDM] Implement Ambling Stormshell --- .../src/mage/cards/a/AmblingStormshell.java | 62 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 63 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/a/AmblingStormshell.java diff --git a/Mage.Sets/src/mage/cards/a/AmblingStormshell.java b/Mage.Sets/src/mage/cards/a/AmblingStormshell.java new file mode 100644 index 00000000000..1daf35e71bf --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AmblingStormshell.java @@ -0,0 +1,62 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.WardAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.filter.FilterSpell; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class AmblingStormshell extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("a Turtle spell"); + + static { + filter.add(SubType.TURTLE.getPredicate()); + } + + public AmblingStormshell(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + + this.subtype.add(SubType.TURTLE); + this.power = new MageInt(5); + this.toughness = new MageInt(9); + + // Ward {2} + this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"))); + + // Whenever this creature attacks, put three stun counters on it and draw three cards. + Ability ability = new AttacksTriggeredAbility( + new AddCountersSourceEffect(CounterType.STUN.createInstance(3)) + .setText("put three stun counters on it") + ); + ability.addEffect(new DrawCardSourceControllerEffect(3).concatBy("and")); + this.addAbility(ability); + + // Whenever you cast a Turtle spell, untap this creature. + this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, false)); + } + + private AmblingStormshell(final AmblingStormshell card) { + super(card); + } + + @Override + public AmblingStormshell copy() { + return new AmblingStormshell(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 92c858cf099..1118719e096 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -29,6 +29,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Aegis Sculptor", 35, Rarity.UNCOMMON, mage.cards.a.AegisSculptor.class)); cards.add(new SetCardInfo("Agent of Kotis", 36, Rarity.COMMON, mage.cards.a.AgentOfKotis.class)); cards.add(new SetCardInfo("Alesha's Legacy", 72, Rarity.COMMON, mage.cards.a.AleshasLegacy.class)); + cards.add(new SetCardInfo("Ambling Stormshell", 37, Rarity.RARE, mage.cards.a.AmblingStormshell.class)); cards.add(new SetCardInfo("Anafenza, Unyielding Lineage", 2, Rarity.RARE, mage.cards.a.AnafenzaUnyieldingLineage.class)); cards.add(new SetCardInfo("Attuned Hunter", 135, Rarity.UNCOMMON, mage.cards.a.AttunedHunter.class)); cards.add(new SetCardInfo("Auroral Procession", 169, Rarity.UNCOMMON, mage.cards.a.AuroralProcession.class)); From 2491a3b8b9d4ab99d542e508d5440914e590a837 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 08:56:28 -0400 Subject: [PATCH 22/34] [TDM] Implement Zurgo's Vanguard --- .../src/mage/cards/z/ZurgosVanguard.java | 44 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 45 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/z/ZurgosVanguard.java diff --git a/Mage.Sets/src/mage/cards/z/ZurgosVanguard.java b/Mage.Sets/src/mage/cards/z/ZurgosVanguard.java new file mode 100644 index 00000000000..e9eef44b566 --- /dev/null +++ b/Mage.Sets/src/mage/cards/z/ZurgosVanguard.java @@ -0,0 +1,44 @@ +package mage.cards.z; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.CreaturesYouControlCount; +import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect; +import mage.abilities.keyword.MobilizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ZurgosVanguard extends CardImpl { + + public ZurgosVanguard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); + + this.subtype.add(SubType.DOG); + this.subtype.add(SubType.SOLDIER); + this.power = new MageInt(0); + this.toughness = new MageInt(3); + + // Mobilize 1 + this.addAbility(new MobilizeAbility(1)); + + // This creature's power is equal to the number of creatures you control. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerSourceEffect(CreaturesYouControlCount.instance))); + } + + private ZurgosVanguard(final ZurgosVanguard card) { + super(card); + } + + @Override + public ZurgosVanguard copy() { + return new ZurgosVanguard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 1118719e096..c60a76b6f88 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -157,6 +157,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Winternight Stories", 67, Rarity.RARE, mage.cards.w.WinternightStories.class)); cards.add(new SetCardInfo("Worthy Cost", 99, Rarity.COMMON, mage.cards.w.WorthyCost.class)); cards.add(new SetCardInfo("Yathan Tombguard", 100, Rarity.UNCOMMON, mage.cards.y.YathanTombguard.class)); + cards.add(new SetCardInfo("Zurgo's Vanguard", 133, Rarity.UNCOMMON, mage.cards.z.ZurgosVanguard.class)); cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); } From 84f23e2dde1b7c7d70eafec3a54936dc536efe4f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 09:02:16 -0400 Subject: [PATCH 23/34] [TDM] Implement Delta Bloodflies --- .../src/mage/cards/d/DeltaBloodflies.java | 57 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 58 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DeltaBloodflies.java diff --git a/Mage.Sets/src/mage/cards/d/DeltaBloodflies.java b/Mage.Sets/src/mage/cards/d/DeltaBloodflies.java new file mode 100644 index 00000000000..cb428174811 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DeltaBloodflies.java @@ -0,0 +1,57 @@ +package mage.cards.d; + +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.CounterAnyPredicate; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DeltaBloodflies extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("you control a creature with a counter on it"); + + static { + filter.add(CounterAnyPredicate.instance); + } + + private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); + private static final Hint hint = new ConditionHint(condition, "You control a creture with a counter on it"); + + public DeltaBloodflies(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + + this.subtype.add(SubType.INSECT); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever this creature attacks, if you control a creature with a counter on it, each opponent loses 1 life. + this.addAbility(new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(1)).withInterveningIf(condition).addHint(hint)); + } + + private DeltaBloodflies(final DeltaBloodflies card) { + super(card); + } + + @Override + public DeltaBloodflies copy() { + return new DeltaBloodflies(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index c60a76b6f88..3d524d13fcb 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -53,6 +53,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Craterhoof Behemoth", 138, Rarity.MYTHIC, mage.cards.c.CraterhoofBehemoth.class)); cards.add(new SetCardInfo("Cruel Truths", 76, Rarity.COMMON, mage.cards.c.CruelTruths.class)); cards.add(new SetCardInfo("Dalkovan Packbeasts", 7, Rarity.UNCOMMON, mage.cards.d.DalkovanPackbeasts.class)); + cards.add(new SetCardInfo("Delta Bloodflies", 77, Rarity.COMMON, mage.cards.d.DeltaBloodflies.class)); cards.add(new SetCardInfo("Descendant of Storms", 8, Rarity.UNCOMMON, mage.cards.d.DescendantOfStorms.class)); cards.add(new SetCardInfo("Devoted Duelist", 104, Rarity.COMMON, mage.cards.d.DevotedDuelist.class)); cards.add(new SetCardInfo("Dismal Backwater", 254, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); From 532c18be13cf3dd832b2ae2018830ecb261dccb6 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 09:06:01 -0400 Subject: [PATCH 24/34] [TDM] Implement Hardened Tactician --- .../src/mage/cards/h/HardenedTactician.java | 51 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 52 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/h/HardenedTactician.java diff --git a/Mage.Sets/src/mage/cards/h/HardenedTactician.java b/Mage.Sets/src/mage/cards/h/HardenedTactician.java new file mode 100644 index 00000000000..7a62c12a7c4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HardenedTactician.java @@ -0,0 +1,51 @@ +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.TokenPredicate; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class HardenedTactician extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("a token"); + + static { + filter.add(TokenPredicate.TRUE); + } + + public HardenedTactician(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{B}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // {1}, Sacrifice a token: Draw a card. + Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(1)); + ability.addCost(new SacrificeTargetCost(filter)); + this.addAbility(ability); + } + + private HardenedTactician(final HardenedTactician card) { + super(card); + } + + @Override + public HardenedTactician copy() { + return new HardenedTactician(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 3d524d13fcb..b403990ca01 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -76,6 +76,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Frontier Bivouac", 256, Rarity.UNCOMMON, mage.cards.f.FrontierBivouac.class)); cards.add(new SetCardInfo("Glacial Dragonhunt", 188, Rarity.UNCOMMON, mage.cards.g.GlacialDragonhunt.class)); cards.add(new SetCardInfo("Great Arashin City", 257, Rarity.RARE, mage.cards.g.GreatArashinCity.class)); + cards.add(new SetCardInfo("Hardened Tactician", 191, Rarity.UNCOMMON, mage.cards.h.HardenedTactician.class)); cards.add(new SetCardInfo("Heritage Reclamation", 145, Rarity.COMMON, mage.cards.h.HeritageReclamation.class)); cards.add(new SetCardInfo("Inevitable Defeat", 194, Rarity.RARE, mage.cards.i.InevitableDefeat.class)); cards.add(new SetCardInfo("Island", 279, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); From 753c11f7a665f238922414a58b24e4583a4abdf8 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 10:20:45 -0400 Subject: [PATCH 25/34] [TDM] Implement Avenger of the Fallen --- .../src/mage/cards/a/AvengerOfTheFallen.java | 49 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + .../abilities/keyword/MobilizeAbility.java | 42 +++++++++++----- 3 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/a/AvengerOfTheFallen.java diff --git a/Mage.Sets/src/mage/cards/a/AvengerOfTheFallen.java b/Mage.Sets/src/mage/cards/a/AvengerOfTheFallen.java new file mode 100644 index 00000000000..ee5ed57d7f7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AvengerOfTheFallen.java @@ -0,0 +1,49 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.MobilizeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class AvengerOfTheFallen extends CardImpl { + + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES, null); + private static final Hint hint = new ValueHint("Creature cards in your graveyard", xValue); + + public AvengerOfTheFallen(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Mobilize X where X is the number of creature cards in your graveyard. + this.addAbility(new MobilizeAbility(xValue).addHint(hint)); + } + + private AvengerOfTheFallen(final AvengerOfTheFallen card) { + super(card); + } + + @Override + public AvengerOfTheFallen copy() { + return new AvengerOfTheFallen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index b403990ca01..db3a0bb9ff5 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -33,6 +33,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Anafenza, Unyielding Lineage", 2, Rarity.RARE, mage.cards.a.AnafenzaUnyieldingLineage.class)); cards.add(new SetCardInfo("Attuned Hunter", 135, Rarity.UNCOMMON, mage.cards.a.AttunedHunter.class)); cards.add(new SetCardInfo("Auroral Procession", 169, Rarity.UNCOMMON, mage.cards.a.AuroralProcession.class)); + cards.add(new SetCardInfo("Avenger of the Fallen", 73, Rarity.RARE, mage.cards.a.AvengerOfTheFallen.class)); cards.add(new SetCardInfo("Awaken the Honored Dead", 170, Rarity.RARE, mage.cards.a.AwakenTheHonoredDead.class)); cards.add(new SetCardInfo("Barrensteppe Siege", 171, Rarity.RARE, mage.cards.b.BarrensteppeSiege.class)); cards.add(new SetCardInfo("Bearer of Glory", 4, Rarity.COMMON, mage.cards.b.BearerOfGlory.class)); diff --git a/Mage/src/main/java/mage/abilities/keyword/MobilizeAbility.java b/Mage/src/main/java/mage/abilities/keyword/MobilizeAbility.java index 9c412ee595e..41878053fd8 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MobilizeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MobilizeAbility.java @@ -2,12 +2,13 @@ package mage.abilities.keyword; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.RedWarriorToken; -import mage.players.Player; import mage.util.CardUtil; /** @@ -16,10 +17,11 @@ import mage.util.CardUtil; public class MobilizeAbility extends AttacksTriggeredAbility { public MobilizeAbility(int count) { - super(new MobilizeEffect(count), false, "Mobilize " + count + " (Whenever this creature attacks, create " - + (count == 1 ? "a" : CardUtil.numberToText(count)) + " tapped and attacking 1/1 red Warrior creature " - + (count == 1 ? "token" : "tokens") + ". Sacrifice " + (count == 1 ? "it" : "them") - + " at the beginning of the next end step.)"); + this(StaticValue.get(count)); + } + + public MobilizeAbility(DynamicValue count) { + super(new MobilizeEffect(count), false, makeText(count)); } protected MobilizeAbility(final MobilizeAbility ability) { @@ -30,13 +32,33 @@ public class MobilizeAbility extends AttacksTriggeredAbility { public MobilizeAbility copy() { return new MobilizeAbility(this); } + + private static String makeText(DynamicValue amount) { + StringBuilder sb = new StringBuilder(); + String message; + String numToText; + boolean plural; + if (amount instanceof StaticValue) { + int count = ((StaticValue) amount).getValue(); + message = "" + count; + numToText = CardUtil.numberToText(count, "a"); + plural = count > 1; + } else { + message = "X, where X is " + amount.getMessage() + '.'; + numToText = "X"; + plural = true; + } + return "Mobilize " + message + " (Whenever this creature attacks, create " + + numToText + " tapped and attacking 1/1 red Warrior creature token" + (plural ? "s" : "") + + ". Sacrifice " + (plural ? "them" : "it") + " at the beginning of the next end step.)"; + } } class MobilizeEffect extends OneShotEffect { - private final int count; + private final DynamicValue count; - MobilizeEffect(int count) { + MobilizeEffect(DynamicValue count) { super(Outcome.Benefit); this.count = count; } @@ -53,13 +75,9 @@ class MobilizeEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player == null) { - return false; - } CreateTokenEffect effect = new CreateTokenEffect(new RedWarriorToken(), this.count, true, true); effect.apply(game, source); effect.sacrificeTokensCreatedAtNextEndStep(game, source); return true; } -} \ No newline at end of file +} From 8cebc01bff8d77a57a6b07ba632c45da0736496d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 12:03:35 -0400 Subject: [PATCH 26/34] [TDM] Implement Armament Dragon --- .../src/mage/cards/a/ArmamentDragon.java | 46 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/a/ArmamentDragon.java diff --git a/Mage.Sets/src/mage/cards/a/ArmamentDragon.java b/Mage.Sets/src/mage/cards/a/ArmamentDragon.java new file mode 100644 index 00000000000..db243795b2e --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/ArmamentDragon.java @@ -0,0 +1,46 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.counter.DistributeCountersEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanentAmount; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ArmamentDragon extends CardImpl { + + public ArmamentDragon(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{B}{G}"); + + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When this creature enters, distribute three +1/+1 counters among one, two, or three target creatures you control. + Ability ability = new EntersBattlefieldTriggeredAbility(new DistributeCountersEffect(CounterType.P1P1)); + ability.addTarget(new TargetCreaturePermanentAmount(3)); + this.addAbility(ability); + } + + private ArmamentDragon(final ArmamentDragon card) { + super(card); + } + + @Override + public ArmamentDragon copy() { + return new ArmamentDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index db3a0bb9ff5..ad836eba219 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -31,6 +31,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Alesha's Legacy", 72, Rarity.COMMON, mage.cards.a.AleshasLegacy.class)); cards.add(new SetCardInfo("Ambling Stormshell", 37, Rarity.RARE, mage.cards.a.AmblingStormshell.class)); cards.add(new SetCardInfo("Anafenza, Unyielding Lineage", 2, Rarity.RARE, mage.cards.a.AnafenzaUnyieldingLineage.class)); + cards.add(new SetCardInfo("Armament Dragon", 168, Rarity.UNCOMMON, mage.cards.a.ArmamentDragon.class)); cards.add(new SetCardInfo("Attuned Hunter", 135, Rarity.UNCOMMON, mage.cards.a.AttunedHunter.class)); cards.add(new SetCardInfo("Auroral Procession", 169, Rarity.UNCOMMON, mage.cards.a.AuroralProcession.class)); cards.add(new SetCardInfo("Avenger of the Fallen", 73, Rarity.RARE, mage.cards.a.AvengerOfTheFallen.class)); From aa700f47d0a5b6c975e9b249e3040a07ccd99d02 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 12:07:04 -0400 Subject: [PATCH 27/34] [TDM] Implement Dragon's Prey --- Mage.Sets/src/mage/cards/d/DragonsPrey.java | 48 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 49 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DragonsPrey.java diff --git a/Mage.Sets/src/mage/cards/d/DragonsPrey.java b/Mage.Sets/src/mage/cards/d/DragonsPrey.java new file mode 100644 index 00000000000..621a8d05da0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DragonsPrey.java @@ -0,0 +1,48 @@ +package mage.cards.d; + +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceTargetsPermanentCondition; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.cost.SpellCostIncreaseSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DragonsPrey extends CardImpl { + + private static final Condition condition = new SourceTargetsPermanentCondition( + new FilterPermanent(SubType.DRAGON, "a Dragon") + ); + + public DragonsPrey(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{B}"); + + // This spell costs {2} more to cast if it targets a Dragon. + this.addAbility(new SimpleStaticAbility( + Zone.ALL, new SpellCostIncreaseSourceEffect(2, condition).setCanWorksOnStackOnly(true) + ).setRuleAtTheTop(true)); + + // Destroy target creature. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private DragonsPrey(final DragonsPrey card) { + super(card); + } + + @Override + public DragonsPrey copy() { + return new DragonsPrey(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index ad836eba219..99452c13a62 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -61,6 +61,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Dismal Backwater", 254, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); cards.add(new SetCardInfo("Dispelling Exhale", 41, Rarity.COMMON, mage.cards.d.DispellingExhale.class)); cards.add(new SetCardInfo("Dracogenesis", 105, Rarity.MYTHIC, mage.cards.d.Dracogenesis.class)); + cards.add(new SetCardInfo("Dragon's Prey", 79, Rarity.COMMON, mage.cards.d.DragonsPrey.class)); cards.add(new SetCardInfo("Dragonback Assault", 179, Rarity.MYTHIC, mage.cards.d.DragonbackAssault.class)); cards.add(new SetCardInfo("Dragonback Lancer", 9, Rarity.COMMON, mage.cards.d.DragonbackLancer.class)); cards.add(new SetCardInfo("Dragonologist", 42, Rarity.RARE, mage.cards.d.Dragonologist.class)); From e8082f46362473c8b27dcde94faf478ebc0dbb1c Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 12:10:33 -0400 Subject: [PATCH 28/34] [TDM] Implement Gurmag Nightwatch --- .../src/mage/cards/g/GurmagNightwatch.java | 41 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GurmagNightwatch.java diff --git a/Mage.Sets/src/mage/cards/g/GurmagNightwatch.java b/Mage.Sets/src/mage/cards/g/GurmagNightwatch.java new file mode 100644 index 00000000000..490c1403dd7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GurmagNightwatch.java @@ -0,0 +1,41 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.PutCards; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GurmagNightwatch extends CardImpl { + + public GurmagNightwatch(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2/B}{2/G}{2/U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.RANGER); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When this creature enters, look at the top three cards of your library. You may put one of those cards back on top of your library. Put the rest into your graveyard. + this.addAbility(new EntersBattlefieldTriggeredAbility(new LookLibraryAndPickControllerEffect( + 3, 1, PutCards.TOP_ANY, PutCards.GRAVEYARD, true + ))); + } + + private GurmagNightwatch(final GurmagNightwatch card) { + super(card); + } + + @Override + public GurmagNightwatch copy() { + return new GurmagNightwatch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 99452c13a62..1c118483ea1 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -79,6 +79,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Frontier Bivouac", 256, Rarity.UNCOMMON, mage.cards.f.FrontierBivouac.class)); cards.add(new SetCardInfo("Glacial Dragonhunt", 188, Rarity.UNCOMMON, mage.cards.g.GlacialDragonhunt.class)); cards.add(new SetCardInfo("Great Arashin City", 257, Rarity.RARE, mage.cards.g.GreatArashinCity.class)); + cards.add(new SetCardInfo("Gurmag Nightwatch", 190, Rarity.COMMON, mage.cards.g.GurmagNightwatch.class)); cards.add(new SetCardInfo("Hardened Tactician", 191, Rarity.UNCOMMON, mage.cards.h.HardenedTactician.class)); cards.add(new SetCardInfo("Heritage Reclamation", 145, Rarity.COMMON, mage.cards.h.HeritageReclamation.class)); cards.add(new SetCardInfo("Inevitable Defeat", 194, Rarity.RARE, mage.cards.i.InevitableDefeat.class)); From cc5ab4da6b53db5500be4ebd09e71caccb88ec8a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 12:14:39 -0400 Subject: [PATCH 29/34] [TDM] Implement Kishla Trawlers --- .../src/mage/cards/k/KishlaTrawlers.java | 49 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KishlaTrawlers.java diff --git a/Mage.Sets/src/mage/cards/k/KishlaTrawlers.java b/Mage.Sets/src/mage/cards/k/KishlaTrawlers.java new file mode 100644 index 00000000000..0393d61cc01 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KishlaTrawlers.java @@ -0,0 +1,49 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.common.ExileFromGraveCost; +import mage.abilities.effects.common.DoWhenCostPaid; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KishlaTrawlers extends CardImpl { + + public KishlaTrawlers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.CITIZEN); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // When this creature enters, you may exile a creature card from your graveyard. When you do, return target instant or sorcery card from your graveyard to your hand. + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid( + ability, + new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)), + "Exile a creature card from your graveyard?" + ))); + } + + private KishlaTrawlers(final KishlaTrawlers card) { + super(card); + } + + @Override + public KishlaTrawlers copy() { + return new KishlaTrawlers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 1c118483ea1..0001686356a 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -92,6 +92,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kheru Goldkeeper", 199, Rarity.UNCOMMON, mage.cards.k.KheruGoldkeeper.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); + cards.add(new SetCardInfo("Kishla Trawlers", 50, Rarity.UNCOMMON, mage.cards.k.KishlaTrawlers.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); cards.add(new SetCardInfo("Lightfoot Technique", 14, Rarity.COMMON, mage.cards.l.LightfootTechnique.class)); From fbc4070d1b3d50186232659afc107d7e3b018a85 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 12:17:06 -0400 Subject: [PATCH 30/34] [TDM] Implement Kishla Skimmer --- Mage.Sets/src/mage/cards/k/KishlaSkimmer.java | 45 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KishlaSkimmer.java diff --git a/Mage.Sets/src/mage/cards/k/KishlaSkimmer.java b/Mage.Sets/src/mage/cards/k/KishlaSkimmer.java new file mode 100644 index 00000000000..761e43f42cf --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KishlaSkimmer.java @@ -0,0 +1,45 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KishlaSkimmer extends CardImpl { + + public KishlaSkimmer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{U}"); + + this.subtype.add(SubType.BIRD); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever a card leaves your graveyard during your turn, draw a card. This ability triggers only once each turn. + this.addAbility(new CardsLeaveGraveyardTriggeredAbility( + new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_CARD, true + ).setTriggerPhrase("Whenever a card leaves your graveyard during your turn, ").setTriggersLimitEachTurn(1)); + } + + private KishlaSkimmer(final KishlaSkimmer card) { + super(card); + } + + @Override + public KishlaSkimmer copy() { + return new KishlaSkimmer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 0001686356a..7430ac385bd 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -92,6 +92,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kheru Goldkeeper", 199, Rarity.UNCOMMON, mage.cards.k.KheruGoldkeeper.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); + cards.add(new SetCardInfo("Kishla Skimmer", 201, Rarity.UNCOMMON, mage.cards.k.KishlaSkimmer.class)); cards.add(new SetCardInfo("Kishla Trawlers", 50, Rarity.UNCOMMON, mage.cards.k.KishlaTrawlers.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); From 9276ca8091ce046ffadf9aaba205c2b720a8a06f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 18:44:28 -0400 Subject: [PATCH 31/34] [TDM] update spoiler --- Utils/mtg-cards-data.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 70785ce4302..d0c4db18293 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57342,6 +57342,7 @@ Bone-Cairn Butcher|Tarkir: Dragonstorm|173|U|{1}{R}{W}{B}|Creature - Demon|4|4|M Call the Spirit Dragons|Tarkir: Dragonstorm|174|M|{W}{U}{B}{R}{G}|Enchantment|||Dragons you control have indestructible.$At the beginning of your upkeep, for each color, put a +1/+1 counter on a Dragon you control of that color. If you put +1/+1 counters on five Dragons this way, you win the game.| Cori Mountain Stalwart|Tarkir: Dragonstorm|175|U|{1}{R}{W}|Creature - Human Monk|3|3|Flurry -- Whenever you cast your second spell each turn, this creature deals 2 damage to each opponent and you gain 2 life.| Death Begets Life|Tarkir: Dragonstorm|176|M|{5}{B}{G}{U}|Sorcery|||Destroy all creatures and enchantments. Draw a card for each permanent destroyed this way.| +Defibrillating Current|Tarkir: Dragonstorm|177|U|{2/R}{2/W}{2/B}|Sorcery|||Defibrillating Current deals 4 damage to target creature or planeswalker and you gain 2 life.| Disruptive Stormbrood|Tarkir: Dragonstorm|178|U|{4}{G}|Creature - Dragon|3|3|Flying$When this creature enters, destroy up to one target artifact or enchantment.| Petty Revenge|Tarkir: Dragonstorm|178|U|{1}{B}|Sorcery - Omen|3|3|Destroy target creature with power 3 or less.| Dragonback Assault|Tarkir: Dragonstorm|179|M|{3}{G}{U}{R}|Enchantment|||When this enchantment enters, it deals 3 damage to each creature and each planeswalker.$Landfall -- Whenever a land you control enters, create a 4/4 red Dragon creature token with flying.| @@ -57368,7 +57369,9 @@ Kin-Tree Severance|Tarkir: Dragonstorm|200|U|{2/W}{2/B}{2/G}|Instant|||Exile tar Kishla Skimmer|Tarkir: Dragonstorm|201|U|{G}{U}|Creature - Bird Scout|2|2|Flying$Whenever a card leaves your graveyard during your turn, draw a card. This ability triggers only once each turn.| Kotis, the Fangkeeper|Tarkir: Dragonstorm|202|R|{1}{B}{G}{U}|Legendary Creature - Zombie Warrior|2|1|Indestructible$Whenever Kotis deals combat damage to a player, exile the top X cards of their library, where X is the amount of damage dealt. You may cast any number of spells with mana value X or less from among them without paying their mana costs.| Lie in Wait|Tarkir: Dragonstorm|203|U|{B}{G}{U}|Sorcery|||Return target creature card from your graveyard to your hand. Lie in Wait deals damage equal to that card's power to target creature.| +Lotuslight Dancers|Tarkir: Dragonstorm|204|R|{2}{B}{G}{U}|Creature - Zombie Bard|3|6|Lifelink$When this creature enters, search your library for a black card, a green card, and a blue card. Put those cards into your graveyard, then shuffle.| Mammoth Bellow|Tarkir: Dragonstorm|205|U|{2}{G}{U}{R}|Sorcery|||Create a 5/5 green Elephant creature token.$Harmonize {5}{G}{U}{R}| +Mardu Siegebreaker|Tarkir: Dragonstorm|206|R|{1}{R}{W}{B}|Creature - Human Warrior|4|4|Deathtouch, haste$When this creature enters, exile up to one other target creature you control until this creature leaves the battlefield.$Whenever this creature attacks, for each opponent, create a tapped token that's a copy of the exiled card attacking that opponent. At the beginning of your end step, sacrifice those tokens.| Marshal of the Lost|Tarkir: Dragonstorm|207|U|{2}{W}{B}|Creature - Orc Warrior|3|3|Deathtouch$Whenever you attack, target creature gets +X/+X until end of turn, where X is the number of attacking creatures.| Monastery Messenger|Tarkir: Dragonstorm|208|C|{2/U}{2/R}{2/W}|Creature - Bird Scout|2|3|Flying, vigilance$When this creature enters, put up to one target noncreature, nonland card from your graveyard on top of your library.| Narset, Jeskai Waymaster|Tarkir: Dragonstorm|209|R|{U}{R}{W}|Legendary Creature - Human Monk|3|4|At the beginning of your end step, you may discard your hand. If you do, draw cards equal to the number of spells you've cast this turn.| From a90d6836ff7d3d0eba855fcf22919461b3212bfc Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 18:45:59 -0400 Subject: [PATCH 32/34] [TDM] Implement Defibrillating Current --- .../mage/cards/d/DefibrillatingCurrent.java | 34 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DefibrillatingCurrent.java diff --git a/Mage.Sets/src/mage/cards/d/DefibrillatingCurrent.java b/Mage.Sets/src/mage/cards/d/DefibrillatingCurrent.java new file mode 100644 index 00000000000..756814c16f1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DefibrillatingCurrent.java @@ -0,0 +1,34 @@ +package mage.cards.d; + +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DefibrillatingCurrent extends CardImpl { + + public DefibrillatingCurrent(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2/R}{2/W}{2/B}"); + + // Defibrillating Current deals 4 damage to target creature or planeswalker and you gain 2 life. + this.getSpellAbility().addEffect(new DamageTargetEffect(4)); + this.getSpellAbility().addEffect(new GainLifeEffect(2).concatBy("and")); + this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + } + + private DefibrillatingCurrent(final DefibrillatingCurrent card) { + super(card); + } + + @Override + public DefibrillatingCurrent copy() { + return new DefibrillatingCurrent(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 7430ac385bd..7d5250b6941 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -55,6 +55,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Craterhoof Behemoth", 138, Rarity.MYTHIC, mage.cards.c.CraterhoofBehemoth.class)); cards.add(new SetCardInfo("Cruel Truths", 76, Rarity.COMMON, mage.cards.c.CruelTruths.class)); cards.add(new SetCardInfo("Dalkovan Packbeasts", 7, Rarity.UNCOMMON, mage.cards.d.DalkovanPackbeasts.class)); + cards.add(new SetCardInfo("Defibrillating Current", 177, Rarity.UNCOMMON, mage.cards.d.DefibrillatingCurrent.class)); cards.add(new SetCardInfo("Delta Bloodflies", 77, Rarity.COMMON, mage.cards.d.DeltaBloodflies.class)); cards.add(new SetCardInfo("Descendant of Storms", 8, Rarity.UNCOMMON, mage.cards.d.DescendantOfStorms.class)); cards.add(new SetCardInfo("Devoted Duelist", 104, Rarity.COMMON, mage.cards.d.DevotedDuelist.class)); From 51b7f9346697f97390399e53c5e9e2087d62b138 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 18:54:17 -0400 Subject: [PATCH 33/34] [TDM] Implement Dragonbroods' Relic --- .../src/mage/cards/d/DragonbroodsRelic.java | 42 ++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + .../permanent/token/ReliquaryDragonToken.java | 44 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java create mode 100644 Mage/src/main/java/mage/game/permanent/token/ReliquaryDragonToken.java diff --git a/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java b/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java new file mode 100644 index 00000000000..f1182ae94f8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java @@ -0,0 +1,42 @@ +package mage.cards.d; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author TheElk801 + */ +public final class DragonbroodsRelic extends CardImpl { + + public DragonbroodsRelic(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{G}"); + + // {T}, Tap an untapped creature you control: Add one mana of any color. + Ability ability=new AnyColorManaAbility();ability.addCost(new TapTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURE)));this.addAbility(ability); + + // {3}{W}{U}{B}{R}{G}, Sacrifice this artifact: Create a 4/4 Dragon creature token named Reliquary Dragon that's all colors. It has flying, lifelink, and "When this token enters, it deals 3 damage to any target." Activate only as a sorcery. + ability=new ActivateAsSorceryActivatedAbility(new CreateTokenEffect(),new ManaCostsImpl<>("{3}{W}{U}{B}{R}{G}"));ability.addCost(new SacrificeSourceCost());this.addAbility(ability); + } + + private DragonbroodsRelic(final DragonbroodsRelic card) { + super(card); + } + + @Override + public DragonbroodsRelic copy() { + return new DragonbroodsRelic(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 7d5250b6941..af45f5fbec6 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -65,6 +65,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Dragon's Prey", 79, Rarity.COMMON, mage.cards.d.DragonsPrey.class)); cards.add(new SetCardInfo("Dragonback Assault", 179, Rarity.MYTHIC, mage.cards.d.DragonbackAssault.class)); cards.add(new SetCardInfo("Dragonback Lancer", 9, Rarity.COMMON, mage.cards.d.DragonbackLancer.class)); + cards.add(new SetCardInfo("Dragonbroods' Relic", 140, Rarity.UNCOMMON, mage.cards.d.DragonbroodsRelic.class)); cards.add(new SetCardInfo("Dragonologist", 42, Rarity.RARE, mage.cards.d.Dragonologist.class)); cards.add(new SetCardInfo("Dragonstorm Forecaster", 43, Rarity.UNCOMMON, mage.cards.d.DragonstormForecaster.class)); cards.add(new SetCardInfo("Dusyut Earthcarver", 141, Rarity.COMMON, mage.cards.d.DusyutEarthcarver.class)); diff --git a/Mage/src/main/java/mage/game/permanent/token/ReliquaryDragonToken.java b/Mage/src/main/java/mage/game/permanent/token/ReliquaryDragonToken.java new file mode 100644 index 00000000000..887042547df --- /dev/null +++ b/Mage/src/main/java/mage/game/permanent/token/ReliquaryDragonToken.java @@ -0,0 +1,44 @@ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.target.common.TargetAnyTarget; + +/** + * @author TheElk801 + */ +public final class ReliquaryDragonToken extends TokenImpl { + + public ReliquaryDragonToken() { + super("Reliquary Dragon", "4/4 Dragon creature token named Reliquary Dragon that's all colors. It has flying, lifelink, and \"When this token enters, it deals 3 damage to any target.\""); + cardType.add(CardType.CREATURE); + color.setWhite(true); + color.setBlue(true); + color.setBlack(true); + color.setRed(true); + color.setGreen(true); + subtype.add(SubType.DRAGON); + power = new MageInt(4); + toughness = new MageInt(4); + addAbility(FlyingAbility.getInstance()); + addAbility(LifelinkAbility.getInstance()); + + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it")); + ability.addTarget(new TargetAnyTarget()); + addAbility(ability); + } + + private ReliquaryDragonToken(final ReliquaryDragonToken token) { + super(token); + } + + public ReliquaryDragonToken copy() { + return new ReliquaryDragonToken(this); + } +} From 29269384bfb67eae93f7e802dab5839c4f074a73 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 27 Mar 2025 19:04:41 -0400 Subject: [PATCH 34/34] fix error --- .../src/mage/cards/d/DragonbroodsRelic.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java b/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java index f1182ae94f8..9ec52a0f847 100644 --- a/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java +++ b/Mage.Sets/src/mage/cards/d/DragonbroodsRelic.java @@ -1,7 +1,5 @@ package mage.cards.d; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -13,10 +11,12 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; +import mage.game.permanent.token.ReliquaryDragonToken; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class DragonbroodsRelic extends CardImpl { @@ -25,10 +25,16 @@ public final class DragonbroodsRelic extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{G}"); // {T}, Tap an untapped creature you control: Add one mana of any color. - Ability ability=new AnyColorManaAbility();ability.addCost(new TapTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURE)));this.addAbility(ability); + Ability ability = new AnyColorManaAbility(); + ability.addCost(new TapTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURE))); + this.addAbility(ability); // {3}{W}{U}{B}{R}{G}, Sacrifice this artifact: Create a 4/4 Dragon creature token named Reliquary Dragon that's all colors. It has flying, lifelink, and "When this token enters, it deals 3 damage to any target." Activate only as a sorcery. - ability=new ActivateAsSorceryActivatedAbility(new CreateTokenEffect(),new ManaCostsImpl<>("{3}{W}{U}{B}{R}{G}"));ability.addCost(new SacrificeSourceCost());this.addAbility(ability); + ability = new ActivateAsSorceryActivatedAbility( + new CreateTokenEffect(new ReliquaryDragonToken()), new ManaCostsImpl<>("{3}{W}{U}{B}{R}{G}") + ); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); } private DragonbroodsRelic(final DragonbroodsRelic card) {