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.

This commit is contained in:
Vittorio Alfieri
2021-09-02 19:32:45 +02:00
parent 54d0c32035
commit 001cea95bd
51 changed files with 634 additions and 800 deletions
+4 -1
View File
@@ -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))
@@ -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.
@@ -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}
@@ -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}
@@ -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}
@@ -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}
@@ -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]
@@ -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}
@@ -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}
@@ -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.
@@ -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}
@@ -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]
@@ -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]
@@ -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
@@ -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}
@@ -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]
@@ -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]
@@ -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}
@@ -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}
@@ -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}
@@ -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}
@@ -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]
@@ -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}
@@ -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}
@@ -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.
@@ -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]
@@ -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}
@@ -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]
@@ -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}
@@ -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}
@@ -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}
@@ -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}
@@ -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)
File diff suppressed because it is too large Load Diff
+31 -51
View File
@@ -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<!mytgt toughnesslifegain abilitycontroller!> 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<postbattle>)
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
@@ -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(<upto:1>*[-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 its 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 cant cast noncreature spells.”
mana={2}{W}{U}
type=Legendary Planeswalker
@@ -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}
+11
View File
@@ -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
{
+2 -1
View File
@@ -297,7 +297,8 @@ public:
ManaCost * computeNewCost(MTGCardInstance * card,ManaCost * oldCost, ManaCost * refCost,bool noTrinisphere = false, bool bestow = false);
int countTrini;
bool anymanareplacement;
vector<MTGCardInstance*>imprintedCards;
vector<MTGCardInstance*> imprintedCards;
MTGCardInstance* hauntedCard;
int attackCost;
int attackCostBackup;
int attackPlaneswalkerCost;
+2 -1
View File
@@ -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
+3 -2
View File
@@ -206,7 +206,7 @@ int AIPlayer::clickSingleTarget(TargetChooser *, vector<Targetable*>& 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);
}
+4 -1
View File
@@ -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<MTGAbility*>();
+56 -1
View File
@@ -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
+8
View File
@@ -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)))
{
+21
View File
@@ -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<AAImprint *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AAHaunt *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<ABestow *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AExert *> (a))
+1
View File
@@ -280,6 +280,7 @@ void MTGCardInstance::initMTGCI()
countTrini = 0;
anymanareplacement = false;
imprintedCards.clear();
hauntedCard = NULL;
attackCost = 0;
attackCostBackup = 0;
attackPlaneswalkerCost = 0;
+2 -1
View File
@@ -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<string,int> Constants::MTGBasicAbilitiesMap;
+20 -7
View File
@@ -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)
+11 -1
View File
@@ -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++)
{
+10
View File
@@ -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
+4
View File
@@ -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());