Added new features and triggers to game about tokens and counters, fixed and added new primitives.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -11876,7 +11876,7 @@ type=Land
|
||||
[card]
|
||||
name=Blinkmoth Urn
|
||||
auto=@each my firstmain sourcenottapped:all(artifact|mybattlefield) add{1}
|
||||
auto=@each opponentfirstmain sourcenottapped:all(artifact|opponentbattlefield) add{1}
|
||||
auto=@each opponent firstmain sourcenottapped:all(artifact|opponentbattlefield) add{1}
|
||||
text=At the beginning of each player's precombat main phase, if Blinkmoth Urn is untapped, that player adds {1} to his or her mana pool for each artifact he or she controls.
|
||||
mana={5}
|
||||
type=Artifact
|
||||
@@ -49486,7 +49486,7 @@ toughness=3
|
||||
name=Grand Architect
|
||||
auto=lord(other creature[blue]|myBattlefield) 1/1
|
||||
auto={U}:target(creature[artifact]) becomes(blue)
|
||||
auto={T(creature[blue]|mybattlefield)}:Add{2}
|
||||
auto={T(creature[blue]|mybattlefield)}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{C}{C}
|
||||
text=Other blue creatures you control get +1/+1. -- {U}:Target artifact creature becomes blue until end of turn. -- Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.
|
||||
mana={1}{U}{U}
|
||||
type=Creature
|
||||
@@ -78956,7 +78956,7 @@ type=Artifact
|
||||
[card]
|
||||
name=Necrogen Mists
|
||||
auto=@each my upkeep:reject target(*|myhand)
|
||||
auto=@each opponentupkeep:ability$!name(discard) target(*|myhand) reject!$ opponent
|
||||
auto=@each opponent upkeep:ability$!name(discard) target(*|myhand) reject!$ opponent
|
||||
text=At the beginning of each player's upkeep, that player discards a card.
|
||||
mana={2}{B}
|
||||
type=Enchantment
|
||||
|
||||
@@ -3200,15 +3200,6 @@ mana={U}{U}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Deepglow Skate
|
||||
text=When Deepglow Skate enters the battlefield, double the number of each kind of counter on any number of target permanents.
|
||||
mana={4}{U}
|
||||
type=Creature
|
||||
subtype=Fish
|
||||
power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Defective Detective
|
||||
text=Defective Detective can't be blocked. -- When Defective Detective enters the battlefield, a person outside the game looks at target opponent's hand and chooses a card from it. That player reveals that card.
|
||||
mana={2}{U}
|
||||
@@ -3591,12 +3582,6 @@ mana={5}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Doubling Season
|
||||
text=If an effect would put one or more tokens onto the battlefield under your control, it puts twice that many of those tokens onto the battlefield instead. -- If an effect would place one or more counters on a permanent you control, it places twice that many of those counters on that permanent instead.
|
||||
mana={4}{G}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Dovin Baan
|
||||
auto=counter(0/0,3,loyalty)
|
||||
text=+1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated. -- -1: You gain 2 life and draw a card. -- -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps."
|
||||
@@ -14631,16 +14616,6 @@ mana={5}
|
||||
type=Legendary Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Ulamog's Nullifier
|
||||
abilities=devoid
|
||||
text=Devoid (This card has no color.) -- Flash -- Flying -- When Ulamog's Nullifier enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, counter target spell.
|
||||
mana={2}{U}{B}
|
||||
type=Creature
|
||||
subtype=Eldrazi Processor
|
||||
power=2
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Umbra Mystic
|
||||
text=Auras attached to permanents you control have totem armor. (If an enchanted permanent you control would be destroyed, instead remove all damage from it and destroy an Aura attached to it.)
|
||||
mana={2}{W}
|
||||
@@ -14710,64 +14685,12 @@ text=Black legendary creatures you control have "bands with other legendary crea
|
||||
type=Land
|
||||
[/card]
|
||||
[card]
|
||||
name=Unifying Theory
|
||||
text=Whenever a player casts a spell, that player may pay {2}. If the player does, he or she draws a card.
|
||||
mana={1}{U}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Unliving Psychopath
|
||||
text={B}: Unliving Psychopath gets +1/-1 until end of turn. -- {B}, {T}: Destroy target creature with power less than Unliving Psychopath's power.
|
||||
mana={2}{B}{B}
|
||||
type=Creature
|
||||
subtype=Zombie Assassin
|
||||
power=0
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Unnatural Aggression
|
||||
text=Devoid (This card has no color.) -- Target creature you control fights target creature an opponent controls. If the creature an opponent controls would die this turn, exile it instead.
|
||||
mana={2}{G}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Unpredictable Cyclone
|
||||
text=If a cycling ability of another nonland card would cause you to draw a card, instead exile cards from the top of your library until you exile a card that shares a card type with the cycled card. You may cast that card without paying its mana cost. Then put the exiled cards that weren't cast this way on the bottom of your library in a random order. -- Cycling {2} ({2}, Discard this card: Draw a card.)
|
||||
mana={3}{R}{R}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Unsettled Mariner
|
||||
abilities=changeling
|
||||
auto=@targeted(*|mybattlefield) from(*|opponentbattlefield,opponenthand,opponentstack,opponentgraveyard,opponentexile,opponentlibrary):transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) forever
|
||||
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
|
||||
subtype=Shapeshifter
|
||||
power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Unstable Footing
|
||||
text=Kicker {3}{R} (You may pay an additional {3}{R} as you cast this spell.) -- Damage can't be prevented this turn. If Unstable Footing was kicked, it deals 5 damage to target player.
|
||||
mana={R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Untaidake, the Cloud Keeper
|
||||
text=Untaidake, the Cloud Keeper enters the battlefield tapped. -- {T}, Pay 2 life: Add {2} to your mana pool. Spend this mana only to cast legendary spells.
|
||||
type=Legendary Land
|
||||
[/card]
|
||||
[card]
|
||||
name=Urborg Panther
|
||||
text={B}, Sacrifice Urborg Panther: Destroy target creature blocking Urborg Panther. -- Sacrifice a creature named Feral Shadow, a creature named Breathstealer, and Urborg Panther: Search your library for a card named Spirit of the Night and put that card onto the battlefield. Then shuffle your library.
|
||||
mana={2}{B}
|
||||
type=Creature
|
||||
subtype=Nightstalker Cat
|
||||
power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Uro, Titan of Nature's Wrath
|
||||
text=When Uro enters the battlefield, sacrifice it unless it escaped. -- Whenever Uro enters the battlefield or attacks, you gain 3 life and draw a card, then you may put a land card from your hand onto the battlefield. -- Escape— {G}{G}{U}{U}, Exile five other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.)
|
||||
mana={1}{G}{U}
|
||||
@@ -14777,12 +14700,6 @@ power=6
|
||||
toughness=6
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Armor
|
||||
text=If a source would deal damage to you, prevent 1 of that damage.
|
||||
mana={6}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Avenger
|
||||
text={0}: Urza's Avenger gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)
|
||||
mana={6}
|
||||
@@ -14792,12 +14709,6 @@ power=4
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Bauble
|
||||
text={T}, Sacrifice Urza's Bauble: Look at a card at random in target player's hand. You draw a card at the beginning of the next turn's upkeep.
|
||||
mana={0}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Contact Lenses
|
||||
text=Urza's Contact Lenses comes into play tapped and does not untap during its controller's untap phase. -- All players play with their hands face up. -- Clap your hands twice: Tap or untap Urza's Contact Lenses.
|
||||
mana={0}
|
||||
@@ -14820,18 +14731,6 @@ mana={2}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Miter
|
||||
text=Whenever an artifact you control is put into a graveyard from the battlefield, if it wasn't sacrificed, you may pay {3}. If you do, draw a card.
|
||||
mana={3}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Rage
|
||||
text=Kicker {8}{R} (You may pay an additional {8}{R} as you cast this spell.) -- Urza's Rage can't be countered by spells or abilities. -- Urza's Rage deals 3 damage to target creature or player. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented.
|
||||
mana={2}{R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Urza's Science Fair Project
|
||||
text={2}: Roll a six-sided die for Urza's Science Fair Project. -- 1 It gets -2/-2 until end of turn. -- 2 It deals no combat damage this turn. -- 3 Attacking does not cause it to tap this turn. -- 4 It gains first strike until end of turn. -- 5 It gains flying until end of turn. -- 6 It gets +2/+2 until end of turn.
|
||||
mana={6}
|
||||
@@ -14872,13 +14771,6 @@ mana={W}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Vanguard's Shield
|
||||
text=Equipped creature gets +0/+3 and can block an additional creature. -- Equip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.)
|
||||
mana={2}
|
||||
type=Artifact
|
||||
subtype=Equipment
|
||||
[/card]
|
||||
[card]
|
||||
name=Vanish into Memory
|
||||
text=Exile target creature. You draw cards equal to that creature's power. At the beginning of your next upkeep, return that card to the battlefield under its owner's control. If you do, discard cards equal to its toughness.
|
||||
mana={2}{W}{U}
|
||||
@@ -14900,24 +14792,6 @@ mana={3}{W}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Vedalken Engineer
|
||||
text={T}: Add two mana of any one color to your mana pool. Spend this mana only to cast artifact spells or activate abilities of artifacts.
|
||||
mana={1}{U}
|
||||
type=Creature
|
||||
subtype=Vedalken Artificer
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Vedalken Plotter
|
||||
text=When Vedalken Plotter enters the battlefield, exchange control of target land you control and target land an opponent controls.
|
||||
mana={2}{U}
|
||||
type=Creature
|
||||
subtype=Vedalken Wizard
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Veil of Secrecy
|
||||
text=Target creature gains shroud until end of turn and is unblockable this turn. -- Splice onto Arcane—Return a blue creature you control to its owner's hand. (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)
|
||||
mana={1}{U}
|
||||
@@ -14931,25 +14805,12 @@ mana={G}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Veiled Crocodile
|
||||
text=When a player has no cards in hand, if Veiled Crocodile is an enchantment, Veiled Crocodile becomes a 4/4 Crocodile creature.
|
||||
mana={2}{U}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Veiled Sentry
|
||||
text=When an opponent casts a spell, if Veiled Sentry is an enchantment, Veiled Sentry becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost.
|
||||
mana={U}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Venarian Gold
|
||||
text=Enchant creature -- When Venarian Gold enters the battlefield, tap enchanted creature and put X sleep counters on it. -- Enchanted creature doesn't untap during its controller's untap step if it has a sleep counter on it. -- At the beginning of the upkeep of enchanted creature's controller, remove a sleep counter from that creature.
|
||||
mana={X}{U}{U}
|
||||
type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Vengeful Archon
|
||||
abilities=flying
|
||||
text=Flying -- {X}: Prevent the next X damage that would be dealt to you this turn. If damage is prevented this way, Vengeful Archon deals that much damage to target player.
|
||||
@@ -14960,46 +14821,12 @@ power=7
|
||||
toughness=7
|
||||
[/card]
|
||||
[card]
|
||||
name=Vengeful Dreams
|
||||
text=As an additional cost to cast Vengeful Dreams, discard X cards. -- Exile X target attacking creatures.
|
||||
mana={W}{W}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Vengeful Rebirth
|
||||
text=Return target card from your graveyard to your hand. If you return a nonland card to your hand this way, Vengeful Rebirth deals damage equal to that card's converted mana cost to target creature or player. -- Exile Vengeful Rebirth.
|
||||
mana={4}{R}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Venomous Breath
|
||||
text=Choose target creature. At end of combat, destroy all creatures that blocked or were blocked by it this turn.
|
||||
mana={3}{G}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Venser, Shaper Savant
|
||||
abilities=flash
|
||||
text=Flash (You may cast this spell any time you could cast an instant.) -- When Venser, Shaper Savant enters the battlefield, return target spell or permanent to its owner's hand.
|
||||
mana={2}{U}{U}
|
||||
type=Legendary Creature
|
||||
subtype=Human Wizard
|
||||
power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Verdant Confluence
|
||||
text=Choose three. You may choose the same mode more than once. -- • Put two +1/+1 counters on target creature. -- • Return target permanent card from your graveyard to your hand. -- • Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
||||
mana={4}{G}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Verdant Crescendo
|
||||
text=Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, and put it into your hand. Then shuffle your library.
|
||||
mana={3}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Very Cryptic Command (a)
|
||||
text=Choose two — -- • Switch target creature's power and toughness until end of turn. -- • Target creature can't be blocked this turn. -- • Draw a card. If that card's art is by Wayne England, you may reveal it and draw another card. -- • Assemble a Contraption.
|
||||
mana={1}{U}{U}{U}
|
||||
@@ -15069,39 +14896,6 @@ mana={4}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Vexing Devil
|
||||
text=When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to him or her. If a player does, sacrifice Vexing Devil.
|
||||
mana={R}
|
||||
type=Creature
|
||||
subtype=Devil
|
||||
power=4
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Vicious Betrayal
|
||||
text=As an additional cost to cast Vicious Betrayal, sacrifice any number of creatures. -- Target creature gets +2/+2 until end of turn for each creature sacrificed this way.
|
||||
mana={3}{B}{B}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Victimize
|
||||
text=Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped.
|
||||
mana={2}{B}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=View from Above
|
||||
text=Target creature gains flying until end of turn. If you control a white permanent, return View from Above to its owner's hand.
|
||||
mana={1}{U}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Vigil for the Lost
|
||||
text=Whenever a creature you control dies, you may pay {X}. If you do, you gain X life.
|
||||
mana={3}{W}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Vile Bile
|
||||
text=Whenever a player's skin or fingernail touches Vile Bile, that player loses 2 life.
|
||||
mana={1}{B}
|
||||
@@ -15111,40 +14905,12 @@ power=2{1/2}
|
||||
toughness=2{1/2}
|
||||
[/card]
|
||||
[card]
|
||||
name=Vintara Elephant
|
||||
abilities=trample
|
||||
text=Trample -- {3}: Vintara Elephant loses trample until end of turn. Any player may activate this ability.
|
||||
mana={4}{G}
|
||||
type=Creature
|
||||
subtype=Elephant
|
||||
power=4
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Violent Eruption
|
||||
text=Violent Eruption deals 4 damage divided as you choose among any number of target creatures and/or players. -- Madness {1}{R}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
|
||||
mana={1}{R}{R}{R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Virulent Wound
|
||||
text=Put a -1/-1 counter on target creature. When that creature dies this turn, its controller gets a poison counter.
|
||||
mana={B}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Vision Charm
|
||||
text=Choose one — Target player puts the top four cards of his or her library into his or her graveyard; or choose a land type and a basic land type, and each land of the first chosen type becomes the second chosen type until end of turn; or target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during his or her next untap step.)
|
||||
mana={U}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Visions
|
||||
text=Look at the top five cards of target player's library. You may then have that player shuffle that library.
|
||||
mana={W}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Vital Surge
|
||||
text=You gain 3 life. -- Splice onto Arcane {1}{G} (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}{G}
|
||||
@@ -15171,25 +14937,6 @@ power=0
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Voice of Many
|
||||
text=When Voice of Many enters the battlefield, draw a card for each opponent who controls fewer creatures than you.
|
||||
mana={2}{G}{G}
|
||||
type=Creature
|
||||
subtype=Elf Druid
|
||||
power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Void Maw
|
||||
abilities=trample
|
||||
text=Trample -- If another creature would die, exile it instead. -- Put a card exiled with Void Maw into its owner's graveyard: Void Maw gets +2/+2 until end of turn.
|
||||
mana={4}{B}{B}
|
||||
type=Creature
|
||||
subtype=Horror
|
||||
power=4
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Voidmage Husher
|
||||
abilities=flash
|
||||
text=Flash (You may cast this spell any time you could cast an instant.) -- When Voidmage Husher enters the battlefield, counter target activated ability. (Mana abilities can't be targeted.) -- Whenever you cast a spell, you may return Voidmage Husher to its owner's hand.
|
||||
@@ -15237,18 +14984,6 @@ mana={4}{R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Volcanic Vision
|
||||
text=Return target instant or sorcery card from your graveyard to your hand. Volcanic Vision deals damage equal to that card's converted mana cost to each creature your opponents control. Exile Volcanic Vision.
|
||||
mana={5}{R}{R}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Volcanic Wind
|
||||
text=Volcanic Wind deals X damage divided as you choose among any number of target creatures, where X is the number of creatures on the battlefield as you cast Volcanic Wind.
|
||||
mana={4}{R}{R}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Volcano Hellion
|
||||
text=Volcano Hellion has echo {X}, where X is your life total. (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.) -- When Volcano Hellion enters the battlefield, it deals an amount of damage of your choice to you and target creature. The damage can't be prevented.
|
||||
mana={2}{R}{R}
|
||||
@@ -15258,12 +14993,6 @@ power=6
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Volley of Boulders
|
||||
text=Volley of Boulders deals 6 damage divided as you choose among any number of target creatures and/or players. -- Flashback {R}{R}{R}{R}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||
mana={8}{R}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Volrath's Curse
|
||||
text=Enchant creature -- Enchanted creature can't attack or block, and its activated abilities can't be activated. That creature's controller may sacrifice a permanent for that player to ignore this effect until end of turn. -- {1}{U}: Return Volrath's Curse to its owner's hand.
|
||||
mana={1}{U}
|
||||
@@ -15271,12 +15000,6 @@ type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Volrath's Dungeon
|
||||
text=Pay 5 life: Destroy Volrath's Dungeon. Any player may activate this ability but only during his or her turn. -- Discard a card: Target player puts a card from his or her hand on top of his or her library. Activate this ability only any time you could cast a sorcery.
|
||||
mana={2}{B}{B}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Volrath's Motion Sensor
|
||||
text=When Volrath's Motion Sensor comes into play, choose target hand controlled by an opponent. Enchanted player balances Volrath's Motion Sensor on the back of that hand. -- If Volrath's Motion Sensor falls off the hand, sacrifice Volrath's Motion Sensor and that player loses 3 life.
|
||||
mana={B}
|
||||
@@ -15312,15 +15035,6 @@ power=4
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Voracious Vacuum
|
||||
text=When this creature enters the battlefield, put a +1/+1 counter on target creature.
|
||||
mana={3}
|
||||
type=Host Artifact Creature
|
||||
subtype=Construct
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Vortex Elemental
|
||||
text={U}: Put Vortex Elemental and each creature blocking or blocked by it on top of their owners' libraries, then those players shuffle their libraries. -- {3}{U}{U}: Target creature blocks Vortex Elemental this turn if able.
|
||||
mana={U}
|
||||
@@ -15340,16 +15054,6 @@ power=2
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Wall of Corpses
|
||||
abilities=defender
|
||||
text=Defender (This creature can't attack.) -- {B}, Sacrifice Wall of Corpses: Destroy target creature Wall of Corpses is blocking.
|
||||
mana={1}{B}
|
||||
type=Creature
|
||||
subtype=Wall
|
||||
power=0
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Wall of Deceit
|
||||
abilities=defender
|
||||
text=Defender (This creature can't attack.) -- {3}: Turn Wall of Deceit face down. -- Morph {U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)
|
||||
@@ -15369,16 +15073,6 @@ power=0
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Wall of Glare
|
||||
abilities=defender
|
||||
text=Defender (This creature can't attack.) -- Wall of Glare can block any number of creatures.
|
||||
mana={1}{W}
|
||||
type=Creature
|
||||
subtype=Wall
|
||||
power=0
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Wall of Shadows
|
||||
abilities=defender
|
||||
text=Defender (This creature can't attack.) -- Prevent all damage that would be dealt to Wall of Shadows by creatures it's blocking. -- Wall of Shadows can't be the target of spells that can target only Walls or of abilities that can target only Walls.
|
||||
@@ -15424,22 +15118,6 @@ mana={4}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Wandering Eye
|
||||
abilities=flying
|
||||
text=Flying -- Players play with their hands revealed.
|
||||
mana={2}{U}
|
||||
type=Creature
|
||||
subtype=Illusion
|
||||
power=1
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=War Barge
|
||||
text={3}: Target creature gains islandwalk until end of turn. When War Barge leaves the battlefield this turn, destroy that creature. A creature destroyed this way can't be regenerated.
|
||||
mana={4}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=War Elephant
|
||||
abilities=trample,banding
|
||||
text=Trample; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)
|
||||
@@ -15482,27 +15160,12 @@ type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Warmonger
|
||||
text={2}: Warmonger deals 1 damage to each creature without flying and each player. Any player may activate this ability.
|
||||
mana={3}{R}
|
||||
type=Creature
|
||||
subtype=Minotaur Monger
|
||||
power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Warp World
|
||||
text=Each player shuffles all permanents he or she owns into his or her library, then reveals that many cards from the top of his or her library. Each player puts all artifact, creature, and land cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of his or her library.
|
||||
mana={5}{R}{R}{R}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Warping Wail
|
||||
text=({C} represents colorless mana.) -- Choose one — -- • Exile target creature with power or toughness 1 or less. -- • Counter target sorcery spell. -- • Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {C} to your mana pool."
|
||||
mana={1}{C}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Warrior en-Kor
|
||||
text={0}: The next 1 damage that would be dealt to Warrior en-Kor this turn is dealt to target creature you control instead.
|
||||
mana={W}{W}
|
||||
@@ -15521,16 +15184,6 @@ power=2
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Watcher in the Web
|
||||
abilities=reach
|
||||
text=Reach (This creature can block creatures with flying.) -- Watcher in the Web can block an additional seven creatures each combat.
|
||||
mana={4}{G}
|
||||
type=Creature
|
||||
subtype=Spider
|
||||
power=2
|
||||
toughness=5
|
||||
[/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}
|
||||
@@ -15548,24 +15201,12 @@ mana={5}{G}{G}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Wax // Wane
|
||||
text=Target creature gets +2/+2 until end of turn. -- // -- Destroy target enchantment.
|
||||
mana={G} // {W}
|
||||
type=Instant // Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Waxing Moon
|
||||
text=Transform up to one target Werewolf you control. Creatures you control gain trample until end of turn.
|
||||
mana={1}{G}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wear // Tear
|
||||
text=Destroy target artifact. -- // -- Destroy target enchantment. -- -- Fuse (You may cast one or both halves of this card from your hand.)
|
||||
mana={1}{R} // {W}
|
||||
type=Instant // Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wear Away
|
||||
text=Destroy target artifact or enchantment. -- Splice onto Arcane {3}{G} (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={G}{G}
|
||||
@@ -15615,25 +15256,12 @@ mana={2}{U}{U}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Well of Knowledge
|
||||
text={2}: Draw a card. Any player may activate this ability but only during his or her draw step.
|
||||
mana={3}
|
||||
type=Artifact
|
||||
[/card]
|
||||
[card]
|
||||
name=Wet Willie of the Damned
|
||||
text=Wet Willie of the Damned deals 2½ damage to target creature or player and you gain 2½ life.
|
||||
mana={2}{B}{B}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Wheel of Sun and Moon
|
||||
text=Enchant player -- If a card would be put into enchanted player's graveyard from anywhere, instead that card is revealed and put on the bottom of that player's library.
|
||||
mana={GW}{GW}
|
||||
type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=When Fluffy Bunnies Attack
|
||||
text=Target creature gets -X/-X until end of turn, where X is the number of times the letter of your choice appears in that creature's name.
|
||||
mana={3}{B}
|
||||
@@ -15740,15 +15368,6 @@ text=Who -- {X}{W} -- Instant -- Target player gains X life. -- ----- -- What --
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wicked Akuba
|
||||
text={B}: Target player dealt damage by Wicked Akuba this turn loses 1 life.
|
||||
mana={B}{B}
|
||||
type=Creature
|
||||
subtype=Spirit
|
||||
power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Widespread Panic
|
||||
text=Whenever a spell or ability causes its controller to shuffle his or her library, that player puts a card from his or her hand on top of his or her library.
|
||||
mana={2}{R}
|
||||
@@ -15761,27 +15380,12 @@ type=Artifact
|
||||
subtype=Contraption
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Crocodile
|
||||
text=When this creature enters the battlefield, search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.
|
||||
mana={1}{G}
|
||||
type=Host Creature
|
||||
subtype=Crocodile
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Evocation
|
||||
text=At the beginning of each player's upkeep, that player reveals a card at random from his or her hand. If it's a land card, the player puts it onto the battlefield. Otherwise, the player casts it without paying its mana cost if able.
|
||||
mana={5}{R}
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Might
|
||||
text=Target creature gets +1/+1 until end of turn. That creature gets an additional +4/+4 until end of turn unless any player pays {2}.
|
||||
mana={1}{G}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Pair
|
||||
text=Whenever a creature enters the battlefield, if you cast it from your hand, you may search your library for a creature card with the same total power and toughness and put it onto the battlefield. If you do, shuffle your library.
|
||||
mana={4}{G}{G}
|
||||
@@ -15794,12 +15398,6 @@ mana={2}{R}{R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Slash
|
||||
text=Ferocious — If you control a creature with power 4 or greater, damage can't be prevented this turn. -- Wild Slash deals 2 damage to target creature or player.
|
||||
mana={R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wild Swing
|
||||
text=Choose three target nonenchantment permanents. Destroy one of them at random.
|
||||
mana={3}{R}
|
||||
@@ -15857,28 +15455,12 @@ type=Plane
|
||||
subtype=Belenon
|
||||
[/card]
|
||||
[card]
|
||||
name=Winds of Abandon
|
||||
abilities=overload
|
||||
other={4}{W}{W} name(Overload)
|
||||
target=creature|opponentbattlefield
|
||||
auto=moveto(exile)
|
||||
text=Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries. -- Overload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")
|
||||
mana={1}{W}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Winter's Chill
|
||||
text=Cast Winter's Chill only during combat before blockers are declared. -- X can't be greater than the number of snow lands you control. -- Choose X target attacking creatures. For each of those creatures, its controller may pay {1} or {2}. If that player doesn't, destroy that creature at end of combat. If that player pays only {1}, prevent all combat damage that would be dealt to and dealt by that creature this combat.
|
||||
mana={X}{U}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Winterflame
|
||||
text=Choose one or both — -- • Tap target creature. -- • Winterflame deals 2 damage to target creature.
|
||||
mana={1}{U}{R}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wishmonger
|
||||
text={2}: Target creature gains protection from the color of its controller's choice until end of turn. Any player may activate this ability.
|
||||
mana={3}{W}
|
||||
@@ -15888,12 +15470,6 @@ power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Withdraw
|
||||
text=Return target creature to its owner's hand. Then return another target creature to its owner's hand unless its controller pays {1}.
|
||||
mana={U}{U}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Wojek Apothecary
|
||||
text=Radiance — {T}: Prevent the next 1 damage that would be dealt to target creature and each other creature that shares a color with it this turn.
|
||||
mana={2}{W}{W}
|
||||
@@ -16028,16 +15604,6 @@ mana={4}{WU}{WU}{WU}{WU}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Wormfang Crab
|
||||
abilities=unblockable.
|
||||
text=Wormfang Crab is unblockable. -- When Wormfang Crab enters the battlefield, an opponent chooses a permanent you control other than Wormfang Crab and exiles it. -- When Wormfang Crab leaves the battlefield, return the exiled card to the battlefield under its owner's control.
|
||||
mana={3}{U}
|
||||
type=Creature
|
||||
subtype=Nightmare Crab
|
||||
power=3
|
||||
toughness=6
|
||||
[/card]
|
||||
[card]
|
||||
name=Worms of the Earth
|
||||
text=Players can't play lands. -- Lands can't enter the battlefield. -- At the beginning of each upkeep, any player may sacrifice two lands or have Worms of the Earth deal 5 damage to him or her. If a player does either, destroy Worms of the Earth.
|
||||
mana={2}{B}{B}{B}
|
||||
@@ -16079,12 +15645,6 @@ type=Legendary Planeswalker
|
||||
subtype=Wrenn
|
||||
[/card]
|
||||
[card]
|
||||
name=Wretched Confluence
|
||||
text=Choose three. You may choose the same mode more than once. -- • Target player draws a card and loses 1 life. -- • Target creature gets -2/-2 until end of turn. -- • Return target creature card from your graveyard to your hand.
|
||||
mana={3}{B}{B}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Write into Being
|
||||
text=Look at the top two cards of your library. Manifest one of those cards, then put the other on the top or bottom of your library. (To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.)
|
||||
mana={2}{U}
|
||||
@@ -16100,21 +15660,6 @@ power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Xenic Poltergeist
|
||||
text={T}: Until your next upkeep, target noncreature artifact becomes an artifact creature with power and toughness each equal to its converted mana cost.
|
||||
mana={1}{B}{B}
|
||||
type=Creature
|
||||
subtype=Spirit
|
||||
power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Yare
|
||||
text=Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn.
|
||||
mana={2}{W}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Yarok, the Desecrated
|
||||
text=Deathtouch, lifelink -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.
|
||||
mana={2}{B}{G}{U}
|
||||
@@ -16240,16 +15785,6 @@ power=2
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Zerapa Minotaur
|
||||
abilities=first strike
|
||||
text=First strike -- {2}: Zerapa Minotaur loses first strike until end of turn. Any player may activate this ability.
|
||||
mana={2}{R}{R}
|
||||
type=Creature
|
||||
subtype=Minotaur
|
||||
power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Zhalfirin Crusader
|
||||
abilities=flanking
|
||||
text=Flanking (Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn.) -- {1}{W}: The next 1 damage that would be dealt to Zhalfirin Crusader this turn is dealt to target creature or player instead.
|
||||
|
||||
@@ -578,13 +578,9 @@ private:
|
||||
{
|
||||
intValue = card->controller()->opponent()->energyCount;
|
||||
}
|
||||
else if (s == "pyidarocount")
|
||||
else if (s == "pyidarocount" || s == "oyidarocount")
|
||||
{
|
||||
intValue = card->controller()->yidaroCount;
|
||||
}
|
||||
else if (s == "oyidarocount")
|
||||
{
|
||||
intValue = card->controller()->opponent()->yidaroCount;
|
||||
intValue = (s == "pyidarocount")?card->controller()->yidaroCount:card->controller()->opponent()->yidaroCount;
|
||||
}
|
||||
else if (s == "praidcount")
|
||||
{
|
||||
@@ -1672,6 +1668,29 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class TrTokenCreated: public Trigger
|
||||
{
|
||||
public:
|
||||
bool thiscontroller, thisopponent;
|
||||
TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false) :
|
||||
Trigger(observer, id, source,once, tc)
|
||||
{
|
||||
}
|
||||
|
||||
int triggerOnEventImpl(WEvent * event)
|
||||
{
|
||||
WEventTokenCreated * e = dynamic_cast<WEventTokenCreated *> (event);
|
||||
if (!e) return 0;
|
||||
if (!tc->canTarget(e->card)) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
TrTokenCreated * clone() const
|
||||
{
|
||||
return NEW TrTokenCreated(*this);
|
||||
}
|
||||
};
|
||||
|
||||
class TrCardSacrificed: public Trigger
|
||||
{
|
||||
public:
|
||||
@@ -1920,8 +1939,10 @@ class TrCounter: public Trigger
|
||||
public:
|
||||
Counter * counter;
|
||||
int type;
|
||||
TrCounter(GameObserver* observer, int id, MTGCardInstance * source, Counter * counter, TargetChooser * tc, int type = 0,bool once = false) :
|
||||
Trigger(observer, id, source, once, tc),counter(counter), type(type)
|
||||
bool duplicate;
|
||||
MTGCardInstance * counterException; //added exception to avid a counter loop (eg. Doubling Season)
|
||||
TrCounter(GameObserver* observer, int id, MTGCardInstance * source, Counter * counter, TargetChooser * tc, int type = 0, bool once = false, bool duplicate = false, MTGCardInstance * counterException = NULL) :
|
||||
Trigger(observer, id, source, once, tc), counter(counter), type(type), duplicate(duplicate), counterException(counterException)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1931,8 +1952,15 @@ public:
|
||||
if (!e) return 0;
|
||||
if (type == 0 && !e->removed) return 0;
|
||||
if (type == 1 && !e->added) return 0;
|
||||
if (!(e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)) return 0;
|
||||
if (counterException && e->source && !strcmp(counterException->data->name.c_str(), e->source->data->name.c_str())) return 0; //If the source of counter gain/loss it's the exception card it doesn't have effect (loop avoidance);
|
||||
if (counter && !(e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)) return 0;
|
||||
if (tc && !tc->canTarget(e->targetCard)) return 0;
|
||||
if (duplicate){
|
||||
if(type == 1)
|
||||
e->targetCard->counters->addCounter(e->name.c_str(),e->power,e->toughness,true,true,e->source);
|
||||
else
|
||||
e->targetCard->counters->removeCounter(counter->name.c_str(),counter->power,counter->toughness,true,true,e->source);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2147,13 +2175,35 @@ class AAProliferate: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
bool allcounters;
|
||||
AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost = NULL);
|
||||
AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL);
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
AAProliferate * clone() const;
|
||||
~AAProliferate();
|
||||
};
|
||||
|
||||
class AADuplicateCounters: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
bool allcounters;
|
||||
AADuplicateCounters(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL);
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
AADuplicateCounters * clone() const;
|
||||
~AADuplicateCounters();
|
||||
};
|
||||
|
||||
class AARemoveSingleCounter: public ActivatedAbility
|
||||
{
|
||||
public:
|
||||
int nb;
|
||||
AARemoveSingleCounter(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL, int nb = 1);
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
AARemoveSingleCounter * clone() const;
|
||||
~AARemoveSingleCounter();
|
||||
};
|
||||
|
||||
//MultiAbility : triggers several actions for a cost
|
||||
class MultiAbility: public ActivatedAbility
|
||||
{
|
||||
@@ -2243,13 +2293,14 @@ public:
|
||||
int who;
|
||||
string with;
|
||||
string types;
|
||||
string options;
|
||||
list<int> awith;
|
||||
list<int> colors;
|
||||
list<int> typesToAdd;
|
||||
MTGAbility * andAbility;
|
||||
|
||||
AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL, int who = 0,
|
||||
string abilitiesStringList = "",string typeslist = "");
|
||||
string abilitiesStringList = "", string typeslist = "", string optionsList = "");
|
||||
int resolve();
|
||||
const string getMenuText();
|
||||
virtual ostream& toString(ostream& out) const;
|
||||
@@ -4060,6 +4111,8 @@ public:
|
||||
andAbilityClone->addToGame();
|
||||
}
|
||||
}
|
||||
WEvent * e = NEW WEventTokenCreated(myToken);
|
||||
source->getObserver()->receiveEvent(e); // triggers the @tokencreated event for any other listener.
|
||||
delete spell;
|
||||
}
|
||||
return 1;
|
||||
@@ -7035,7 +7088,7 @@ public:
|
||||
bool noEvent;
|
||||
bool putinplay;
|
||||
bool asNormalMadness;
|
||||
bool alternative;
|
||||
bool alternative;
|
||||
AACastCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target,bool restricted,bool copied,bool _asNormal,string nameCard,string abilityName,bool _noEvent, bool putinplay,bool asNormalMadness = false,bool alternative = false);
|
||||
|
||||
int testDestroy(){return 0;};
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
int init(MTGCardInstance * _target, const char * _name, int _power, int _toughness);
|
||||
bool sameAs(const char * _name, int _power, int _toughness);
|
||||
bool cancels(int _power, int _toughness);
|
||||
int cancelCounter(int power, int toughness);
|
||||
int cancelCounter(int power, int toughness, MTGCardInstance * _source);
|
||||
int added();
|
||||
int removed();
|
||||
};
|
||||
@@ -29,14 +29,14 @@ class Counters
|
||||
{
|
||||
public:
|
||||
int mCount;
|
||||
vector<Counter *>counters;
|
||||
vector<Counter *>counters;
|
||||
MTGCardInstance * target;
|
||||
Counters(MTGCardInstance * _target);
|
||||
~Counters();
|
||||
int addCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false);
|
||||
int addCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false, bool duplicated = false, MTGCardInstance * _source = NULL);
|
||||
int addCounter(int _power, int _toughness);
|
||||
int addCounter(int _power, int _toughness, bool _noevent);
|
||||
int removeCounter(const char * _name, int _power = 0, int _toughness = 0);
|
||||
int removeCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false, bool duplicated = false, MTGCardInstance * _source = NULL);
|
||||
int removeCounter(int _power, int _toughness);
|
||||
Counter * hasCounter(const char * _name, int _power = 0, int _toughness = 0);
|
||||
Counter * hasCounter(int _power, int _toughness);
|
||||
|
||||
@@ -63,7 +63,8 @@ struct WEventCounters : public WEvent {
|
||||
int toughness;
|
||||
bool added;
|
||||
bool removed;
|
||||
WEventCounters(Counters *counter,string name,int power, int toughness,bool added = false, bool removed = false);
|
||||
MTGCardInstance * source;
|
||||
WEventCounters(Counters *counter,string name,int power, int toughness,bool added = false, bool removed = false, MTGCardInstance * source = NULL);
|
||||
using WEvent::getTarget;
|
||||
virtual Targetable * getTarget();
|
||||
};
|
||||
@@ -357,6 +358,12 @@ struct WEventCardMutated : public WEventCardUpdate {
|
||||
virtual Targetable * getTarget(int target);
|
||||
};
|
||||
|
||||
//token creation event
|
||||
struct WEventTokenCreated : public WEventCardUpdate {
|
||||
WEventTokenCreated(MTGCardInstance * card);
|
||||
virtual Targetable * getTarget(int target);
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream&, const WEvent&);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1894,7 +1894,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M
|
||||
}
|
||||
if(!maxNb || (maxNb && currentAmount < maxNb))
|
||||
{
|
||||
_target->counters->addCounter(name.c_str(), power, toughness);
|
||||
_target->counters->addCounter(name.c_str(), power, toughness, false, false, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1904,7 +1904,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M
|
||||
{
|
||||
while (_target->next)
|
||||
_target = _target->next;
|
||||
_target->counters->removeCounter(name.c_str(), power, toughness);
|
||||
_target->counters->removeCounter(name.c_str(), power, toughness, false, false, source);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1920,7 +1920,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M
|
||||
{
|
||||
if (_target->counters->counters[i]->cancels(power, toughness) && !name.size() && _target->counters->counters[i]->nb > 0)
|
||||
{
|
||||
_target->counters->counters[i]->cancelCounter(power,toughness);
|
||||
_target->counters->counters[i]->cancelCounter(power,toughness, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2157,8 +2157,147 @@ AARemoveAllCounter * AARemoveAllCounter::clone() const
|
||||
return NEW AARemoveAllCounter(*this);
|
||||
}
|
||||
|
||||
//remove a single counter of a spefic kind chosen by user
|
||||
AARemoveSingleCounter::AARemoveSingleCounter(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost, int nb) :
|
||||
ActivatedAbility(observer, id, source, cost, 0), nb(nb)
|
||||
{
|
||||
this->GetId();
|
||||
}
|
||||
|
||||
int AARemoveSingleCounter::resolve()
|
||||
{
|
||||
if (!target)
|
||||
return 0;
|
||||
|
||||
vector<MTGAbility*>pcounters;
|
||||
|
||||
Player * pTarget = dynamic_cast<Player *>(target);
|
||||
MTGCardInstance * cTarget = dynamic_cast<MTGCardInstance *>(target);
|
||||
|
||||
if(pTarget && pTarget->poisonCount)
|
||||
{
|
||||
MTGAbility * a = NEW AAAlterPoison(game, game->mLayers->actionLayer()->getMaxId(), source, target, -nb, NULL);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
else if(pTarget && pTarget->energyCount)
|
||||
{
|
||||
MTGAbility * a = NEW AAAlterEnergy(game, game->mLayers->actionLayer()->getMaxId(), source, target, -nb, NULL);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
else if (cTarget && cTarget->counters)
|
||||
{
|
||||
Counters * counters = cTarget->counters;
|
||||
for(size_t i = 0; i < counters->counters.size(); ++i)
|
||||
{
|
||||
Counter * counter = counters->counters[i];
|
||||
MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, -nb, 0);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
}
|
||||
if(pcounters.size())
|
||||
{
|
||||
MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source,false,pcounters);
|
||||
a->resolve();
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
const string AARemoveSingleCounter::getMenuText()
|
||||
{
|
||||
return "Remove single specific counter";
|
||||
}
|
||||
|
||||
AARemoveSingleCounter * AARemoveSingleCounter::clone() const
|
||||
{
|
||||
return NEW AARemoveSingleCounter(*this);
|
||||
}
|
||||
|
||||
AARemoveSingleCounter::~AARemoveSingleCounter()
|
||||
{
|
||||
}
|
||||
|
||||
//duplicate counters
|
||||
AADuplicateCounters::AADuplicateCounters(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost) :
|
||||
ActivatedAbility(observer, id, source, cost, 0)
|
||||
{
|
||||
this->GetId();
|
||||
allcounters = false;
|
||||
}
|
||||
|
||||
int AADuplicateCounters::resolve()
|
||||
{
|
||||
if (!target)
|
||||
return 0;
|
||||
|
||||
vector<MTGAbility*>pcounters;
|
||||
|
||||
Player * pTarget = dynamic_cast<Player *>(target);
|
||||
MTGCardInstance * cTarget = dynamic_cast<MTGCardInstance *>(target);
|
||||
|
||||
if(pTarget && pTarget->poisonCount)
|
||||
{
|
||||
MTGAbility * a = NEW AAAlterPoison(game, game->mLayers->actionLayer()->getMaxId(), source, target, pTarget->poisonCount, NULL);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
else if(pTarget && pTarget->energyCount)
|
||||
{
|
||||
MTGAbility * a = NEW AAAlterEnergy(game, game->mLayers->actionLayer()->getMaxId(), source, target, pTarget->energyCount, NULL);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
else if (cTarget && cTarget->counters)
|
||||
{
|
||||
Counters * counters = cTarget->counters;
|
||||
for(size_t i = 0; i < counters->counters.size(); ++i)
|
||||
{
|
||||
Counter * counter = counters->counters[i];
|
||||
MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, counter->nb, 0);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
}
|
||||
if(pcounters.size())
|
||||
{
|
||||
if(allcounters)
|
||||
{
|
||||
for(size_t j = 0; j < pcounters.size(); j++)
|
||||
{
|
||||
pcounters[j]->resolve();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source,false,pcounters);
|
||||
a->resolve();
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
const string AADuplicateCounters::getMenuText()
|
||||
{
|
||||
if(allcounters)
|
||||
return "Duplicate all Counters";
|
||||
return "Duplicate specific Counters";
|
||||
}
|
||||
|
||||
AADuplicateCounters * AADuplicateCounters::clone() const
|
||||
{
|
||||
return NEW AADuplicateCounters(*this);
|
||||
}
|
||||
|
||||
AADuplicateCounters::~AADuplicateCounters()
|
||||
{
|
||||
}
|
||||
|
||||
//proliferate a target
|
||||
AAProliferate::AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost) :
|
||||
AAProliferate::AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost) :
|
||||
ActivatedAbility(observer, id, source, cost, 0)
|
||||
{
|
||||
this->GetId();
|
||||
@@ -2193,7 +2332,7 @@ int AAProliferate::resolve()
|
||||
for(size_t i = 0; i < counters->counters.size(); ++i)
|
||||
{
|
||||
Counter * counter = counters->counters[i];
|
||||
MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, 1,0);
|
||||
MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, 1, 0);
|
||||
a->oneShot = true;
|
||||
pcounters.push_back(a);
|
||||
}
|
||||
@@ -4366,12 +4505,13 @@ AALifeSet::~AALifeSet()
|
||||
//AACloner
|
||||
//cloning...this makes a token thats a copy of the target.
|
||||
AACloner::AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, ManaCost * _cost, int who,
|
||||
string abilitiesStringList,string TypesList) :
|
||||
string abilitiesStringList, string TypesList, string optionsList) :
|
||||
ActivatedAbility(observer, _id, _source, _cost, 0), who(who)
|
||||
{
|
||||
aType = MTGAbility::CLONING;
|
||||
target = _target;
|
||||
source = _source;
|
||||
options = optionsList;
|
||||
if (abilitiesStringList.size() > 0)
|
||||
{
|
||||
PopulateAbilityIndexVector(awith, abilitiesStringList);
|
||||
@@ -4497,6 +4637,10 @@ int AACloner::resolve()
|
||||
andAbilityClone->addToGame();
|
||||
}
|
||||
}
|
||||
if(options.find("notrigger") == string::npos){ // check if the @tokencreated trigger has to be activated or not
|
||||
WEvent * e = NEW WEventTokenCreated(spell->source);
|
||||
source->getObserver()->receiveEvent(e); // triggers the @tokencreated event for any other listener.
|
||||
}
|
||||
delete spell;
|
||||
}
|
||||
return 1;
|
||||
|
||||
@@ -38,14 +38,14 @@ bool Counter::cancels(int _power, int _toughness)
|
||||
return (power == -_power && toughness == -_toughness);
|
||||
}
|
||||
|
||||
int Counter::cancelCounter(int power, int toughness)
|
||||
int Counter::cancelCounter(int power, int toughness, MTGCardInstance * _source)
|
||||
{
|
||||
while(this->target->counters->hasCounter(power,toughness) && this->target->counters->hasCounter(power*-1,toughness*-1))
|
||||
{
|
||||
GameObserver *g = this->target->getObserver();
|
||||
this->removed();
|
||||
this->nb--;
|
||||
WEvent * t = NEW WEventCounters(NULL,"",power*-1,toughness*-1,false,true);
|
||||
WEvent * t = NEW WEventCounters(NULL,"",power*-1,toughness*-1,false,true,_source);
|
||||
dynamic_cast<WEventCounters*>(t)->targetCard = this->target;
|
||||
g->receiveEvent(t);
|
||||
this->target->counters->removeCounter(power,toughness);
|
||||
@@ -98,7 +98,7 @@ Counters::~Counters()
|
||||
}
|
||||
}
|
||||
|
||||
int Counters::addCounter(const char * _name, int _power, int _toughness, bool _noevent)
|
||||
int Counters::addCounter(const char * _name, int _power, int _toughness, bool _noevent, bool duplicated, MTGCardInstance * _source)
|
||||
{
|
||||
/*420.5n If a permanent has both a +1/+1 counter and a -1/-1 counter on it, N +1/+1 and N -1/-1 counters are removed from it, where N is the smaller of the number of +1/+1 and -1/-1 counters on it.*/
|
||||
GameObserver *g = target->getObserver();
|
||||
@@ -112,9 +112,12 @@ int Counters::addCounter(const char * _name, int _power, int _toughness, bool _n
|
||||
{
|
||||
counters[i]->added();
|
||||
counters[i]->nb++;
|
||||
WEvent * j = NEW WEventCounters(this,_name,_power,_toughness,true,false);
|
||||
dynamic_cast<WEventCounters*>(j)->targetCard = this->target;
|
||||
g->receiveEvent(j);
|
||||
if (!duplicated)
|
||||
{
|
||||
WEvent * j = NEW WEventCounters(this,_name,_power,_toughness,true,false,_source);
|
||||
dynamic_cast<WEventCounters*>(j)->targetCard = this->target;
|
||||
g->receiveEvent(j);
|
||||
}
|
||||
delete(e);
|
||||
return mCount;
|
||||
}
|
||||
@@ -122,13 +125,13 @@ int Counters::addCounter(const char * _name, int _power, int _toughness, bool _n
|
||||
Counter * counter = NEW Counter(target, _name, _power, _toughness);
|
||||
counters.push_back(counter);
|
||||
counter->added();
|
||||
if (!_noevent)
|
||||
mCount++;
|
||||
if (!_noevent && !duplicated)
|
||||
{
|
||||
WEvent * w = NEW WEventCounters(this,_name,_power,_toughness,true,false);
|
||||
WEvent * w = NEW WEventCounters(this,_name,_power,_toughness,true,false,_source);
|
||||
dynamic_cast<WEventCounters*>(w)->targetCard = this->target;
|
||||
g->receiveEvent(w);
|
||||
}
|
||||
mCount++;
|
||||
/*the damage test should be handled on game state based effect i think*/
|
||||
//this->target->doDamageTest = 1;
|
||||
//this->target->afterDamage();
|
||||
@@ -160,7 +163,7 @@ int Counters::init()
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Counters::removeCounter(const char * _name, int _power, int _toughness)
|
||||
int Counters::removeCounter(const char * _name, int _power, int _toughness, bool _noevent, bool duplicated, MTGCardInstance * _source)
|
||||
{
|
||||
for (int i = 0; i < mCount; i++)
|
||||
{
|
||||
@@ -172,10 +175,12 @@ int Counters::removeCounter(const char * _name, int _power, int _toughness)
|
||||
counters[i]->removed();
|
||||
counters[i]->nb--;
|
||||
GameObserver *g = target->getObserver();
|
||||
WEvent * e = NEW WEventCounters(this,_name,_power,_toughness,false,true);
|
||||
dynamic_cast<WEventCounters*>(e)->targetCard = this->target;
|
||||
g->receiveEvent(e);
|
||||
|
||||
if (!_noevent && !duplicated)
|
||||
{
|
||||
WEvent * e = NEW WEventCounters(this,_name,_power,_toughness,false,true,_source);
|
||||
dynamic_cast<WEventCounters*>(e)->targetCard = this->target;
|
||||
g->receiveEvent(e);
|
||||
}
|
||||
// special case: when the last time counter is removed from non-suspended card
|
||||
// sacrifice that card
|
||||
if (!target->suspended && counters[i]->name == "time" && counters[i]->nb == 0) {
|
||||
|
||||
@@ -1072,9 +1072,8 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
fromTc = tcf.createTargetChooser(starget, card);
|
||||
fromTc->targetter = NULL; //avoid protection from
|
||||
}
|
||||
TriggeredAbility * mover = NEW TrCardAddedToZone(observer, id, card, (TargetZoneChooser *) toTc,
|
||||
toTcCard, (TargetZoneChooser *) fromTc, fromTcCard, once, sourceUntapped, isSuspended, limitOnceATurn);
|
||||
if(neverRemove)
|
||||
TriggeredAbility * mover = NEW TrCardAddedToZone(observer, id, card, (TargetZoneChooser *) toTc, toTcCard, (TargetZoneChooser *) fromTc, fromTcCard, once, sourceUntapped, isSuspended, limitOnceATurn);
|
||||
if(neverRemove && mover)
|
||||
{
|
||||
mover->forcedAlive = 1;
|
||||
mover->forceDestroy = -1;
|
||||
@@ -1172,6 +1171,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
//Card is mutated
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "mutated", card))
|
||||
return NEW TrCardMutated(observer, id, card, tc,once);
|
||||
|
||||
//Token has been created
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "tokencreated", card))
|
||||
return NEW TrTokenCreated(observer, id, card, tc,once);
|
||||
|
||||
//Card is sacrificed
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card))
|
||||
@@ -1331,17 +1334,35 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
if (s.find("counteradded(") != string::npos)
|
||||
{
|
||||
vector<string>splitCounter = parseBetween(s,"counteradded(",")");
|
||||
Counter * counter = parseCounter(splitCounter[1],card,NULL);
|
||||
Counter * counter = NULL;
|
||||
bool duplicate = false;
|
||||
if(s.find("(duplicateall)") != string::npos)
|
||||
duplicate = true;
|
||||
else if(s.find("(any)") == string::npos)
|
||||
counter = parseCounter(splitCounter[1],card,NULL);
|
||||
TargetChooser * tc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 1,once);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a counter add/remove exception in order to avoid counter loop (eg. Doubling Season)
|
||||
if(exception)
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 1, once, duplicate, exception->source);
|
||||
else
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 1, once, duplicate);
|
||||
}
|
||||
|
||||
if (s.find("counterremoved(") != string::npos)
|
||||
{
|
||||
vector<string>splitCounter = parseBetween(s,"counterremoved(",")");
|
||||
Counter * counter = parseCounter(splitCounter[1],card,NULL);
|
||||
Counter * counter = NULL;
|
||||
bool duplicate = false;
|
||||
if(s.find("(duplicateall)") != string::npos)
|
||||
duplicate = true;
|
||||
else if(s.find("(any)") == string::npos)
|
||||
counter = parseCounter(splitCounter[1],card,NULL);
|
||||
TargetChooser * tc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 0,once);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a counter add/remove exception in order to avoid counter loop (eg. Doubling Season)
|
||||
if(exception)
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 0, once, duplicate, exception->source);
|
||||
else
|
||||
return NEW TrCounter(observer, id, card, counter, tc, 0, once, duplicate);
|
||||
}
|
||||
|
||||
int who = 0;
|
||||
@@ -3047,6 +3068,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
{
|
||||
string with = "";
|
||||
string types = "";
|
||||
string options = "";
|
||||
vector<string> splitWith = parseBetween(s, "with(", ")");
|
||||
if (splitWith.size())
|
||||
{
|
||||
@@ -3057,7 +3079,12 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
{
|
||||
types = splitTypes[1];
|
||||
}
|
||||
MTGAbility * a = NEW AACloner(observer, id, card, target, 0, who, with,types);
|
||||
vector<string> splitOptions = parseBetween(s, "options(", ")");
|
||||
if (splitOptions.size())
|
||||
{
|
||||
options = splitOptions[1];
|
||||
}
|
||||
MTGAbility * a = NEW AACloner(observer, id, card, target, 0, who, with, types, options);
|
||||
a->oneShot = 1;
|
||||
if(storedAndAbility.size())
|
||||
{
|
||||
@@ -3132,7 +3159,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
bool asNormalMadness = splitCastCard[1].find("madness") != string::npos;
|
||||
bool sendNoEvent = splitCastCard[1].find("noevent") != string::npos;
|
||||
bool putinplay = splitCastCard[1].find("putinplay") != string::npos;
|
||||
bool alternative = splitCastCard[1].find("alternative") != string::npos;
|
||||
bool alternative = splitCastCard[1].find("alternative") != string::npos;
|
||||
string nameCard = "";
|
||||
if(splitCastCard[1].find("named!:") != string::npos)
|
||||
{
|
||||
@@ -3719,6 +3746,28 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
string splitCounterTrack = splitCounterTracking[1];
|
||||
return NEW ACounterTracker(observer, id, card, target,splitCounterTrack);
|
||||
}
|
||||
//duplicate counters
|
||||
vector<string> splitDuplicateCounters = parseBetween(s, "duplicatecounters(", ")");
|
||||
if (splitDuplicateCounters.size())
|
||||
{
|
||||
MTGAbility * a = NEW AADuplicateCounters(observer, id, card, target, NULL);
|
||||
a->oneShot = 1;
|
||||
a->canBeInterrupted = false;
|
||||
string counterString = splitDuplicateCounters[1];
|
||||
if(counterString.find("all") != string::npos)
|
||||
((AADuplicateCounters*)a)->allcounters = true;
|
||||
return a;
|
||||
}
|
||||
//remove single counter of any type
|
||||
vector<string> splitRemoveSpecificCounters = parseBetween(s, "removesinglecountertype(", ")");
|
||||
if (splitRemoveSpecificCounters.size())
|
||||
{
|
||||
int nb = atoi(splitRemoveSpecificCounters[1].c_str());
|
||||
MTGAbility * a = NEW AARemoveSingleCounter(observer, id, card, target, NULL, nb);
|
||||
a->oneShot = 1;
|
||||
a->canBeInterrupted = false;
|
||||
return a;
|
||||
}
|
||||
//removes all counters of the specifified type.
|
||||
vector<string> splitRemoveCounter = parseBetween(s, "removeallcounters(", ")");
|
||||
if (splitRemoveCounter.size())
|
||||
@@ -4176,7 +4225,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
((AAProliferate*)a)->allcounters = true;
|
||||
return a;
|
||||
}
|
||||
|
||||
|
||||
//frozen, next untap this does not untap.
|
||||
found = s.find("frozen");
|
||||
if (found != string::npos)
|
||||
|
||||
@@ -911,7 +911,7 @@ int MTGAlternativeCostRule::reactToClick(MTGCardInstance * card, ManaCost *alter
|
||||
ManaCost * Xcost = NEW ManaCost();
|
||||
Xcost->copy(alternateCost);
|
||||
Xcost->add(Constants::MTG_COLOR_ARTIFACT, card->setX);
|
||||
card->X = card->setX; // Fix to don't loose X value on alternative cast
|
||||
card->X = card->setX; // Fix to don't loose X value on alternative cast
|
||||
Xcost->remove(7, 1);//remove the X
|
||||
if (playerMana->canAfford(Xcost))
|
||||
{
|
||||
@@ -3414,7 +3414,7 @@ int MTGNewLegend::receiveEvent(WEvent * e)
|
||||
{
|
||||
if(card->basicAbilities[(int)Constants::MUTATE] && card->alternateCostPaid[(int)ManaCost::MANA_PAID_WITH_ALTERNATIVE])
|
||||
return 0; // The Leged rule for Mutating card will be checked later just if it's a Mutation Over choice
|
||||
CheckLegend(card);
|
||||
CheckLegend(card);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +43,8 @@ WEventCardUpdate::WEventCardUpdate(MTGCardInstance * card) :
|
||||
}
|
||||
;
|
||||
|
||||
WEventCounters::WEventCounters(Counters *counter,string name,int power,int toughness,bool added,bool removed) :
|
||||
WEvent(),counter(counter),name(name),power(power),toughness(toughness),added(added),removed(removed)
|
||||
WEventCounters::WEventCounters(Counters *counter,string name,int power,int toughness,bool added,bool removed, MTGCardInstance* source) :
|
||||
WEvent(),counter(counter),name(name),power(power),toughness(toughness),added(added),removed(removed),source(source)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -291,6 +291,11 @@ WEventCardMutated::WEventCardMutated(MTGCardInstance * card) :
|
||||
WEventCardUpdate(card)
|
||||
{
|
||||
}
|
||||
|
||||
WEventTokenCreated::WEventTokenCreated(MTGCardInstance * card) :
|
||||
WEventCardUpdate(card)
|
||||
{
|
||||
}
|
||||
;
|
||||
|
||||
Targetable * WEventDamage::getTarget(int target)
|
||||
@@ -495,6 +500,12 @@ Targetable * WEventCardMutated::getTarget(int target)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Targetable * WEventTokenCreated::getTarget(int target)
|
||||
{
|
||||
if (target) return card;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Targetable * WEventplayerEnergized::getTarget(Player * player)
|
||||
{
|
||||
if (player) return player;
|
||||
|
||||
Reference in New Issue
Block a user