diff --git a/CHANGELOG.md b/CHANGELOG.md index fd4527b4a..00de3cf1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) ### 30/08/21 -- *Committed:* Fixed dat file for J21 set, improved Android downloader for J21 set. ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, added a new trigger when a player shuffles his/her library, added new keywords "plastshlturn" and "olastshlturn" to retrieve the last turn a player shuffled his/her library, refactoring of some source files. ([Vitty85](https://github.com/Vitty85)) + +- *Committed:* Fixed dat file for J21 set, improved Android downloader for J21 set. https://github.com/WagicProject/wagic/commit/e1f91a50f6fa607ad3672433e00ceb1c25feb631 ([Vitty85](https://github.com/Vitty85)) ### 29/08/21 - *Committed:* Fixed dat file for MB1, PRM and PSAL sets. https://github.com/WagicProject/wagic/commit/790f02905ac44cbcabd2fa7cd00ea11e6a36379c ([Vitty85](https://github.com/Vitty85)) diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/6ED.txt b/projects/mtg/bin/Res/missing_cards_by_sets/6ED.txt index df2ea1091..409ee8aa5 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/6ED.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/6ED.txt @@ -20,12 +20,6 @@ power=2 toughness=5 [/card] [card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] -[card] name=Reverse Damage text=The next time a source of your choice would deal damage to you this turn, prevent that damage. You gain life equal to the damage prevented this way. mana={1}{W}{W} @@ -38,12 +32,6 @@ mana={4} type=Artifact [/card] [card] -name=Tariff -text=Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two creatures a player controls are tied for highest cost, that player chooses one. -mana={1}{W} -type=Sorcery -[/card] -[card] name=Library of Lat-Nam text=An opponent chooses one — You draw three cards at the beginning of the next turn's upkeep; or you search your library for a card, put that card into your hand, then shuffle your library. mana={4}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt b/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt index ad612d9be..69b6a54b2 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt @@ -59,16 +59,6 @@ mana={2} type=Artifact [/card] [card] -name=Notion Thief -abilities=flash -text=Flash -- If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card. -mana={2}{U}{B} -type=Creature -subtype=Human Rogue -power=3 -toughness=1 -[/card] -[card] name=Deadly Designs text={2}: Put a plot counter on Deadly Designs. Any player may activate this ability. -- When there are five or more plot counters on Deadly Designs, sacrifice it. If you do, destroy up to two target creatures. mana={1}{B} @@ -84,9 +74,3 @@ subtype=Angel power=5 toughness=5 [/card] -[card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C15.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C15.txt index ed733effb..bbf14495d 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C15.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C15.txt @@ -64,13 +64,6 @@ mana={4}{U}{U} type=Instant [/card] [card] -name=Cobra Trap -text=If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost. -- Put four 1/1 green Snake creature tokens onto the battlefield. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] name=Karmic Justice text=Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls. mana={2}{W} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt index 384993831..44768f152 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt @@ -56,12 +56,6 @@ mana={2}{W}{W} type=Sorcery [/card] [card] -name=Silumgar's Command -text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. -mana={3}{U}{B} -type=Instant -[/card] -[card] name=Teferi's Protection abilities=exiledeath text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CHK.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CHK.txt index da17e5114..4274a7e64 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CHK.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CHK.txt @@ -114,13 +114,6 @@ mana={5}{R} type=Sorcery [/card] [card] -name=Cranial Extraction -text=Name a nonland card. Search target player's graveyard, hand, and library for all cards with that name and exile them. Then that player shuffles his or her library. -mana={3}{B} -type=Sorcery -subtype=Arcane -[/card] -[card] name=Dampen Thought text=Target player puts the top four cards of his or her library into his or her graveyard. -- Splice onto Arcane {1}{U} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) mana={1}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CMD.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CMD.txt index 95ab95fe3..5726ea4b2 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CMD.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CMD.txt @@ -85,29 +85,12 @@ mana={1}{R} type=Instant [/card] [card] -name=Cobra Trap -text=If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost. -- Put four 1/1 green Snake creature tokens onto the battlefield. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] name=Pollen Lullaby text=Prevent all combat damage that would be dealt this turn. Clash with an opponent. If you win, creatures that player controls don't untap during the player's next untap step. (Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost.) mana={1}{W} type=Instant [/card] [card] -name=Gomazoa -abilities=defender,flying -text=Defender, flying -- {T}: Put Gomazoa and each creature it's blocking on top of their owners' libraries, then those players shuffle their libraries. -mana={2}{U} -type=Creature -subtype=Jellyfish -power=0 -toughness=3 -[/card] -[card] name=Scattering Stroke text=Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add {X} to your mana pool, where X is that spell's converted mana cost. (Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost.) mana={2}{U}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CNS.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CNS.txt index cd1982ebd..2cb170569 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CNS.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CNS.txt @@ -201,15 +201,6 @@ power=2 toughness=2 [/card] [card] -name=Wood Sage -text={T}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. -mana={G}{U} -type=Creature -subtype=Human Druid -power=1 -toughness=1 -[/card] -[card] name=Whispergear Sneak text=Draft Whispergear Sneak face up. -- During the draft, you may turn Whispergear Sneak face down. If you do, look at any unopened booster pack in the draft or any booster pack not being looked at by another player. mana={1} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/DGM.txt b/projects/mtg/bin/Res/missing_cards_by_sets/DGM.txt index 962df76d3..34e195eb2 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/DGM.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/DGM.txt @@ -17,16 +17,6 @@ mana={U} type=Sorcery [/card] [card] -name=Notion Thief -abilities=flash -text=Flash -- If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card. -mana={2}{U}{B} -type=Creature -subtype=Human Rogue -power=3 -toughness=1 -[/card] -[card] name=Varolz, the Scar-Striped text=Each creature card in your graveyard has scavenge. The scavenge cost is equal to its mana cost. (Exile a creature card from your graveyard and pay its mana cost: Put a number of +1/+1 counters equal to that card's power on target creature. Scavenge only as a sorcery.) -- Sacrifice another creature: Regenerate Varolz, the Scar-Striped. mana={1}{B}{G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt b/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt index 01d754c71..6b9c5e9d7 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt @@ -99,12 +99,6 @@ power=1 toughness=2 [/card] [card] -name=Silumgar's Command -text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. -mana={3}{U}{B} -type=Instant -[/card] -[card] name=Obscuring AEther text=Face-down creature spells you cast cost {1} less to cast. -- {1}{G}: Turn Obscuring AEther face down. (It becomes a 2/2 creature.) mana={G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/HA5.txt b/projects/mtg/bin/Res/missing_cards_by_sets/HA5.txt index dbbb271bb..8e62127f6 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/HA5.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/HA5.txt @@ -5,12 +5,6 @@ mana={G}{W} type=Instant [/card] [card] -name=Silumgar's Command -text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. -mana={3}{U}{B} -type=Instant -[/card] -[card] name=Stifle text=Counter target activated or triggered ability. (Mana abilities can't be targeted.) mana={U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt index d3c9d1c8a..31002fda2 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt @@ -301,15 +301,6 @@ power=3 toughness=3 [/card] [card] -name=Merieke Ri Berit -text=Merieke Ri Berit doesn't untap during your untap step. -- {T}: Gain control of target creature for as long as you control Merieke Ri Berit. When Merieke Ri Berit leaves the battlefield or becomes untapped, destroy that creature. It can't be regenerated. -mana={W}{U}{B} -type=Legendary Creature -subtype=Human -power=1 -toughness=1 -[/card] -[card] name=Chaos Moon text=At the beginning of each upkeep, count the number of permanents. If the number is odd, until end of turn, red creatures get +1/+1 and whenever a player taps a Mountain for mana, that player adds {R} to his or her mana pool (in addition to the mana the land produces). If the number is even, until end of turn, red creatures get -1/-1 and if a player taps a Mountain for mana, that Mountain produces colorless mana instead of any other type. mana={3}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/M15.txt b/projects/mtg/bin/Res/missing_cards_by_sets/M15.txt index 3bd8f0bea..10fdbb547 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/M15.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/M15.txt @@ -5,12 +5,6 @@ mana={4} type=Legendary Artifact [/card] [card] -name=Stain the Mind -text=Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.) -- Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={4}{B} -type=Sorcery -[/card] -[card] name=Might Makes Right text=At the beginning of combat on your turn, if you control each creature on the battlefield with the greatest power, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn. (It can attack and {T} this turn.) mana={5}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MM3.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MM3.txt index ca4a63d0c..a8eeaa9a1 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MM3.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MM3.txt @@ -1,10 +1,4 @@ [card] -name=Pyromancer Ascension -text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. -mana={1}{R} -type=Enchantment -[/card] -[card] name=Soul Ransom text=Enchant creature -- You control enchanted creature. -- Discard two cards: Soul Ransom's controller sacrifices it, then draws two cards. Only any opponent may activate this ability. mana={2}{U}{B} @@ -12,13 +6,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Summoning Trap -text=If a creature spell you cast this turn was countered by a spell or ability an opponent controlled, you may pay {0} rather than pay Summoning Trap's mana cost. -- Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in any order. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] name=Wort, the Raidmother text=When Wort, the Raidmother enters the battlefield, put two 1/1 red and green Goblin Warrior creature tokens onto the battlefield. -- Each red or green instant or sorcery spell you cast has conspire. (As you cast the spell, you may tap two untapped creatures you control that share a color with it. When you do, copy it and you may choose new targets for the copy.) mana={4}{RG}{RG} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MP2.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MP2.txt index de0474ae8..6f7eaa310 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MP2.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MP2.txt @@ -23,9 +23,3 @@ text=Change the target of target spell with a single target unless that spell's mana={U} type=Instant [/card] -[card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MRD.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MRD.txt index 22ba887d9..04f1e3290 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MRD.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MRD.txt @@ -68,12 +68,6 @@ power=1 toughness=1 [/card] [card] -name=Psychogenic Probe -text=Whenever a spell or ability causes a player to shuffle his or her library, Psychogenic Probe deals 2 damage to him or her. -mana={2} -type=Artifact -[/card] -[card] name=Timesifter text=At the beginning of each upkeep, each player exiles the top card of his or her library. The player who exiled the card with the highest converted mana cost takes an extra turn after this one. If two or more players' cards are tied for highest cost, the tied players repeat this process until the tie is broken. mana={5} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/NPH.txt b/projects/mtg/bin/Res/missing_cards_by_sets/NPH.txt index 6b2563b29..54cd596df 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/NPH.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/NPH.txt @@ -1,16 +1,4 @@ [card] -name=Psychic Surgery -text=Whenever an opponent shuffles his or her library, you may look at the top two cards of that library. You may exile one of those cards. Then put the rest on top of that library in any order. -mana={1}{U} -type=Enchantment -[/card] -[card] -name=Exclusion Ritual -text=Imprint — When Exclusion Ritual enters the battlefield, exile target nonland permanent. -- Players can't cast spells with the same name as the exiled card. -mana={4}{W}{W} -type=Enchantment -[/card] -[card] name=Spellskite text={PU}: Change a target of target spell or ability to Spellskite. ({PU} can be paid with either {U} or 2 life.) mana={2} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt b/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt index 5f6057ed1..53acdbe88 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt @@ -106,12 +106,6 @@ mana={1}{W}{W} type=Sorcery [/card] [card] -name=Pyromancer Ascension -text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. -mana={1}{R} -type=Enchantment -[/card] -[card] name=Shuriken text=Equipped creature has "{T}, Unattach Shuriken: Shuriken deals 2 damage to target creature. That creature's controller gains control of Shuriken unless it was unattached from a Ninja." -- Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) mana={1} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt b/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt index 3b950bb0c..46fcacaff 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt @@ -183,12 +183,6 @@ power=3 toughness=5 [/card] [card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] -[card] name=Horizon Boughs text=All permanents untap during each playerÂ’s untap step. -- Whenever you roll {K}, you may search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle. type=Plane @@ -228,12 +222,6 @@ text={3}, {T}: Tap target creature you control and target creature of an opponen type=Land [/card] [card] -name=Memoricide -text=Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={3}{B} -type=Sorcery -[/card] -[card] name=Mirrored Depths text=Whenever a player casts a spell, that player flips a coin. If the player loses the flip, counter that spell. -- Whenever you roll {K}, target player reveals the top card of their library. If itÂ’s a nonland card, you may cast it without paying its mana cost. type=Plane diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt b/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt index e3a090563..458c4f5aa 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt @@ -41,12 +41,6 @@ power=6 toughness=6 [/card] [card] -name=Slaughter Games -text=Slaughter Games can't be countered by spells or abilities. -- Name a nonland card. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={2}{B}{R} -type=Sorcery -[/card] -[card] name=Sphinx of the Chimes abilities=flying text=Flying -- Discard two nonland cards with the same name: Draw four cards. diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/SOM.txt b/projects/mtg/bin/Res/missing_cards_by_sets/SOM.txt index a4886e2b7..055c02580 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/SOM.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/SOM.txt @@ -8,12 +8,6 @@ power=4 toughness=4 [/card] [card] -name=Memoricide -text=Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={3}{B} -type=Sorcery -[/card] -[card] name=Strata Scythe text=Imprint — When Strata Scythe enters the battlefield, search your library for a land card, exile it, then shuffle your library. -- Equipped creature gets +1/+1 for each land on the battlefield with the same name as the exiled card. -- Equip {3} mana={3} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/SS3.txt b/projects/mtg/bin/Res/missing_cards_by_sets/SS3.txt deleted file mode 100644 index 28bca81c9..000000000 --- a/projects/mtg/bin/Res/missing_cards_by_sets/SS3.txt +++ /dev/null @@ -1,6 +0,0 @@ -[card] -name=Pyromancer Ascension -text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. -mana={1}{R} -type=Enchantment -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt b/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt index 91dcb2116..c1a15ccaf 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt @@ -1,13 +1,4 @@ [card] -name=Meletis Charlatan -text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. -mana={2}{U} -type=Creature -subtype=Human Wizard -power=2 -toughness=3 -[/card] -[card] name=Steam Augury text=Reveal the top five cards of your library and separate them into two piles. An opponent chooses one of those piles. Put that pile into your hand and the other into your graveyard. mana={2}{U}{R} @@ -32,9 +23,3 @@ subtype=Human Soldier power=2 toughness=2 [/card] -[card] -name=Psychic Intrusion -text=Target opponent reveals his or her hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. -mana={3}{U}{B} -type=Sorcery -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/TMP.txt b/projects/mtg/bin/Res/missing_cards_by_sets/TMP.txt index 8e60342a4..4b8bc662e 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/TMP.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/TMP.txt @@ -72,13 +72,6 @@ power=1 toughness=1 [/card] [card] -name=Corpse Dance -buyback={2}{B}{2} -text=Buyback {2} (You may pay an additional {2} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Return the top creature card of your graveyard to the battlefield. That creature gains haste until end of turn. Exile it at the beginning of the next end step. -mana={2}{B} -type=Instant -[/card] -[card] name=Oracle en-Vec text={T}: Target opponent chooses any number of creatures he or she controls. During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack. Activate this ability only during your turn. mana={1}{W} @@ -154,15 +147,6 @@ power=0 toughness=0 [/card] [card] -name=Wood Sage -text={T}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. -mana={G}{U} -type=Creature -subtype=Human Druid -power=1 -toughness=1 -[/card] -[card] name=Flowstone Salamander text={R}: Flowstone Salamander deals 1 damage to target creature blocking it. mana={3}{R}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/TOR.txt b/projects/mtg/bin/Res/missing_cards_by_sets/TOR.txt index 5f31e182c..ea0c11787 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/TOR.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/TOR.txt @@ -17,12 +17,6 @@ mana={R} type=Sorcery [/card] [card] -name=Flaming Gambit -text=Flaming Gambit deals X damage to target player. That player may choose a creature he or she controls and have Flaming Gambit deal that damage to it instead. -- Flashback {X}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) -mana={X}{R} -type=Instant -[/card] -[card] name=Radiate text=Choose target instant or sorcery spell that targets only a single permanent or player. Copy that spell for each other permanent or player the spell could target. Each copy targets a different one of those permanents and players. mana={3}{R}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/TPR.txt b/projects/mtg/bin/Res/missing_cards_by_sets/TPR.txt index 7396b1a1f..62f71a99f 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/TPR.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/TPR.txt @@ -15,13 +15,6 @@ mana={2}{U}{U} type=Sorcery [/card] [card] -name=Corpse Dance -buyback={2}{B}{2} -text=Buyback {2} (You may pay an additional {2} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Return the top creature card of your graveyard to the battlefield. That creature gains haste until end of turn. Exile it at the beginning of the next end step. -mana={2}{B} -type=Instant -[/card] -[card] name=Volrath's Curse text=Enchant creature -- Enchanted creature can't attack or block, and its activated abilities can't be activated. That creature's controller may sacrifice a permanent for that player to ignore this effect until end of turn. -- {1}{U}: Return Volrath's Curse to its owner's hand. mana={1}{U} @@ -106,12 +99,3 @@ subtype=Zombie Wizard power=1 toughness=1 [/card] -[card] -name=Wood Sage -text={T}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. -mana={G}{U} -type=Creature -subtype=Human Druid -power=1 -toughness=1 -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/TSB.txt b/projects/mtg/bin/Res/missing_cards_by_sets/TSB.txt index de0271d33..d6dc75897 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/TSB.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/TSB.txt @@ -11,15 +11,6 @@ power=1 toughness=2 [/card] [card] -name=Merieke Ri Berit -text=Merieke Ri Berit doesn't untap during your untap step. -- {T}: Gain control of target creature for as long as you control Merieke Ri Berit. When Merieke Ri Berit leaves the battlefield or becomes untapped, destroy that creature. It can't be regenerated. -mana={W}{U}{B} -type=Legendary Creature -subtype=Human -power=1 -toughness=1 -[/card] -[card] name=Spitting Slug text=Whenever Spitting Slug blocks or becomes blocked, you may pay {1}{G}. If you do, Spitting Slug gains first strike until end of turn. Otherwise, each creature blocking or blocked by Spitting Slug gains first strike until end of turn. mana={1}{G}{G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt b/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt index 77fcbb0f3..42fb256f6 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt @@ -144,24 +144,12 @@ power=2 toughness=2 [/card] [card] -name=Breathstealer's Crypt -text=If a player would draw a card, instead he or she draws a card and reveals it. If it's a creature card, that player discards it unless he or she pays 3 life. -mana={2}{U}{B} -type=Enchantment -[/card] -[card] name=Corrosion text=Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.) -- At the beginning of your upkeep, put a rust counter on each artifact target opponent controls. Then destroy each artifact with converted mana cost less than or equal to the number of rust counters on it. Artifacts destroyed this way can't be regenerated. -- When Corrosion leaves the battlefield, remove all rust counters from all permanents. mana={1}{B}{R} type=Enchantment [/card] [card] -name=Forbidden Ritual -text=Sacrifice a nontoken permanent. If you do, target opponent loses 2 life unless he or she sacrifices a permanent or discards a card. You may repeat this process any number of times. -mana={2}{B}{B} -type=Sorcery -[/card] -[card] name=Necromancy text=You may cast Necromancy as though it had flash. If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step. -- When Necromancy enters the battlefield, if it's on the battlefield, it becomes an Aura with "enchant creature put onto the battlefield with Necromancy." Put target creature card from a graveyard onto the battlefield under your control and attach Necromancy to it. When Necromancy leaves the battlefield, that creature's controller sacrifices it. mana={2}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/WTH.txt b/projects/mtg/bin/Res/missing_cards_by_sets/WTH.txt index a52c4bd7f..aac417cb3 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/WTH.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/WTH.txt @@ -18,12 +18,6 @@ power=2 toughness=2 [/card] [card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] -[card] name=Kithkin Armor text=Enchant creature -- Enchanted creature can't be blocked by creatures with power 3 or greater. -- Sacrifice Kithkin Armor: The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage. mana={W} @@ -31,12 +25,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Tariff -text=Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two creatures a player controls are tied for highest cost, that player chooses one. -mana={1}{W} -type=Sorcery -[/card] -[card] name=Volunteer Reserves abilities=banding text=Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) -- Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.) @@ -71,21 +59,6 @@ mana={R} type=Instant [/card] [card] -name=Goblin Grenadiers -text=Whenever Goblin Grenadiers attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature and target land. -mana={3}{R} -type=Creature -subtype=Goblin -power=2 -toughness=2 -[/card] -[card] -name=Bosium Strip -text={3}, {T}: Until end of turn, if the top card of your graveyard is an instant or sorcery card, you may cast that card. If a card cast this way would be put into a graveyard this turn, exile it instead. -mana={3} -type=Artifact -[/card] -[card] name=Mana Web text=Whenever a land an opponent controls is tapped for mana, tap all lands that player controls that could produce any type of mana that land could produce. mana={3} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/WWK.txt b/projects/mtg/bin/Res/missing_cards_by_sets/WWK.txt index aacb22dc2..b6be8b62f 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/WWK.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/WWK.txt @@ -1,17 +1,4 @@ [card] -name=Ricochet Trap -text=If an opponent cast a blue spell this turn, you may pay {R} rather than pay Ricochet Trap's mana cost. -- Change the target of target spell with a single target. -mana={3}{R} -type=Instant -subtype=Trap -[/card] -[card] -name=Rumbling Aftershocks -text=Whenever you cast a kicked spell, you may have Rumbling Aftershocks deal damage to target creature or player equal to the number of times that spell was kicked. -mana={4}{R} -type=Enchantment -[/card] -[card] name=Razor Boomerang text=Equipped creature has "{T}, Unattach Razor Boomerang: Razor Boomerang deals 1 damage to target creature or player. Return Razor Boomerang to its owner's hand." -- Equip {2} mana={3} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt deleted file mode 100644 index a02ec1728..000000000 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt +++ /dev/null @@ -1,62 +0,0 @@ -[card] -name=Kalitas, Bloodchief of Ghet -text={B}{B}{B}, {T}: Destroy target creature. If that creature dies this way, put a black Vampire creature token onto the battlefield. Its power is equal to that creature's power and its toughness is equal to that creature's toughness. -mana={5}{B}{B} -type=Legendary Creature -subtype=Vampire Warrior -power=5 -toughness=5 -[/card] -[card] -name=Cosi's Trickster -text=Whenever an opponent shuffles his or her library, you may put a +1/+1 counter on Cosi's Trickster. -mana={U} -type=Creature -subtype=Merfolk Wizard -power=1 -toughness=1 -[/card] -[card] -name=Gomazoa -abilities=defender,flying -text=Defender, flying -- {T}: Put Gomazoa and each creature it's blocking on top of their owners' libraries, then those players shuffle their libraries. -mana={2}{U} -type=Creature -subtype=Jellyfish -power=0 -toughness=3 -[/card] -[card] -name=Summoning Trap -text=If a creature spell you cast this turn was countered by a spell or ability an opponent controlled, you may pay {0} rather than pay Summoning Trap's mana cost. -- Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in any order. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] -name=Archive Trap -text=If an opponent searched his or her library this turn, you may pay {0} rather than pay Archive Trap's mana cost. -- Target opponent puts the top thirteen cards of his or her library into his or her graveyard. -mana={3}{U}{U} -type=Instant -subtype=Trap -[/card] -[card] -name=Cobra Trap -text=If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost. -- Put four 1/1 green Snake creature tokens onto the battlefield. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] -name=Pyromancer Ascension -text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. -mana={1}{R} -type=Enchantment -[/card] -[card] -name=Mindbreak Trap -text=If an opponent cast three or more spells this turn, you may pay {0} rather than pay Mindbreak Trap's mana cost. -- Exile any number of target spells. -mana={2}{U}{U} -type=Instant -subtype=Trap -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ZNC.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ZNC.txt index 07ff21087..5cc58269a 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ZNC.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ZNC.txt @@ -1,20 +1,4 @@ [card] -name=Notion Thief -abilities=flash -text=Flash -- If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card. -mana={2}{U}{B} -type=Creature -subtype=Human Rogue -power=3 -toughness=1 -[/card] -[card] -name=Silumgar's Command -text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. -mana={3}{U}{B} -type=Instant -[/card] -[card] name=Lazav, Dimir Mastermind abilities=opponentshroud text=Hexproof -- Whenever a creature card is put into an opponent's graveyard from anywhere, you may have Lazav, Dimir Mastermind become a copy of that card except its name is still Lazav, Dimir Mastermind, it's legendary in addition to its other types, and it gains hexproof and this ability. diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index e2338c55d..7c3d5250d 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -2741,6 +2741,16 @@ power=7 toughness=7 [/card] [card] +name=Archive Trap +other={0} name(Opponent searched this turn) +otherrestriction=compare(olastshlturn)~equalto~compare(currentturn) +auto=deplete:13 opponent +text=If an opponent searched his or her library this turn, you may pay {0} rather than pay Archive Trap's mana cost. -- Target opponent puts the top thirteen cards of his or her library into his or her graveyard. +mana={3}{U}{U} +type=Instant +subtype=Trap +[/card] +[card] name=Archmage Emeritus auto=@movedto(*[instant;sorcery]|mystack):name(Draw 1 card) draw:1 controller text=Magecraft — Whenever you cast or copy an instant or sorcery spell, draw a card. @@ -7409,6 +7419,13 @@ text=Boseiju, Who Shelters All enters the battlefield tapped. -- {T}, Pay 2 life type=Legendary Land [/card] [card] +name=Bosium Strip +auto={3}{T}:name(Can cast instant or sorcery) target(*[instant;sorcery;zpos=type:*:mygraveyard]|mygraveyard) transforms((,newability[canplayfromgraveyard],newability[gainedexiledeath])) ueot +text={3}, {T}: Until end of turn, if the top card of your graveyard is an instant or sorcery card, you may cast that card. If a card cast this way would be put into a graveyard this turn, exile it instead. +mana={3} +type=Artifact +[/card] +[card] name=Bottle Golems abilities=trample auto=_DIES_name(Gain life) life:power controller @@ -7758,6 +7775,14 @@ power=2 toughness=2 [/card] [card] +name=Breathstealer's Crypt +auto=@drawof(player):name(Check drawn card) transforms((,newability[name(Pay or discard) all(creature[zpos=type:*:myhand]|myhand) transforms((,newability[choice name(Discard creature) reject],newability[choice name(Pay 3 life) life:-3 controller])) oneshot])) oneshot +auto=@drawfoeof(player):name(Check drawn card) transforms((,newability[name(Pay or discard) all(creature[zpos=type:*:opponenthand]|opponenthand) transforms((,newability[choice name(Discard creature) reject],newability[choice name(Pay 3 life) life:-3 controller])) oneshot])) oneshot +text=If a player would draw a card, instead he or she draws a card and reveals it. If it's a creature card, that player discards it unless he or she pays 3 life. +mana={2}{U}{B} +type=Enchantment +[/card] +[card] name=Breeches, Brazen Plunderer abilities=menace,partner auto=@combatdamagefoeof(player) from(*[pirate]|myBattlefield):all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once] moveTo(ownerexile)])) ueot )! @@ -7989,8 +8014,9 @@ type=Sorcery [/card] [card] name=Broken Visage -target=creature[attacking,-artifact] -auto=destroy && token(Spirit,Creature Spirit,storedpower/storedtoughness,black,treason) +restriction=type(creature[attacking;-artifact]|battlefield)~morethan~0 +auto=if type(creature[attacking;-artifact]|opponentbattlefield)~morethan~0 then choice name(Destroy opponent creature) name(Destroy opponent creature) target(creature[attacking;-artifact]|opponentbattlefield) transforms((,newability[destroy],newability[token(Spirit^Creature Spirit^p/t^black^treason) opponent])) oneshot +auto=if type(creature[attacking;-artifact]|mybattlefield)~morethan~0 then choice name(Destroy your creature) name(Destroy your creature) target(creature[attacking;-artifact]|mybattlefield) transforms((,newability[destroy],newability[token(Spirit^Creature Spirit^p/t^black^treason)])) oneshot text=Destroy target nonartifact attacking creature. It can't be regenerated. Put a black Spirit creature token with that creature's power and toughness onto the battlefield. Sacrifice the token at the beginning of the next end step. mana={4}{B} type=Instant @@ -11385,6 +11411,16 @@ mana={2}{U} type=Sorcery [/card] [card] +name=Cobra Trap +other={G} name(Permanent was destroyed) +otherrestriction=type(*[-creature;-instant;-sorcery;fresh]|mygraveyard)~morethan~0 +auto=token(Snake,Creature Snake,1/1,green)*4 +text=If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost. -- Put four 1/1 green Snake creature tokens onto the battlefield. +mana={4}{G}{G} +type=Instant +subtype=Trap +[/card] +[card] name=Code of Constraint target=creature auto=-4/-0 @@ -12506,6 +12542,15 @@ power=4 toughness=2 [/card] [card] +name=Corpse Dance +target=creature|mygraveyard +buyback={4}{B} +auto=moveto(myBattlefield) and!( transforms((,newability[haste],newability[unearth])) ueot )! +text=Buyback {2} (You may pay an additional {2} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Return the top creature card of your graveyard to the battlefield. That creature gains haste until end of turn. Exile it at the beginning of the next end step. +mana={2}{B} +type=Instant +[/card] +[card] name=Corpse Knight auto=@movedto(other creature|mybattlefield):life:-1 opponent text=Whenever another creature enters the battlefield under your control, each opponent loses 1 life. @@ -12585,6 +12630,16 @@ power=2 toughness=2 [/card] [card] +name=Cosi's Trickster +auto=@shuffledfoeof(player):may name(Put 1/1 counter) counter(1/1) +text=Whenever an opponent shuffles his or her library, you may put a +1/+1 counter on Cosi's Trickster. +mana={U} +type=Creature +subtype=Merfolk Wizard +power=1 +toughness=1 +[/card] +[card] name=Cosima, God of the Voyage auto=@each my upkeep:may name(Exile Cosima) moveto(myexile) and!( counter(0/0,1,CosimaEffect) )! autoexile=@movedto(land|mybattlefield) restriction{compare(hascntcosimaeffect)~morethan~0}:transforms((,newability[choice name(Add voyage counter) counter(0/0.1.Voyage)],newability[choice name(Return in play) draw:hascntvoyage controller && moveTo(mybattlefield) and!( counter(1/1.hascntvoyage) )!])) oneshot @@ -12866,6 +12921,15 @@ mana={1}{BG} type=Sorcery [/card] [card] +name=Cranial Extraction +auto=choice name(Target opponent) ability$!chooseanameopp name(Search that cards) target(creature[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller +auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(creature[chosenname]|mygraveyard,mylibrary,myhand) moveto(exile) and!( shuffle controller )! chooseend nonland!$ controller +text=Name a nonland card. Search target player's graveyard, hand, and library for all cards with that name and exile them. Then that player shuffles his or her library. +mana={3}{B} +type=Sorcery +subtype=Arcane +[/card] +[card] name=Crash Through auto=all(creature|mybattlefield) trample ueot auto=draw:1 @@ -15074,26 +15138,26 @@ toughness=1 name=Delina, Wild Mage auto=_ATTACKING_name(Roll a d20) rolld20 20 winability donothing winabilityend rolld20end auto=_ATTACKING_name(Choose your creature) target(creature|mybattlefield) counter(0/0.1.DelinaEffect) -auto=@dierolled(this) result(1) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(2) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(3) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(4) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(5) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(6) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(7) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(8) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(9) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(10) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(11) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(12) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(13) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(14) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(15) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(16) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(17) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(18) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(19) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot -auto=@dierolled(this) result(20) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(treason^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(1) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(2) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(3) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(4) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(5) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(6) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(7) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(8) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(9) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(10) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(11) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(12) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(13) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(14) from(controller):all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) transforms((,newability[removeallcounters(0/0.1.DelinaEffect)],newability[clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(15) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(16) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(17) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(18) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(19) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot +auto=@dierolled(this) result(20) from(controller):name(may roll d20 again) transforms((,newability[choice name name(Roll d20 again) rolld20 20 winability donothing winabilityend rolld20end],newability[choice name name(Stop rolling d20) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) removeallcounters(0/0.1.DelinaEffect)],newability[name(Copy creature) all(creature[counter{0/0.1.DelinaEffect}]|mybattlefield) clone with(unearth^battleready) options(nolegend)])) oneshot text=Whenever Delina, Wild Mage attacks, choose target creature you control, then roll a d20. -- 1-14 | Create a tapped and attacking token that’s a copy of that creature except it’s not legendary and it has "Exile this creature at end of combat." -- 15-20 | Create one of those tokens. You may roll again. mana={3}{R} type=Legendary Creature @@ -16656,6 +16720,14 @@ mana={2}{B} type=Sorcery [/card] [card] +name=Doomsday +auto=name(Search 5 cards) target(<5>*|mylibrary,mygraveyard) moveto(myreveal) and!( moveto(mylibrary) and!( transforms((,newability[all(*[-fresh]|mylibrary) moveto(exile)],newability[all(*|mygraveyard) moveto(exile)])) oneshot )! )! +auto=life:-halfuplifetotal controller +text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. +mana={B}{B}{B} +type=Sorcery +[/card] +[card] name=Doomskar abilities=foretell autohand={2}:name(Pay 2 and exile face-down) name(Pay 2 and exile face-down) doforetell myturnonly @@ -18573,15 +18645,6 @@ power=0 toughness=4 [/card] [card] -name=Elemental Cha -abilities=haste,treason -type=Creature -subtype=Elemental -power=3 -toughness=3 -color=red -[/card] -[card] name=Elemental Expressionist auto=@movedto(*[instant;sorcery]|mystack):name(Choose a creature) target(creature|mybattlefield) transforms((,newability[exiledeath],newability[@movedto(this|exile):token(Elemental^Creature Elemental^4/4^blue^red)])) ueot text=Magecraft — Whenever you cast or copy an instant or sorcery spell, choose target creature you control. Until end of turn, it gains "If this creature would leave the battlefield, exile it instead of putting it anywhere else" and "When this creature is put into exile, create a 4/4 blue and red Elemental creature token." (Each instance of that ability triggers separately.) @@ -20296,6 +20359,14 @@ power=2 toughness=2 [/card] [card] +name=Exclusion Ritual +auto=name(Exile permanent) target(*|battlefield) imprint +auto=this(variable{hasevict}>0) transforms((,newability[maxCast(*[evictname])0],newability[maxCast(*[evictname])0 opponent])) +text=Imprint — When Exclusion Ritual enters the battlefield, exile target nonland permanent. -- Players can't cast spells with the same name as the exiled card. +mana={4}{W}{W} +type=Enchantment +[/card] +[card] name=Excruciator #MISSING: damage can't be prevented text=Damage that would be dealt by Excruciator can't be prevented. @@ -22768,6 +22839,16 @@ power=2 toughness=1 [/card] [card] +name=Flaming Gambit +target=player +flashback={X}{R}{R} +auto=if type(creature|targetedpersonsbattlefield)~equalto~0 then damage:x +auto=if type(creature|targetedpersonsbattlefield)~morethan~0 then ability$!name(Choose one) choice name(Damage player) damage:storedx controller _ choice name(Damage creature) damage:storedx target(creature|mybattlefield)!$ targetedPlayer +text=Flaming Gambit deals X damage to target player. That player may choose a creature he or she controls and have Flaming Gambit deal that damage to it instead. -- Flashback {X}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) +mana={X}{R} +type=Instant +[/card] +[card] name=Flash Foliage restriction=blockersonly auto=token(Saproling,Creature Saproling,1/1,green) and!(transforms((,newability[mustblock])) ueot)! @@ -23081,6 +23162,14 @@ mana={1}{R} type=Sorcery [/card] [card] +name=Forbidden Ritual +target=*[-token]|myBattlefield +auto=transforms((,newability[sacrifice],newability[if type(*|opponentbattlefield)~morethan~0 then if type(*|opponenthand)~morethan~0 then ability$!name(Choose one) choice name(Pay 2 life) life:-2 controller _ choice name(Discard a card) notarget(*|myhand) reject _ choice name(Sacrifice a permanent) notarget(*|myBattlefield) sacrifice!$ opponent],newability[if type(*|opponentbattlefield)~morethan~0 then if type(*|opponenthand)~equalto~0 then ability$!name(Choose one) choice name(Pay 2 life) life:-2 controller _ choice name(Sacrifice a permanent) notarget(*|myBattlefield) sacrifice!$ opponent],newability[if type(*|opponentbattlefield)~equalto~0 then if type(*|opponenthand)~morethan~0 then ability$!name(Choose one) choice name(Pay 2 life) life:-2 controller _ choice name(Discard a card) notarget(*|myhand) reject!$ opponent],newability[if type(*|opponentbattlefield)~equalto~0 then if type(*|opponenthand)~equalto~0 then life:-2 opponent])) oneshot +text=Sacrifice a nontoken permanent. If you do, target opponent loses 2 life unless he or she sacrifices a permanent or discards a card. You may repeat this process any number of times. +mana={2}{B}{B} +type=Sorcery +[/card] +[card] name=Forbidding Spirit auto=all(creature|opponentbattlefield) transforms((,newability[attackcost:2])) uynt text=When Forbidding Spirit enters the battlefield, until your next turn, creatures can't attack you or a planeswalker you control unless their controller pays 2 for each of those creatures. @@ -26151,6 +26240,16 @@ power=5 toughness=4 [/card] [card] +name=Goblin Grenadiers +auto=@combat(notblocked) source(this):may name(Sacrifice and destroy) transforms((,newability[sacrifice],newability[name(Destroy creature) target(creature) destroy],newability[ability$!name(Destroy land) name(Destroy land) target(land) destroy!$ controller])) oneshot +text=Whenever Goblin Grenadiers attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature and target land. +mana={3}{R} +type=Creature +subtype=Goblin +power=2 +toughness=2 +[/card] +[card] name=Goblin Instigator auto=token(Goblin,Creature Goblin,1/1,red) text=When Goblin Instigator enters the battlefield, create a 1/1 red Goblin creature token. @@ -26687,6 +26786,17 @@ power=2 toughness=2 [/card] [card] +name=Gomazoa +abilities=defender,flying +auto={T}:name(Put on library) transforms((,newability[moveto(mylibrary) and!( shuffle )!],newability[if cantargetcard(*[blocking]|*) then name(Put creature on library) name(Put creature on library) target(creature[blocked]|opponentbattlefield) moveto(ownerlibrary) and!( shuffle opponent )!])) oneshot +text=Defender, flying -- {T}: Put Gomazoa and each creature it's blocking on top of their owners' libraries, then those players shuffle their libraries. +mana={2}{U} +type=Creature +subtype=Jellyfish +power=0 +toughness=3 +[/card] +[card] name=Gonti, Lord of Luxury abilities=deathtouch aicode=activate target(*[zpos<=4]|opponentlibrary) moveto(opponentexile) and!( transforms((,newability[counter(0/0.1.GontiExiled)],newability[all(*[zpos<=3]|opponentlibrary) moveto(myreveal) and!( bottomoflibrary )!])) oneshot )! @@ -28012,7 +28122,26 @@ toughness=1 [card] name=Gyrus, Waker of Corpses auto=counter(1/1,X) && counter(1/1,3) -auto=_ATTACKING_ copy target(creature[~lessthan~storedpower]|myGraveyard) with(unearth,haste[attacking]) && moveTo(exile) targe(creature[~lessthan~storedpower]|myGraveyard) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~1}:may name(Exile and copy a creature) target(creature[power<=0]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~2}:may name(Exile and copy a creature) target(creature[power<=1]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~3}:may name(Exile and copy a creature) target(creature[power<=2]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~4}:may name(Exile and copy a creature) target(creature[power<=3]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~5}:may name(Exile and copy a creature) target(creature[power<=4]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~6}:may name(Exile and copy a creature) target(creature[power<=5]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~7}:may name(Exile and copy a creature) target(creature[power<=6]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~8}:may name(Exile and copy a creature) target(creature[power=<7]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~9}:may name(Exile and copy a creature) target(creature[power=<8]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~10}:may name(Exile and copy a creature) target(creature[power<=9]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~11}:may name(Exile and copy a creature) target(creature[power<=10]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~12}:may name(Exile and copy a creature) target(creature[power<=11]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~13}:may name(Exile and copy a creature) target(creature[power<=12]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~14}:may name(Exile and copy a creature) target(creature[power<=13]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~15}:may name(Exile and copy a creature) target(creature[power<=14]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~16}:may name(Exile and copy a creature) target(creature[power<=15]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~17}:may name(Exile and copy a creature) target(creature[power<=16]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~18}:may name(Exile and copy a creature) target(creature[power=<17]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~equalto~19}:may name(Exile and copy a creature) target(creature[power=<18]|mygraveyard) moveto(exile) && clone with(unearth,battleready) +auto=@combat(attacking) source(this) restriction{compare(p)~morethan~19}:may name(Exile and copy a creature) target(creature|mygraveyard) moveto(exile) && clone with(unearth,battleready) text=Gyrus, Waker of Corpses enters the battlefield with a number of +1/+1 counters on it equal to the amount of mana spent to cast it. -- Whenever Gyrus attacks, you may exile target creature card with lesser power from your graveyard. If you do, create a token that’s a copy of that card and that’s tapped and attacking. Exile the token at end of combat. mana={X}{B}{R}{G} type=Legendary Creature @@ -28716,7 +28845,7 @@ toughness=7 [/card] [card] name=Hate Mirage -auto=clone with(treason,haste) target(creature|opponentbattlefield) +auto=clone with(unearth,haste) target(creature|opponentbattlefield) text=Choose up to two target creatures you don't control. For each of those creatures, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. mana={3}{R} type=Sorcery @@ -28856,7 +28985,7 @@ toughness=4 [/card] [card] name=Hazoret's Favor -auto=@each my combatbegins:may name(2/0 && haste) target(creature|mybattlefield) transforms((,newability[2/0],newability[haste],newability[treason])) ueot +auto=@each my combatbegins:may name(Creature gains 2/0 and haste) target(creature|mybattlefield) transforms((,newability[2/0],newability[haste],newability[treason])) ueot text=At the beginning of combat on your turn, you may have target creature you control get +2/+0 and gain haste until end of turn. If you do, sacrifice it at the beginning of the next end step. mana={2}{R} type=Enchantment @@ -33875,6 +34004,17 @@ power=3 toughness=3 [/card] [card] +name=Kalitas, Bloodchief of Ghet +auto=this(variable{type:creature[-indestructible]:opponentbattlefield}>0) {B}{B}{B}{T}:name(Destroy opponent creature) name(Destroy opponent creature) target(creature[-indestructible]|opponentbattlefield) transforms((,newability[destroy],newability[token(Vampire^Creature Vampire^p/t^black) opponent])) oneshot +auto=this(variable{type:creature[-indestructible]:mybattlefield}>0) {B}{B}{B}{T}:name(Destroy your creature) name(Destroy your creature) target(creature[-indestructible]|mybattlefield) transforms((,newability[destroy],newability[token(Vampire^Creature Vampire^p/t^black)])) oneshot +text={B}{B}{B}, {T}: Destroy target creature. If that creature dies this way, put a black Vampire creature token onto the battlefield. Its power is equal to that creature's power and its toughness is equal to that creature's toughness. +mana={5}{B}{B} +type=Legendary Creature +subtype=Vampire Warrior +power=5 +toughness=5 +[/card] +[card] name=Kalitas, Traitor of Ghet abilities=lifelink auto=@movedto(creature[-token]|opponentgraveyard):all(trigger[to]) moveTo(exile) && token(Zombie,Creature Zombie,2/2,black) @@ -34770,7 +34910,7 @@ type=Enchantment [/card] [card] name=Kindred Charge -auto=chooseatype clone with(treason,haste) all(creature[chosentype]|mybattlefield) chooseend +auto=chooseatype clone with(unearth,haste) all(creature[chosentype]|mybattlefield) chooseend text=Choose a creature type. For each creature you control of the chosen type, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. mana={4}{R}{R} type=Sorcery @@ -38316,8 +38456,7 @@ toughness=3 [card] name=Macabre Mockery target=creature|opponentGraveyard -auto=moveto(myBattlefield) -auto=transforms((,treason,+2/+0,haste)) forever +auto=moveto(myBattlefield) and!( transforms((,newability[treason],newability[+2/+0],newability[haste])) ueot )! text=Put target creature card from an opponent's graveyard onto the battlefield under your control. It gets +2/+0 and gains haste until end of turn. Sacrifice it at the beginning of the next end step. mana={2}{B}{R} type=Instant @@ -39659,6 +39798,16 @@ type=Enchantment subtype=Saga [/card] [card] +name=Meletis Charlatan +auto={2}{U}{T}:name(Controller copies instant or sorcery) target(*[instant;sorcery]|stack) transforms((,newability[activate castcard(copied)])) oneshot +text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. +mana={2}{U} +type=Creature +subtype=Human Wizard +power=2 +toughness=3 +[/card] +[card] name=Melting auto=all(land[snow]|battlefield) transforms((removetypes,newability[becomes(Land)])) forever text=All lands are no longer snow. @@ -39706,6 +39855,14 @@ text=Memorial to War enters the battlefield tapped. -- {T}: Add {R}. -- {4}{R}, type=Land [/card] [card] +name=Memoricide +auto=choice name(Target opponent) ability$!chooseanameopp name(Search that cards) target(creature[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller +auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(creature[chosenname]|mygraveyard,mylibrary,myhand) moveto(exile) and!( shuffle controller )! chooseend nonland!$ controller +text=Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. +mana={3}{B} +type=Sorcery +[/card] +[card] name=Memory Drain target=*|stack auto=fizzle @@ -39989,6 +40146,19 @@ power=1 toughness=1 [/card] [card] +name=Merieke Ri Berit +abilities=doesnotuntap +auto={T}:name(Gain control of creature) all(this) counter(0/0.1.MeriekeStolen) && target(creature) moveto(myBattlefield) and!( counter(0/0.1.MeriekeStolen) )! +auto=@untapped(this) restriction{compare(hascntmeriekestolen)~morethan~0}:name(Destroy stolen creature) transforms((,newability[name(Destroy stolen creature) target(creature[counter{0/0.1.MeriekeStolen}]|myBattlefield) bury],newability[removeallcounters(0/0.1.MeriekeStolen)])) oneshot +auto=@movedto(this|nonbattlezone) from(myBattlefield) restriction{compare(hascntmeriekestolen)~morethan~0}:name(Destroy stolen creature) target(creature[counter{0/0.1.MeriekeStolen}]|myBattlefield) bury +text=Merieke Ri Berit doesn't untap during your untap step. -- {T}: Gain control of target creature for as long as you control Merieke Ri Berit. When Merieke Ri Berit leaves the battlefield or becomes untapped, destroy that creature. It can't be regenerated. +mana={W}{U}{B} +type=Legendary Creature +subtype=Human +power=1 +toughness=1 +[/card] +[card] name=Mesa Lynx auto=this(variable{opponentturn}>0) 0/2 text=As long as it's not your turn, Mesa Lynx gets +0/+2. @@ -40251,7 +40421,7 @@ subtype=Treasure [card] name=Mimic Vat auto=@movedto(creature[-token]|nonbattlezone) from(battlefield):may name(Imprint card) name(Imprint card) all(trigger[to]) transforms((,newability[moveTo(ownerGraveyard) all(other creature[counter{0/0.1.MimicImprinted}]|exile)],newability[moveto(exile) and!( counter(0/0.1.MimicImprinted) )!])) forever -auto={3}{T}:target(creature[counter{0/0.1.MimicImprinted}]|exile) clone with(haste,treason) +auto={3}{T}:target(creature[counter{0/0.1.MimicImprinted}]|exile) clone with(haste,unearth) text=Imprint — Whenever a nontoken creature dies, you may exile that card. If you do, return each other card exiled with Mimic Vat to its owner’s graveyard. -- {3}, {T}: Create a token that’s a copy of a card exiled with Mimic Vat. It gains haste. Exile it at the beginning of the next end step. mana={3} type=Artifact @@ -40308,6 +40478,18 @@ power=1 toughness=3 [/card] [card] +name=Mindbreak Trap +target=*|stack +other={0} name(Opponent casted 3 or more spells) +otherrestriction=thisturn(*|opponentstack)~morethan~2 +auto=fizzleto(exile) +auto=all(*|opponentstack) fizzleto(exile) +text=If an opponent cast three or more spells this turn, you may pay {0} rather than pay Mindbreak Trap's mana cost. -- Exile any number of target spells. +mana={2}{U}{U} +type=Instant +subtype=Trap +[/card] +[card] name=Mindleecher abilities=flying,mutate otherrestriction=type(creature[-human]|mybattlefield)~morethan~0 @@ -40911,7 +41093,7 @@ type=Sorcery [/card] [card] name=Molten Echoes -auto=chooseatype transforms((,newability[@movedTo(creature[chosentype,-token]|myBattlefield)}:all(trigger[to]) clone with(treason,haste)])) chooseend +auto=chooseatype transforms((,newability[@movedTo(creature[chosentype,-token]|myBattlefield)}:all(trigger[to]) clone with(unearth,haste)])) chooseend text=As Molten Echoes enters the battlefield, choose a creature type. -- Whenever a nontoken creature of the chosen type enters the battlefield under your control, create a token that’s a copy of that creature. That token gains haste. Exile it at the beginning of the next end step. mana={2}{R}{R} type=Enchantment @@ -43198,6 +43380,18 @@ mana={1}{U}{B} type=Sorcery [/card] [card] +name=Notion Thief +abilities=flash +auto=@drawfoeof(player) restriction{opponentturnonly,compare(odrewcount)~morethan~1}:name(You draw instead) transforms((,newability[all(*[zpos=type:*:opponenthand]|opponenthand) moveto(ownerlibrary)],newability[draw:1 controller])) oneshot +auto=@drawfoeof(player) restriction{myturnonly}:name(You draw instead) transforms((,newability[all(*[zpos=type:*:opponenthand]|opponenthand) moveto(ownerlibrary)],newability[draw:1 controller])) oneshot +text=Flash -- If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card. +mana={2}{U}{B} +type=Creature +subtype=Human Rogue +power=3 +toughness=1 +[/card] +[card] name=Novellamental abilities=flying,cloud text=Flying -- Novellamental can block only creatures with flying. @@ -46639,7 +46833,7 @@ type=Sorcery [/card] [card] name=Planebound Accomplice -auto={R}:may moveto(myBattlefield) target(planeswalker|myHand) && treason +auto={R}:may name(Put planeswalker in play) target(planeswalker|myHand) moveto(myBattlefield) and!( transforms((,newability[treason])) ueot )! text={R}: You may put a planeswalker card from your hand onto the battlefield. Sacrifice it at the beginning of the next end step. mana={2}{R} type=Creature @@ -47009,7 +47203,7 @@ toughness=3 [card] name=Postmortem Lunge other={X}{L:2} name(Pay with 2 life) -auto=target(creature[manacost=X]|mygraveyard) moveto(mybattlefield) && transforms((,treson,haste)) forever +auto=target(creature[manacost=X]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[unearth],newability[haste])) forever )! text=({PB} can be paid with either {B} or 2 life.) -- Return target creature card with converted mana cost X from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step. mana={X}{B} type=Sorcery @@ -48062,6 +48256,15 @@ type=Enchantment subtype=Aura [/card] [card] +name=Psychic Intrusion +auto=if type(*[-land]|opponentgraveyard)~morethan~0 then name(Exile non land card) name(Exile non land card) target(*[-land]|opponenthand,opponentgraveyard) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever )! +auto=if type(*[-land]|opponentgraveyard)~equalto~0 then if type(*[-land]|opponenthand)~morethan~0 then name(Exile non land card) name(Exile non land card) name(Exile non land card) target(*[-land]|opponenthand) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever )! +auto=if type(*[-land]|opponentgraveyard)~equalto~0 then if type(*[-land]|opponenthand)~equalto~0 then name(Look opponent hand) name(Look opponent hand) name(Look opponent hand) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) )! +text=Target opponent reveals his or her hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. +mana={3}{U}{B} +type=Sorcery +[/card] +[card] name=Psychic Miasma auto=ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject and!( if cantargetcard(*[land]|*) then target(Psychic Miasma|opponentgraveyard) moveto(ownerhand) )! !$ opponent text=Target player discards a card. If a land card is discarded this way, return Psychic Miasma to its owner's hand. @@ -48069,6 +48272,14 @@ mana={1}{B} type=Sorcery [/card] [card] +name=Psychic Surgery +aicode=activate target(*[zpos<=2]|opponentlibrary) moveto(ownerexile) +auto=@shuffledfoeof(player):may name(Look top 2) reveal:2 revealzone(opponentlibrary) optionone name(Put in exile) target(*|reveal) moveto(ownerexile) optiononeend optiontwo name(put back) target(<2>*|reveal) moveto(ownerlibrary) optiontwoend revealend +text=Whenever an opponent shuffles his or her library, you may look at the top two cards of that library. You may exile one of those cards. Then put the rest on top of that library in any order. +mana={1}{U} +type=Enchantment +[/card] +[card] name=Psychic Symbiont abilities=flying auto=target(opponent) ability$!name(discard) reject notatarget(*|myhand)!$ && draw:1 @@ -48087,6 +48298,14 @@ mana={4}{U} type=Sorcery [/card] [card] +name=Psychogenic Probe +auto=@shuffledfoeof(player):name(Deal 2 damage) damage:2 opponent +auto=@shuffledof(player):name(Deal 2 damage) damage:2 controller +text=Whenever a spell or ability causes a player to shuffle his or her library, Psychogenic Probe deals 2 damage to him or her. +mana={2} +type=Artifact +[/card] +[card] name=Psychotic Episode abilities=madness auto=if type(*|opponenthand)~morethan~0 then choice name(Look opponent's hand) target(*|opponenthand) bottomoflibrary @@ -48196,7 +48415,8 @@ abilities=indestructible auto=this(variable{type:manar}<5) transforms((removetypes,newability[becomes(Legendary Enchantment God)])) auto=this(variable{type:manar}>4) transforms((Legendary Enchantment Creature)) auto=lord(other creature|myBattlefield) haste -auto={2}{R}:may moveto(mybattlefield) target(creature,artifact|myhand) && transforms((,treason)) oneshot +auto={2}{R}:name(Put red creature in play) target(creature[red]|myhand) moveto(mybattlefield) and!( transforms((,newability[treason])) ueot )! +auto={2}{R}:name(Put artifact creature in play) target(creature[artifact]|myhand) moveto(mybattlefield) and!( transforms((,newability[treason])) ueot )! text=Indestructible -- As long as your devotion to red is less than five, Purphoros isn’t a creature. -- Other creatures you control have haste. -- {2}{R}: You may put a red creature card or an artifact creature card from your hand onto the battlefield. Sacrifice it at the beginning of the next end step. mana={4}{R} type=Legendary Enchantment Creature @@ -48329,6 +48549,14 @@ mana={4}{R}{R} type=Instant [/card] [card] +name=Pyromancer Ascension +auto=@movedto(*[instant;sorcery]|mystack) restriction{type(*[instant;sorcery]|mygraveyard)~morethan~0}:all(trigger[to]) transforms((,newability[if type(*[share!name!]|mygraveyard)~morethan~0 then may name(Put quest counter) target(Pyromancer Ascension|myBattlefield) counter(0/0.1.quest)])) oneshot +auto=@movedto(*[instant;sorcery]|mystack) restriction{compare(hascntquest)~morethan~1}:may name(Copy spell) all(trigger[to]) activate castcard(noevent copied) +text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. +mana={1}{R} +type=Enchantment +[/card] +[card] name=Pyromancer's Gauntlet auto=@damaged(*|opponentBattlefield) from(instant[red]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot auto=@damaged(*|opponentBattlefield) from(sorcery[red]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot @@ -51312,6 +51540,17 @@ power=2 toughness=3 [/card] [card] +name=Ricochet Trap +target=*[instant;sorcery]|stack +other={R} name(Opponent casted blue spell) +otherrestriction=thisturn(*[blue]|opponentstack)~morethan~0 +auto=fizzle && activate castcard(copied noevent costx!:mytargx:! kicked!:mytargkicked:!) +text=If an opponent cast a blue spell this turn, you may pay {R} rather than pay Ricochet Trap's mana cost. -- Change the target of target spell with a single target. +mana={3}{R} +type=Instant +subtype=Trap +[/card] +[card] name=Riddleform aicode=activate transforms((,newability[all(*[zpos<=1]|mylibrary) transforms((,newability[may name(Put on bottom of library) moveto(myreveal) and!( bottomoflibrary )!])) oneshot])) oneshot auto=@movedTo(*[-creature]|mystack):may transforms((Sphinx Creature,setpower=3,settoughness=3,flying)) ueot @@ -51527,26 +51766,26 @@ type=Artifact [/card] [card] name=Rionya, Fire Dancer -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~1}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~2}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~3}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~4}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~5}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~6}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~7}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~8}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~9}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~10}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~11}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~12}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~13}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~14}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~15}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~16}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~17}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~18}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~19}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot -auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~morethan~19}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)],newability[clone with(treason^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~1}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~2}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~3}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~4}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~5}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~6}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~7}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~8}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~9}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~10}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~11}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~12}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~13}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~14}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~15}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~16}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~17}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~18}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~equalto~19}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot +auto=@each my combatbegins restriction{thisturn(*[instant;sorcery]|mystack)~morethan~19}:name(Copy creature) target(other creature|mybattlefield) transforms((,newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)],newability[clone with(unearth^haste)])) oneshot text=At the beginning of combat on your turn, create X tokens that are copies of another target creature you control, where X is one plus the number of instant and sorcery spells you've cast this turn. They gain haste. Exile them at the beginning of the next end step. mana={3}{R}{R} type=Legendary Creature @@ -52699,6 +52938,32 @@ mana={R}{R}{W}{W}{W}{B}{B} type=Sorcery [/card] [card] +name=Rumbling Aftershocks +auto=@movedTo(*[kicked=1]|myStack):may name(Deal 1 damage) target(creature) damage:1 +auto=@movedTo(*[kicked=2]|myStack):may name(Deal 2 damage) target(creature) damage:2 +auto=@movedTo(*[kicked=3]|myStack):may name(Deal 3 damage) target(creature) damage:3 +auto=@movedTo(*[kicked=4]|myStack):may name(Deal 4 damage) target(creature) damage:4 +auto=@movedTo(*[kicked=5]|myStack):may name(Deal 5 damage) target(creature) damage:5 +auto=@movedTo(*[kicked=6]|myStack):may name(Deal 6 damage) target(creature) damage:6 +auto=@movedTo(*[kicked=7]|myStack):may name(Deal 7 damage) target(creature) damage:7 +auto=@movedTo(*[kicked=8]|myStack):may name(Deal 8 damage) target(creature) damage:8 +auto=@movedTo(*[kicked=9]|myStack):may name(Deal 9 damage) target(creature) damage:9 +auto=@movedTo(*[kicked=10]|myStack):may name(Deal 10 damage) target(creature) damage:10 +auto=@movedTo(*[kicked=11]|myStack):may name(Deal 11 damage) target(creature) damage:11 +auto=@movedTo(*[kicked=12]|myStack):may name(Deal 12 damage) target(creature) damage:12 +auto=@movedTo(*[kicked=13]|myStack):may name(Deal 13 damage) target(creature) damage:13 +auto=@movedTo(*[kicked=14]|myStack):may name(Deal 14 damage) target(creature) damage:14 +auto=@movedTo(*[kicked=15]|myStack):may name(Deal 15 damage) target(creature) damage:15 +auto=@movedTo(*[kicked=16]|myStack):may name(Deal 16 damage) target(creature) damage:16 +auto=@movedTo(*[kicked=17]|myStack):may name(Deal 17 damage) target(creature) damage:17 +auto=@movedTo(*[kicked=18]|myStack):may name(Deal 18 damage) target(creature) damage:18 +auto=@movedTo(*[kicked=19]|myStack):may name(Deal 19 damage) target(creature) damage:19 +auto=@movedTo(*[kicked>=20]|myStack):may name(Deal 20 damage) target(creature) damage:20 +text=Whenever you cast a kicked spell, you may have Rumbling Aftershocks deal damage to target creature or player equal to the number of times that spell was kicked. +mana={4}{R} +type=Enchantment +[/card] +[card] name=Rumbling Rockslide target=creature auto=damage:type:land:myBattlefield @@ -55871,7 +56136,7 @@ toughness=4 [card] name=Shallow Grave target=creature|mygraveyard -auto=moveTo(mybattlefield) && transforms((,newability[phaseaction[endofturn once] moveTo(exile)],haste)) ueot +auto=moveTo(mybattlefield) && transforms((,newability[unearth],newability[haste])) ueot text=Return the top creature card of your graveyard to the battlefield. That creature gains haste until end of turn. Exile it at the beginning of the next end step. mana={1}{B} type=Instant @@ -56296,7 +56561,7 @@ subtype=Aura [/card] [card] name=Shifty Doppelganger -auto={3}{U}{E}:target(creature|myhand) moveto(mybattlefield) and!(transforms((,newability[treason],newability[haste],newability[moveto(mybattlefield) target(Shifty Doppelganger[fresh]|myexile)])) ueot)! +auto={3}{U}{E}:target(creature|myhand) moveto(mybattlefield) and!( transforms((,newability[treason],newability[haste],newability[moveto(mybattlefield) target(Shifty Doppelganger[fresh]|myexile)])) ueot )! text={3}{U}, Exile Shifty Doppelganger: You may put a creature card from your hand onto the battlefield. If you do, that creature gains haste until end of turn. At the beginning of the next end step, sacrifice that creature. If you do, return Shifty Doppelganger to the battlefield. mana={2}{U} type=Creature @@ -57014,6 +57279,24 @@ power=2 toughness=1 [/card] [card] +name=Silumgar's Command +auto=if type(*[-creature]|opponentstack)~morethan~0 then choice name(Counter opponent spell and return permanent) name(Counter opponent spell and return permanent) target(*[-creature]|opponentstack) transforms((,newability[fizzle],newability[ability$!name(Return permanent) name(Return permanent) target(*|battlefield) moveto(ownerhand)!$ opponent])) oneshot +auto=if type(other *[-creature]|mystack)~morethan~0 then choice name(Counter your spell and return permanent) name(Counter your spell and return permanent) target(*[-creature]|mystack) transforms((,newability[fizzle],newability[ability$!name(Return permanent) name(Return permanent) target(*|battlefield) moveto(ownerhand)!$ controller])) oneshot +auto=if type(*[-creature]|opponentstack)~morethan~0 then choice name(Counter opponent spell and creature gets -3/-3) name(Counter opponent spell and creature gets -3/-3) target(*[-creature]|opponentstack) transforms((,newability[fizzle],newability[ability$!name(Creature gets -3/-3) name(Creature gets -3/-3) target(creature|battlefield) -3/-3 ueot!$ opponent])) oneshot +auto=if type(other *[-creature]|mystack)~morethan~0 then choice name(Counter your spell and and creature gets -3/-3) name(Counter your spell and and creature gets -3/-3) target(*[-creature]|mystack) transforms((,newability[fizzle],newability[ability$!name(Creature gets -3/-3) name(Creature gets -3/-3) target(creature|battlefield) -3/-3 ueot!$ controller])) oneshot +auto=if type(*[-creature]|opponentstack)~morethan~0 then choice name(Counter opponent spell and destroy planeswalker) name(Counter opponent spell and destroy planeswalker) target(*[-creature]|opponentstack) transforms((,newability[fizzle],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ opponent])) oneshot +auto=if type(other *[-creature]|mystack)~morethan~0 then choice name(Counter your spell and destroy planeswalker) name(Counter your spell and destroy planeswalker) target(*[-creature]|mystack) transforms((,newability[fizzle],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ controller])) oneshot +auto=if type(*|opponentbattlefield)~morethan~0 then choice name(Return opponent permanent and creature gets -3/-3) name(Return opponent permanent and creature gets -3/-3) target(*|opponentbattlefield) transforms((,newability[moveto(ownerhand)],newability[ability$!name(Creature gets -3/-3) name(Creature gets -3/-3) target(creature|battlefield) -3/-3 ueot!$ opponent])) oneshot +auto=if type(*|mybattlefield)~morethan~0 then choice name(Return your permanent and creature gets -3/-3) name(Return your permanent and creature gets -3/-3) target(*|mybattlefield) transforms((,newability[moveto(ownerhand)],newability[ability$!name(Creature gets -3/-3) name(Creature gets -3/-3) target(creature|battlefield) -3/-3 ueot!$ controller])) oneshot +auto=if type(*|opponentbattlefield)~morethan~0 then choice name(Return opponent permanent and destroy planeswalker) name(Return opponent permanent and destroy planeswalker) target(*|opponentbattlefield) transforms((,newability[moveto(ownerhand)],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ opponent])) oneshot +auto=if type(*|mybattlefield)~morethan~0 then choice name(Return your permanent and destroy planeswalker) name(Return your permanent and destroy planeswalker) target(*|mybattlefield) transforms((,newability[moveto(ownerhand)],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ controller])) oneshot +auto=if type(creature|opponentbattlefield)~morethan~0 then choice name(Opponent creature gets -3/-3 and destroy planeswalker) name(Opponent creature gets -3/-3 and destroy planeswalker) target(creature|opponentbattlefield) transforms((,newability[-3/-3 ueot],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ opponent])) oneshot +auto=if type(creature|mybattlefield)~morethan~0 then choice name(Your creature gets -3/-3 and destroy planeswalker) name(Your creature gets -3/-3 and destroy planeswalker) target(creature|mybattlefield) transforms((,newability[-3/-3 ueot],newability[ability$!name(Destroy planeswalker) name(Destroy planeswalker) target(planeswalker|battlefield) destroy!$ controller])) oneshot +text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. +mana={3}{U}{B} +type=Instant +[/card] +[card] name=Silumgar Scavenger abilities=flying auto=may name(Exploit) sacrifice target(creature|mybattlefield) && all(this) transforms((,newability[haste])) ueot @@ -58207,6 +58490,14 @@ mana={3}{W}{W} type=Sorcery [/card] [card] +name=Slaughter Games +abilities=nofizzle +auto=chooseanameopp name(Search that cards) target(creature[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland +text=Slaughter Games can't be countered by spells or abilities. -- Name a nonland card. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. +mana={2}{B}{R} +type=Sorcery +[/card] +[card] name=Slaughter the Strong auto=sacrifice all(creature[power>4]|mybattlefield) auto=ability$!name(Sacrifice) sacrifice all(creature[power>4]|mybattlefield)!$ opponent @@ -60864,6 +61155,15 @@ type=Enchantment subtype=Aura [/card] [card] +name=Stain the Mind +other={convoke} name(Convoke) +auto=choice name(Target opponent) ability$!chooseanameopp name(Search that cards) target(creature[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller +auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(creature[chosenname]|mygraveyard,mylibrary,myhand) moveto(exile) and!( shuffle controller )! chooseend nonland!$ controller +text=Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.) -- Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. +mana={4}{B} +type=Sorcery +[/card] +[card] name=Stalking Leonin auto={0}:name(reveal the opponent) this(counter{0/0.1.StalkingEffect}<1) name(reveal the opponent) transforms((,newability[name(Move to exile) name(Move to exile) target(creature[attacking]|opponentbattlefield) moveto(exile)],newability[counter(0/0.1.StalkingEffect)])) oneshot text=When Stalking Leonin enters the battlefield, secretly choose an opponent. -- Reveal the player you chose: Exile target creature that's attacking you if it's controlled by the chosen player. Activate this ability only once. @@ -61667,7 +61967,7 @@ toughness=3 [card] name=Storm Herald abilities=haste -auto=activate castcard(normal) target(aura|myGraveyard) and!(transforms((,newability[treason],newability[exiledeath])) forever)! +auto=activate castcard(normal) target(aura|myGraveyard) and!( transforms((,newability[unearth],newability[exiledeath])) forever )! text=Haste -- When Storm Herald enters the battlefield, return any number of Aura cards from your graveyard to the battlefield attached to creatures you control. Exile those Auras at the beginning of your next end step. If those Auras would leave the battlefield, exile them instead of putting them anywhere else. mana={2}{R} type=Creature @@ -62264,6 +62564,17 @@ mana={1}{W} type=Instant [/card] [card] +name=Summoning Trap +other={0} name(Creature was countered) +otherrestriction=thisturn(instant|opponentstack)~morethan~0,thisturn(creature|mystack)~morethan~0,type(creature[fresh]|mygraveyard)~morethan~0 +aicode=activate transforms((,newability[target(creature[zpos<=7]|mylibrary) moveto(mybattlefield)],newability[all(*[zpos<=7]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) oneshot +auto=name(Look top 7) reveal:7 optionone name(Get a creature) target(creature|reveal) moveto(mybattlefield) optiononeend optiontwo name(Put on bottom) target(<7>*|reveal) bottomoflibrary optiontwoend revealend +text=If a creature spell you cast this turn was countered by a spell or ability an opponent controlled, you may pay {0} rather than pay Summoning Trap's mana cost. -- Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in any order. +mana={4}{G}{G} +type=Instant +subtype=Trap +[/card] +[card] name=Sun Sentinel abilities=vigilance text=Vigilance (Attacking doesn't cause this creature to tap.) @@ -63709,6 +64020,54 @@ power=2 toughness=1 [/card] [card] +name=Tariff +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~0 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=0]|mybattlefield) transforms((,newability[pay[[{0}]] name(pay 0 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~0 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=0]|mybattlefield) transforms((,newability[pay[[{0}]] name(pay 0 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~1 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=1]|mybattlefield) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~1 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=1]|mybattlefield) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~2 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=2]|mybattlefield) transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~2 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=2]|mybattlefield) transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~3 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=3]|mybattlefield) transforms((,newability[pay[[{3}]] name(pay 3 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~3 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=3]|mybattlefield) transforms((,newability[pay[[{3}]] name(pay 3 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~4 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=4]|mybattlefield) transforms((,newability[pay[[{4}]] name(pay 4 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~4 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=4]|mybattlefield) transforms((,newability[pay[[{4}]] name(pay 4 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~5 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=5]|mybattlefield) transforms((,newability[pay[[{5}]] name(pay 5 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~5 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=5]|mybattlefield) transforms((,newability[pay[[{5}]] name(pay 5 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~6 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=6]|mybattlefield) transforms((,newability[pay[[{6}]] name(pay 6 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~6 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=6]|mybattlefield) transforms((,newability[pay[[{6}]] name(pay 6 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~7 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=7]|mybattlefield) transforms((,newability[pay[[{7}]] name(pay 7 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~7 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=7]|mybattlefield) transforms((,newability[pay[[{7}]] name(pay 7 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~8 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=8]|mybattlefield) transforms((,newability[pay[[{8}]] name(pay 8 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~8 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=8]|mybattlefield) transforms((,newability[pay[[{8}]] name(pay 8 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~9 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=9]|mybattlefield) transforms((,newability[pay[[{9}]] name(pay 9 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~9 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=9]|mybattlefield) transforms((,newability[pay[[{9}]] name(pay 9 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~10 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=10]|mybattlefield) transforms((,newability[pay[[{10}]] name(pay 10 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~10 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=10]|mybattlefield) transforms((,newability[pay[[{10}]] name(pay 10 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~11 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=11]|mybattlefield) transforms((,newability[pay[[{11}]] name(pay 11 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~11 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=11]|mybattlefield) transforms((,newability[pay[[{11}]] name(pay 11 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~12 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=12]|mybattlefield) transforms((,newability[pay[[{12}]] name(pay 12 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~12 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=12]|mybattlefield) transforms((,newability[pay[[{12}]] name(pay 12 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~13 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=13]|mybattlefield) transforms((,newability[pay[[{13}]] name(pay 13 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~13 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=13]|mybattlefield) transforms((,newability[pay[[{13}]] name(pay 13 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~14 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=14]|mybattlefield) transforms((,newability[pay[[{14}]] name(pay 14 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~14 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=14]|mybattlefield) transforms((,newability[pay[[{14}]] name(pay 14 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~15 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=15]|mybattlefield) transforms((,newability[pay[[{15}]] name(pay 15 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~15 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=15]|mybattlefield) transforms((,newability[pay[[{15}]] name(pay 15 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~16 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=16]|mybattlefield) transforms((,newability[pay[[{16}]] name(pay 16 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~16 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=16]|mybattlefield) transforms((,newability[pay[[{16}]] name(pay 16 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~17 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=17]|mybattlefield) transforms((,newability[pay[[{17}]] name(pay 17 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~17 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=17]|mybattlefield) transforms((,newability[pay[[{17}]] name(pay 17 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~18 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=18]|mybattlefield) transforms((,newability[pay[[{18}]] name(pay 18 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~18 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=18]|mybattlefield) transforms((,newability[pay[[{18}]] name(pay 18 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~equalto~19 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=19]|mybattlefield) transforms((,newability[pay[[{19}]] name(pay 19 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~equalto~19 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost=19]|mybattlefield) transforms((,newability[pay[[{19}]] name(pay 19 mana) donothing?sacrifice])) oneshot!$ controller +auto=if compare(convertedcost:highest:creature:opponentbattlefield)~morethan~19 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost>=20]|mybattlefield) transforms((,newability[pay[[{20}]] name(pay 20 mana) donothing?sacrifice])) oneshot!$ opponent +auto=if compare(convertedcost:highest:creature:mybattlefield)~morethan~19 then ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature[manacost>=20]|mybattlefield) transforms((,newability[pay[[{20}]] name(pay 20 mana) donothing?sacrifice])) oneshot!$ controller +text=Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two creatures a player controls are tied for highest cost, that player chooses one. +mana={1}{W} +type=Sorcery +[/card] +[card] name=Tasha's Hideous Laughter auto=all(*[zpos<=oppototalmana20]|opponentlibrary) moveto(exile) text=Each opponent exiles cards from the top of their library until that player has exiled cards with total mana value 20 or more. @@ -67788,26 +68147,26 @@ toughness=3 [card] name=Twinflame kicker=multi{2}{R} -auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature|myBattlefield) clone with(treason,haste) -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature|myBattlefield) clone with(treason,haste) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature|myBattlefield) clone with(unearth,haste) +auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature|myBattlefield) clone with(unearth,haste) text=Strive — Twinflame costs {2}{R} more to cast for each target beyond the first. -- Choose any number of target creatures you control. For each of them, put a token that's a copy of that creature onto the battlefield. Those tokens have haste. Exile them at the beginning of the next end step. mana={1}{R} type=Sorcery @@ -72788,8 +73147,19 @@ power=4 toughness=4 [/card] [card] +name=Wood Sage +aicode=activate target(<4>creature[chosenname;zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(mygraveyard) )! +auto={T}:name(Name a creature) ability$!chooseaname reveal:4 optionone name(Put named creatures in hand) name(Put named creatures in hand) target(<4>creature[chosenname]|reveal) moveto(myhand) optiononeend optiontwo name(Put in graveyard) target(<4>*|reveal) moveto(mygraveyard) optiontwoend revealend chooseend nonland!$ controller +text={T}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. +mana={G}{U} +type=Creature +subtype=Human Druid +power=1 +toughness=1 +[/card] +[card] name=Woodland Champion -auto=@movedTo(*[token]|myBattlefield) counter(1/1,1) +auto=@movedTo(*[token]|myBattlefield):counter(1/1) text=Whenever one or more tokens enter the battlefield under your control, put that many +1/+1 counters on Woodland Champion. mana={1}{G} type=Creature diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index bffa5bf05..9fb4e821c 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -360,13 +360,6 @@ power=5 toughness=4 [/card] [card] -name=Archive Trap -text=If an opponent searched his or her library this turn, you may pay {0} rather than pay Archive Trap's mana cost. -- Target opponent puts the top thirteen cards of his or her library into his or her graveyard. -mana={3}{U}{U} -type=Instant -subtype=Trap -[/card] -[card] name=Arcum's Whistle text={3}, {T}: Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That player may pay {X}, where X is that creature's converted mana cost. If he or she doesn't, the creature attacks this turn if able, and at the beginning of the next end step, destroy it if it didn't attack. Activate this ability only before attackers are declared. mana={3} @@ -1111,12 +1104,6 @@ power=5 toughness=5 [/card] [card] -name=Bosium Strip -text={3}, {T}: Until end of turn, if the top card of your graveyard is an instant or sorcery card, you may cast that card. If a card cast this way would be put into a graveyard this turn, exile it instead. -mana={3} -type=Artifact -[/card] -[card] name=Bosom Buddy text=Whenever you play a spell, you may gain ½ life for each word in that spell's name. mana={3}{W} @@ -1179,12 +1166,6 @@ mana={2}{U}{U} type=Sorcery [/card] [card] -name=Breathstealer's Crypt -text=If a player would draw a card, instead he or she draws a card and reveals it. If it's a creature card, that player discards it unless he or she pays 3 life. -mana={2}{U}{B} -type=Enchantment -[/card] -[card] name=Briarbridge Patrol text=Whenever Briarbridge Patrol deals damage to one or more creatures, investigate. (Put a colorless Clue artifact token onto the battlefield with "{2}, Sacrifice this artifact: Draw a card.") -- At the beginning of each end step, if you sacrificed three or more Clues this turn, you may put a creature card from your hand onto the battlefield. mana={3}{G} @@ -1832,13 +1813,6 @@ power=2 toughness=4 [/card] [card] -name=Cobra Trap -text=If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost. -- Put four 1/1 green Snake creature tokens onto the battlefield. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] name=Cocoon text=Enchant creature you control -- Enchanted creature doesn't untap during your untap step if Cocoon has a pupa counter on it. -- When Cocoon enters the battlefield, tap enchanted creature and put three pupa counters on Cocoon. -- At the beginning of your upkeep, remove a pupa counter from Cocoon. If you can't, sacrifice it, put a +1/+1 counter on enchanted creature, and that creature gains flying. (This effect lasts indefinitely.) mana={G} @@ -2009,13 +1983,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Corpse Dance -buyback={2}{B}{2} -text=Buyback {2} (You may pay an additional {2} as you cast this spell. If you do, put this card into your hand as it resolves.) -- Return the top creature card of your graveyard to the battlefield. That creature gains haste until end of turn. Exile it at the beginning of the next end step. -mana={2}{B} -type=Instant -[/card] -[card] name=Corpsejack Menace text=If one or more +1/+1 counters would be placed on a creature you control, twice that many +1/+1 counters are placed on it instead. mana={2}{B}{G} @@ -2040,15 +2007,6 @@ power=2 toughness=2 [/card] [card] -name=Cosi's Trickster -text=Whenever an opponent shuffles his or her library, you may put a +1/+1 counter on Cosi's Trickster. -mana={U} -type=Creature -subtype=Merfolk Wizard -power=1 -toughness=1 -[/card] -[card] name=Council Guardian text=Will of the council — When Council Guardian enters the battlefield, starting with you, each player votes for blue, black, red, or green. Council Guardian gains protection from each color with the most votes or tied for most votes. mana={5}{W} @@ -2134,13 +2092,6 @@ mana={4}{R}{G} type=Enchantment [/card] [card] -name=Cranial Extraction -text=Name a nonland card. Search target player's graveyard, hand, and library for all cards with that name and exile them. Then that player shuffles his or her library. -mana={3}{B} -type=Sorcery -subtype=Arcane -[/card] -[card] name=Crawlspace text=No more than two creatures can attack you each combat. mana={3} @@ -2798,12 +2749,6 @@ power=1 toughness=1 [/card] [card] -name=Doomsday -text=Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up. -mana={B}{B}{B} -type=Sorcery -[/card] -[card] name=Double Cross text=Choose another player. Look at that player's hand and choose one of those cards other than a basic land. He or she discards that card. At the beginning of the next game with the player, look at the player's hand and choose one of those cards other than a basic land. He or she discards that card. mana={3}{B}{B} @@ -3304,12 +3249,6 @@ mana={2}{B}{B} type=Sorcery [/card] [card] -name=Exclusion Ritual -text=Imprint — When Exclusion Ritual enters the battlefield, exile target nonland permanent. -- Players can't cast spells with the same name as the exiled card. -mana={4}{W}{W} -type=Enchantment -[/card] -[card] name=Experiment Kraj text=Experiment Kraj has all activated abilities of each other creature with a +1/+1 counter on it. -- {T}: Put a +1/+1 counter on target creature. mana={2}{G}{G}{U}{U} @@ -3570,12 +3509,6 @@ mana={1}{G} type=Instant [/card] [card] -name=Flaming Gambit -text=Flaming Gambit deals X damage to target player. That player may choose a creature he or she controls and have Flaming Gambit deal that damage to it instead. -- Flashback {X}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) -mana={X}{R} -type=Instant -[/card] -[card] name=Flaring Pain text=Damage can't be prevented this turn. -- Flashback {R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) mana={1}{R} @@ -3658,12 +3591,6 @@ mana={2}{G} type=Enchantment [/card] [card] -name=Forbidden Ritual -text=Sacrifice a nontoken permanent. If you do, target opponent loses 2 life unless he or she sacrifices a permanent or discards a card. You may repeat this process any number of times. -mana={2}{B}{B} -type=Sorcery -[/card] -[card] name=Force Bubble text=If damage would be dealt to you, put that many depletion counters on Force Bubble instead. -- When there are four or more depletion counters on Force Bubble, sacrifice it. -- At the beginning of each end step, remove all depletion counters from Force Bubble. mana={2}{W}{W} @@ -4284,15 +4211,6 @@ mana={5}{R}{R} type=Sorcery [/card] [card] -name=Goblin Grenadiers -text=Whenever Goblin Grenadiers attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature and target land. -mana={3}{R} -type=Creature -subtype=Goblin -power=2 -toughness=2 -[/card] -[card] name=Goblin Haberdasher text=Menace (This creature can't be blocked except by two or more creatures.) -- Other creatures you control wearing hats in their art have menace. mana={2}{R} @@ -4363,16 +4281,6 @@ mana={4} type=Artifact [/card] [card] -name=Gomazoa -abilities=defender,flying -text=Defender, flying -- {T}: Put Gomazoa and each creature it's blocking on top of their owners' libraries, then those players shuffle their libraries. -mana={2}{U} -type=Creature -subtype=Jellyfish -power=0 -toughness=3 -[/card] -[card] name=Goryo's Vengeance text=Return target legendary creature card from your graveyard to the battlefield. That creature gains haste. Exile it at the beginning of the next end step. -- Splice onto Arcane {2}{B} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) mana={1}{B} @@ -5572,15 +5480,6 @@ power=3 toughness=2 [/card] [card] -name=Kalitas, Bloodchief of Ghet -text={B}{B}{B}, {T}: Destroy target creature. If that creature dies this way, put a black Vampire creature token onto the battlefield. Its power is equal to that creature's power and its toughness is equal to that creature's toughness. -mana={5}{B}{B} -type=Legendary Creature -subtype=Vampire Warrior -power=5 -toughness=5 -[/card] -[card] name=Kamahl's Summons text=Each player may reveal any number of creature cards from his or her hand. Then each player puts a 2/2 green Bear creature token onto the battlefield for each card he or she revealed this way. mana={3}{G} @@ -6686,21 +6585,6 @@ mana={4}{R} type=Instant [/card] [card] -name=Meletis Charlatan -text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. -mana={2}{U} -type=Creature -subtype=Human Wizard -power=2 -toughness=3 -[/card] -[card] -name=Memoricide -text=Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={3}{B} -type=Sorcery -[/card] -[card] name=Memory Crystal text=Buyback costs cost {2} less. mana={3} @@ -6731,15 +6615,6 @@ power=3 toughness=3 [/card] [card] -name=Merieke Ri Berit -text=Merieke Ri Berit doesn't untap during your untap step. -- {T}: Gain control of target creature for as long as you control Merieke Ri Berit. When Merieke Ri Berit leaves the battlefield or becomes untapped, destroy that creature. It can't be regenerated. -mana={W}{U}{B} -type=Legendary Creature -subtype=Human -power=1 -toughness=1 -[/card] -[card] name=Merseine text=Enchant creature -- Merseine enters the battlefield with three net counters on it. -- Enchanted creature doesn't untap during its controller's untap step if Merseine has a net counter on it. -- Pay enchanted creature's mana cost: Remove a net counter from Merseine. Any player may activate this ability, but only if he or she controls the enchanted creature. mana={2}{U}{U} @@ -6848,13 +6723,6 @@ mana={5}{R} type=Sorcery [/card] [card] -name=Mindbreak Trap -text=If an opponent cast three or more spells this turn, you may pay {0} rather than pay Mindbreak Trap's mana cost. -- Exile any number of target spells. -mana={2}{U}{U} -type=Instant -subtype=Trap -[/card] -[card] name=Mindlock Orb text=Players can't search libraries. mana={3}{U} @@ -7607,16 +7475,6 @@ text=(An ongoing scheme remains face up until it's abandoned.) -- If a source an type=Ongoing Scheme [/card] [card] -name=Notion Thief -abilities=flash -text=Flash -- If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card. -mana={2}{U}{B} -type=Creature -subtype=Human Rogue -power=3 -toughness=1 -[/card] -[card] name=Nova Pentacle text={3}, {T}: The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead. mana={4} @@ -8559,12 +8417,6 @@ mana={3}{U}{U} type=Enchantment [/card] [card] -name=Psychic Intrusion -text=Target opponent reveals his or her hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. -mana={3}{U}{B} -type=Sorcery -[/card] -[card] name=Psychic Network text=Each player reveals the top card of his or her library to all other players by continuously holding it against his or her forehead. This does not allow a player to look at his or her own card. (That card still counts as the top card of your library. Whenever you draw a card, draw that one and replace it with the next card of your library.) mana={U} @@ -8584,24 +8436,12 @@ mana={1}{U} type=Instant [/card] [card] -name=Psychic Surgery -text=Whenever an opponent shuffles his or her library, you may look at the top two cards of that library. You may exile one of those cards. Then put the rest on top of that library in any order. -mana={1}{U} -type=Enchantment -[/card] -[card] name=Psychic Theft text=Target player reveals his or her hand. You choose an instant or sorcery card from it and exile that card. You may cast that card for as long as it remains exiled. At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand. mana={1}{U} type=Sorcery [/card] [card] -name=Psychogenic Probe -text=Whenever a spell or ability causes a player to shuffle his or her library, Psychogenic Probe deals 2 damage to him or her. -mana={2} -type=Artifact -[/card] -[card] name=Puca's Mischief text=At the beginning of your upkeep, you may exchange control of target nonland permanent you control and target nonland permanent an opponent controls with an equal or lesser converted mana cost. mana={3}{U} @@ -8677,12 +8517,6 @@ power=0 toughness=0 [/card] [card] -name=Pyromancer Ascension -text=Whenever you cast an instant or sorcery spell that has the same name as a card in your graveyard, you may put a quest counter on Pyromancer Ascension. -- Whenever you cast an instant or sorcery spell while Pyromancer Ascension has two or more quest counters on it, you may copy that spell. You may choose new targets for the copy. -mana={1}{R} -type=Enchantment -[/card] -[card] name=Question Elemental? abilities=flying text=Flying -- Are you aware that when you say something that isn't a question, the player who first points out this fact gains control of Question Elemental? @@ -9093,13 +8927,6 @@ mana={R} type=Enchantment [/card] [card] -name=Ricochet Trap -text=If an opponent cast a blue spell this turn, you may pay {R} rather than pay Ricochet Trap's mana cost. -- Change the target of target spell with a single target. -mana={3}{R} -type=Instant -subtype=Trap -[/card] -[card] name=Riftsweeper text=When Riftsweeper enters the battlefield, choose target face-up exiled card. Its owner shuffles it into his or her library. mana={1}{G} @@ -9240,12 +9067,6 @@ power=1 toughness=1 [/card] [card] -name=Rumbling Aftershocks -text=Whenever you cast a kicked spell, you may have Rumbling Aftershocks deal damage to target creature or player equal to the number of times that spell was kicked. -mana={4}{R} -type=Enchantment -[/card] -[card] name=Runed Halo text=As Runed Halo enters the battlefield, name a card. -- You have protection from the chosen name. (You can't be targeted, dealt damage, or enchanted by anything with that name.) mana={W}{W} @@ -9894,12 +9715,6 @@ mana={1}{U} type=Instant [/card] [card] -name=Silumgar's Command -text=Choose two — -- • Counter target noncreature spell. -- • Return target permanent to its owner's hand. -- • Target creature gets -3/-3 until end of turn. -- • Destroy target planeswalker. -mana={3}{U}{B} -type=Instant -[/card] -[card] name=Silver Wyvern abilities=flying text=Flying -- {U}: Change the target of target spell or ability that targets only Silver Wyvern. The new target must be a creature. @@ -9995,12 +9810,6 @@ type=Plane subtype=Kaldheim [/card] [card] -name=Slaughter Games -text=Slaughter Games can't be countered by spells or abilities. -- Name a nonland card. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={2}{B}{R} -type=Sorcery -[/card] -[card] name=Slaying Mantis text=Just a second (As long as this spell is on the stack, players can't move cards on the battlefield.) -- Slaying Mantis enters the battlefield by being thrown from a distance of at least three feet. -- When Slaying Mantis enters the battlefield, it fights each creature an opponent controls that it touched as it entered. mana={5}{G}{G} @@ -10579,12 +10388,6 @@ mana={3} type=Artifact [/card] [card] -name=Stain the Mind -text=Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.) -- Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library. -mana={4}{B} -type=Sorcery -[/card] -[card] name=Stairs to Infinity text=Players have no maximum hand size. -- Whenever you roll the planar die, draw a card. -- Whenever you roll {K}, reveal the top card of your planar deck. You may put it on the bottom of your planar deck. type=Plane @@ -10923,13 +10726,6 @@ power=0 toughness=4 [/card] [card] -name=Summoning Trap -text=If a creature spell you cast this turn was countered by a spell or ability an opponent controlled, you may pay {0} rather than pay Summoning Trap's mana cost. -- Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in any order. -mana={4}{G}{G} -type=Instant -subtype=Trap -[/card] -[card] name=Suncleanser text=When Suncleanser enters the battlefield, choose one — -- • Remove all counters from target creature. It can't have counters put on it for as long as Suncleanser remains on the battlefield. -- • Target opponent loses all counters. That player can't get counters for as long as Suncleanser remains on the battlefield. mana={1}{W} @@ -11130,12 +10926,6 @@ type=Artifact subtype=Contraption [/card] [card] -name=Tariff -text=Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two creatures a player controls are tied for highest cost, that player chooses one. -mana={1}{W} -type=Sorcery -[/card] -[card] name=Tawnos's Coffin text=You may choose not to untap Tawnos's Coffin during your untap step. -- {3}, {T}: Exile target creature and all Auras attached to it. Note the number and kind of counters that were on that creature. When Tawnos's Coffin leaves the battlefield or becomes untapped, return the exiled card to the battlefield under its owner's control tapped with the noted number and kind of counters on it, and if you do, return the exiled Aura cards to the battlefield under their owner's control attached to that permanent. mana={4} @@ -12628,15 +12418,6 @@ power=3 toughness=3 [/card] [card] -name=Wood Sage -text={T}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. -mana={G}{U} -type=Creature -subtype=Human Druid -power=1 -toughness=1 -[/card] -[card] name=Woodland Guidance text=Return target card from your graveyard to your hand. Clash with an opponent. If you win, untap all Forests you control. (Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost.) -- Exile Woodland Guidance. mana={3}{G} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 47a4a65ff..c33a532f5 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -166,7 +166,7 @@ public: bool limitOnceATurn; int triggeredTurn; TrCardAddedToZone(GameObserver* observer, int id, MTGCardInstance * source, TargetZoneChooser * toTcZone, TargetChooser * toTcCard, - TargetZoneChooser * fromTcZone = NULL, TargetChooser * fromTcCard = NULL,bool once = false,bool sourceUntapped = false,bool isSuspended = false, bool limitOnceATurn = false) : + TargetZoneChooser * fromTcZone = NULL, TargetChooser * fromTcCard = NULL, bool once = false, bool sourceUntapped = false, bool isSuspended = false, bool limitOnceATurn = false) : Trigger(observer, id, source, once), toTcZone(toTcZone), fromTcZone(fromTcZone), toTcCard(toTcCard), fromTcCard(fromTcCard),sourceUntapped(sourceUntapped),isSuspended(isSuspended),limitOnceATurn(limitOnceATurn) { triggeredTurn = -1; @@ -368,11 +368,11 @@ public: bool attackBlockedTrigger; bool blockingTrigger; TrCombatTrigger(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,TargetChooser * fromTc = NULL, - bool once = false,bool limitOnceATurn = false,bool sourceUntapped = false,bool opponentPoisoned = false, - bool attackingTrigger = false,bool attackedAloneTrigger = false,bool notBlockedTrigger = false,bool attackBlockedTrigger = false,bool blockingTrigger = false) : - Trigger(observer, id, source,once, tc), fromTc(fromTc),limitOnceATurn(limitOnceATurn),sourceUntapped(sourceUntapped),opponentPoisoned(opponentPoisoned), - attackingTrigger(attackingTrigger),attackedAloneTrigger(attackedAloneTrigger),notBlockedTrigger(notBlockedTrigger), - attackBlockedTrigger(attackBlockedTrigger),blockingTrigger(blockingTrigger) + bool once = false, bool limitOnceATurn = false, bool sourceUntapped = false, bool opponentPoisoned = false, + bool attackingTrigger = false, bool attackedAloneTrigger = false, bool notBlockedTrigger = false, bool attackBlockedTrigger = false, bool blockingTrigger = false) : + Trigger(observer, id, source, once, tc), fromTc(fromTc), limitOnceATurn(limitOnceATurn), sourceUntapped(sourceUntapped), opponentPoisoned(opponentPoisoned), + attackingTrigger(attackingTrigger), attackedAloneTrigger(attackedAloneTrigger), notBlockedTrigger(notBlockedTrigger), + attackBlockedTrigger(attackBlockedTrigger), blockingTrigger(blockingTrigger) { triggeredTurn = -1; } @@ -471,11 +471,12 @@ public: return NEW TrCombatTrigger(*this); } }; + class TrplayerEnergized: public Trigger { public: bool thiscontroller, thisopponent; - TrplayerEnergized(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool thiscontroller = false, bool thisopponent = false) : + TrplayerEnergized(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false) : Trigger(observer, id, source,once, tc),thiscontroller(thiscontroller),thisopponent(thisopponent) { } @@ -499,11 +500,12 @@ public: return NEW TrplayerEnergized(*this); } }; + class TrplayerExperienced: public Trigger { public: bool thiscontroller, thisopponent; - TrplayerExperienced(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool thiscontroller = false, bool thisopponent = false) : + TrplayerExperienced(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false) : Trigger(observer, id, source,once, tc),thiscontroller(thiscontroller),thisopponent(thisopponent) { } @@ -527,12 +529,13 @@ public: return NEW TrplayerExperienced(*this); } }; + class TrplayerMonarch: public Trigger { public: bool thiscontroller, thisopponent; - TrplayerMonarch(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool thiscontroller = false, bool thisopponent = false) : - Trigger(observer, id, source,once, tc),thiscontroller(thiscontroller),thisopponent(thisopponent) + TrplayerMonarch(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false) : + Trigger(observer, id, source, once, tc), thiscontroller(thiscontroller), thisopponent(thisopponent) { } @@ -556,13 +559,42 @@ public: } }; +class TrplayerShuffled: public Trigger +{ +public: + bool thiscontroller, thisopponent; + TrplayerShuffled(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false) : + Trigger(observer, id, source, once, tc), thiscontroller(thiscontroller), thisopponent(thisopponent) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventplayerShuffled * e = dynamic_cast (event); + if (!e) return 0; + if (!tc->canTarget(e->player)) return 0; + if(thiscontroller) + if(e->player != source->controller()) + return 0; + if(thisopponent) + if(e->player == source->controller()) + return 0; + return 1; + } + + TrplayerShuffled * clone() const + { + return NEW TrplayerShuffled(*this); + } +}; + class TrcardDrawn: public Trigger { public: bool thiscontroller, thisopponent; bool limitOnceATurn; int triggeredTurn; - TrcardDrawn(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool thiscontroller = false, bool thisopponent = false, bool limitOnceATurn = false) : + TrcardDrawn(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),thiscontroller(thiscontroller),thisopponent(thisopponent),limitOnceATurn(limitOnceATurn) { triggeredTurn = -1; @@ -596,7 +628,7 @@ class TrCardMutated: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardMutated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardMutated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { triggeredTurn = -1; @@ -624,7 +656,7 @@ class TrCardExplored: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardExplored(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardExplored(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { } @@ -651,7 +683,7 @@ class TrCardBoasted: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardBoasted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardBoasted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { } @@ -678,7 +710,7 @@ class TrCardSurveiled: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardSurveiled(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardSurveiled(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { } @@ -705,7 +737,7 @@ class TrCardForetold: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardForetold(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardForetold(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { } @@ -732,7 +764,7 @@ class TrCardScryed: public Trigger public: bool limitOnceATurn; int triggeredTurn; - TrCardScryed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + TrCardScryed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) { } @@ -865,7 +897,7 @@ class TrTokenCreated: public Trigger { public: bool thiscontroller, thisopponent; - TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false) : + TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : Trigger(observer, id, source,once, tc) { } @@ -887,7 +919,7 @@ public: class TrCardSacrificed: public Trigger { public: - TrCardSacrificed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false) : + TrCardSacrificed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : Trigger(observer, id, source, once, tc) { } @@ -924,7 +956,7 @@ class TrCardDiscarded: public Trigger { public: bool cycledTrigger; - TrCardDiscarded(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool cycledTrigger = false) : + TrCardDiscarded(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool cycledTrigger = false) : Trigger(observer, id, source, once, tc),cycledTrigger(cycledTrigger) { } @@ -964,7 +996,7 @@ public: int triggeredTurn; bool thiscontroller; bool thisopponent; - TrDamaged(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false,bool limitOnceATurn = false,bool once = false, bool thiscontroller = false, bool thisopponent = false) : + TrDamaged(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0, bool sourceUntapped = false, bool limitOnceATurn = false, bool once = false, bool thiscontroller = false, bool thisopponent = false) : Trigger(observer, id, source, once, tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped),limitOnceATurn(limitOnceATurn),thiscontroller(thiscontroller),thisopponent(thisopponent) { triggeredTurn = -1; @@ -1024,7 +1056,7 @@ public: bool limitOnceATurn; int triggeredTurn; MTGCardInstance * gainException; //added exception to avid a gainlife loop (eg. Angels of Vitality) - TrLifeGained(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false,bool once = false, bool thiscontroller = false, bool thisopponent = false, bool limitOnceATurn = false, MTGCardInstance * gainException = NULL) : + TrLifeGained(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0, bool sourceUntapped = false, bool once = false, bool thiscontroller = false, bool thisopponent = false, bool limitOnceATurn = false, MTGCardInstance * gainException = NULL) : Trigger(observer, id, source, once , tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped), thiscontroller(thiscontroller), thisopponent(thisopponent), limitOnceATurn(limitOnceATurn), gainException(gainException) { triggeredTurn = -1; @@ -1073,7 +1105,7 @@ class TrVampired: public Trigger { public: TargetChooser * fromTc; - TrVampired(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL,bool once = false) : + TrVampired(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, bool once = false) : Trigger(observer, id, source, once, tc), fromTc(fromTc) { } @@ -1112,7 +1144,7 @@ class TrTargeted: public Trigger public: TargetChooser * fromTc; int type; - TrTargeted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool once = false) : + TrTargeted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0, bool once = false) : Trigger(observer, id, source, once, tc), fromTc(fromTc), type(type) { } @@ -1749,7 +1781,7 @@ public: string nbcardsStr; bool noReplace; AADrawer(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target, ManaCost * _cost,string nbcardsStr, int who = - TargetChooser::UNSET,bool noReplace = false); + TargetChooser::UNSET, bool noReplace = false); int resolve(); const string getMenuText(); AADrawer * clone() const; @@ -2216,7 +2248,7 @@ class ACantBeBlockerOf: public MTGAbility public: TargetChooser * fromTc; bool thisCard; - ACantBeBlockerOf(GameObserver* observer, int id, MTGCardInstance * _source, MTGCardInstance * _target, TargetChooser *fromTc,bool aThis) : + ACantBeBlockerOf(GameObserver* observer, int id, MTGCardInstance * _source, MTGCardInstance * _target, TargetChooser *fromTc, bool aThis) : MTGAbility(observer, id, _source, _target), fromTc(fromTc),thisCard(aThis) { @@ -2263,7 +2295,7 @@ public: string PT; bool nonstatic; bool cda; - APowerToughnessModifier(GameObserver* observer, int id, MTGCardInstance * _source, MTGCardInstance * _target, WParsedPT * wppt,string PT,bool nonstatic) : + APowerToughnessModifier(GameObserver* observer, int id, MTGCardInstance * _source, MTGCardInstance * _target, WParsedPT * wppt,string PT, bool nonstatic) : MTGAbility(observer, id, _source, _target), wppt(wppt),PT(PT),nonstatic(nonstatic) { aType = MTGAbility::STANDARD_PUMP; @@ -2676,7 +2708,7 @@ public: bool miniFound, maxiFound, compareZone; int amount[2]; AAsLongAs(GameObserver* observer, int _id, MTGCardInstance * _source, Damageable * _target, TargetChooser * _tc, int _includeSelf, - MTGAbility * ability, int mini = 0, int maxi = 0,bool miniFound = false,bool maxiFound = false,bool compareZone = false) : + MTGAbility * ability, int mini = 0, int maxi = 0, bool miniFound = false, bool maxiFound = false, bool compareZone = false) : ListMaintainerAbility(observer, _id, _source, _target), NestedAbility(ability), mini(mini), maxi(maxi),miniFound(miniFound),maxiFound(maxiFound),compareZone(compareZone) { for (int j = 0; j < 2; j++) @@ -3163,7 +3195,7 @@ public: string cID; //by id ATokenCreator(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable *, ManaCost * _cost, int tokenId,string starfound, WParsedInt * multiplier = NULL, - int who = 0,bool aLivingWeapon = false) : + int who = 0, bool aLivingWeapon = false) : ActivatedAbility(observer, _id, _source, _cost, 0), tokenId(tokenId), starfound(starfound),multiplier(multiplier), who(who),aLivingWeapon(aLivingWeapon) { if (!multiplier) this->multiplier = NEW WParsedInt(1); @@ -3188,8 +3220,8 @@ public: } //by construction ATokenCreator(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable *, ManaCost * _cost, string sname, string stypes, int _power, int _toughness, - string sabilities, string starfound,WParsedInt * multiplier = NULL, int _who = 0,bool aLivingWeapon = false,string spt = "", string tnum = "") : - ActivatedAbility(observer, _id, _source, _cost, 0),sabilities(sabilities),starfound(starfound), multiplier(multiplier), who(_who),aLivingWeapon(aLivingWeapon),spt(spt) + string sabilities, string starfound, WParsedInt * multiplier = NULL, int _who = 0, bool aLivingWeapon = false, string spt = "", string tnum = "") : + ActivatedAbility(observer, _id, _source, _cost, 0), sabilities(sabilities), starfound(starfound), multiplier(multiplier), who(_who), aLivingWeapon(aLivingWeapon), spt(spt) { power = _power; toughness = _toughness; @@ -4296,7 +4328,7 @@ bool retarget; bool reequip; bool newhook; int mutation; - AANewTarget(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,bool retarget = false, ManaCost * _cost = NULL, bool reequip = false, bool newhook = false, int mutation = 0); + AANewTarget(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, bool retarget = false, ManaCost * _cost = NULL, bool reequip = false, bool newhook = false, int mutation = 0); int resolve(); const string getMenuText(); AANewTarget * clone() const; @@ -4728,9 +4760,9 @@ public: bool UYNT; int myCurrentTurn; string menutext; //this overrides the previous. - ATransformer(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string stypes, string sabilities,string newpower,bool newpowerfound,string newtoughness,bool newtoughnessfound,vector newAbilitiesList,bool newAbilityFound = false,bool aForever = false ,bool UYNT = false,string menutext = ""); + ATransformer(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string stypes, string sabilities,string newpower, bool newpowerfound,string newtoughness, bool newtoughnessfound,vector newAbilitiesList, bool newAbilityFound = false, bool aForever = false , bool UYNT = false,string menutext = ""); int addToGame(); - int reapplyCountersBonus(MTGCardInstance * rtarget= NULL,bool powerapplied=false,bool toughnessapplied=false); + int reapplyCountersBonus(MTGCardInstance * rtarget= NULL, bool powerapplied=false, bool toughnessapplied=false); int testDestroy(); int destroy(); const string getMenuText(); @@ -4754,7 +4786,7 @@ public: bool UYNT; string menu; - ATransformerInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string types = "", string abilities = "",string newpower = "",bool newpowerfound = false,string newtoughness = "",bool newtoughnessfound = false,vectornewAbilitiesList = vector(),bool newAbilityFound = false,bool aForever = false, bool UYNT = false,string menutext = ""); + ATransformerInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, string types = "", string abilities = "",string newpower = "", bool newpowerfound = false, string newtoughness = "", bool newtoughnessfound = false, vectornewAbilitiesList = vector(), bool newAbilityFound = false, bool aForever = false, bool UYNT = false, string menutext = ""); int resolve(); const string getMenuText(); ATransformerInstant * clone() const; @@ -4770,7 +4802,7 @@ public: string s; bool nonstatic; WParsedPT * newWppt; - PTInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, WParsedPT * wppt,string s = "",bool nonstatic = false); + PTInstant(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * target, WParsedPT * wppt, string s = "", bool nonstatic = false); int resolve(); const string getMenuText(); PTInstant * clone() const; @@ -5003,7 +5035,7 @@ public: ManaCost * backupMana; AUpkeep(GameObserver* observer, int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, int restrictions = 0, int _phase = - MTG_PHASE_UPKEEP, int _once = 0,bool Cumulative = false); + MTG_PHASE_UPKEEP, int _once = 0, bool Cumulative = false); int receiveEvent(WEvent * event); void Update(float dt); int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL); @@ -5032,7 +5064,7 @@ public: Player * abilityOwner; APhaseAction(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * target, string sAbility, int restrictions = 0, int _phase = - MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = true,bool opponentturn = true,bool once = false, bool checkexile = false); + MTG_PHASE_UPKEEP, bool forcedestroy = false, bool next = true, bool myturn = true, bool opponentturn = true, bool once = false, bool checkexile = false); void Update(float dt); int resolve(); const string getMenuText(); @@ -5047,7 +5079,7 @@ public: string sAbility; APhaseAction * ability; APhaseActionGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * target, string sAbility, int restrictions = 0, int _phase = - MTG_PHASE_UPKEEP,bool forcedestroy = false,bool next = true,bool myturn = false,bool opponentturn = false,bool once = false,bool checkexile = false); + MTG_PHASE_UPKEEP, bool forcedestroy = false, bool next = true, bool myturn = false, bool opponentturn = false, bool once = false, bool checkexile = false); int resolve(); const string getMenuText(); APhaseActionGeneric * clone() const; @@ -5208,7 +5240,7 @@ public: bool blinkhand; ABlink * ability; MTGAbility * stored; - ABlinkGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target,bool blinkueot=false,bool blinkForSource = false,bool blinkhand = false,MTGAbility * stored = NULL); + ABlinkGeneric(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target, bool blinkueot=false, bool blinkForSource = false, bool blinkhand = false, MTGAbility * stored = NULL); int resolve(); const string getMenuText(); ABlinkGeneric * clone() const; @@ -6467,7 +6499,7 @@ public: int kicked; int costx; bool flipped; - AACastCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target,bool restricted,bool copied,bool _asNormal,string nameCard,string abilityName,bool _noEvent, bool putinplay,bool asNormalMadness = false,bool alternative = false,int kicked = 0,int costx = 0,bool flipped = false); + AACastCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, bool restricted, bool copied, bool _asNormal, string nameCard, string abilityName, bool _noEvent, bool putinplay, bool asNormalMadness = false, bool alternative = false, int kicked = 0, int costx = 0, bool flipped = false); int testDestroy(){return 0;}; void Update(float dt); @@ -6487,7 +6519,7 @@ class ASpiritLinkAbility: public MTGAbility public: MTGCardInstance * source; bool combatonly; - ASpiritLinkAbility(GameObserver* observer, int _id, MTGCardInstance * _source,bool combatonly = false) : + ASpiritLinkAbility(GameObserver* observer, int _id, MTGCardInstance * _source, bool combatonly = false) : MTGAbility(observer, _id, _source),source(_source),combatonly(combatonly) { } @@ -6631,7 +6663,7 @@ public: bool ANonWall; bool ANonBasicLand; bool ANonLand; - GenericChooseTypeColorName(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "", bool chooseColor = false,bool chooseName = false, bool chooseOppName = false, bool nonwall = false, bool nonbasicland = false, bool nonland = false, ManaCost * cost = NULL); + GenericChooseTypeColorName(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, string toAdd = "", bool chooseColor = false, bool chooseName = false, bool chooseOppName = false, bool nonwall = false, bool nonbasicland = false, bool nonland = false, ManaCost * cost = NULL); int resolve(); const string getMenuText(); GenericChooseTypeColorName * clone() const; diff --git a/projects/mtg/include/Player.h b/projects/mtg/include/Player.h index 9eaee946f..04d82fcf5 100644 --- a/projects/mtg/include/Player.h +++ b/projects/mtg/include/Player.h @@ -50,6 +50,7 @@ public: int monarch; int surveilOffset; int devotionOffset; + int lastShuffleTurn; int epic; int forcefield; int dealsdamagebycombat; diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index adeb78421..332a980be 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -369,6 +369,14 @@ struct WEventplayerMonarch : public WEvent { virtual Targetable * getTarget(Player * player); }; +//shuffle event +struct WEventplayerShuffled : public WEvent { + WEventplayerShuffled(Player * player); + Player * player; + using WEvent::getTarget; + virtual Targetable * getTarget(Player * player); +}; + //boast event struct WEventCardBoasted : public WEventCardUpdate { WEventCardBoasted(MTGCardInstance * card); diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 029ed17ef..26910dd9d 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1194,35 +1194,43 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell //energized player - controller of card if (TargetChooser * tc = parseSimpleTC(s, "energizedof", card)) - return NEW TrplayerEnergized(observer, id, card, tc,once,true,false); + return NEW TrplayerEnergized(observer, id, card, tc, once, true, false); //energized player - opponent of card controller if (TargetChooser * tc = parseSimpleTC(s, "energizedfoeof", card)) - return NEW TrplayerEnergized(observer, id, card, tc,once,false,true); + return NEW TrplayerEnergized(observer, id, card, tc, once, false, true); //experienced player - controller of card if (TargetChooser * tc = parseSimpleTC(s, "experiencedof", card)) - return NEW TrplayerExperienced(observer, id, card, tc,once,true,false); + return NEW TrplayerExperienced(observer, id, card, tc, once, true, false); //experienced player - opponent of card controller if (TargetChooser * tc = parseSimpleTC(s, "experiencedfoeof", card)) - return NEW TrplayerExperienced(observer, id, card, tc,once,false,true); + return NEW TrplayerExperienced(observer, id, card, tc, once, false, true); //becomes monarch - controller of card if (TargetChooser * tc = parseSimpleTC(s, "becomesmonarchof", card)) - return NEW TrplayerMonarch(observer, id, card, tc,once,true,false); + return NEW TrplayerMonarch(observer, id, card, tc, once, true, false); //becomes monarch - opponent of card controller if (TargetChooser * tc = parseSimpleTC(s, "becomesmonarchfoeof", card)) - return NEW TrplayerMonarch(observer, id, card, tc,once,false,true); + return NEW TrplayerMonarch(observer, id, card, tc, once, false, true); + + //shuffled library - controller of card + if (TargetChooser * tc = parseSimpleTC(s, "shuffledof", card)) + return NEW TrplayerShuffled(observer, id, card, tc, once, true, false); + + //shuffled library - opponent of card controller + if (TargetChooser * tc = parseSimpleTC(s, "shuffledfoeof", card)) + return NEW TrplayerShuffled(observer, id, card, tc, once, false, true); //drawn player - controller of card - dynamic version drawof(player) -> returns current controller even with exchange of card controller if (TargetChooser * tc = parseSimpleTC(s, "drawof", card)) - return NEW TrcardDrawn(observer, id, card, tc,once,true,false,limitOnceATurn); + return NEW TrcardDrawn(observer, id, card, tc, once, true, false, limitOnceATurn); //drawn player - opponent of card controller - dynamic version drawfoeof(player) -> returns current opponent even with exchange of card controller if (TargetChooser * tc = parseSimpleTC(s, "drawfoeof", card)) - return NEW TrcardDrawn(observer, id, card, tc,once,false,true,limitOnceATurn); + return NEW TrcardDrawn(observer, id, card, tc, once, false, true, limitOnceATurn); //Card card is drawn - static version - drawn(player) - any player; drawn(controller) - owner forever; drawn(opponent) - opponent forever if (TargetChooser * tc = parseSimpleTC(s, "drawn", card)) @@ -7166,7 +7174,7 @@ ostream& ListMaintainerAbility::toString(ostream& out) const return MTGAbility::toString(out) << ")"; } -TriggerAtPhase::TriggerAtPhase(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who, bool sourceUntapped, bool sourceTap,bool lifelost,int lifeamount,bool once) : +TriggerAtPhase::TriggerAtPhase(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who, bool sourceUntapped, bool sourceTap, bool lifelost, int lifeamount, bool once) : TriggeredAbility(observer, id, source, target), phaseId(_phaseId), who(who), sourceUntapped(sourceUntapped), sourceTap(sourceTap),lifelost(lifelost),lifeamount(lifeamount),once(once) { activeTrigger = true; @@ -7252,7 +7260,7 @@ TriggerAtPhase* TriggerAtPhase::clone() const return NEW TriggerAtPhase(*this); } -TriggerNextPhase::TriggerNextPhase(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who,bool sourceUntapped, bool sourceTap,bool once) : +TriggerNextPhase::TriggerNextPhase(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who, bool sourceUntapped, bool sourceTap, bool once) : TriggerAtPhase(observer, id, source, target, _phaseId, who, sourceUntapped, sourceTap, once) { destroyActivated = 0; @@ -7277,7 +7285,7 @@ TriggerNextPhase* TriggerNextPhase::clone() const return NEW TriggerNextPhase(*this); } -TriggerRebound::TriggerRebound(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who,bool sourceUntapped, bool sourceTap,bool once) : +TriggerRebound::TriggerRebound(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, int _phaseId, int who, bool sourceUntapped, bool sourceTap, bool once) : TriggerAtPhase(observer, id, source, target, _phaseId, who, sourceUntapped, sourceTap, once) { destroyActivated = 0; @@ -7441,7 +7449,7 @@ GenericTriggeredAbility* GenericTriggeredAbility::clone() const */ AManaProducer::AManaProducer(GameObserver* observer, int id, MTGCardInstance * card, Targetable * t, ManaCost * _output, ManaCost * _cost, - int who,string producing,bool doesntEmpty) : + int who,string producing, bool doesntEmpty) : ActivatedAbilityTP(observer, id, card, t, _cost, who) { diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index 92577e8d2..fabb1d4e6 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -1197,6 +1197,11 @@ void MTGGameZone::cleanupPhase() void MTGGameZone::shuffle() { owner->getObserver()->getRandomGenerator()->random_shuffle(cards.begin(), cards.end()); + if(this == owner->game->library){ + owner->lastShuffleTurn = owner->getObserver()->turn; + WEvent * e = NEW WEventplayerShuffled(owner); //Added to trigger an event when a player shuffles his/her library. + owner->getObserver()->receiveEvent(e); + } } void MTGGameZone::addCard(MTGCardInstance * card) diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index ae9f0aa2c..c5583a51e 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -42,6 +42,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck * monarch = 0; surveilOffset = 0; devotionOffset = 0; + lastShuffleTurn = -1; epic = 0; forcefield = 0; dealsdamagebycombat = 0; diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index 28c3fabc6..fcef56d12 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -297,6 +297,11 @@ WEventplayerMonarch::WEventplayerMonarch(Player * player) : { } +WEventplayerShuffled::WEventplayerShuffled(Player * player) : + player(player) +{ +} + WEventCardBoasted::WEventCardBoasted(MTGCardInstance * card) : WEventCardUpdate(card) { @@ -622,6 +627,12 @@ Targetable * WEventplayerMonarch::getTarget(Player * player) return NULL; } +Targetable * WEventplayerShuffled::getTarget(Player * player) +{ + if (player) return player; + return NULL; +} + std::ostream& WEvent::toString(std::ostream& out) const { return out << "EVENT"; diff --git a/projects/mtg/src/WParsedInt.cpp b/projects/mtg/src/WParsedInt.cpp index f04fd8c9c..65230842f 100644 --- a/projects/mtg/src/WParsedInt.cpp +++ b/projects/mtg/src/WParsedInt.cpp @@ -1303,6 +1303,10 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card) { intValue = (s == "pexperience")?card->controller()->experienceCount:card->controller()->opponent()->experienceCount; } + else if (s == "plastshlturn" || s == "olastshlturn") + { + intValue = (s == "plastshlturn")?card->controller()->lastShuffleTurn:card->controller()->opponent()->lastShuffleTurn; + } else if(!intValue)//found nothing, try parsing a atoi { intValue = atoi(s.c_str());