diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b1cb389d..c7bb576b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) +### 02/09/21 +- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, fixed several crash on Commander Format, fixed a possible crash using "and!()!" with "imprint", added a new macros "_REBOUND_" and "_GOAD_" related to rebound and goad abilities and refactored all cards using them, implemented a new keywords "haunt", "hasprey", "preyname" and "isprey" related the haunting ability and improved all cards using it, Added "commander" and "\*" to HINT castpriority for AI decks in order to allow the user to give a cast priority to commanders. ([Vitty85](https://github.com/Vitty85)) + ### 31/08/21 -- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, improved all cards with replicate (now they use a special version of multikicker but they don't count as kicked spell), improved all cards with "fizzle" and "fizzleto" ability and improved engine for "fizzle" and "nofizzle" ability (e.g. now it's possible to grant a card the nofizzle ability on stack), added new keyword "mycolnum" to count the number colors of a card. ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, improved all cards with replicate (now they use a special version of multikicker but they don't count as kicked spell), improved all cards with "fizzle" and "fizzleto" ability and improved engine for "fizzle" and "nofizzle" ability (e.g. now it's possible to grant a card the nofizzle ability on stack), added new keyword "mycolnum" to count the number colors of a card. https://github.com/WagicProject/wagic/commit/54d0c3203551b377146d4bbe7d5af0c642b1058e ([Vitty85](https://github.com/Vitty85)) ### 30/08/21 - *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. https://github.com/WagicProject/wagic/commit/45de20c8d3f0449e33286fad09b000a695b07c24 ([Vitty85](https://github.com/Vitty85)) 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 69b6a54b2..70a2572ec 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/A25.txt @@ -59,12 +59,6 @@ mana={2} type=Artifact [/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} -type=Enchantment -[/card] -[card] name=Gisela, Blade of Goldnight abilities=flying,first strike text=Flying, first strike -- If a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead. -- If a source would deal damage to you or a permanent you control, prevent half that damage, rounded up. diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ARN.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ARN.txt index 3c9450781..2b1b019d9 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ARN.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ARN.txt @@ -92,12 +92,6 @@ mana={2} type=Artifact [/card] [card] -name=Metamorphosis -text=As an additional cost to cast Metamorphosis, sacrifice a creature. -- Add X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells. -mana={G} -type=Sorcery -[/card] -[card] name=Nafs Asp text=Whenever Nafs Asp deals damage to a player, that player loses 1 life at the beginning of his or her next draw step unless he or she pays {1} before that draw step. mana={G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/BNG.txt b/projects/mtg/bin/Res/missing_cards_by_sets/BNG.txt index 2ca704bfc..06cc2edd9 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/BNG.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/BNG.txt @@ -39,15 +39,6 @@ power=0 toughness=1 [/card] [card] -name=Spirit of the Labyrinth -text=Each player can't draw more than one card each turn. -mana={1}{W} -type=Enchantment Creature -subtype=Spirit -power=3 -toughness=1 -[/card] -[card] name=Mindreaver text=Heroic — Whenever you cast a spell that targets Mindreaver, exile the top three cards of target player's library. -- {U}{U}, Sacrifice Mindreaver: Counter target spell with the same name as a card exiled with Mindreaver. mana={U}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C13.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C13.txt index defefe205..19c6eb975 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C13.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C13.txt @@ -58,41 +58,6 @@ power=1 toughness=3 [/card] [card] -name=Curse of the Forsaken -text=Enchant player -- Whenever a creature attacks enchanted player, its controller gains 1 life. -mana={2}{W} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Shallow Graves -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may put a 2/2 black Zombie creature token onto the battlefield tapped. -mana={2}{B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Predation -text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it. -mana={2}{G} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Inertia -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of his or her choice. -mana={2}{U} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Chaos -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may discard a card. If the player does, he or she draws a card. -mana={2}{R} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Lim-Dul's Vault text=Look at the top five cards of your library. As many times as you choose, you may pay 1 life, put those cards on the bottom of your library in any order, then look at the top five cards of your library. Then shuffle your library and put the last cards you looked at this way on top of it in any order. mana={U}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C16.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C16.txt index 265227a9f..1b86b05a8 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C16.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C16.txt @@ -1,13 +1,4 @@ [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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] -[card] name=Chain of Vapor text=Return target nonland permanent to its owner's hand. Then that permanent's controller may sacrifice a land. If the player does, he or she may copy this spell and may choose a new target for that copy. mana={U} @@ -92,13 +83,6 @@ power=1 toughness=1 [/card] [card] -name=Curse of Vengeance -text=Enchant player -- Whenever enchanted player casts a spell, put a spite counter on Curse of Vengeance. -- When enchanted player loses the game, you gain X life and draw X cards, where X is the number of spite counters on Curse of Vengeance. -mana={B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Cruel Entertainment text=Choose target player and another target player. The first player controls the second player during the second player's next turn, and the second player controls the first player during the first player's next turn. mana={6}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C18.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C18.txt index 4e7dbe260..2d6d24ca8 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C18.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C18.txt @@ -106,12 +106,3 @@ subtype=Sphinx power=4 toughness=4 [/card] -[card] -name=Daxos of Meletis -text=Daxos of Meletis can't be blocked by creatures with power 3 or greater. -- Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -mana={1}{W}{U} -type=Legendary Creature -subtype=Human Soldier -power=2 -toughness=2 -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CHR.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CHR.txt index abe69a3ba..738a97b7a 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CHR.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CHR.txt @@ -43,12 +43,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Metamorphosis -text=As an additional cost to cast Metamorphosis, sacrifice a creature. -- Add X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells. -mana={G} -type=Sorcery -[/card] -[card] name=Goblin Artisans text={T}: Flip a coin. If you win the flip, draw a card. If you lose the flip, counter target artifact spell you control that isn't the target of an ability from another creature named Goblin Artisans. mana={R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CM2.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CM2.txt index 412831897..6b7fa67d7 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CM2.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CM2.txt @@ -27,15 +27,6 @@ mana={2}{WU}{WU} 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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] -[card] name=Oreskos Explorer text=When Oreskos Explorer enters the battlefield, search your library for up to X Plains cards, where X is the number of players who control more lands than you. Reveal those cards, put them into your hand, then shuffle your library. mana={1}{W} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CMA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CMA.txt index 60f1b593b..49f232845 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CMA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CMA.txt @@ -9,13 +9,6 @@ power=1 toughness=1 [/card] [card] -name=Curse of Inertia -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of his or her choice. -mana={2}{U} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Tempt with Glory text=Tempting offer — Put a +1/+1 counter on each creature you control. Each opponent may put a +1/+1 counter on each creature he or she controls. For each opponent who does, put a +1/+1 counter on each creature you control. mana={5}{W} @@ -37,13 +30,6 @@ mana={2} type=Artifact [/card] [card] -name=Curse of the Forsaken -text=Enchant player -- Whenever a creature attacks enchanted player, its controller gains 1 life. -mana={2}{W} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Flickerform text=Enchant creature -- {2}{W}{W}: Exile enchanted creature and all Auras attached to it. At the beginning of the next end step, return that card to the battlefield under its owner's control. If you do, return the other cards exiled this way to the battlefield under their owners' control attached to that creature. mana={1}{W} @@ -51,13 +37,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Curse of Predation -text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it. -mana={2}{G} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Mana-Charged Dragon abilities=flying,trample text=Flying, trample -- Join forces — Whenever Mana-Charged Dragon attacks or blocks, each player starting with you may pay any amount of mana. Mana-Charged Dragon gets +X/+0 until end of turn, where X is the total amount of mana paid this way. diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/CN2.txt b/projects/mtg/bin/Res/missing_cards_by_sets/CN2.txt index 4b2338737..fbaff12a8 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/CN2.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/CN2.txt @@ -8,12 +8,6 @@ power=2 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} -type=Enchantment -[/card] -[card] name=Capital Punishment text=Council's dilemma — Starting with you, each player votes for death or taxes. Each opponent sacrifices a creature for each death vote and discards a card for each taxes vote. mana={4}{B}{B} @@ -204,15 +198,6 @@ type=Artifact subtype=Equipment [/card] [card] -name=Leovold, Emissary of Trest -text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. -mana={B}{G}{U} -type=Legendary Creature -subtype=Elf Advisor -power=3 -toughness=3 -[/card] -[card] name=Desertion text=Counter target spell. If an artifact or creature spell is countered this way, put that card onto the battlefield under your control instead of into its owner's graveyard. mana={3}{U}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/DKA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/DKA.txt index dc2406abd..c76ed4f38 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/DKA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/DKA.txt @@ -24,13 +24,6 @@ mana={3}{G}{G} type=Enchantment [/card] [card] -name=Curse of Misfortunes -text=Enchant player -- At the beginning of your upkeep, you may search your library for a Curse card that doesn't have the same name as a Curse attached to enchanted player, put it onto the battlefield attached to that player, then shuffle your library. -mana={4}{B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Soul Seizer abilities=flying text=Flying -- When Soul Seizer deals combat damage to a player, you may transform it. If you do, attach it to target creature that player controls. @@ -57,10 +50,3 @@ text=Target permanent you control gains protection from the color of your choice mana={W} type=Instant [/card] -[card] -name=Curse of Echoes -text=Enchant player -- Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy he or she controls. -mana={4}{U} -type=Enchantment -subtype=Aura Curse -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ELD.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ELD.txt index d6f2cc986..aae82ece9 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ELD.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ELD.txt @@ -1,13 +1,4 @@ [card] -name=Robber of the Rich -text=Reach, haste -- Whenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. -mana={1}{R} -type=Creature -subtype=Human Archer Rogue -power=2 -toughness=2 -[/card] -[card] name=Fervent Champion text=First strike, haste -- Whenever Fervent Champion attacks, another target attacking Knight you control gets +1/+0 until end of turn. -- Equip abilities you activate that target Fervent Champion cost 3 less to activate. mana={R} @@ -16,21 +7,3 @@ subtype=Human Knight power=1 toughness=1 [/card] -[card] -name=Specter's Shriek -text=Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player exiles that card. If a nonblack card is exiled this way, exile a card from your hand. -mana={B} -type=Sorcery -[/card] -[card] -name=Lucky Clover -text=Whenever you cast an Adventure instant or sorcery spell, copy it. You may choose new targets for the copy. -mana={2} -type=Artifact -[/card] -[card] -name=Covetous Urge -text=Target opponent reveals their 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={UB}{UB}{UB}{UB} -type=Sorcery -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/EMN.txt b/projects/mtg/bin/Res/missing_cards_by_sets/EMN.txt index e1cc27386..736909656 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/EMN.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/EMN.txt @@ -1,6 +1,6 @@ [card] name=Spell Queller -abilities=flash +abilities=flash,flying text=Flash -- Flying -- When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less. -- When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost. mana={1}{W}{U} type=Creature diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt b/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt index 1b5f50f87..cd33f7e0c 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt @@ -76,15 +76,6 @@ mana={2}{B} type=Sorcery [/card] [card] -name=Mesmeric Sliver -text=All Slivers have "When this permanent enters the battlefield, you may fateseal 1." (To fateseal 1, its controller looks at the top card of an opponent's library, then he or she may put that card on the bottom of that library.) -mana={3}{U} -type=Creature -subtype=Sliver -power=2 -toughness=2 -[/card] -[card] name=Nacatl War-Pride text=Nacatl War-Pride must be blocked by exactly one creature if able. -- Whenever Nacatl War-Pride attacks, put X tokens that are copies of Nacatl War-Pride onto the battlefield tapped and attacking, where X is the number of creatures defending player controls. Exile the tokens at the beginning of the next end step. mana={3}{G}{G}{G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/IMA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/IMA.txt index 117a66049..ccea41b62 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/IMA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/IMA.txt @@ -1,11 +1,4 @@ [card] -name=Curse of Predation -text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it. -mana={2}{G} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Sphinx of Uthuun abilities=flying text=Flying -- When Sphinx of Uthuun enters the battlefield, reveal the top five cards of your library. An opponent separates those cards into two piles. Put one pile into your hand and the other into your graveyard. @@ -15,12 +8,3 @@ subtype=Sphinx power=5 toughness=6 [/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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/JUD.txt b/projects/mtg/bin/Res/missing_cards_by_sets/JUD.txt index 8e46109a7..15b298736 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/JUD.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/JUD.txt @@ -59,26 +59,8 @@ type=Enchantment subtype=Aura [/card] [card] -name=Laquatus's Disdain -text=Counter target spell cast from a graveyard. -- Draw a card. -mana={1}{U} -type=Instant -[/card] -[card] -name=Firecat Blitz -text=Put X 1/1 red Elemental Cat creature tokens with haste onto the battlefield. Exile them at the beginning of the next end step. -- Flashback—{R}{R}, Sacrifice X Mountains. (You may cast this card from your graveyard for its flashback cost. Then exile it.) -mana={X}{R}{R} -type=Sorcery -[/card] -[card] name=Breaking Point text=Any player may have Breaking Point deal 6 damage to him or her. If no one does, destroy all creatures. Creatures destroyed this way can't be regenerated. mana={1}{R}{R} type=Sorcery [/card] -[card] -name=Spelljack -text=Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. You may play it without paying its mana cost for as long as it remains exiled. (If it has X in its mana cost, X is 0.) -mana={3}{U}{U}{U} -type=Instant -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/LEG.txt b/projects/mtg/bin/Res/missing_cards_by_sets/LEG.txt index 76def58e0..26317210c 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/LEG.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/LEG.txt @@ -25,16 +25,6 @@ text=Green legendary creatures you control have "bands with other legendary crea type=Land [/card] [card] -name=Firestorm Phoenix -abilities=flying -text=Flying -- If Firestorm Phoenix would die, return Firestorm Phoenix to its owner's hand instead. Until that player's next turn, that player plays with that card revealed in his or her hand and can't play it. -mana={4}{R}{R} -type=Creature -subtype=Phoenix -power=3 -toughness=2 -[/card] -[card] name=Tempest Efreet text=Remove Tempest Efreet from your deck before playing if you're not playing for ante. -- {T}, Sacrifice Tempest Efreet: Target opponent may pay 10 life. If that player doesn't, he or she reveals a card at random from his or her hand. Exchange ownership of the revealed card and Tempest Efreet. Put the revealed card into your hand and Tempest Efreet from anywhere into that player's graveyard. mana={1}{R}{R}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt index 5a3e57242..a6e1044af 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt @@ -171,15 +171,6 @@ mana={2}{U}{B} type=Sorcery [/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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] -[card] name=Coalition Honor Guard text=While choosing targets as part of casting a spell or activating an ability, your opponents must choose at least one Flagbearer on the battlefield if able. mana={3}{W} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ME3.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ME3.txt index f397b5b05..d754d0ae9 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ME3.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ME3.txt @@ -48,16 +48,6 @@ power=3 toughness=3 [/card] [card] -name=Firestorm Phoenix -abilities=flying -text=Flying -- If Firestorm Phoenix would die, return Firestorm Phoenix to its owner's hand instead. Until that player's next turn, that player plays with that card revealed in his or her hand and can't play it. -mana={4}{R}{R} -type=Creature -subtype=Phoenix -power=3 -toughness=2 -[/card] -[card] name=Nebuchadnezzar text={X}, {T}: Name a card. Target opponent reveals X cards at random from his or her hand. Then that player discards all cards with that name revealed this way. Activate this ability only during your turn. mana={3}{U}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt index 1f884161e..99995b67b 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt @@ -1,10 +1,4 @@ [card] -name=Force of Rage -text=If it's not your turn, you may exile a red card from your hand rather than pay this spell's mana cost. -- Create two 3/1 red Elemental creature tokens with trample and haste. Sacrifice those tokens at the beginning of your next upkeep. -mana={1}{R}{R} -type=Instant -[/card] -[card] name=Everdream text=Draw a card. -- Splice onto instant or sorcery {2}{U} (As you cast an instant or sorcery 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/MRQ.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MRQ.txt index 564884a5b..fd1ba3e35 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MRQ.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MRQ.txt @@ -79,9 +79,3 @@ text=Exile all nontoken permanents. Starting with you, each player chooses one o mana={4}{R}{R}{R} type=Sorcery [/card] -[card] -name=Food Chain -text=Exile a creature you control: Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells. -mana={2}{G} -type=Enchantment -[/card] 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 53acdbe88..bb9ef6627 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PLIST.txt @@ -21,12 +21,6 @@ mana={5} type=Legendary Artifact [/card] [card] -name=Food Chain -text=Exile a creature you control: Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells. -mana={2}{G} -type=Enchantment -[/card] -[card] name=Ixidor, Reality Sculptor text=Face-down creatures get +1/+1. -- {2}{U}: Turn target face-down creature face up. mana={3}{U}{U} 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 46fcacaff..d7dc03323 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PRM.txt @@ -5,12 +5,6 @@ mana={3}{U}{U} type=Instant [/card] [card] -name=Food Chain -text=Exile a creature you control: Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells. -mana={2}{G} -type=Enchantment -[/card] -[card] name=Magister of Worth abilities=flying text=Flying -- Will of the council — When Magister of Worth enters the battlefield, starting with you, each player votes for grace or condemnation. If grace gets more votes, each player returns each creature card from his or her graveyard to the battlefield. If condemnation gets more votes or the vote is tied, destroy all creatures other than Magister of Worth. @@ -54,15 +48,6 @@ mana={3}{U} 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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] -[card] name=Glacial Ray text=Glacial Ray deals 2 damage to target creature or player. -- Splice onto Arcane {1}{R} (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}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/PUMA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/PUMA.txt index 2809458e2..ebe9a58d7 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PUMA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PUMA.txt @@ -15,15 +15,6 @@ power=2 toughness=2 [/card] [card] -name=Leovold, Emissary of Trest -text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. -mana={B}{G}{U} -type=Legendary Creature -subtype=Elf Advisor -power=3 -toughness=3 -[/card] -[card] name=Sigarda, Host of Herons abilities=flying,opponentshroud text=Flying, hexproof -- Spells and abilities your opponents control can't cause you to sacrifice permanents. diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt b/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt index cd61277f8..20f4bfd33 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt @@ -5,12 +5,6 @@ mana={R}{R}{R} type=Sorcery [/card] [card] -name=Metamorphosis -text=As an additional cost to cast Metamorphosis, sacrifice a creature. -- Add X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells. -mana={G} -type=Sorcery -[/card] -[card] name=Desperate Ritual text=Add {R}{R}{R} to your mana pool. -- Splice onto Arcane {1}{R} (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}{R} @@ -18,15 +12,6 @@ type=Instant subtype=Arcane [/card] [card] -name=Leovold, Emissary of Trest -text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. -mana={B}{G}{U} -type=Legendary Creature -subtype=Elf Advisor -power=3 -toughness=3 -[/card] -[card] name=Nylea's Colossus text=Constellation — Whenever Nylea's Colossus or another enchantment enters the battlefield under your control, double target creature's power and toughness until end of turn. mana={6}{G} @@ -146,10 +131,3 @@ text=Council's dilemma — Starting with you, each player votes for time or money mana={7}{U}{U} type=Sorcery [/card] -[card] -name=Curse of Vengeance -text=Enchant player -- Whenever enchanted player casts a spell, put a spite counter on Curse of Vengeance. -- When enchanted player loses the game, you gain X life and draw X cards, where X is the number of spite counters on Curse of Vengeance. -mana={B} -type=Enchantment -subtype=Aura Curse -[/card] 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 458c4f5aa..7c3caacdf 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/RTR.txt @@ -23,15 +23,6 @@ mana={5}{R} type=Enchantment [/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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/card] -[card] name=Rakdos, Lord of Riots text=You can't cast Rakdos, Lord of Riots unless an opponent lost life this turn. -- Flying, trample -- Creature spells you cast cost {1} less to cast for each 1 life your opponents have lost this turn. mana={B}{B}{R}{R} @@ -41,16 +32,6 @@ power=6 toughness=6 [/card] [card] -name=Sphinx of the Chimes -abilities=flying -text=Flying -- Discard two nonland cards with the same name: Draw four cards. -mana={4}{U}{U} -type=Creature -subtype=Sphinx -power=5 -toughness=6 -[/card] -[card] name=Tablet of the Guilds text=As Tablet of the Guilds enters the battlefield, choose two colors. -- Whenever you cast a spell, if it's at least one of the chosen colors, you gain 1 life for each of the chosen colors it is. mana={2} 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 c1a15ccaf..882df3c37 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/THS.txt @@ -4,22 +4,3 @@ text=Reveal the top five cards of your library and separate them into two piles. mana={2}{U}{R} type=Instant [/card] -[card] -name=Medomai the Ageless -abilities=flying -text=Flying -- Whenever Medomai the Ageless deals combat damage to a player, take an extra turn after this one. -- Medomai the Ageless can't attack during extra turns. -mana={4}{W}{U} -type=Legendary Creature -subtype=Sphinx -power=4 -toughness=4 -[/card] -[card] -name=Daxos of Meletis -text=Daxos of Meletis can't be blocked by creatures with power 3 or greater. -- Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -mana={1}{W}{U} -type=Legendary Creature -subtype=Human Soldier -power=2 -toughness=2 -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/TSP.txt b/projects/mtg/bin/Res/missing_cards_by_sets/TSP.txt index 52e266b45..171d18c2e 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/TSP.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/TSP.txt @@ -89,12 +89,6 @@ power=2 toughness=2 [/card] [card] -name=Curse of the Cabal -text=Target player sacrifices half the permanents he or she controls, rounded down. -- Suspend 2—{2}{B}{B} (Rather than cast this card from your hand, you may pay {2}{B}{B} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) -- At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If he or she does, put two time counters on Curse of the Cabal. -mana={9}{B} -type=Sorcery -[/card] -[card] name=Dementia Sliver text=All Slivers have "{T}: Name a card. Target opponent reveals a card at random from his or her hand. If it's the named card, that player discards it. Activate this ability only during your turn." mana={3}{U}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/UMA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/UMA.txt index f9e937622..658816cbf 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/UMA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/UMA.txt @@ -15,15 +15,6 @@ power=2 toughness=2 [/card] [card] -name=Leovold, Emissary of Trest -text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. -mana={B}{G}{U} -type=Legendary Creature -subtype=Elf Advisor -power=3 -toughness=3 -[/card] -[card] name=Living Lore text=As Living Lore enters the battlefield, exile an instant or sorcery card from your graveyard. -- Living Lore's power and toughness are each equal to the exiled card's converted mana cost. -- Whenever Living Lore deals combat damage, you may sacrifice it. If you do, you may cast the exiled card without paying its mana cost. mana={3}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/UNH.txt b/projects/mtg/bin/Res/missing_cards_by_sets/UNH.txt index 2cb4bbf8d..2e1f7fbfa 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/UNH.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/UNH.txt @@ -173,14 +173,6 @@ power=1 toughness=1 [/card] [card] -name=Curse of the Fire Penguin -text=Curse of the Fire Penquin consumes and confuses enchanted creature. -- -- ——— -- -- Creature Penguin -- Trample -- -- 6/5 -- Whenthiscreatureisputintoagraveyardfromplay,returnCurseoftheFirePenguinfromyourgraveyardtoplay. -mana={4}{R}{R} -type=Enchant Creature -power= -toughness= -[/card] -[card] name=Water Gun Balloon Game text=As Water Gun Balloon Game comes into play, each player puts a pop counter on a 0. -- Whenever a player plays a spell, move that player's pop counter up 1. -- Whenever a player's pop counter hits 5, that player puts a 5/5 pink Giant Teddy Bear creature token into play and resets all pop counters to 0. mana={2} 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 42fb256f6..718437e43 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/VIS.txt @@ -1,10 +1,4 @@ [card] -name=Foreshadow -text=Name a card, then put the top card of target opponent's library into his or her graveyard. If that card is the named card, you draw a card. -- Draw a card at the beginning of the next turn's upkeep. -mana={1}{U} -type=Instant -[/card] -[card] name=Desertion text=Counter target spell. If an artifact or creature spell is countered this way, put that card onto the battlefield under your control instead of into its owner's graveyard. mana={3}{U}{U} diff --git a/projects/mtg/bin/Res/sets/primitives/_macros.txt b/projects/mtg/bin/Res/sets/primitives/_macros.txt index f94a93173..6a8c9dbf1 100644 --- a/projects/mtg/bin/Res/sets/primitives/_macros.txt +++ b/projects/mtg/bin/Res/sets/primitives/_macros.txt @@ -15,6 +15,12 @@ # Dies, Evergreen #AUTO_DEFINE _DIES_ @movedTo(this|graveyard) from(battlefield): +# Goad +#AUTO_DEFINE _GOAD_ transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever + +# Rebound +#AUTO_DEFINE _REBOUND_ if rebound then all(this|mystack) moveto(exile) and!( transforms((,newability[@rebounded:may name(Cast rebounded card) activate castcard(normal)])) forever )! + # Populate #AUTO_DEFINE _POPULATE_ name(Populate) clone notAtarget(creature[token]|myBattlefield) diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 45bad725b..b23affacf 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -111,8 +111,8 @@ type=Instant [card] name=Absolver Thrull auto=name(Destroy enchantment) target(enchantment|battlefield) destroy -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.ThrullHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.ThrullHaunted}]|graveyard) from(battlefield) once:name(Destroy enchantment) target(enchantment|battlefield) destroy +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Destroy enchantment) target(enchantment|battlefield) destroy])) text=Haunt (When this creature dies, exile it haunting target creature.) -- When Absolver Thrull enters the battlefield or the creature it haunts dies, destroy target enchantment. mana={3}{W} type=Creature @@ -814,8 +814,8 @@ toughness=8 [/card] [card] name=Agitator Ant -auto=@each my endofturn:target(creature|mybattlefield) counter(1/1,2) && target(creature|opponentbattlefield) counter(1/1,2) -auto=lord(creature[counter{1/1}]|battlefield) mustattack +auto=@each my endofturn:may name(Put 1/1 counters and goad) target(creature|mybattlefield) transforms((,newability[counter(1/1.2)],newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever +auto=@each my endofturn:ability$!may name(Put 1/1 counters and goad) target(creature|mybattlefield) transforms((,newability[counter(1/1.2)],newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever!$ opponent text=At the beginning of your end step, each player may put two +1/+1 counters on a creature they control. Goad each creature that had counters put on it this way. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.) mana={2}{R} type=Creature @@ -5283,9 +5283,9 @@ toughness=4 [card] name=Belfry Spirit abilities=flying -auto=token(Bat,Creature Bat,1/1,black,flying)*2 -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.BelfryHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.BelfryHaunted}]|graveyard) from(battlefield) once:token(Bat,Creature Bat,1/1,black,flying)*2 +auto=name(Create Bats) token(Bat,Creature Bat,1/1,black,flying)*2 +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Create Bats) token(Bat^Creature Bat^1/1^black^flying)*2])) text=Flying -- Haunt (When this creature dies, exile it haunting target creature.) -- When Belfry Spirit enters the battlefield or the creature it haunts dies, put two 1/1 black Bat creature tokens with flying onto the battlefield. mana={3}{W}{W} type=Creature @@ -5418,10 +5418,8 @@ type=Sorcery [/card] [card] name=Benediction of Moons -abilities=exiledeath -auto=life:2 controller -auto=name(Haunt a creature) target(creature) counter(0/0.1.MoonsHaunted) -autoexile=@movedto(creature[counter{0/0.1.MoonsHaunted}]|graveyard) from(battlefield) once:life:2 controller +auto=name(Gain 2 life) life:2 controller +auto=if type(creature|mybattlefield)~morethan~0 then name(Exile and haunt a creature) all(this|mystack) moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt and!( counter(0/0.1.MoonsHaunted) )!],newability[@movedto(creature[isprey&counter{0/0.1.MoonsHaunted}]|graveyard) from(battlefield) once:name(Gain 2 life) life:2 controller])) forever )! text=You gain 1 life for each player. -- Haunt (When this spell card is put into a graveyard after resolving, exile it haunting target creature.) -- When the creature Benediction of Moons haunts dies, you gain 1 life for each player. mana={W} type=Sorcery @@ -5509,7 +5507,7 @@ toughness=1 [card] name=Besmirch target=creature -auto=moveto(mybattlefield) and!(transforms((,newability[phaseaction[endofturn sourceinplay] moveTo(previousbattlefield)],newability[untap],haste,mustattack)) ueot)! +auto=moveto(mybattlefield) and!( transforms((,newability[phaseaction[endofturn once sourceinplay] moveTo(ownerBattlefield)],newability[untap],newability[haste ueot],newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever )! text=Until end of turn, gain control of target creature and it gains haste. Untap and goad that creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) mana={1}{R}{R} type=Sorcery @@ -6099,8 +6097,7 @@ type=Instant name=Blessed Reincarnation target=creature|opponentbattlefield auto=moveto(exile) && ability$!name(Put first creature in play) name(Put first creature in play) target(*[zpos=findfirsttypecreature]|mylibrary) moveto(myBattlefield) and!( shuffle controller )! !$ opponent -auto=if rebound then ability$!moveto(exile) all(Blessed Reincarnation|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Exile target creature an opponent controls. That player reveals cards from the top of his or her library until a creature card is revealed. The player puts that card onto the battlefield, then shuffles the rest into his or her library. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{U} type=Instant @@ -6230,9 +6227,10 @@ type=Instant [card] name=Blind Hunter abilities=flying -auto=name(Player loses 2 life) target(player) life:-2 && life:2 controller -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.BlindHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.BlindHaunted}]|graveyard) from(battlefield) once:name(Player loses 2 life) target(player) life:-2 && life:2 controller +auto=name(Player loses 2 life) target(player) life:-2 +auto=name(Gain 2 life) life:2 controller +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Player loses 2 life) target(player) life:-2],newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Gain 2 life) life:2 controller])) text=Flying -- Haunt (When this creature dies, exile it haunting target creature.) -- When Blind Hunter enters the battlefield or the creature it haunts dies, target player loses 2 life and you gain 2 life. mana={2}{W}{B} type=Creature @@ -6773,8 +6771,7 @@ name=Blossoming Calm auto=life:2 controller auto=all(*|myBattlefield) transforms((,newability[controllershroud])) uynt auto=token(BlossomingEffect,BlossomingEffect,0/0,shroud,indestructible,controllershroud) and!( transforms((,newability[phaseaction[opponent end once sourceinplay] sacrifice])) forever )! -auto=if rebound then ability$!moveto(exile) all(Blossoming Calm|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=You gain hexproof until your next turn. You gain 2 life. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={W} type=Instant @@ -11930,16 +11927,15 @@ type=Enchantment [/card] [card] name=Commander's Plate -target=creature auto={5}:equip -auto={3} restriction{type(creature[iscommander]|mybattlefield)~morethan~0}:name(equip commander) rehook target(creature[iscommander]|mybattlefield) +auto=aslongas(*[iscommander]|myBattlefield) {3}:name(equip a commander) name(equip a commander) rehook target(creature[iscommander]|mybattlefield) auto=teach(creature) 3/3 -auto=if type(*[red]|myzones)~lessthan~1 then teach(creature) protection from red -auto=if type(*[white]|myzones)~lessthan~1 then teach(creature) protection from white -auto=if type(*[green]|myzones)~lessthan~1 then teach(creature) protection from green -auto=if type(*[blue]|myzones)~lessthan~1 then teach(creature) protection from blue -auto=if type(*[black]|myzones)~lessthan~1 then teach(creature) protection from black -auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~lessthan~1 then teach(creature) protection from(artifact) +auto=aslongas(*[red]|myzones) teach(creature) protection from red <1 +auto=aslongas(*[white]|myzones) teach(creature) protection from white <1 +auto=aslongas(*[green]|myzones) teach(creature) protection from green <1 +auto=aslongas(*[blue]|myzones) teach(creature) protection from blue <1 +auto=aslongas(*[black]|myzones) then teach(creature) protection from black <1 +auto=aslongas(*[colorless]|myzones) teach(creature) protection from(artifact) <1 text=Equipped creature gets +3/+3 and has protection from each color that's not in your commander's color identity. -- Equip commander {3} -- Equip {5} mana={1} type=Artifact @@ -11947,13 +11943,13 @@ subtype=Equipment [/card] [card] name=Commander's Sphere -auto=if type(*[red]|myzones)~morethan~0 then transforms((,newability[{T}:add{R}])) forever -auto=if type(*[white]|myzones)~morethan~0 then transforms((,newability[{T}:add{W}])) forever -auto=if type(*[green]|myzones)~morethan~0 then transforms((,newability[{T}:add{G}])) forever -auto=if type(*[blue]|myzones)~morethan~0 then transforms((,newability[{T}:add{U}])) forever -auto=if type(*[black]|myzones)~morethan~0 then transforms((,newability[{T}:add{B}])) forever -auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever -auto={S}:draw:1 controller +auto={S}:name(Sacrifice and draw) draw:1 controller +auto=aslongas(*[red]|myzones) {T}:add{R} +auto=aslongas(*[white]|myzones) {T}:add{W} +auto=aslongas(*[green]|myzones) {T}:add{G} +auto=aslongas(*[blue]|myzones) {T}:add{U} +auto=aslongas(*[black]|myzones) {T}:add{B} +auto=aslongas(*[colorless]|myzones) {T}:add{C} text={T}: Add to your mana pool one mana of any color in your commander's color identity. -- Sacrifice Commander's Sphere: Draw a card. mana={3} type=Artifact @@ -12592,6 +12588,16 @@ power=2 toughness=2 [/card] [card] +name=Corpsejack Menace +auto=@counteradded(1/1) from(creature|battlefield) except(Corpsejack Menace):may target(creature[counter{1/1.1}]|Battlefield) counter(1/1) notrg +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} +type=Creature +subtype=Fungus +power=4 +toughness=4 +[/card] +[card] name=Corpseweft auto={1}{B}{E(creature|mygraveyard)}:name(Exile 1 creature) token(Zombie,creature Zombie Horror,2/2,black) and!( tap(noevent) )! auto={1}{B}{E(creature|mygraveyard)}{E(creature|mygraveyard)}:name(Exile 2 creatures) token(Zombie,creature Zombie Horror,4/4,black) and!( tap(noevent) )! @@ -12838,7 +12844,7 @@ type=Artifact [card] name=Coveted Peacock abilities=flying -auto=_ATTACKING_may name(Goad creature) target(creature|opponentBattlefield) transforms((,newability[mustattack])) uynt +auto=_ATTACKING_may name(Goad creature) target(creature|opponentBattlefield) _GOAD_ text=Flying -- Whenever Coveted Peacock attacks, you may goad target creature defending player controls. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) mana={3}{U}{U} type=Creature @@ -12859,6 +12865,15 @@ mana={4}{B} type=Sorcery [/card] [card] +name=Covetous Urge +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],newability[@each beginofturn:name(Can play from exile) transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever])) 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],newability[@each beginofturn:name(Can play from exile) transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever])) 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 their 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={UB}{UB}{UB}{UB} +type=Sorcery +[/card] +[card] name=Crab type=Creature subtype=Crab @@ -13389,11 +13404,9 @@ type=Instant [/card] [card] name=Cry of Contrition -abilities=exiledeath target=player auto=ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject!$ targetedplayer -auto=ability$!name(Haunt a creature) name(Haunt a creature) target(creature) counter(0/0.1.ContritionHaunted)!$ controller -autoexile=@movedto(creature[counter{0/0.1.ContritionHaunted}]|graveyard) from(battlefield) once:name(A player discards a card) target(player) ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject!$ targetedplayer +auto=if type(creature|mybattlefield)~morethan~0 then name(Exile and haunt a creature) all(this|mystack) moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt and!( counter(0/0.1.ContritionHaunted) )!],newability[@movedto(creature[isprey&counter{0/0.1.ContritionHaunted}]|graveyard) from(battlefield) once:name(A player discards a card) target(player) ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject!$ targetedplayer )!])) forever )! text=Target player discards a card. -- Haunt (When this spell card is put into a graveyard after resolving, exile it haunting target creature.) -- When the creature Cry of Contrition haunts dies, target player discards a card. mana={B} type=Sorcery @@ -13731,10 +13744,10 @@ toughness=3 [/card] [card] name=Curse of Bloodletting -target=player -auto=@damaged(targetedplayer) from(*[instant;sorcery]|Stack,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(targetedplayer) from(*[creature;artifact;land;planeswalker]|battlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(targetedplayer) from(enchantment[-Curse of Bloodletting]|battlefield,graveyard):damage:thatmuch all(trigger[to]) +target=opponent +auto=@damaged(targetedplayer) from(*[instant;sorcery]|*):damage:thatmuch opponent +auto=@damaged(targetedplayer) from(*[creature;artifact;land;planeswalker]|*):damage:thatmuch opponent +auto=@damaged(targetedplayer) from(enchantment[-Curse of Bloodletting]|*):damage:thatmuch opponent text=Enchant player -- If a source would deal damage to enchanted player, it deals double that damage to that player instead. mana={3}{R}{R} type=Enchantment @@ -13742,47 +13755,137 @@ subtype=Aura Curse [/card] [card] name=Curse of Bounty -target=player -auto=@combat(attacking) source(creature|myBattlefield) restriction{once}:untap all(*[-land]|myBattlefield) +target=opponent +auto=@combat(attacking) source(creature|mybattlefield) turnlimited:name(Untap all non-land permanents) untap all(*[-land]|myBattlefield) text=Enchant player -- Whenever enchanted player is attacked, untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control. mana={1}{G} type=Enchantment subtype=Aura Curse [/card] [card] +name=Curse of Chaos +target=opponent +auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Discard and draw) target(*|myhand) reject and!( draw:1 )! +text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may discard a card. If the player does, he or she draws a card. +mana={2}{R} +type=Enchantment +subtype=Aura Curse +[/card] +[card] name=Curse of Disturbance -target=player -auto=@combat(attacking) source(creature|myBattlefield) restriction{once}:create(zombie:creature zombie:2/2:black) +target=opponent +auto=@combat(attacking) source(creature|mybattlefield) turnlimited:name(Create Zombie) token(Zombie Lil) text=Enchant player -- Whenever enchanted player is attacked, create a 2/2 black Zombie creature token. Each opponent attacking that player does the same. mana={2}{B} type=Enchantment subtype=Aura Curse [/card] [card] +name=Curse of Echoes +target=opponent +auto=@movedto(*[instant;sorcery]|targetedpersonsstack):may name(Copy casted spell) all(trigger[to]) activate castcard(copied) +text=Enchant player -- Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy he or she controls. +mana={4}{U} +type=Enchantment +subtype=Aura Curse +[/card] +[card] name=Curse of Fool's Wisdom abilities=madness -target=player -auto=@drawn(targetedplayer):may life:-2 opponent -auto=@drawn(targetedplayer):may life:2 controller -autoexile=restriction{discarded} pay({3}{B}) name(pay 3B to cast) activate name(pay 2G to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard) +target=opponent +auto=@drawn(targetedplayer):name(Lose life) life:-2 opponent && life:2 controller +autoexile=restriction{discarded} pay({3}{B}) name(pay 3B to cast) activate name(pay 3B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard) text=Enchant player -- Whenever enchanted player draws a card, they lose 2 life and you gain 2 life. -- Madness {3}{B} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.) mana={4}{B}{B} type=Enchantment subtype=Aura Curse [/card] [card] +name=Curse of Inertia +target=opponent +auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Tap or untap permanent) transforms((,newability[choice name(Tap a permanent) target(*|battlefield) tap],newability[choice name(Untap a permanent) target(*|battlefield) untap])) oneshot +text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of his or her choice. +mana={2}{U} +type=Enchantment +subtype=Aura Curse +[/card] +[card] +name=Curse of Misfortunes +target=opponent +auto=@each my upkeep:may name(Search curse) target(curse[-Curse of Misfortunes]|mylibrary) transforms((,newability[if type(curse[share!name!]|myBattlefield)~equalto~0 then moveto(myBattlefield) and!( shuffle )!])) oneshot +text=Enchant player -- At the beginning of your upkeep, you may search your library for a Curse card that doesn't have the same name as a Curse attached to enchanted player, put it onto the battlefield attached to that player, then shuffle your library. +mana={4}{B} +type=Enchantment +subtype=Aura Curse +[/card] +[card] name=Curse of Opulence -target=player -auto=@combat(attacking) source(creature|myBattlefield) restriction{once}:token(435451) -text=Enchant player -- Whenever enchanted player is attacked, create a colorless artifact token named Gold. It has "Sacrifice this artifact: Add one mana of any color." Each opponent attacking that player does the same. +target=opponent +auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Create Gold) token(435451) +text=Enchant player -- Whenever enchanted player is attacked, create a colorless artifact token named Gold. It has "Sacrifice this artifact: Add one mana of any color.". Each opponent attacking that player does the same. mana={R} type=Enchantment subtype=Aura Curse [/card] [card] +name=Curse of Predation +target=opponent +auto=@combat(attacking) source(creature|myBattlefield):name(Put 1/1 counter) all(trigger[to]) counter(1/1) +text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it. +mana={2}{G} +type=Enchantment +subtype=Aura Curse +[/card] +[card] +name=Curse of Shallow Graves +target=opponent +auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Create Zombie) token(Zombie Lil) and!( tap(noevent) )! +text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may put a 2/2 black Zombie creature token onto the battlefield tapped. +mana={2}{B} +type=Enchantment +subtype=Aura Curse +[/card] +[card] +name=Curse of the Cabal +auto=target(player) ability$!name(sacrifice half permanents) notatarget(*|myBattlefield) sacrifice!$ targetedplayer +suspend(2)={2}{B}{B} +autoexile=@each my upkeep suspended restriction{compare(hascnttime)~morethan~0}:ability$!name(Sacrifice a permanent) may name(Sacrifice a permanent) target(*|mybattlefield) transforms((,newability[sacrifice],newability[target(Curse of the Cabal[counter{0/0.1.Time}]|myexile) counter(0/0.2.Time)])) oneshot!$ controller +autoexile=@each opponent upkeep suspended:ability$!name(Sacrifice a permanent) may name(Sacrifice a permanent) target(*|mybattlefield) transforms((,newability[sacrifice],newability[target(Curse of the Cabal[counter{0/0.1.Time}]|opponentexile) counter(0/0.2.Time)])) oneshot!$ opponent +text=Target player sacrifices half the permanents he or she controls, rounded down. -- Suspend 2 - {2}{B}{B} (Rather than cast this card from your hand, you may pay {2}{B}{B} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) -- At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If he or she does, put two time counters on Curse of the Cabal. +mana={9}{B} +type=Sorcery +[/card] +[card] +name=Curse of the Fire Penguin +abilities=inplaydeath +text=Trample -- When this creature is put into a graveyard from play, return Curse of the Fire Penguin from your graveyard to play. +mana={4}{R}{R} +type=Creature Penguin +power=6 +toughness=5 +[/card] +[card] +name=Curse of the Forsaken +target=opponent +auto=@combat(attacking) source(creature|mybattlefield):name(Gain 1 life) life:1 controller +text=Enchant player -- Whenever a creature attacks enchanted player, its controller gains 1 life. +mana={2}{W} +type=Enchantment +subtype=Aura Curse +[/card] +[card] +name=Curse of Vengeance +target=opponent +auto=@movedto(*[instant;sorcery]|targetedpersonsstack):name(Put spite counter) counter(0/0,1,Spite) +text=Enchant player -- Whenever enchanted player casts a spell, put a spite counter on Curse of Vengeance. -- When enchanted player loses the game, you gain X life and draw X cards, where X is the number of spite counters on Curse of Vengeance. +mana={B} +type=Enchantment +subtype=Aura Curse +[/card] +[card] name=Curse of Verbosity -target=player -auto=@combat(attacking) source(creature|myBattlefield) restriction{once}:draw:1 +target=opponent +auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Draw a card) draw:1 controller text=Enchant player -- Whenever enchanted player is attacked, you draw a card. Each opponent attacking that player does the same. mana={2}{U} type=Enchantment @@ -13790,8 +13893,8 @@ subtype=Aura Curse [/card] [card] name=Curse of Vitality -target=player -auto=@combat(attacking) source(creature|myBattlefield)restriction{once}:life:2 +target=opponent +auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Gain 2 life) life:2 controller text=Enchant player -- Whenever enchanted player is attacked, you gain 2 life. Each opponent attacking that player does the same. mana={2}{W} type=Enchantment @@ -14489,6 +14592,18 @@ power=2 toughness=* [/card] [card] +name=Daxos of Meletis +auto=cantbeblockedby(creature[power>=3]) +auto=@combatdamagefoeof(player) from(creature|mybattlefield):name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(exile) and!( if cantargetcard(*[-land]|*) then moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[life:manacost controller],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)])) ueot )! )! +auto=@combatdamageof(player) from(creature|mybattlefield):name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( if cantargetcard(*[-land]|*) then transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[life:manacost controller])) ueot )! +text=Daxos of Meletis can't be blocked by creatures with power 3 or greater. -- Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. +mana={1}{W}{U} +type=Legendary Creature +subtype=Human Soldier +power=2 +toughness=2 +[/card] +[card] name=Daybreak Chaplain abilities=lifelink text=Lifelink (Damage dealt by this creature also causes you to gain that much life.) @@ -14742,6 +14857,14 @@ mana={5}{B}{B}{B} type=Sorcery [/card] [card] +name=Deadly Designs +auto={2}:name(Put plot counter) counter(0/0,1,Plot) +auto=@counteradded(0/0,1,Plot) from(this) restriction{compare(hascntplot)~morethan~4}:name(Sacrifice Deadly Designs) transforms((,newability[sacrifice],newability[may name(Destroy 2 creature) target(creature|battlefield) destroy])) oneshot +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} +type=Enchantment +[/card] +[card] name=Deadly Visit target=creature auto=destroy @@ -16455,7 +16578,7 @@ type=Sorcery [/card] [card] name=Disrupt Decorum -auto=mustattack all(creature|opponentBattlefield) uynt +auto=all(creature|opponentBattlefield) _GOAD_ text=Goad all creatures you don't control. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.) mana={2}{R}{R} type=Sorcery @@ -19774,8 +19897,7 @@ toughness=5 name=Ephemerate target=creature|mybattlefield) auto=moveto(exile) and!(moveto(ownerbattlefield))! -auto=if rebound then ability$!moveto(exile) all(Ephemerate|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Exile target creature you control, then return it to the battlefield under its owner's control. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={W} type=Instant @@ -20501,8 +20623,8 @@ type=Sorcery [card] name=Exhumer Thrull auto=name(Return creature to hand) moveto(myhand) target(creature|mygraveyard) -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.ExhumerHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.ExhumerHaunted}]|graveyard) from(battlefield) once:name(Return creature to hand) moveto(myhand) target(creature|mygraveyard) +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Return creature to hand) moveto(myhand) target(creature|mygraveyard)])) text=Haunt (When this creature dies, exile it haunting target creature.) -- When Exhumer Thrull enters the battlefield or the creature it haunts dies, return target creature card from your graveyard to your hand. mana={5}{B} type=Creature @@ -20512,8 +20634,7 @@ toughness=3 [/card] [card] name=Exiled Doomsayer -auto=lord(*[morph]|mycastingzone) altercost(colorless, +2) -auto=lord(*[morph]|opponentcastingzone) altercost(colorless, +2) +#It's not possible to alter the morph cost ATM. text=All morph costs cost {2} more. (This doesn't affect the cost to cast creature spells face down.) mana={1}{W} type=Creature @@ -21118,8 +21239,7 @@ type=Enchantment [card] name=Faithless Salvaging auto=target(*|myHand) reject and!( transforms((,newability[name(Draw 1 card) draw:1 controller])) oneshot )! -auto=if rebound then ability$!moveto(exile) all(Faithless Salvaging|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Discard a card, then draw a card. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={1}{R} type=Instant @@ -21913,8 +22033,7 @@ subtype=Island Swamp [/card] [card] name=Fevered Suspicion -auto=if rebound then ability$!moveto(exile) all(Fevered Suspicion|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ auto=name(Exile cards) all(*[zpos<=oppofindfirsttypenonland]|opponentlibrary) moveto(exile) and!( counter(0/0.1.FeveredExiled) )! auto=token(FeveredEffect,FeveredEffect,0/0,shroud,indestructible) and!( transforms((,newability[{0}:name(Cast exiled card) target(*[-land;counter{0/0.1.FeveredExiled}]|opponentexile) activate castcard(normal)])) forever )! text=Each opponent exiles cards from the top of their library until they exile a nonland card. You may cast any number of spells from among those nonland cards without paying their mana costs. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) @@ -22244,9 +22363,29 @@ type=Instant [/card] [card] name=Finale of Devastation -auto=this(X>=10) all(creature|myBattlefield) haste -auto=this(X>=10) all(creature|myBattlefield) +x/+x -auto=moveTo(myBattlefield) target(creature[manacost<=X]|myLibrary,myGraveyard) +auto=this(X>=10) all(creature|myBattlefield) transforms((,newability[haste])) ueot +auto=this(X>=10) all(creature|myBattlefield) +x/+x ueot +auto=this(X=0) target(creature[manacost=0]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=1) target(creature[manacost<=1]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=2) target(creature[manacost<=2]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=3) target(creature[manacost<=3]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=4) target(creature[manacost<=4]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=5) target(creature[manacost<=5]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=6) target(creature[manacost<=6]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=7) target(creature[manacost<=7]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=8) target(creature[manacost<=8]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=9) target(creature[manacost<=9]|myLibrary,myGraveyard) moveTo(myBattlefield) +auto=this(X=10) target(creature[manacost<=10]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[10/10])) ueot )! +auto=this(X=11) target(creature[manacost<=11]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[11/11])) ueot )! +auto=this(X=12) target(creature[manacost<=12]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[12/12])) ueot )! +auto=this(X=13) target(creature[manacost<=13]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[13/13])) ueot )! +auto=this(X=14) target(creature[manacost<=14]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[14/14])) ueot )! +auto=this(X=15) target(creature[manacost<=15]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[15/15])) ueot )! +auto=this(X=16) target(creature[manacost<=16]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[16/16])) ueot )! +auto=this(X=17) target(creature[manacost<=17]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[17/17])) ueot )! +auto=this(X=18) target(creature[manacost<=18]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[18/18])) ueot )! +auto=this(X=19) target(creature[manacost<=19]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[19/19])) ueot )! +auto=this(X>=20) target(creature[manacost<=20]|myLibrary,myGraveyard) moveTo(myBattlefield) and!( transforms((,newability[haste],newability[20/20])) ueot )! text=Search your library and/or graveyard for a creature card with converted mana cost X or less and put it onto the battlefield. If you search your library this way, shuffle it. If X is 10 or more, creatures you control get +X/+X and gain haste until end of turn. mana={X}{G}{G} type=Sorcery @@ -22474,6 +22613,15 @@ mana={1}{R}{R} type=Sorcery [/card] [card] +name=Firecat Blitz +flashback={R}{R} +auto=ifnot gravecast then token(Elemental Cat,Creature Elemental Cat,3/1,red,haste,unearth)*fullpaid +auto=if gravecast then name(Sacrifice X mountains) name(Sacrifice X mountains) target(mountain|myBattlefield) sacrifice and!( token(Elemental Cat,Creature Elemental Cat,3/1,red,haste,unearth) )! +text=Put X 1/1 red Elemental Cat creature tokens with haste onto the battlefield. Exile them at the beginning of the next end step. -- Flashback{R}{R}, Sacrifice X Mountains. (You may cast this card from your graveyard for its flashback cost. Then exile it.) +mana={X}{R}{R} +type=Sorcery +[/card] +[card] name=Firefist Adept auto=damage:type:wizard:mybattlefield target(creature|opponentBattlefield) text=When Firefist Adept enters the battlefield, it deals X damage to target creature an opponent controls, where X is the number of Wizards you control. @@ -22607,6 +22755,17 @@ mana={R} type=Instant [/card] [card] +name=Firestorm Phoenix +abilities=flying,handdeath +auto=@movedto(this|myhand) from(battlefield):emblem transforms((,newability[maxcast(*[Firestorm Phoenix])0 ueot])) ueot +text=Flying -- If Firestorm Phoenix would die, return Firestorm Phoenix to its owner's hand instead. Until that player's next turn, that player plays with that card revealed in his or her hand and can't play it. +mana={4}{R}{R} +type=Creature +subtype=Phoenix +power=3 +toughness=2 +[/card] +[card] name=Firja's Retribution auto=counter(0/0,1,Lore) auto=@each my firstmain:counter(0/0,1,Lore) @@ -23236,6 +23395,17 @@ type=Artifact subtype=Food [/card] [card] +name=Food Chain +auto=this(variable{type:creature:myrestrictedcastingzone}>0) {E(creature|myBattlefield)}:name(Add White) thisforeach(variable{storedmanacostplus1plusend}) add{W} +auto=this(variable{type:creature:myrestrictedcastingzone}>0) {E(creature|myBattlefield)}:name(Add Blue) thisforeach(variable{storedmanacostplus1plusend}) add{U} +auto=this(variable{type:creature:myrestrictedcastingzone}>0) {E(creature|myBattlefield)}:name(Add Black) thisforeach(variable{storedmanacostplus1plusend}) add{B} +auto=this(variable{type:creature:myrestrictedcastingzone}>0) {E(creature|myBattlefield)}:name(Add Red) thisforeach(variable{storedmanacostplus1plusend}) add{R} +auto=this(variable{type:creature:myrestrictedcastingzone}>0) {E(creature|myBattlefield)}:name(Add Green) thisforeach(variable{storedmanacostplus1plusend}) add{G} +text=Exile a creature you control: Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells. +mana={2}{G} +type=Enchantment +[/card] +[card] name=Footfall Crater abilities=cycling target=land @@ -23294,15 +23464,26 @@ type=Instant [card] name=Force of Negation target=*[-creature]|stack -auto=fizzleto(exile) other={E(other *[blue]|myhand)} name(Exile a Blue Card from Hand) +otherrestriction=opponentturnonly +auto=fizzleto(exile) text=If it's not your turn, you may exile a blue card from your hand rather than pay this spell's mana cost. -- Counter target noncreature spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. mana={1}{U}{U} type=Instant [/card] [card] +name=Force of Rage +other={E(other *[red]|myhand)} name(Exile a Red Card from Hand) +otherrestriction=opponentturnonly +auto=token(Elemental,Creature Elemental,3/1,red,haste,trample)*2 and!( transforms((,newability[@each my upkeep:name(Sacrifice elemental token) sacrifice])) forever )! +text=If it's not your turn, you may exile a red card from your hand rather than pay this spell's mana cost. -- Create two 3/1 red Elemental creature tokens with trample and haste. Sacrifice those tokens at the beginning of your next upkeep. +mana={1}{R}{R} +type=Instant +[/card] +[card] name=Force of Vigor other={E(*[green]|myhand)} name(Exile a Green Card from Hand) +otherrestriction=opponentturnonly auto=destroy target(*[artifact,enchantment]|battlefield) text=If it's not your turn, you may exile a green card from your hand rather than pay this spell's mana cost. -- Destroy up to two target artifacts and/or enchantments. mana={2}{G}{G} @@ -23310,8 +23491,9 @@ type=Instant [/card] [card] name=Force of Virtue -other={E(*[white]|myhand)} abilities=flash +other={E(*[white]|myhand)} name(Exile a White Card from Hand) +otherrestriction=opponentturnonly auto=lord(creature|myBattlefield) 1/1 text=If it's not your turn, you may exile a white card from your hand rather than pay this spell's mana cost. -- Flash -- Creatures you control get +1/+1. mana={2}{W}{W} @@ -23401,6 +23583,14 @@ power=2 toughness=2 [/card] [card] +name=Foreshadow +auto=chooseanameopp name(Mill opponent) all(*[zpos=1]|opponentLibrary) moveto(opponentGraveyard) and!( if cantargetcard(*[chosenname]|*) then draw:1 controller )! chooseend +auto=@next upkeep:draw:1 controller +text=Name a card, then put the top card of target opponent's library into his or her graveyard. If that card is the named card, you draw a card. -- Draw a card at the beginning of the next turn's upkeep. +mana={1}{U} +type=Instant +[/card] +[card] name=Forever Young target=creature|mygraveyard auto=moveTo(mylibrary) @@ -24861,7 +25051,7 @@ toughness=3 [card] name=Geode Rager abilities=first strike -auto=_LANDFALL_name(Choose one) ability$!name(Choose one) choice name(Goad opponent creatures) mustattack all(creature|opponentBattlefield) uynt _ choice name(Goad your creatures) mustattack all(creature|myBattlefield) uynt!$ controller +auto=_LANDFALL_name(Choose one) ability$!name(Choose one) choice name(Goad opponent creatures) all(creature|opponentBattlefield) _GOAD_ _ choice name(Goad your creatures) all(creature|myBattlefield) _GOAD_!$ controller text=First strike -- Landfall Whenever a land enters the battlefield under your control, goad each creature target player controls. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.) mana={4}{R}{R} type=Creature @@ -26425,7 +26615,7 @@ type=Enchantment [/card] [card] name=Goblin Racketeer -auto=_ATTACKING_may name(Goad creature) target(creature|opponentBattlefield) transforms((,newability[mustattack])) uynt +auto=_ATTACKING_may name(Goad creature) target(creature|opponentBattlefield) _GOAD_ text=Whenever Goblin Racketeer attacks, you may goad target creature defending player controls. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) mana={3}{R} type=Creature @@ -26803,6 +26993,7 @@ toughness=9 name=Goldspan Dragon abilities=flying,haste auto=@targeted(this):token(Treasure Sur) +auto=@combat(attacking) source(this):token(Treasure Sur) auto=lord(artifact[treasure]|mybattlefield) transforms((,newability[{T}{S}:add{W}{W}],newability[{T}{S}:add{R}{R}],newability[{T}{S}:add{U}{U}],newability[{T}{S}:add{G}{G}],newability[{T}{S}:add{B}{B}])) text=Flying, haste -- Whenever Goldspan Dragon attacks or becomes the target of a spell, create a Treasure token. -- Treasures you control have "{T}, Sacrifice this artifact: Add two mana of any one color." mana={3}{R}{R} @@ -27281,8 +27472,8 @@ toughness=1 name=Graven Dominator abilities=flying auto=name(Creatures become 1/1) all(other creature|battlefield) becomes(,1/1) ueot -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.GravenHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.GravenHaunted}]|graveyard) from(battlefield) once:name(Creatures become 1/1) all(other creature|battlefield) becomes(,1/1) ueot +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Creatures become 1/1) all(other creature|battlefield) becomes(^1/1) ueot])) text=Flying -- Haunt (When this creature dies, exile it haunting target creature.) -- When Graven Dominator enters the battlefield or the creature it haunts dies, each other creature becomes 1/1 until end of turn. mana={4}{W}{W} type=Creature @@ -27481,10 +27672,10 @@ toughness=2 [/card] [card] name=Grenzo, Havoc Raiser -auto=@combatdamagefoeof(player) from(creature|mybattlefield) restriction{type(creature|opponentBattlefield)~morethan~0}:name(Goad creature) name(Goad creature) target(creature|opponentBattlefield) transforms((,newability[mustattack])) uynt -auto=@combatdamagefoeof(player) from(creature|mybattlefield) restriction{type(creature|opponentBattlefield)~equalto~0}:name(Exile top card) name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once] moveTo(ownerexile)])) ueot )! -auto=@combatdamageof(player) from(creature|mybattlefield) restriction{type(creature|mybattlefield)~morethan~0}:name(Goad creature) name(Goad creature) target(creature|myBattlefield) transforms((,newability[mustattack])) uynt -auto=@combatdamageof(player) from(creature|mybattlefield) restriction{type(creature|mybattlefield)~equalto~0}:name(Exile top card) name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana])) ueot )! +auto=@combatdamagefoeof(player) from(creature|mybattlefield) restriction{type(creature|opponentBattlefield)~morethan~0}:ability$!name(Choose one) choice name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once] moveTo(ownerexile)])) ueot )! _ choice name(Goad opponent creature) _GOAD_!$ controller +auto=@combatdamagefoeof(player) from(creature|mybattlefield) restriction{type(creature|opponentBattlefield)~equalto~0}:name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once] moveTo(ownerexile)])) ueot )! +auto=@combatdamageof(player) from(creature|mybattlefield) restriction{type(creature|mybattlefield)~morethan~0}:ability$!name(Choose one) choice name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana])) ueot )! _ choice name(Goad your creature) target(creature|myBattlefield) _GOAD_!$ controller +auto=@combatdamageof(player) from(creature|mybattlefield) restriction{type(creature|mybattlefield)~equalto~0}:name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana])) ueot )! text=Whenever a creature you control deals combat damage to a player, choose one -- Goad target creature that player controls. -- Exile the top card of that player's library. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. mana={R}{R} type=Legendary Creature @@ -29498,7 +29689,7 @@ toughness=3 [/card] [card] name=Helm of the Host -auto=teach(creature) @each my combatbegins:clone(mytgt) with (haste,-legendary) +auto=teach(creature) transforms((,newability[@each my combatbegins:clone with(haste) options(nolegend)])) auto={5}:equip text=At the beginning of combat on your turn, create a token that's a copy of equipped creature, except the token isn't legendary if equipped creature is legendary. That token gains haste. -- Equip {5} mana={4} @@ -33557,7 +33748,7 @@ type=Legendary Sorcery [/card] [card] name=Jeering Homunculus -auto=may name(Goad creature) target(creature|battlefield) transforms((,newability[mustattack])) uynt +auto=may name(Goad creature) target(creature|battlefield) _GOAD_ text=When Jeering Homunculus enters the battlefield, you may goad target creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) mana={1}{U} type=Creature @@ -33568,8 +33759,8 @@ toughness=4 [card] name=Jeska's Will auto=choice name(Add Red mana) foreach(*|opponenthand) add{R} -auto=choice name(Exile 3 cards) moveto(exile) and!( transforms((,canplayfromexile)) ueot )! all(*[zpos<=3]|mylibrary) -auto=if type(*[iscommander]|mybattlefield)~morethan~0 then choice name(Choose both) name(Choose both) moveto(exile) and!( transforms((,canplayfromexile])) ueot )! all(*[zpos<=3]|mylibrary) && foreach(*|opponenthand) add{R} +auto=choice name(Exile 3 cards) all(*[zpos<=3]|mylibrary) moveto(exile) and!( transforms((,newability[canplayfromexile])) ueot )! +auto=if type(*[iscommander]|mybattlefield)~morethan~0 then choice name(Choose both) name(Choose both) all(*[zpos<=3]|mylibrary) moveto(exile) and!( transforms((,newability[canplayfromexile])) ueot )! && foreach(*|opponenthand) add{R} text=Choose one. If you control a commander as you cast this spell, you may choose both. -- Add {R} for each card in target opponent's hand. -- Exile the top three cards of your library. You may play them this turn. mana={2}{R} type=Sorcery @@ -34236,7 +34427,7 @@ type=Instant [/card] [card] name=Karazikar, the Eye Tyrant -auto=@each my blockers:name(Tap opponent creature) target(creature|opponentbattlefield) transforms((,newability[tap(noevent)],newability[mustattack])) uynt +auto=@each my blockers:name(Tap opponent creature) target(creature|opponentbattlefield) transforms((,newability[tap(noevent)],newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever text=Whenever you attack a player, tap target creature that player controls and goad it. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) -- Whenever an opponent attacks another one of your opponents, you and the attacking player each draw a card and lose 1 life. mana={3}{B}{R} type=Legendary Creature @@ -36289,6 +36480,15 @@ power=4 toughness=6 [/card] [card] +name=Laquatus's Disdain +target=*|stack +auto=transforms((,newability[if gravecast then fizzle])) forever +auto=draw:1 controller +text=Counter target spell cast from a graveyard. -- Draw a card. +mana={1}{U} +type=Instant +[/card] +[card] name=Lash of Malice target=creature auto=2/-2 ueot @@ -37053,6 +37253,18 @@ mana={2}{R}{R} type=Enchantment [/card] [card] +name=Leovold, Emissary of Trest +auto=@drawfoeof(player) restriction{compare(odrewcount)~morethan~1}:name(Opponent can't draw more than 1) transforms((,newability[all(*[zpos=type:*:opponenthand]|opponenthand) moveto(ownerlibrary)])) oneshot +auto=@movedto(*[instant;sorcery]|opponentstack):may name(Draw a card) draw:1 controller +auto=@targeted(*|mybattlefield) from(*[-instant;-sorcery]|opponentzones):may name(Draw a card) draw:1 controller +text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. +mana={B}{G}{U} +type=Legendary Creature +subtype=Elf Advisor +power=3 +toughness=3 +[/card] +[card] name=Liberating Combustion target=creature auto=damage:6 @@ -38329,6 +38541,14 @@ mana={3}{U}{U} type=Sorcery [/card] [card] +name=Lucky Clover +auto=@movedTo(instant[adventure]|myStack):all(trigger[to]) activate castcard(alternative copied) +auto=@movedTo(sorcery[adventure]|myStack):all(trigger[to]) activate castcard(alternative copied) +text=Whenever you cast an Adventure instant or sorcery spell, copy it. You may choose new targets for the copy. +mana={2} +type=Artifact +[/card] +[card] name=Ludevic, Necro-Alchemist abilities=partner auto=@each my end restriction{compare(oplifelost)~morethan~0}:may draw:1 controller @@ -39449,7 +39669,7 @@ toughness=5 [card] name=Martial Impetus target=creature -auto=mustattack +auto=teach(creature) transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack])) auto=1/1 auto=_ATTACKING_all(creature[attacking]|myBattlefield) 1/1 ueot text=Enchant creature -- Enchanted creature gets +1/+1 and is goaded. (It attacks each combat if able and attacks a player other than you if able.) -- Whenever enchanted creature attacks, each other creature thats attacking one of your opponents gets +1/+1 until end of turn. @@ -39925,6 +40145,18 @@ type=Enchantment subtype=Saga [/card] [card] +name=Medomai the Ageless +abilities=flying +auto=this(counter{0/0.1.ExtraTurn}>0) transforms((,newability[cantattack],newability[cantpwattack])) +auto=@combatdamaged(player) from(this):name(Take an extra turn) transforms((,newability[phaseaction[endofturn next once sourceinplay] counter(0/0.-1.ExtraTurn)],newability[counter(0/0.1.ExtraTurn)],newability[turns:+1 controller])) oneshot +text=Flying -- Whenever Medomai the Ageless deals combat damage to a player, take an extra turn after this one. -- Medomai the Ageless can't attack during extra turns. +mana={4}{W}{U} +type=Legendary Creature +subtype=Sphinx +power=4 +toughness=4 +[/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. @@ -40306,6 +40538,17 @@ power=2 toughness=2 [/card] [card] +name=Mesmeric Sliver +aicode=activate target(*[zpos<=1]|opponentlibrary) moveto(myreveal) and!( bottomoflibrary )! +auto=@movedto(sliver|battlefield):name(Fatseal 1) all(trigger[to]) transforms((,newability[may name(Look opponent top card) reveal:1 revealzone(opponentlibrary) optionone name(Put on bottom) target(*|reveal) bottomoflibrary optiononeend optiontwo name(Put back) all(*|reveal) moveto(ownerlibrary) optiontwoend revealend])) oneshot +text=All Slivers have "When this permanent enters the battlefield, you may fateseal 1." (To fateseal 1, its controller looks at the top card of an opponent's library, then he or she may put that card on the bottom of that library.) +mana={3}{U} +type=Creature +subtype=Sliver +power=2 +toughness=2 +[/card] +[card] name=Mesmerizing Benthid auto=aslongas(Illusion|myBattlefield) opponentshroud auto=create(Illusion:creature Illusion:0/2:blue:creature[blocked]:freeze)*2 @@ -40336,6 +40579,18 @@ type=Enchantment subtype=Aura [/card] [card] +name=Metamorphosis +restriction=type(creature|myrestrictedcastingzone)~morethan~0 +auto=choice name(White Mana) thisforeach(variable{storedmanacostplus1plusend}) add{W} +auto=choice name(Blue Mana) thisforeach(variable{storedmanacostplus1plusend}) add{U} +auto=choice name(Black Mana) thisforeach(variable{storedmanacostplus1plusend}) add{B} +auto=choice name(Red Mana) thisforeach(variable{storedmanacostplus1plusend}) add{R} +auto=choice name(Green Mana) thisforeach(variable{storedmanacostplus1plusend}) add{G} +text=As an additional cost to cast Metamorphosis, sacrifice a creature. -- Add X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells. +mana={G}{S(creature|myBattlefield)} +type=Sorcery +[/card] +[card] name=Meteor Blast auto=thisforeach(X) ability$!name(Choose one) choice name(4 damages to player) damage:4 target(player) _ choice name(4 damages to planeswalker) damage:4 target(planeswalker) _ choice name(4 damages to creature) damage:4 target(creature)!$ controller mana={X}{R}{R}{R} @@ -41428,9 +41683,9 @@ type=Instant [/card] [card] name=Moraug, Fury of Akoum -auto=@combat(attacking) source(creature|myBattlefield):1/0 ueot -auto=_LANDFALL_nextphasealter(add,combatphaseswithmain,controller,after) -auto=_LANDFALL_transforms((,newability[@each my combatbegins:untap all(creature|myBattlefield)])) oneshot +auto=@combat(attacking) source(creature|myBattlefield):all(trigger[to]) 1/0 ueot +auto=_LANDFALL_if compare(currentphase)~equalto~4 then nextphasealter(add,combatphaseswithmain,controller,after) else if compare(currentphase)~equalto~10 then nextphasealter(add,combatphaseswithmain,controller,after) else +auto=_LANDFALL_all(creature|mybattlefield) transforms((,newability[@each my combatends turnlimited:phaseaction[combatbegins once sourceinplay] untap])) ueot text=Each creature you control gets +1/+0 for each time it has attacked this turn. -- Landfall Whenever a land enters the battlefield under your control, if it's your main phase, there's an additional combat phase after this phase. At the beginning of that combat, untap all creatures you control. mana={4}{R}{R} type=Legendary Creature @@ -41524,10 +41779,10 @@ toughness=4 [card] name=Mosswort Bridge auto=tap(noevent) -aicode=activate target(*[zpos<=4]|mylibrary) imprint && all(*[zpos<=4]|opponentlibrary) moveto(myreveal) and!( bottomoflibrary )! +aicode=activate target(*[zpos<=4]|mylibrary) imprint and!( all(*[zpos<=4]|opponentlibrary) moveto(myreveal) and!( bottomoflibrary )! )! auto=name(look) reveal:4 optionone name(Exile a card) target(*|reveal) imprint optiononeend optiontwo name(put on bottom) all(*|reveal) bottomoflibrary optiontwoend revealend auto={T}:add{G} -auto={G}{T} restriction{compare(hasevict)~morethan~0,compare(powertotalinplay)~morethan~9}:name(Cast exiled card) transforms((,newability[may name(Cast exiled card) target(*[evictname]|myexile) activate castcard(normal)])) forever +auto=this(variable{hasevict}>0) {G}{T} restriction{compare(powertotalinplay)~morethan~9}:name(Cast exiled card) name(Cast exiled card) transforms((,newability[may name(Cast exiled card) target(*[evictname]|myexile) activate castcard(normal)])) forever text=Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.) -- {T}: Add {G}. -- {G}, {T}: You may play the exiled card without paying its mana cost if creatures you control have total power 10 or greater. type=Land [/card] @@ -45111,8 +45366,8 @@ toughness=2 [card] name=Orzhov Euthanist auto=name(Destroy damaged creature) target(creature[damaged]) destroy -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.EuthanistHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.EuthanistHaunted}]|graveyard) from(battlefield) once:name(Destroy damaged creature) target(creature[damaged]) destroy +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Destroy damaged creature) target(creature[damaged]) destroy])) text=Haunt (When this creature dies, exile it haunting target creature.) -- When Orzhov Euthanist enters the battlefield or the creature it haunts dies, destroy target creature that was dealt damage this turn. mana={2}{B} type=Creature @@ -45132,8 +45387,8 @@ type=Artifact [card] name=Orzhov Pontiff auto=name(Choose one) transforms((,newability[choice name(Your creature gets 1/1) all(creature|mybattlefield) 1/1 ueot],newability[choice name(Opponent creature gets -1/-1) all(creature|opponentbattlefield) -1/-1 ueot])) oneshot -auto=_DIES_all(trigger[to]) transforms((,newability[moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) counter(0/0.1.PontiffHaunted)])) oneshot )!])) oneshot -autoexile=@movedto(creature[counter{0/0.1.PontiffHaunted}]|graveyard) from(battlefield) once:name(Choose one) transforms((,newability[choice name(Your creature gets 1/1) all(creature|mybattlefield) 1/1 ueot],newability[choice name(Opponent creature gets -1/-1) all(creature|opponentbattlefield) -1/-1 ueot])) oneshot +auto=_DIES_name(Exile and haunt a creature) all(trigger[to]) transforms((,newability[if type(creature|battlefield)~morethan~0 then moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt])) oneshot )!])) oneshot +autoexile=this(variable{hasprey}>0) transforms((,newability[@movedto(creature[preyname&isprey]|graveyard) from(battlefield):name(Choose one) transforms((,newability[choice name(Your creature gets 1/1) all(creature|mybattlefield) 1/1 ueot],newability[choice name(Opponent creature gets -1/-1) all(creature|opponentbattlefield) -1/-1 ueot])) oneshot])) text=Haunt (When this creature dies, exile it haunting target creature.) -- When Orzhov Pontiff enters the battlefield or the creature it haunts dies, choose one Creatures you control get +1/+1 until end of turn; or creatures you don't control get -1/-1 until end of turn. mana={1}{W}{B} type=Creature @@ -45761,9 +46016,8 @@ type=Enchantment [card] name=Parasitic Impetus target=creature -auto=mustattack +auto=teach(creature) transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[_ATTACKING_life:-2 controller],newability[_ATTACKING_life:2 opponent])) auto=2/2 -auto=_ATTACKING_life:-2 controller && life:2 opponent text=Enchant creature -- Enchanted creature gets +2/+2 and is goaded. (It attacks each combat if able and attacks a player other than you if able.) -- Whenever enchanted creature attacks, its controller loses 2 life and you gain 2 life. mana={2}{B} type=Enchantment @@ -47649,8 +47903,7 @@ type=Sorcery [card] name=Predatory Impetus target=creature -auto=lure -auto=transforms((,newability[_ATTACKING_all(creature|opponentbattlefield) mustblock ueot])) forever +auto=teach(creature) transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) auto=3/3 text=Enchant creature -- Enchanted creature gets +3/+3, must be blocked if able, and is goaded. (It attacks each combat if able and attacks a player other than you if able.) mana={4}{G} @@ -48451,10 +48704,9 @@ type=Enchantment [card] name=Psychic Impetus target=creature -auto=mustattack -auto=2/2 aicode=activate transforms((,newability[all(*[zpos<=2]|mylibrary) transforms((,newability[may name(Put on bottom of library) moveto(myreveal) and!( bottomoflibrary )!])) oneshot])) oneshot -auto=_ATTACKING_scry:2 scrycore delayed dontshow donothing scrycoreend scryend +auto=teach(creature) transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[_ATTACKING_scry:2 scrycore delayed dontshow donothing scrycoreend scryend])) +auto=2/2 text=Enchant creature -- Enchanted creature gets +2/+2 and is goaded. (It attacks each combat if able and attacks a player other than you if able.) -- Whenever enchanted creature attacks, you scry 2. mana={2}{U} type=Enchantment @@ -48462,8 +48714,8 @@ 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)~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],newability[@each beginofturn:name(Can play from exile) transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever])) 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],newability[@each beginofturn:name(Can play from exile) transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever])) 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} @@ -49304,8 +49556,8 @@ toughness=1 [/card] [card] name=Ragavan, Nimble Pilferer -other={R}{2} name(Dash) -auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn sourceinplay] moveto(ownerhand) all(this)])) forever +other={1}{R} name(Dash) +auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn once sourceinplay] moveto(ownerhand)])) forever auto=@combatdamaged(player) from(this):token(Treasure Sur) auto=@combatdamagefoeof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)])) ueot )! auto=@combatdamageof(player) from(this):name(Exile top card) name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile])) ueot )! @@ -52478,6 +52730,18 @@ power=3 toughness=2 [/card] [card] +name=Robber of the Rich +abilities=reach,haste +auto=@combat(attacking) source(this) restriction{compare(ohandcount)~morethan~(compare(phandcount)}:name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(exile) and!( counter(0/0,1,RobberExiled) )! +auto=emblem transforms((,newability[lord(rogue|myBattlefield) transforms((,newability[@combat(attacking) source(this):name(Can cast exiled cards) transforms((,newability[{0}:name(Cast exiled card) name(Cast exiled card) target(*[-land;counter{0/0.1.RobberExiled}]|opponentexile) moveto(myexile) and!( transforms((,newability[counter(0/0.1.RobberExiled)],newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)],newability[phaseaction[untap once checkex] counter(0/0.1.RobberExiled)])) ueot )!])) ueot]))])) forever dontremove +text=Reach, haste -- Whenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. +mana={1}{R} +type=Creature +subtype=Human Archer Rogue +power=2 +toughness=2 +[/card] +[card] name=Robe of Stars auto={1}:equip auto=teach(creature) 0/3 @@ -55602,11 +55866,9 @@ type=Sorcery [/card] [card] name=Seize the Soul -abilities=exiledeath target=creature[-black;-white] -auto=destroy && token(Spirit,Creature Spirit,1/1,white,flying) controller -auto=ability$!name(Haunt a creature) name(Haunt a creature) target(creature) counter(0/0.1.SeizeHaunted)!$ controller -autoexile=@movedto(creature[counter{0/0.1.SeizeHaunted}]|graveyard) from(battlefield) once:name(Destroy creature) transforms((,newability[name(Destroy creature) target(creature[-black;-white]|battlefield) destroy],newability[token(Spirit^Creature Spirit^1/1^white^flying) controller])) oneshot +auto=destroy and!( token(Spirit,Creature Spirit,1/1,white,flying) controller )! +auto=if type(creature|mybattlefield)~morethan~0 then name(Exile and haunt a creature) all(this|mystack) moveto(myexile) and!( transforms((,newability[name(Haunt a creature) target(creature) haunt and!( counter(0/0.1.SeizeHaunted) )!],newability[@movedto(creature[isprey&counter{0/0.1.SeizeHaunted}]|graveyard) from(battlefield) once:name(Destroy creature) target(creature[-black;-white]|battlefield) destroy and!( token(Spirit^Creature Spirit^1/1^white^flying) controller )!])) forever )! text=Destroy target nonwhite, nonblack creature. Put a 1/1 white Spirit creature token with flying onto the battlefield. -- Haunt (When this spell card is put into a graveyard after resolving, exile it haunting target creature.) -- When the creature Seize the Soul haunts dies, destroy target nonwhite, nonblack creature. Put a 1/1 white Spirit creature token with flying onto the battlefield. mana={2}{B}{B} type=Instant @@ -56888,9 +57150,8 @@ subtype=Equipment [card] name=Shiny Impetus target=creature -auto=mustattack +auto=teach(creature) transforms((,newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[_ATTACKING_token(Treasure Sur)])) auto=2/2 -auto=_ATTACKING_token(Treasure Sur) text=Enchant creature -- Enchanted creature gets +1/+1 and is goaded. (It attacks each combat if able and attacks a player other than you if able.) -- Whenever enchanted creature attacks, each other creature thats attacking one of your opponents gets +1/+1 until end of turn. mana={2}{W} type=Enchantment @@ -58862,7 +59123,7 @@ toughness=0 [/card] [card] name=Sly Instigator -auto={U}{T}:target(creature|opponentbattlefield) transforms((,newability[unblockable],newability[mustattack])) uynt +auto={U}{T}:target(creature|opponentbattlefield) transforms((,newability[this(counter{0/0.1.Goaded}>0) unblockable],newability[counter(0/0.1.Goaded)],newability[this(counter{0/0.1.Goaded}>0) mustattack],newability[phaseaction[endofturn next once sourceinplay] removeallcounters(0/0.-1.Goaded)])) forever text={U}, {T}: Until your next turn, target creature an opponent controls can't be blocked. Goad that creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) mana={3}{U} type=Creature @@ -60142,6 +60403,14 @@ power=2 toughness=3 [/card] [card] +name=Specter's Shriek +auto=if type(*[-land]|opponenthand)~morethan~0 then name(Exile an opponent card) name(Exile an opponent card) target(*[-land]|opponenthand) moveto(exile) and!( if cantargetcard(*[-black]|*) then ability$!name(Exile a card) name(Exile a card) target(*|myhand) moveto(exile)!$ controller )! +auto=if type(*[-land]|opponenthand)~equalto~0 then name(Look opponent hand) name(Look opponent hand) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) )! +text=Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player exiles that card. If a nonblack card is exiled this way, exile a card from your hand. +mana={B} +type=Sorcery +[/card] +[card] name=Spectral Deluge abilities=foretell autohand={2}:name(Pay 2 and exile face-down) name(Pay 2 and exile face-down) doforetell myturnonly @@ -60259,6 +60528,14 @@ power=2 toughness=2 [/card] [card] +name=Spelljack +target=*[-nofizzle]|stack +auto=fizzleto(exile) && ability$!name(Can cast countered card) name(Can cast countered card) target(*[fresh]|exile) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[zerocast],newability[@each beginofturn:name(Can play from exile) transforms((,newability[canplayfromexile],newability[zerocast])) forever])) forever )! !$ controller +text=Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. You may play it without paying its mana cost for as long as it remains exiled. (If it has X in its mana cost, X is 0.) +mana={3}{U}{U}{U} +type=Instant +[/card] +[card] name=Spellkeeper Weird auto={2}{T}{S}:target(instant,sorcery|mygraveyard) moveto(ownerhand) text={2}, {T}, Sacrifice Spellkeeper Weird: Return target instant or sorcery card from your graveyard to your hand. @@ -60463,6 +60740,17 @@ mana={2}{W}{U} type=Instant [/card] [card] +name=Sphinx of the Chimes +abilities=flying +auto={0}:name(Discard 2 same name cards) target(*[-land]|myhand) transforms((,newability[if type(other *[-land;share!name!]|myhand)~morethan~0 then transforms((,newability[reject],newability[name(Discard same card again) target(*[-land;share!name!]|myhand) reject and!( draw:4 )!])) oneshot])) oneshot +text=Flying -- Discard two nonland cards with the same name: Draw four cards. +mana={4}{U}{U} +type=Creature +subtype=Sphinx +power=5 +toughness=6 +[/card] +[card] name=Spike Cannibal auto=counter(1/1) auto=all(other creature|mybattlefield) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) target(Spike Cannibal[fresh]|mybattlefield) && counter(1/1.-1) all(this)])) oneshot @@ -60722,6 +61010,17 @@ power=0 toughness=4 [/card] [card] +name=Spirit of the Labyrinth +auto=@drawfoeof(player) restriction{compare(odrewcount)~morethan~1}:name(Opponent can't draw more than 1) transforms((,newability[all(*[zpos=type:*:opponenthand]|opponenthand) moveto(ownerlibrary)])) oneshot +auto=@drawof(player) restriction{compare(pdrewcount)~morethan~1}:name(You can't draw more than 1) transforms((,newability[all(*[zpos=type:*:myhand]|myhand) moveto(ownerlibrary)])) oneshot +text=Each player can't draw more than one card each turn. +mana={1}{W} +type=Enchantment Creature +subtype=Spirit +power=3 +toughness=1 +[/card] +[card] name=Spirit of the Spires abilities=flying auto=lord(other creature[flying]|myBattlefield) +0/+1 @@ -63416,7 +63715,7 @@ auto={2}:equip auto=teach(creature) protection from green auto=teach(creature) protection from white auto=teach(creature) 2/2 -auto=@combatdamaged(player) from(mytgt):may name(Exile a creature) target(creature|myBattlefield) moveto(exile) and!( transforms((,newability[moveto(myBattlefield) and!( tap(noevent) )!],newability[name(Search library) target(land[basic]|mylibrary) moveto(mybattlefield) and!( tap(noevent) )!])) oneshot )! +auto=@combatdamaged(player) from(mytgt):may name(Exile a creature) target(creature|myBattlefield) moveto(exile) and!( transforms((,newability[moveto(myBattlefield)],newability[name(Search basic land) target(land[basic]|mylibrary) moveto(mybattlefield)])) oneshot )! text=Equipped creature gets +2/+2 and has protection from green and from white. -- Whenever equipped creature deals combat damage to a player, exile up to one target creature you own, then search your library for a basic land card. Put both cards onto the battlefield under your control, then shuffle. -- Equip {2} mana={3} type=Artifact @@ -63820,7 +64119,9 @@ toughness=1 [card] name=Taigam, Ojutai Master auto=lord(instant,sorcery,dragon|mycastingzone) nofizzle -auto=@movedto(*[instant;sorcery]|mystack) restriction{lastturn(this[attacking]|myBattlefield)}: rebound +auto=@combat(attacking) source(this):name(Next spells gain rebound) transforms((,newability[@movedTo(*[instant;sorcery]|myStack):all(trigger[to]) transforms((,newability[gainedexiledeath],newability[phaseaction[my upkeep once] counter(0/0.1.MasterExile)])) ueot])) ueot +auto=@each my upkeep:all(*[instant;sorcery]|myexile) removeallcounters(0/0,-1,MasterExile) +auto=@each my upkeep:foreach(*[counter{0/0.1.MasterExile}]|myexile) ability$!name(Choose one) choice name(Cast card from exile) activate castcard(normal) target(*[instant;sorcery;counter{0/0.1.MasterExile}]|myexile) _ choice name(Don't cast card from exile) donothing!$ controller text=Instant, sorcery, and Dragon spells you control cant be countered. -- Whenever you cast an instant or sorcery spell from your hand, if Taigam, Ojutai Master attacked this turn, that spell gains rebound. (Exile the spell as it resolves. At the beginning of your next upkeep, you may cast that card from exile without paying its mana cost.) mana={2}{W}{U} type=Legendary Creature @@ -64432,7 +64733,7 @@ toughness=3 [/card] [card] name=Teferi's Ageless Insight -auto=replacedraw draw:2 noreplace +auto=replacedraw if compare(currentphase)~equalto~3 then draw:1 noreplace else draw:2 noreplace text=If you would draw a card except the first one you draw in each of your draw steps, draw two cards instead. mana={2}{U}{U} type=Legendary Enchantment @@ -64794,8 +65095,7 @@ type=Sorcery [card] name=Terramorph auto=name(Search library) target(land[basic]|mylibrary) moveto(myBattlefield) and!( shuffle )! -auto=if rebound then ability$!moveto(exile) all(Terramorph|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Search your library for a basic land card, put it onto the battlefield, then shuffle. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{G} type=Sorcery @@ -66010,7 +66310,7 @@ toughness=4 [card] name=Thrasios, Triton Hero abilities=partner -aicode=activate if type(land[zpos=1]|mylibrary)~equalto~0 then draw:1 controller else all(land[zpos=1]|mylibrary) moveto(mybattlefield) and!( tap(noevent) )! +aicode=activate target(*[zpos<=1]|mylibrary) moveto(myhand) and!( if cantargetcard(*[land]|*) then moveto(mybattlefield) and!( tap(noevent) )! )! auto={4}:scry:1 scrycore delayed dontshow transforms((,newability[if type(land[zpos=1]|mylibrary)~equalto~0 then all(*[zpos=1]|mylibrary) moveto(myhand) else all(land[zpos=1]|mylibrary) moveto(mybattlefield) and!( tap(noevent) )!])) oneshot scrycoreend scryend text={4}: Scry 1, then reveal the top card of your library. If its a land card, put it onto the battlefield tapped. Otherwise, draw a card. -- Partner (You can have two commanders if both have partner.) mana={G}{U} @@ -67004,10 +67304,10 @@ toughness=2 [/card] [card] name=Tome of Legends -auto=counter(0/0,1,Page) all(this) -auto=@movedto(*[iscommander]|myBattlefield):conunter(0/0,1,Page) all(this) -auto=@combat(attacking) source(creature[iscommander]|myBattlefield):conunter(0/0,1,Page) all(this) -auto={1}{T}{C(0/0,-1,Page)}:Draw:1 controller +auto=counter(0/0,1,Page) +auto=@movedto(*[iscommander]|myBattlefield):name(Put a page counter) counter(0/0,1,Page) +auto=@combat(attacking) source(creature[iscommander]|myBattlefield):name(Put a page counter) counter(0/0,1,Page) +auto={1}{T}{C(0/0,-1,Page)}:name(Draw a card) draw:1 controller text=Tome of Legends enters the battlefield with a page counter on it. -- Whenever your commander enters the battlefield or attacks, put a page counter on Tome of Legends. -- {1}, {T}, Remove a page counter from Tome of Legends: Draw a card. mana={2} type=Artifact @@ -67991,9 +68291,8 @@ toughness=3 [/card] [card] name=Trumpeting Herd -auto=create(Elephant:creature Elephant:3/3:green) -auto=if rebound then ability$!moveto(exile) all(Trumpeting Herd|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=token(Elephant,Creature Elephant,3/3,green) +auto=_REBOUND_ text=Create a 3/3 green Elephant creature token. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={2}{G}{G} type=Sorcery @@ -69025,7 +69324,7 @@ toughness=3 [card] name=Unsettled Mariner abilities=changeling -auto=@movedto(*|opponentstack):target(*|opponentstack) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot +auto=@movedto(*[instant;sorcery]|opponentstack):may name(Counter a spell that target you or your permanents) target(*[instant;sorcery]|opponentstack) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot text=Changeling (This card is every creature type.) -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. mana={W}{U} type=Creature @@ -69350,7 +69649,8 @@ name=Valakut Awakening restriction=compare(isflipped)~equalto~0 anyzone={0}:doubleside(Valakut Stoneforge) autohand={0}:restriction{can play land,compare(isflipped)~equalto~1} name(Valakut Stoneforge) name(Valakut Stoneforge) flip(Valakut Stoneforge) forcetype(land) -auto=name(Put cards and draw that many) name(Put cards and draw that many) all(*|myhand) transforms((,newability[draw:1],newability[bottomoflibrary])])) && draw:1 +auto=may name(Put cards on bottom and draw) target(*|myhand) bottomoflibrary and!( draw:1 )! +auto=draw:1 controller text=Put any number of cards from your hand on the bottom of your library, then draw that many cards plus one. // Valakut Stoneforge mana={2}{R} type=Instant @@ -69471,7 +69771,7 @@ toughness=1 name=Valkmira, Protector's Shield auto=lord(*|mybattlefield) absorb auto=@damageof(player):life:1 controller -auto=@movedto(*|opponentstack):target(*|opponentstack) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot +auto=@movedto(*[instant;sorcery]|opponentstack):may name(Counter a spell that target you or your permanents) target(*[instant;sorcery]|opponentstack) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot text=If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. // {2}{W} Reidane, God of the Worthy mana={3}{W} type=Legendary Artifact @@ -70042,9 +70342,9 @@ toughness=4 [card] name=Vengeful Ancestor abilities=flying -auto=name(Goad creature) target(creature|battlefield) transforms((,newability[mustattack])) uynt -auto=_ATTACKING_name(Goad creature) target(creature|battlefield) transforms((,newability[mustattack],newability[_ATTACKING_damage:1 controller])) uynt -auto=lord(creature[mustattack]|battlefield) transforms((,newability[_ATTACKING_damage:1 controller])) oneshot +auto=name(Goad creature) target(creature|battlefield) _GOAD_ +auto=_ATTACKING_name(Goad creature) target(creature|battlefield) _GOAD_ +auto=lord(creature[counter{0/0.1.Goaded}]|battlefield) transforms((,newability[_ATTACKING_damage:1 controller])) text=Flying -- When Vengeful Ancestor enters the battlefield or attacks, goad target creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.) -- Whenever a goaded creature attacks, it deals 1 damage to its controller. mana={2}{R}{R} type=Creature diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index a920ceaa9..b81aab5c3 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -6104,8 +6104,7 @@ type=Sorcery name=Artful Maneuver target=creature auto=2/2 ueot -auto=if rebound then ability$!moveto(exile) all(Artful Maneuver|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature gets +2/+2 until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={1}{W} type=Instant @@ -18184,8 +18183,7 @@ auto=choice name(red) transforms((,newability[protection from red])) ueot auto=choice name(blue) transforms((,newability[protection from blue])) ueot auto=choice name(black) transforms((,newability[protection from black])) ueot auto=choice name(white) transforms((,newability[protection from white])) ueot -auto=if rebound then ability$!moveto(exile) all(Center Soul|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature you control gains protection from the color of your choice until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={1}{W} type=Instant @@ -22106,8 +22104,7 @@ type=Instant name=Consuming Vapors target=player auto=ability$! notatarget(creature|mybattlefield) dynamicability sacrifice ) !$ targetedplayer -auto=if rebound then ability$!moveto(exile) all(Consuming Vapors|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target player sacrifices a creature. You gain life equal to that creature's toughness. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{B} type=Sorcery @@ -30214,8 +30211,7 @@ name=Distortion Strike target=creature auto=1/0 ueot auto=unblockable ueot -auto=if rebound then ability$!moveto(exile) all(Distortion Strike|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature gets +1/+0 until end of turn and is unblockable this turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={U} type=Sorcery @@ -35460,8 +35456,7 @@ auto=choice name(red) transforms((,newability[protection from red])) ueot auto=choice name(blue) transforms((,newability[protection from blue])) ueot auto=choice name(black) transforms((,newability[protection from black])) ueot auto=choice name(white) transforms((,newability[protection from white])) ueot -auto=if rebound then ability$!moveto(exile) all(Emerge Unscathed|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature you control gains protection from the color of your choice until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={W} type=Instant @@ -49859,8 +49854,7 @@ toughness=3 [card] name=Great Teacher's Decree auto=all(creature|mybattlefield) 2/1 ueot -auto=if rebound then ability$!moveto(exile) all(Great Teacher's Decree|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Creatures you control get +2/+1 until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{W} type=Sorcery @@ -80530,8 +80524,7 @@ toughness=2 [card] name=Nomads' Assembly auto=token(Kor Soldier,Creature Kor Soldier,1/1,white)*type:creature:mybattlefield -auto=if rebound then ability$!moveto(exile) all(Nomads' Assembly|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Put a 1/1 white Kor Soldier creature token onto the battlefield for each creature you control. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={4}{W}{W} type=Sorcery @@ -81906,17 +81899,15 @@ toughness=6 name=Ojutai's Breath target=creature auto=freeze -auto=if rebound then ability$!moveto(exile) all(Ojutai's Breath|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Tap target creature. It doesn't untap during its controller's next untap step. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={2}{U} type=Instant [/card] [card] name=Ojutai's Summons -auto=create(Djinn Monk:Creature Djinn Monk:2/2:flying:blue) -auto=if rebound then ability$!moveto(exile) all(Ojutai's Summons|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=token(Djinn Monk,Creature Djinn Monk,2/2,flying,blue) +auto=_REBOUND_ text=Put a 2/2 blue Djinn Monk creature token with flying onto the battlefield. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{U}{U} type=Sorcery @@ -88191,8 +88182,7 @@ type=Sorcery name=Prey's Vengeance target=creature auto=2/2 -auto=if rebound then ability$!moveto(exile) all(Prey's Vengeance|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature gets +2/+2 until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={G} type=Instant @@ -88949,8 +88939,7 @@ type=Sorcery name=Profound Journey target=*[-instant;-sorcery]|mygraveyard auto=moveto(ownerbattlefield) -auto=if rebound then ability$!moveto(exile) all(Profound Journey|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Return target permanent card from your graveyard to the battlefield. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={5}{W}{W} type=Sorcery @@ -93160,8 +93149,7 @@ type=Instant name=Recurring Insight target=opponent auto=draw:type:*:targetedpersonshand controller -auto=if rebound then ability$!moveto(exile) all(Recurring Insight|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Draw cards equal to the number of cards in target opponent's hand. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={4}{U}{U} type=Sorcery @@ -105066,8 +105054,7 @@ name=Sight Beyond Sight abilities=hiddenface aicode=activate transforms((,newability[moveto(myhand) all(*[zpos=1]|mylibrary) && bottomoflibrary all(*[zpos=2]|mylibrary)])) ueot auto=name(look) reveal:2 optionone name(Get a card) target(<1>*|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<2>*|reveal) bottomoflibrary optiontwoend revealend -auto=if rebound then ability$!moveto(exile) all(Sight Beyond Sight|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Look at the top two cards of your library. Put one of them into your hand and the other on the bottom of your library. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{U} type=Sorcery @@ -108207,13 +108194,14 @@ toughness=2 [/card] [card] name=Smallpox -auto=ability$!life:-1 all(player)!$ controller -auto=ability$!reject notatarget(*|myhand)!$ controller -auto=ability$!reject notatarget(*|myhand)!$ opponent -auto=ability$!sacrifice notatarget(creature|mybattlefield)!$ controller -auto=ability$!sacrifice notatarget(creature|mybattlefield)!$ opponent -auto=ability$!sacrifice notatarget(land|mybattlefield)!$ controller -auto=ability$!sacrifice notatarget(land|mybattlefield)!$ opponent +auto=life:-1 controller +auto=life:-1 opponent +auto=ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject!$ controller +auto=ability$!name(Discard a card) name(Discard a card) target(*|myhand) reject!$ opponent +auto=ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature|mybattlefield) sacrifice!$ controller +auto=ability$!name(Sacrifice a creature) name(Sacrifice a creature) target(creature|mybattlefield) sacrifice!$ opponent +auto=ability$!name(Sacrifice a land) name(Sacrifice a land) target(land|mybattlefield) sacrifice!$ controller +auto=ability$!name(Sacrifice a land) name(Sacrifice a land) target(land|mybattlefield) sacrifice!$ opponent text=Each player loses 1 life, discards a card, sacrifices a creature, then sacrifices a land. mana={B}{B} type=Sorcery @@ -112416,8 +112404,7 @@ toughness=0 name=Staggershock target=creature,player auto=damage:2 -auto=if rebound then ability$!moveto(exile) all(Staggershock|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Staggershock deals 2 damage to target creature or player. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={2}{R} type=Instant @@ -116111,8 +116098,7 @@ toughness=1 [card] name=Surreal Memoir auto=moverandom(instant) from(mygraveyard) to(myhand) -auto=if rebound then ability$!moveto(exile) all(Surreal Memoir|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Return an instant card at random from your graveyard to your hand. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{R} type=Sorcery @@ -116140,8 +116126,7 @@ type=Sorcery name=Survival Cache auto=life:2 controller auto=if compare(lifetotal)~morethan~compare(opponentlifetotal) then draw:1 controller -auto=if rebound then ability$!moveto(exile) all(Survival Cache|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=You gain 2 life. Then if you have more life than an opponent, draw a card. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={2}{W} type=Sorcery @@ -116647,8 +116632,7 @@ subtype=Equipment name=Sword of the Animist auto={2}:equip auto=teach(creature) 1/1 -aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(land[basic]|myLibrary) -auto=@combat(attacking) source(mytgt):name(search card) reveal:plibrarycount optionone name(choose card) target(land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend +auto=@combat(attacking) source(mytgt):may name(search basic land) target(land[basic]|myLibrary) moveTo(myBattlefield) and!( transforms((,newability[tap(noevent)],newability[shuffle])) oneshot )! text=Equipped creature gets +1/+1. -- Whenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. -- Equip {2} mana={2} type=Legendary Artifact @@ -117168,8 +117152,7 @@ name=Taigam's Strike target=creature auto=2/0 ueot auto=unblockable ueot -auto=if rebound then ability$!moveto(exile) all(Taigam's Strike|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature gets +2/+0 until end of turn and can't be blocked this turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{U} type=Sorcery @@ -129395,8 +129378,7 @@ toughness=1 name=Virulent Swipe target=creature auto=transforms((,newability[2/0],newability[deachtouch])) ueot -auto=if rebound then ability$!moveto(exile) all(Virulent Swipe|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Target creature gets +2/+0 and gains deathtouch until end of turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={B} type=Instant @@ -129994,8 +129976,7 @@ type=Sorcery name=Void Squall target=*[-land] auto=moveto(ownerhand) -auto=if rebound then ability$!moveto(exile) all(Void Squall|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=_REBOUND_ text=Return target nonland permanent to its owner's hand. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={4}{U} type=Sorcery @@ -135609,9 +135590,8 @@ toughness=2 [card] name=World at War auto=nextphasealter(add,combatphaseswithmain,controller,after) -auto=untap all(creature[attacking]) -auto=if rebound then ability$!moveto(exile) all(World at War|mystack)!$ controller -autoexile=@rebounded:may activate castcard(normal) +auto=all(creature|mybattlefield) transforms((,newability[@each my combatends turnlimited:phaseaction[combatbegins once sourceinplay] untap])) ueot +auto=_REBOUND_ text=After the first postcombat main phase this turn, there's an additional combat phase followed by an additional main phase. At the beginning of that combat, untap all creatures that attacked this turn. -- Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) mana={3}{R}{R} type=Sorcery diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index cd1928f51..9baed5497 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -1930,6 +1930,7 @@ subtype=Narset [card] name=Narset, Parter of Veils auto=counter(0/0,5,loyalty) +auto=@drawfoeof(player) restriction{compare(odrewcount)~morethan~1}:name(Opponent can't draw more than 1) transforms((,newability[all(*[zpos=type:*:opponenthand]|opponenthand) moveto(ownerlibrary)])) oneshot aicode=activate moveto(myhand) target(*[-creature;-land;zpos<=4]|mylibrary) auto={C(0/0,-2,Loyalty)}:name(-2: Look at the top four cards) name(look) reveal:4 optionone name(Get a card) target(<1>*[-creature;-land]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend text=Each opponent can't draw more than one card each turn. -- −2: Look at the top four cards of your library. You may reveal a noncreature, nonland card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. @@ -1944,8 +1945,8 @@ aicode=activate target(*[-creature;-land;zpos=1]|mylibrary) moveto(myhand) auto={C(0/0,1,Loyalty)}:name(+1: Look at the top noncreature nonland) reveal:1 optionone target(*[-creature;-land]|reveal) moveTo(myHand) optiononeend optiontwo name(Put Back On Top) target(<1>*|reveal) moveTo(myLibrary) optiontwoend revealend auto={C(0/0,-2,Loyalty)}:name(-2: Your next instant or sorcery has rebound) counter(0/0.1.ReboundActive) all(this) auto={C(0/0,-9,Loyalty)}:name(-9: Emblem: "Your opponents can't cast noncreature spells") emblem transforms((,newability[maxCast(*[-creature])0 opponent])) forever dontremove -auto=@movedTo(*[instant;sorcery]|myStack):this(counter{0/0.1.ReboundActive}>=1) all(trigger[to]) transforms((,newability[gainedexiledeath],newability[phaseaction[my upkeep once] counter(0/0.1.PlayExile)])) ueot && counter(0/0.-1.ReboundActive) all(this) -auto=@each my upkeep:if type(*[instant;sorcery;counter{0/0.1.PlayExile}]|myexile)~morethan~0 then ability$!name(Choose one) choice name(Cast card from exile) activate castcard(normal) target(*[instant;sorcery;counter{0/0.1.PlayExile}]|myexile) _ choice name(Don't cast card from exile) all(*[instant;sorcery;counter{0/0.1.PlayExile}]|myexile) counter(0/0.-1.PlayExile)!$ controller +auto=@movedTo(*[instant;sorcery]|myStack):this(counter{0/0.1.ReboundActive}>=1) all(trigger[to]) transforms((,newability[gainedexiledeath],newability[phaseaction[my upkeep once] counter(0/0.1.NarsetExile)])) ueot && counter(0/0.-1.ReboundActive) all(this) +auto=@each my upkeep:if type(*[instant;sorcery;counter{0/0.1.NarsetExile}]|myexile)~morethan~0 then ability$!name(Choose one) choice name(Cast card from exile) activate castcard(normal) target(*[instant;sorcery;counter{0/0.1.NarsetExile}]|myexile) _ choice name(Don't cast card from exile) all(*[instant;sorcery;counter{0/0.1.NarsetExile}]|myexile) removeallcounters(0/0.-1.NarsetExile)!$ controller text=+1: Look at the top card of your library. If it’s a noncreature, nonland card, you may reveal it and put it into your hand. -- −2: When you cast your next instant or sorcery spell from your hand this turn, it gains rebound. (Exile the spell as it resolves. At the beginning of your next upkeep, you may cast that card from exile without paying its mana cost.) -- −9: You get an emblem with “Your opponents can’t cast noncreature spells.” mana={2}{W}{U} type=Legendary Planeswalker diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 7a897bd55..d16ad2c86 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -1961,15 +1961,6 @@ type=Enchantment subtype=Aura [/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} -type=Creature -subtype=Fungus -power=4 -toughness=4 -[/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} @@ -2027,12 +2018,6 @@ mana={2}{W} type=Snow Enchantment [/card] [card] -name=Covetous Urge -text=Target opponent reveals their 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={UB}{UB}{UB}{UB} -type=Sorcery -[/card] -[card] name=Cowed by Wisdom text=Enchant creature -- Enchanted creature can't attack or block unless its controller pays {1} for each card in your hand. mana={W} @@ -2163,76 +2148,6 @@ mana={4}{U}{U} type=Sorcery [/card] [card] -name=Curse of Chaos -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may discard a card. If the player does, he or she draws a card. -mana={2}{R} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Echoes -text=Enchant player -- Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy he or she controls. -mana={4}{U} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Inertia -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of his or her choice. -mana={2}{U} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Misfortunes -text=Enchant player -- At the beginning of your upkeep, you may search your library for a Curse card that doesn't have the same name as a Curse attached to enchanted player, put it onto the battlefield attached to that player, then shuffle your library. -mana={4}{B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Predation -text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it. -mana={2}{G} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Shallow Graves -text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may put a 2/2 black Zombie creature token onto the battlefield tapped. -mana={2}{B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of Vengeance -text=Enchant player -- Whenever enchanted player casts a spell, put a spite counter on Curse of Vengeance. -- When enchanted player loses the game, you gain X life and draw X cards, where X is the number of spite counters on Curse of Vengeance. -mana={B} -type=Enchantment -subtype=Aura Curse -[/card] -[card] -name=Curse of the Cabal -text=Target player sacrifices half the permanents he or she controls, rounded down. -- Suspend 2{2}{B}{B} (Rather than cast this card from your hand, you may pay {2}{B}{B} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) -- At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If he or she does, put two time counters on Curse of the Cabal. -mana={9}{B} -type=Sorcery -[/card] -[card] -name=Curse of the Fire Penguin -text=Curse of the Fire Penquin consumes and confuses enchanted creature. -- -- -- -- Creature Penguin -- Trample -- -- 6/5 -- Whenthiscreatureisputintoagraveyardfromplay,returnCurseoftheFirePenguinfromyourgraveyardtoplay. -mana={4}{R}{R} -type=Enchant Creature -power= -toughness= -[/card] -[card] -name=Curse of the Forsaken -text=Enchant player -- Whenever a creature attacks enchanted player, its controller gains 1 life. -mana={2}{W} -type=Enchantment -subtype=Aura Curse -[/card] -[card] name=Curtain of Light text=Cast Curtain of Light only during combat after blockers are declared. -- Target unblocked attacking creature becomes blocked. (This spell works on unblockable creatures.) -- Draw a card. mana={1}{W} @@ -2342,15 +2257,6 @@ power=2 toughness=4 [/card] [card] -name=Daxos of Meletis -text=Daxos of Meletis can't be blocked by creatures with power 3 or greater. -- Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. -mana={1}{W}{U} -type=Legendary Creature -subtype=Human Soldier -power=2 -toughness=2 -[/card] -[card] name=Day's Undoing text=Each player shuffles his or her hand and graveyard into his or her library, then draws seven cards. If it's your turn, end the turn. (Exile all spells and abilities on the stack, including this card. Discard down to your maximum hand size. Damage wears off, and "this turn" and "until end of turn" effects end.) mana={2}{U} @@ -2364,12 +2270,6 @@ type=Summon subtype=Zombie [/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} -type=Enchantment -[/card] -[card] name=Deadly Poison Sampler text=Whenever you crank Deadly Poison Sampler, until end of turn, target creature gains "Whenever this creature deals combat damage to a player, destroy target creature that player controls." type=Artifact @@ -3426,22 +3326,6 @@ power=2 toughness=2 [/card] [card] -name=Firecat Blitz -text=Put X 1/1 red Elemental Cat creature tokens with haste onto the battlefield. Exile them at the beginning of the next end step. -- Flashback{R}{R}, Sacrifice X Mountains. (You may cast this card from your graveyard for its flashback cost. Then exile it.) -mana={X}{R}{R} -type=Sorcery -[/card] -[card] -name=Firestorm Phoenix -abilities=flying -text=Flying -- If Firestorm Phoenix would die, return Firestorm Phoenix to its owner's hand instead. Until that player's next turn, that player plays with that card revealed in his or her hand and can't play it. -mana={4}{R}{R} -type=Creature -subtype=Phoenix -power=3 -toughness=2 -[/card] -[card] name=First Come, First Served text=The attacking or blocking creature with the lowest collector number has first strike. If two or more creatures are tied, they all have first strike. mana={1}{W} @@ -3536,36 +3420,18 @@ mana={1}{G} type=Instant [/card] [card] -name=Food Chain -text=Exile a creature you control: Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells. -mana={2}{G} -type=Enchantment -[/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} type=Enchantment [/card] [card] -name=Force of Rage -text=If it's not your turn, you may exile a red card from your hand rather than pay this spell's mana cost. -- Create two 3/1 red Elemental creature tokens with trample and haste. Sacrifice those tokens at the beginning of your next upkeep. -mana={1}{R}{R} -type=Instant -[/card] -[card] name=Forcefield text={1}: The next time an unblocked creature of your choice would deal combat damage to you this turn, prevent all but 1 of that damage. mana={3} type=Artifact [/card] [card] -name=Foreshadow -text=Name a card, then put the top card of target opponent's library into his or her graveyard. If that card is the named card, you draw a card. -- Draw a card at the beginning of the next turn's upkeep. -mana={1}{U} -type=Instant -[/card] -[card] name=Forethought Amulet text=At the beginning of your upkeep, sacrifice Forethought Amulet unless you pay {3}. -- If an instant or sorcery source would deal 3 or more damage to you, it deals 2 damage to you instead. mana={5} @@ -5863,12 +5729,6 @@ mana={4}{R} type=Sorcery [/card] [card] -name=Laquatus's Disdain -text=Counter target spell cast from a graveyard. -- Draw a card. -mana={1}{U} -type=Instant -[/card] -[card] name=Lash Out text=Lash Out deals 3 damage to target creature. Clash with an opponent. If you win, Lash Out deals 3 damage to that creature's controller. (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}{R} @@ -5966,15 +5826,6 @@ power=3 toughness=2 [/card] [card] -name=Leovold, Emissary of Trest -text=Each opponent can't draw more than one card each turn. -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. -mana={B}{G}{U} -type=Legendary Creature -subtype=Elf Advisor -power=3 -toughness=3 -[/card] -[card] name=Lesser Werewolf text={B}: If Lesser Werewolf's power is 1 or more, it gets -1/-0 until end of turn and put a -0/-1 counter on target creature blocking or blocked by Lesser Werewolf. Activate this ability only during the declare blockers step. mana={3}{B} @@ -6173,12 +6024,6 @@ mana={3}{G}{G} type=Enchantment [/card] [card] -name=Lucky Clover -text=Whenever you cast an Adventure instant or sorcery spell, copy it. You may choose new targets for the copy. -mana={2} -type=Artifact -[/card] -[card] name=Lurking Automaton text=Reveal Lurking Automaton as you draft it and note how many cards you've drafted this draft round, including Lurking Automaton. -- Lurking Automaton enters the battlefield with X +1/+1 counters on it, where X is the highest number you noted for cards named Lurking Automaton. mana={5} @@ -6490,16 +6335,6 @@ power=2 toughness=3 [/card] [card] -name=Medomai the Ageless -abilities=flying -text=Flying -- Whenever Medomai the Ageless deals combat damage to a player, take an extra turn after this one. -- Medomai the Ageless can't attack during extra turns. -mana={4}{W}{U} -type=Legendary Creature -subtype=Sphinx -power=4 -toughness=4 -[/card] -[card] name=Melee text=Cast Melee only during your turn and only during combat before blockers are declared. -- You choose which creatures block this combat and how those creatures block. -- Whenever a creature attacks and isn't blocked this combat, untap it and remove it from combat. mana={4}{R} @@ -6560,15 +6395,6 @@ power=1 toughness=1 [/card] [card] -name=Mesmeric Sliver -text=All Slivers have "When this permanent enters the battlefield, you may fateseal 1." (To fateseal 1, its controller looks at the top card of an opponent's library, then he or she may put that card on the bottom of that library.) -mana={3}{U} -type=Creature -subtype=Sliver -power=2 -toughness=2 -[/card] -[card] name=Messenger Jays text=Flying -- Council's dilemma When Messenger Jays enters the battlefield, starting with you, each player votes for feather or quill. Put a +1/+1 counter on Messenger Jays for each feather vote and draw a card for each quill vote. For each card drawn this way, discard a card. mana={4}{U} @@ -6578,12 +6404,6 @@ power=2 toughness=1 [/card] [card] -name=Metamorphosis -text=As an additional cost to cast Metamorphosis, sacrifice a creature. -- Add X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells. -mana={G} -type=Sorcery -[/card] -[card] name=Midlife Upgrade text=As an additional cost to cast this spell, sacrifice X Contraptions. -- Assemble X plus one Contraptions. (To assemble a Contraption, put the top card of your Contraption deck face up onto one of your sprockets.) mana={3}{W} @@ -8883,15 +8703,6 @@ type=Instant subtype=Arcane [/card] [card] -name=Robber of the Rich -text=Reach, haste -- Whenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. -mana={1}{R} -type=Creature -subtype=Human Archer Rogue -power=2 -toughness=2 -[/card] -[card] name=Robo- text=At the beginning of each end step, if an artifact entered the battlefield under your control this turn, -- Augment {2} ({2} , Reveal this card from your hand: Combine it with target host. Augment only as a sorcery.) type=Artifact Creature @@ -9967,12 +9778,6 @@ power=1 toughness=1 [/card] [card] -name=Specter's Shriek -text=Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player exiles that card. If a nonblack card is exiled this way, exile a card from your hand. -mana={B} -type=Sorcery -[/card] -[card] name=Spectral Shift text=Choose one Change the text of target spell or permanent by replacing all instances of one basic land type with another; or change the text of target spell or permanent by replacing all instances of one color word with another. (These effects last indefinitely.) -- Entwine {2} (Choose both if you pay the entwine cost.) mana={1}{U} @@ -9986,7 +9791,7 @@ type=Instant [/card] [card] name=Spell Queller -abilities=flash +abilities=flash,flying text=Flash -- Flying -- When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less. -- When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost. mana={1}{W}{U} type=Creature @@ -10001,12 +9806,6 @@ mana={2}{U}{U} type=Instant [/card] [card] -name=Spelljack -text=Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. You may play it without paying its mana cost for as long as it remains exiled. (If it has X in its mana cost, X is 0.) -mana={3}{U}{U}{U} -type=Instant -[/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} @@ -10085,16 +9884,6 @@ power=5 toughness=6 [/card] [card] -name=Sphinx of the Chimes -abilities=flying -text=Flying -- Discard two nonland cards with the same name: Draw four cards. -mana={4}{U}{U} -type=Creature -subtype=Sphinx -power=5 -toughness=6 -[/card] -[card] name=Spider Climb text=You may cast Spider Climb 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. -- Enchant creature -- Enchanted creature gets +0/+3 and has reach. (It can block creatures with flying.) mana={G} @@ -10121,15 +9910,6 @@ power=2 toughness=2 [/card] [card] -name=Spirit of the Labyrinth -text=Each player can't draw more than one card each turn. -mana={1}{W} -type=Enchantment Creature -subtype=Spirit -power=3 -toughness=1 -[/card] -[card] name=Spirit of the Season text=When Spirit of the Season enters the battlefield, it gains haste if it's summer. Put a +1/+1 counter on it if it's autumn. You gain 5 life if it's winter. If it's spring, search your library for a basic land card, reveal it, put it into your hand, then shuffle your library. mana={1}{G}{G} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index c33a532f5..c7cfa3b2c 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1546,6 +1546,17 @@ public: AAImprint * clone() const; ~AAImprint(); }; +//AAHaunt +class AAHaunt: public ActivatedAbility +{ +public: + MTGAbility * andAbility; + AAHaunt(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL); + int resolve(); + const string getMenuText(); + AAHaunt * clone() const; + ~AAHaunt(); +}; //AAConjure class AAConjure: public ActivatedAbility { diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index d04d87111..6e364b3ee 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -297,7 +297,8 @@ public: ManaCost * computeNewCost(MTGCardInstance * card,ManaCost * oldCost, ManaCost * refCost,bool noTrinisphere = false, bool bestow = false); int countTrini; bool anymanareplacement; - vectorimprintedCards; + vector imprintedCards; + MTGCardInstance* hauntedCard; int attackCost; int attackCostBackup; int attackPlaneswalkerCost; diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 84c5c4383..a04b81c22 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -322,7 +322,8 @@ class Constants SHOWOPPONENTHAND = 195, SHOWCONTROLLERHAND = 196, HASREPLICATE = 197, - NB_BASIC_ABILITIES = 198, + ISPREY = 198, + NB_BASIC_ABILITIES = 199, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index 99b5f2623..dc2c8689f 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -206,7 +206,7 @@ int AIPlayer::clickSingleTarget(TargetChooser *, vector& potentialT AIPlayer * AIPlayerFactory::createAIPlayer(GameObserver *observer, MTGAllCards * collection, Player * opponent, int deckid) { char deckFile[512]; - string avatarFilename; // default imagename + string avatarFilename = ""; // default imagename char deckFileSmall[512]; if (deckid == GameStateDuel::MENUITEM_EVIL_TWIN) @@ -228,7 +228,8 @@ AIPlayer * AIPlayerFactory::createAIPlayer(GameObserver *observer, MTGAllCards * } sprintf(deckFile, "ai/baka/deck%i.txt", deckid); DeckMetaData *aiMeta = observer->getDeckManager()->getDeckMetaDataByFilename( deckFile, true); - avatarFilename = aiMeta->getAvatarFilename(); + if(aiMeta) + avatarFilename = aiMeta->getAvatarFilename(); sprintf(deckFileSmall, "ai_baka_deck%i", deckid); } diff --git a/projects/mtg/src/AIPlayerBaka.cpp b/projects/mtg/src/AIPlayerBaka.cpp index 0dec25b22..d46a84cc2 100644 --- a/projects/mtg/src/AIPlayerBaka.cpp +++ b/projects/mtg/src/AIPlayerBaka.cpp @@ -2748,7 +2748,10 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty } CardDescriptor cd; cd.init(); - cd.setType(type); + if(!strcmp(type,"commander")) //Added to allow the casting priority for commanders + cd.basicAbilities[Constants::ISCOMMANDER] = 1; + else if(strcmp(type,"*")) //Added to allow the wildcard in casting priority + cd.setType(type); card = NULL; payAlternative = NONE; gotPayments = vector(); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 3bae8195d..682c4aa1c 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -2254,6 +2254,7 @@ int AAImprint::resolve() { andAbilityClone->addToGame(); } + SAFE_DELETE(andAbility); //moved here because in destructor it can cause a crash. } return 1; } @@ -2272,7 +2273,61 @@ AAImprint * AAImprint::clone() const AAImprint::~AAImprint() { - SAFE_DELETE(andAbility); +} + +//AAHaunt +AAHaunt::AAHaunt(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, ManaCost * _cost) : + ActivatedAbility(observer, _id, _source, _cost, 0) +{ + target = _target; + andAbility = NULL; +} + +int AAHaunt::resolve() +{ + MTGCardInstance * _target = (MTGCardInstance *) target; + if (_target && _target->hasType(Subtypes::TYPE_CREATURE)) + { + if(_target->mutation && _target->parentCards.size() > 0) return 0; // Mutated down cards cannot be haunted, they will follow the fate of top-card + + while(_target->next) + _target = _target->next; + + _target->basicAbilities[Constants::ISPREY] = 1; + source->hauntedCard = _target; + + if(andAbility) + { + MTGAbility * andAbilityClone = andAbility->clone(); + andAbilityClone->target = _target; + if(andAbility->oneShot) + { + andAbilityClone->resolve(); + SAFE_DELETE(andAbilityClone); + } + else + { + andAbilityClone->addToGame(); + } + SAFE_DELETE(andAbility); //moved here because in destructor it can cause a crash. + } + return 1; + } + return 0; +} + +const string AAHaunt::getMenuText() +{ + return "Haunt"; +} + +AAHaunt * AAHaunt::clone() const +{ + return NEW AAHaunt(*this); +} + +AAHaunt::~AAHaunt() +{ } //AAConjure diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 298de3cd9..295aef0f1 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -668,6 +668,14 @@ void GameObserver::gameStateBasedEffects() card->removeColor(i); } } + //clear prey + if(card && isInExile(card) && card->hauntedCard) + { + if(!isInPlay(card->hauntedCard)) + { + card->hauntedCard = 0; + } + } //reset alternate paid if(card && (isInGrave(card)||isInHand(card)||isInExile(card))) { diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 1c7f451dd..1cc2c540e 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -3372,6 +3372,25 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG } } + //haunt a creature + found = s.find("haunt"); + if (found != string::npos) + { + if (s.find("haunted") == string::npos) + { + MTGAbility * a = NEW AAHaunt(observer, id, card, target); + a->oneShot = 1; + //andability + if(storedAndAbility.size()) + { + string stored = storedAndAbility; + storedAndAbility.clear(); + ((AAHaunt*)a)->andAbility = parseMagicLine(stored, id, spell, card); + } + return a; + } + } + //Conjure a card found = s.find("conjure"); if (found != string::npos) @@ -5306,6 +5325,8 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ return BAKA_EFFECT_GOOD; if (dynamic_cast (a)) return BAKA_EFFECT_GOOD; + if (dynamic_cast (a)) + return BAKA_EFFECT_GOOD; if (dynamic_cast (a)) return BAKA_EFFECT_GOOD; if (dynamic_cast (a)) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 7d1758f90..1a9c6d50a 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -280,6 +280,7 @@ void MTGCardInstance::initMTGCI() countTrini = 0; anymanareplacement = false; imprintedCards.clear(); + hauntedCard = NULL; attackCost = 0; attackCostBackup = 0; attackPlaneswalkerCost = 0; diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index 5b0a164cf..c074edaa9 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -228,7 +228,8 @@ const char* Constants::MTGBasicAbilities[] = { "wascommander", //It was the current commander (e.g. after it flipped or morphed) "showopponenthand", //opponent plays with his hand revealed. "showcontrollerhand", //controller plays with his hand revealed. - "hasreplicate" //Kicker cost is a replicate cost (eg. "Vacuumelt") + "hasreplicate", //Kicker cost is a replicate cost (eg. "Vacuumelt") + "isprey" //Creature has been haunted by some other card. }; map Constants::MTGBasicAbilitiesMap; diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index fabb1d4e6..f5bf431f6 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -569,6 +569,10 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone } } + // Save the haunted status... (solving the bug on comparison cards with haunted status before zone changing events) + if(card->has(Constants::ISPREY) && doCopy && !asCopy && !inplaytoinplay) + copy->basicAbilities[Constants::ISPREY] = 1; + //Commander is going back to Command Zone, so we recalculate costs according to how many times it has been casted from there. if((to == g->players[0]->game->commandzone || to == g->players[1]->game->commandzone) && copy->numofcastfromcommandzone > 0){ copy->getManaCost()->add(Constants::MTG_COLOR_ARTIFACT,2*copy->numofcastfromcommandzone); @@ -740,8 +744,12 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone g->receiveEvent(e); } + // Reset the haunted status... (if the creature is moving from battlefield is no longer a prey) + if(doCopy && !inplaytoinplay && copy->has(Constants::ISPREY)) + copy->basicAbilities[Constants::ISPREY] = 0; + // Erasing counters from copy after the event has been triggered (no counter can survive to a zone changing except the perpetual ones) - if(doCopy && copy->counters && copy->counters->mCount > 0){ + if(doCopy && !inplaytoinplay && copy->counters && copy->counters->mCount > 0){ for (unsigned int i = 0; i < copy->counters->counters.size(); i++){ Counter * counter = copy->counters->counters[i]; for(int j = counter->nb; j > 0; j--){ @@ -1469,15 +1477,15 @@ MTGGameZone * MTGGameZone::intToZone(int zoneId, Player * p, Player * p2) MTGGameZone * MTGGameZone::intToZone(GameObserver *g, int zoneId, MTGCardInstance * source, MTGCardInstance * target) { - Player *p, *p2; + Player *p = NULL; + Player *p2 = NULL; - if (!source) + if (!source && g) //patchwork fix when g is NULL. p = g->currentlyActing(); else p = source->controller(); - if (!target) + if (!target && source) //patchwork fix when source is NULL. { - //TODO source may be NULL, need to handle the case when it is NULL. method declaration has NULL being default value of source and target. if(source->target) { //bug case, this is a patchwork fix for now @@ -1492,10 +1500,15 @@ MTGGameZone * MTGGameZone::intToZone(GameObserver *g, int zoneId, MTGCardInstanc target = source; } } - else + else if (target) p2 = target->controller(); - + if(!p) { //patchwork fix when p is NULL. + if(!p2) + return NULL; + else + p = p2; + } MTGGameZone * result = intToZone(zoneId, p, p2); if (result) return result; switch (zoneId) diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 17f76fc34..439800118 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -913,6 +913,7 @@ int MTGAlternativeCostRule::reactToClick(MTGCardInstance * card) return 0; ManaCost * alternateCost = card->getManaCost()->getAlternative(); + if(!alternateCost) return 0; card->paymenttype = MTGAbility::ALTERNATIVE_COST; if(alternateCost->extraCosts) for(unsigned int i = 0; i < alternateCost->extraCosts->costs.size();i++) @@ -1139,6 +1140,7 @@ int MTGBuyBackRule::reactToClick(MTGCardInstance * card) return 0; ManaCost * buybackCost = card->getManaCost()->getBuyback(); + if(!buybackCost) return 0; if(buybackCost->extraCosts) for(unsigned int i = 0; i < buybackCost->extraCosts->costs.size();i++) { @@ -1190,6 +1192,7 @@ int MTGFlashBackRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) int MTGFlashBackRule::reactToClick(MTGCardInstance * card) { ManaCost * flashbackCost = card->getManaCost()->getFlashback(); + if(!flashbackCost) return 0; if(flashbackCost->extraCosts) for(unsigned int i = 0; i < flashbackCost->extraCosts->costs.size();i++) { @@ -1239,6 +1242,7 @@ int MTGTempFlashBackRule::isReactingToClick(MTGCardInstance * card, ManaCost * m int MTGTempFlashBackRule::reactToClick(MTGCardInstance * card) { ManaCost * flashbackCost = card->getManaCost(); + if(!flashbackCost) return 0; if(flashbackCost->extraCosts) for(unsigned int i = 0; i < flashbackCost->extraCosts->costs.size();i++) { @@ -1306,6 +1310,7 @@ int MTGRetraceRule::reactToClick(MTGCardInstance * card) return 0; ManaCost * retraceCost = card->getManaCost()->getRetrace(); + if(!retraceCost) return 0; if(retraceCost->extraCosts) for(unsigned int i = 0; i < retraceCost->extraCosts->costs.size();i++) { @@ -1386,6 +1391,7 @@ int MTGSuspendRule::reactToClick(MTGCardInstance * card) Player *player = game->currentlyActing(); ManaCost * playerMana = player->getManaPool(); ManaCost * alternateCost = card->getManaCost()->getSuspend(); + if(!alternateCost) return 0; //this handles extra cost payments at the moment a card is played. if (playerMana->canAfford(alternateCost,card->has(Constants::ANYTYPEOFMANA))) { @@ -1512,6 +1518,7 @@ int MTGMorphCostRule::reactToClick(MTGCardInstance * card) ManaCost * cost = card->getManaCost(); ManaCost * playerMana = player->getManaPool(); ManaCost * morph = card->getManaCost()->getMorph(); + if(!morph) return 0; if(morph->extraCosts){ for(unsigned int i = 0; i < morph->extraCosts->costs.size();i++) morph->extraCosts->costs[i]->setSource(card); @@ -1647,6 +1654,7 @@ int MTGPayZeroRule::reactToClick(MTGCardInstance * card) ManaCost * cost = NEW ManaCost(ManaCost::parseManaCost("{0}",NULL,NULL)); ManaCost * newCost = card->computeNewCost(card,cost,cost); + if(!newCost) return 0; if(newCost->extraCosts) for(unsigned int i = 0; i < newCost->extraCosts->costs.size();i++) { @@ -1693,6 +1701,7 @@ int MTGOverloadRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) return 0; } ManaCost * newCost = card->getManaCost()->getAlternative(); + if(!newCost) return 0; if(newCost->extraCosts) for(unsigned int i = 0; i < newCost->extraCosts->costs.size();i++) { @@ -1707,6 +1716,7 @@ int MTGOverloadRule::reactToClick(MTGCardInstance * card) if (!isReactingToClick(card)) return 0; ManaCost * newCost = card->getManaCost()->getAlternative(); + if(!newCost) return 0; if(newCost->extraCosts) for(unsigned int i = 0; i < newCost->extraCosts->costs.size();i++) { @@ -1768,7 +1778,7 @@ int MTGBestowRule::reactToClick(MTGCardInstance * card) //this new method below in all alternative cost type causes a memleak, however, you cant safedelete the cost here as it cause a crash //TODO::::we need to get to the source of this leak and fix it. ManaCost * newCost = card->getManaCost()->getBestow(); - + if(!newCost) return 0; if (newCost->extraCosts) for (unsigned int i = 0; i < newCost->extraCosts->costs.size(); i++) { diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 8df2c65c2..b84e62ccd 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -1052,6 +1052,16 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta cd->nameComparisonMode = COMPARISON_EQUAL; } + if (attribute.find("preyname") != string::npos && card->hauntedCard) + { + attributefound = 1; + cd->compareName = card->hauntedCard->getName(); + if (minus) + cd->nameComparisonMode = COMPARISON_UNEQUAL; + else + cd->nameComparisonMode = COMPARISON_EQUAL; + } + if (!attributefound) { //Abilities diff --git a/projects/mtg/src/WParsedInt.cpp b/projects/mtg/src/WParsedInt.cpp index 3f813d07c..0800268bb 100644 --- a/projects/mtg/src/WParsedInt.cpp +++ b/projects/mtg/src/WParsedInt.cpp @@ -1315,6 +1315,10 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card) { intValue = (s == "plastshlturn")?card->controller()->lastShuffleTurn:card->controller()->opponent()->lastShuffleTurn; } + else if (s == "hasprey") + { + intValue = (card->hauntedCard)?1:0; + } else if(!intValue)//found nothing, try parsing a atoi { intValue = atoi(s.c_str());