Merge pull request #957 from kevlahnota/master

Provoke
This commit is contained in:
Anthony Calosa
2017-03-09 19:34:10 +08:00
committed by GitHub
11 changed files with 395 additions and 175 deletions
+200 -17
View File
@@ -1,6 +1,6 @@
#Primitives Pack for Wagic the Homebrew. #Primitives Pack for Wagic the Homebrew.
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card #Please keep these card alphabetized, and try to have the "name=" line at the top of each card
#I sorted this programatically so the other comments are removed except for AUTO_DEFINE - kevlahnota 02-10-2017 #I sorted this programatically so the other comments are removed except for AUTO_DEFINE - kevlahnota 03-09-2017
[card] [card]
name=Abandon Reason name=Abandon Reason
target=<upto:2>creature target=<upto:2>creature
@@ -7851,6 +7851,7 @@ type=Instant
[card] [card]
name=Aven Warhawk name=Aven Warhawk
abilities=flying abilities=flying
aicode=activate target(<anyamount>*[bird;soldier]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[bird;soldier]|myhand) optionone foreach(*[bird;soldier]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[bird;soldier]|myhand) optionone foreach(*[bird;soldier]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Bird and/or Soldier card you reveal in your hand.) -- Flying text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Bird and/or Soldier card you reveal in your hand.) -- Flying
mana={4}{W} mana={4}{W}
@@ -15207,6 +15208,17 @@ mana={2}{G}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Brontotherium
abilities=trample
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Trample -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{G}{G}
type=Creature
subtype=Beast
power=5
toughness=3
[/card]
[card]
name=Bronze Sable name=Bronze Sable
mana={2} mana={2}
type=Artifact Creature type=Artifact Creature
@@ -15853,6 +15865,18 @@ mana={1}{R}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Burning-Tree Bloodscale
auto=bloodthirst:1
auto={2}{R}:target(creature) ueot cantbeblockerof(this)
auto={2}{G}:setblocker target(creature|opponentbattlefield)
text=Bloodthirst 1 (If an opponent was dealt damage this turn, this creature enters the battlefield with a +1/+1 counter on it.) -- {2}{R}: Target creature can't block Burning-Tree Bloodscale this turn. -- {2}{G}: Target creature blocks Burning-Tree Bloodscale this turn if able.
mana={2}{R}{G}
type=Creature
subtype=Viashino Berserker
power=2
toughness=2
[/card]
[card]
name=Burning-Tree Emissary name=Burning-Tree Emissary
auto=Add{R}{G} auto=Add{R}{G}
text=When Burning-Tree Emissary enters the battlefield, add {R}{G} to your mana pool. text=When Burning-Tree Emissary enters the battlefield, add {R}{G} to your mana pool.
@@ -16656,6 +16680,7 @@ subtype=Aura
[card] [card]
name=Canopy Crawler name=Canopy Crawler
auto={t}:target(creature) thisforeach(counter{1/1.1}) +1/+1 ueot auto={t}:target(creature) thisforeach(counter{1/1.1}) +1/+1 ueot
aicode=activate target(<anyamount>*[beast]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[beast]|myhand) optionone foreach(*[beast]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[beast]|myhand) optionone foreach(*[beast]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Beast card you reveal in your hand.) -- {T}: Target creature gets +1/+1 until end of turn for each +1/+1 counter on Canopy Crawler. text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Beast card you reveal in your hand.) -- {T}: Target creature gets +1/+1 until end of turn for each +1/+1 counter on Canopy Crawler.
mana={3}{G} mana={3}{G}
@@ -23623,6 +23648,17 @@ type=Enchantment
text=At the beginning of each upkeep, put a strife counter on Crescendo of War. Attacking creatures get +1/+0 for each strife counter on Crescendo of War. Blocking creatures you control get +1/+0 for each strife counter on Crescendo of War. text=At the beginning of each upkeep, put a strife counter on Crescendo of War. Attacking creatures get +1/+0 for each strife counter on Crescendo of War. Blocking creatures you control get +1/+0 for each strife counter on Crescendo of War.
[/card] [/card]
[card] [card]
name=Crested Craghorn
abilities=haste
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Haste -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{R}
type=Creature
subtype=Goat Beast
power=4
toughness=1
[/card]
[card]
name=Crevasse name=Crevasse
auto=lord(creature) -mountainwalk auto=lord(creature) -mountainwalk
text=Creatures with mountainwalk can be blocked as though they didn't have mountainwalk. text=Creatures with mountainwalk can be blocked as though they didn't have mountainwalk.
@@ -26235,6 +26271,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Daru Stinger name=Daru Stinger
aicode=activate target(<anyamount>*[human;soldier]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[human;soldier]|myhand) optionone foreach(*[human;soldier]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[human;soldier]|myhand) optionone foreach(*[human;soldier]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
auto={t}:target(creature[attacking;blocking]) thisforeach(counter{1/1.1}) damage:1 auto={t}:target(creature[attacking;blocking]) thisforeach(counter{1/1.1}) damage:1
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Human and/or Soldier card you reveal in your hand.) -- {T}: Daru Stinger deals damage equal to the number of +1/+1 counters on it to target attacking or blocking creature. text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Human and/or Soldier card you reveal in your hand.) -- {T}: Daru Stinger deals damage equal to the number of +1/+1 counters on it to target attacking or blocking creature.
@@ -28063,6 +28100,17 @@ power=2
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Deftblade Elite
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
auto={1}{W}:preventAllCombatDamage to(this) && preventAllCombatDamage from(this)
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) -- {1}{W}: Prevent all combat damage that would be dealt to and dealt by Deftblade Elite this turn.
mana={W}
type=Creature
subtype=Human Soldier
power=1
toughness=1
[/card]
[card]
name=Defy Death name=Defy Death
target=creature|mygraveyard target=creature|mygraveyard
auto=moveto(mybattlefield) && transforms((,newability[if cantargetcard(angel) then counter(1/1.2)])) oneshot auto=moveto(mybattlefield) && transforms((,newability[if cantargetcard(angel) then counter(1/1.2)])) oneshot
@@ -35181,6 +35229,7 @@ toughness=3
name=Embalmed Brawler name=Embalmed Brawler
auto=@combat(attacking) source(this):thisforeach(counter{1/1.1}) life:-1 controller auto=@combat(attacking) source(this):thisforeach(counter{1/1.1}) life:-1 controller
auto=@combat(blocking) source(this):thisforeach(counter{1/1.1}) life:-1 controller auto=@combat(blocking) source(this):thisforeach(counter{1/1.1}) life:-1 controller
aicode=activate target(<anyamount>*[zombie]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- Whenever Embalmed Brawler attacks or blocks, you lose 1 life for each +1/+1 counter on it. text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- Whenever Embalmed Brawler attacks or blocks, you lose 1 life for each +1/+1 counter on it.
mana={2}{B} mana={2}{B}
@@ -39822,6 +39871,18 @@ power=6
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Feral Throwback
aicode=activate target(<anyamount>*[beast]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1,2) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[beast]|myhand) optionone foreach(*[beast]|reveal) counter(1/1,2) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Amplify 2 (As this creature enters the battlefield, put two +1/+1 counters on it for each Beast card you reveal in your hand.) -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{G}{G}
type=Creature
subtype=Beast
power=3
toughness=3
[/card]
[card]
name=Ferocious Charge name=Ferocious Charge
target=creature target=creature
auto=4/4 auto=4/4
@@ -40227,6 +40288,13 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Fierce Invocation
auto=manifest and!( counter(1/1,2) )! all(*[zpos=1]|mylibrary)
text=Manifest the top card of your library, then put two +1/+1 counters on it. (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={4}{R}
type=Sorcery
[/card]
[card]
name=Fiery Conclusion name=Fiery Conclusion
auto=damage:5 target(creature) auto=damage:5 target(creature)
text=As an additional cost to cast Fiery Conclusion, sacrifice a creature. -- Fiery Conclusion deals 5 damage to target creature. text=As an additional cost to cast Fiery Conclusion, sacrifice a creature. -- Fiery Conclusion deals 5 damage to target creature.
@@ -40262,13 +40330,6 @@ mana={R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Fierce Invocation
auto=manifest and!( counter(1/1,2) )! all(*[zpos=1]|mylibrary)
text=Manifest the top card of your library, then put two +1/+1 counters on it. (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={4}{R}
type=Sorcery
[/card]
[card]
name=Fiery Mantle name=Fiery Mantle
target=creature target=creature
autograveyard=@movedTo(this|graveyard) from(battlefield):moveTo(ownerhand) autograveyard=@movedTo(this|graveyard) from(battlefield):moveTo(ownerhand)
@@ -45528,6 +45589,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Ghastly Remains name=Ghastly Remains
aicode=activate target(<anyamount>*[zombie]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
autograveyard={B}{B}{B}:moveTo(myhand) myUpkeepOnly autograveyard={B}{B}{B}:moveTo(myhand) myUpkeepOnly
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- At the beginning of your upkeep, if Ghastly Remains is in your graveyard, you may pay {B}{B}{B}. If you do, return Ghastly Remains to your hand. text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- At the beginning of your upkeep, if Ghastly Remains is in your graveyard, you may pay {B}{B}{B}. If you do, return Ghastly Remains to your hand.
@@ -46046,6 +46108,17 @@ power=7
toughness=7 toughness=7
[/card] [/card]
[card] [card]
name=Giant Ambush Beetle
abilities=haste
auto=may setblocker target(creature|opponentbattlefield)
text=Haste -- When Giant Ambush Beetle enters the battlefield, you may have target creature block it this turn if able.
mana={3}{BG}{R}
type=Creature
subtype=Insect
power=4
toughness=3
[/card]
[card]
name=Giant Badger name=Giant Badger
auto=@combat(blocking) source(this):2/2 ueot auto=@combat(blocking) source(this):2/2 ueot
text=Whenever Giant Badger blocks, it gets +2/+2 until end of turn. text=Whenever Giant Badger blocks, it gets +2/+2 until end of turn.
@@ -47201,6 +47274,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Glowering Rogon name=Glowering Rogon
aicode=activate target(<anyamount>*[beast]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[beast]|myhand) optionone foreach(*[beast]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[beast]|myhand) optionone foreach(*[beast]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Beast card you reveal in your hand.) text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Beast card you reveal in your hand.)
mana={5}{G} mana={5}{G}
@@ -47845,6 +47919,16 @@ power=6
toughness=6 toughness=6
[/card] [/card]
[card] [card]
name=Goblin Grappler
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={R}
type=Creature
subtype=Goblin
power=1
toughness=1
[/card]
[card]
name=Goblin Grenade name=Goblin Grenade
auto=damage:5 target(creature,player) auto=damage:5 target(creature,player)
text=As an additional cost to cast Goblin Grenade, sacrifice a Goblin. -- Goblin Grenade deals 5 damage to target creature or player. text=As an additional cost to cast Goblin Grenade, sacrifice a Goblin. -- Goblin Grenade deals 5 damage to target creature or player.
@@ -56228,6 +56312,16 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Hunter Sliver
auto=lord(sliver) transforms((,newability[@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)]))
text=All Sliver creatures have provoke. (When a Sliver attacks, its controller may have target creature defending player controls untap and block it if able.)
mana={1}{R}
type=Creature
subtype=Sliver
power=1
toughness=1
[/card]
[card]
name=Hunter's Ambush name=Hunter's Ambush
auto=preventAllCombatDamage from(creature[-Green]) ueot auto=preventAllCombatDamage from(creature[-Green]) ueot
text=Prevent all combat damage that would be dealt by nongreen creatures this turn. text=Prevent all combat damage that would be dealt by nongreen creatures this turn.
@@ -62772,6 +62866,7 @@ toughness=3
name=Kilnmouth Dragon name=Kilnmouth Dragon
abilities=flying abilities=flying
auto={t}:target(creature,player) thisforeach(counter{1/1.1}) damage:1 auto={t}:target(creature,player) thisforeach(counter{1/1.1}) damage:1
aicode=activate target(<anyamount>*[dragon]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1,3) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Dragon]|myhand) optionone foreach(*[Dragon]|reveal) counter(1/1,3) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Dragon]|myhand) optionone foreach(*[Dragon]|reveal) counter(1/1,3) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 3 (As this creature enters the battlefield, put three +1/+1 counters on it for each Dragon card you reveal in your hand.) -- Flying -- {T}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player. text=Amplify 3 (As this creature enters the battlefield, put three +1/+1 counters on it for each Dragon card you reveal in your hand.) -- Flying -- {T}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player.
mana={5}{R}{R} mana={5}{R}{R}
@@ -64653,6 +64748,17 @@ text=Krosan Verge enters the battlefield tapped. -- {T}: Add {1} to your mana po
type=Land type=Land
[/card] [/card]
[card] [card]
name=Krosan Vorine
abilities=oneblocker
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) -- Krosan Vorine can't be blocked by more than one creature.
mana={3}{G}
type=Creature
subtype=Cat Beast
power=3
toughness=2
[/card]
[card]
name=Krosan Warchief name=Krosan Warchief
auto={1}{G}:regenerate target(beast) auto={1}{G}:regenerate target(beast)
auto=lord(beast|mycastingzone) altercost(colorless,-1) auto=lord(beast|mycastingzone) altercost(colorless,-1)
@@ -68561,6 +68667,17 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Lowland Tracker
abilities=first strike
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=First strike -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{W}
type=Creature
subtype=Human Soldier
power=2
toughness=2
[/card]
[card]
name=Loxodon Anchorite name=Loxodon Anchorite
auto={T}:prevent:2 target(creature,player) auto={T}:prevent:2 target(creature,player)
text={T}: Prevent the next 2 damage that would be dealt to target creature or player this turn. text={T}: Prevent the next 2 damage that would be dealt to target creature or player this turn.
@@ -71823,6 +71940,13 @@ power=3
toughness=2 toughness=2
[/card] [/card]
[card] [card]
name=Master's Call
auto=token(Myr,Artifact Creature Myr,1/1)*2
text=Put two 1/1 colorless Myr artifact creature tokens onto the battlefield.
mana={2}{W}
type=Instant
[/card]
[card]
name=Mastery of the Unseen name=Mastery of the Unseen
auto=@facedup(*|mybattlefield):life:type:creature:battlefield controller auto=@facedup(*|mybattlefield):life:type:creature:battlefield controller
auto={3}{W}:manifest all(*[zpos=1]|mylibrary) auto={3}{W}:manifest all(*[zpos=1]|mylibrary)
@@ -71831,13 +71955,6 @@ mana={1}{W}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Master's Call
auto=token(Myr,Artifact Creature Myr,1/1)*2
text=Put two 1/1 colorless Myr artifact creature tokens onto the battlefield.
mana={2}{W}
type=Instant
[/card]
[card]
name=Masticore name=Masticore
auto=upcost[{D(*|myhand)}] sacrifice auto=upcost[{D(*|myhand)}] sacrifice
auto={2}:damage:1 target(creature) auto={2}:damage:1 target(creature)
@@ -71891,6 +72008,17 @@ power=2
toughness=2 toughness=2
[/card] [/card]
[card] [card]
name=Matsu-Tribe Decoy
auto={2}{G}:setblocker target(creature|opponentbattlefield)
auto=@combatdamaged(creature) from(this):all(trigger[to]) tap && all(trigger[to]) frozen
text={2}{G}: Target creature blocks Matsu-Tribe Decoy this turn if able. -- Whenever Matsu-Tribe Decoy deals combat damage to a creature, tap that creature and it doesn't untap during its controller's next untap step.
mana={2}{G}
type=Creature
subtype=Snake Warrior
power=1
toughness=3
[/card]
[card]
name=Matsu-Tribe Sniper name=Matsu-Tribe Sniper
auto=@damaged(creature) from(this):all(trigger[to]) tap && all(trigger[to]) frozen auto=@damaged(creature) from(this):all(trigger[to]) tap && all(trigger[to]) frozen
auto={T}:damage:1 target(creature[flying]) auto={T}:damage:1 target(creature[flying])
@@ -74759,8 +74887,8 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Mist Dragon name=Mist Dragon
auto={0}:flying auto={0}:flying forever
auto={0}:-flying auto={0}:-flying forever
auto={3}{U}{U}:phaseout auto={3}{U}{U}:phaseout
text={0}: Mist Dragon gains flying. (This effect lasts indefinitely.) -- {0}: Mist Dragon loses flying. (This effect lasts indefinitely.) -- {3}{U}{U}: Mist Dragon phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before you untap during your next untap step.) text={0}: Mist Dragon gains flying. (This effect lasts indefinitely.) -- {0}: Mist Dragon loses flying. (This effect lasts indefinitely.) -- {3}{U}{U}: Mist Dragon phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before you untap during your next untap step.)
mana={4}{U}{U} mana={4}{U}{U}
@@ -91686,6 +91814,16 @@ power=6
toughness=4 toughness=4
[/card] [/card]
[card] [card]
name=Rampant Elephant
auto={G}:setblocker target(creature|opponentbattlefield)
text={G}: Target creature blocks Rampant Elephant this turn if able.
mana={3}{W}
type=Creature
subtype=Elephant
power=2
toughness=2
[/card]
[card]
name=Rampant Growth name=Rampant Growth
aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(land[basic]|myLibrary) aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(land[basic]|myLibrary)
auto=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=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
@@ -116509,6 +116647,18 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Swooping Talon
abilities=flying
auto={1}:-flying ueot
auto=@combat(attacking) source(this):may provoke target(creature|opponentbattlefield)
text=Flying -- {1}: Swooping Talon loses flying until end of turn. -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{W}{W}
type=Creature
subtype=Bird Soldier
power=2
toughness=6
[/card]
[card]
name=Sword Dancer name=Sword Dancer
auto={W}{W}:-1/0 target(creature[attacking]) auto={W}{W}:-1/0 target(creature[attacking])
text={W}{W}: Target attacking creature gets -1/-0 until end of turn. text={W}{W}: Target attacking creature gets -1/-0 until end of turn.
@@ -117634,6 +117784,17 @@ mana={1}{W}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Tangle Angler
abilities=infect
auto={G}:setblocker target(creature|opponentbattlefield)
text=Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) -- {G}: Target creature blocks Tangle Angler this turn if able.
mana={3}{G}
type=Creature
subtype=Horror
power=1
toughness=5
[/card]
[card]
name=Tangle Asp name=Tangle Asp
auto=@combat(blocking,blocked) source(this) from(creature):all(trigger[from]) phaseaction[combatends once] destroy auto=@combat(blocking,blocked) source(this) from(creature):all(trigger[from]) phaseaction[combatends once] destroy
text=Whenever Tangle Asp blocks or becomes blocked by a creature, destroy that creature at end of combat. text=Whenever Tangle Asp blocks or becomes blocked by a creature, destroy that creature at end of combat.
@@ -124486,6 +124647,16 @@ mana={2}{R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Trumpeting Armodon
auto={1}{G}:setblocker target(creature|opponentbattlefield)
text={1}{G}: Target creature blocks Trumpeting Armodon this turn if able.
mana={3}{G}
type=Creature
subtype=Elephant
power=3
toughness=3
[/card]
[card]
name=Trusted Advisor name=Trusted Advisor
auto=hmodifer:2 controller auto=hmodifer:2 controller
auto=@each my upkeep:moveTo(ownerhand) notatarget(creature[blue]|myBattlefield) auto=@each my upkeep:moveTo(ownerhand) notatarget(creature[blue]|myBattlefield)
@@ -124755,6 +124926,17 @@ type=Instant
mana={2}{U}{U} mana={2}{U}{U}
[/card] [/card]
[card] [card]
name=Turntimber Basilisk
abilities=deathtouch
auto=@movedTo(land|myBattlefield):may setblocker target(creature|opponentbattlefield)
text=Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.) -- Landfall -- Whenever a land enters the battlefield under your control, you may have target creature block Turntimber Basilisk this turn if able.
mana={1}{G}{G}
type=Creature
subtype=Basilisk
power=2
toughness=1
[/card]
[card]
name=Turntimber Grove name=Turntimber Grove
auto=tap(noevent) auto=tap(noevent)
auto=1/1 target(creature) ueot auto=1/1 target(creature) ueot
@@ -137186,6 +137368,7 @@ toughness=3
[card] [card]
name=Zombie Brute name=Zombie Brute
abilities=trample abilities=trample
aicode=activate target(<anyamount>*[zombie]|myhand) name(revealed card) moveto(myhand) name(revealed card) and!( all(this) counter(1/1) )!
auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend auto=Reveal:type:*:myhand revealzone(myhand) revealtype(*[Zombie]|myhand) optionone foreach(*[Zombie]|reveal) counter(1/1,1) optiononeend optiontwo all(*|reveal) moveto(myhand) optiontwoend revealend
text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- Trample text=Amplify 1 (As this creature enters the battlefield, put a +1/+1 counter on it for each Zombie card you reveal in your hand.) -- Trample
mana={6}{B} mana={6}{B}
@@ -1584,15 +1584,6 @@ mana={4}{B}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Brontotherium
text=Trample -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{G}{G}
type=Creature
subtype=Beast
power=5
toughness=3
[/card]
[card]
name=Bronze Bombshell name=Bronze Bombshell
text=When a player other than Bronze Bombshell's owner controls it, that player sacrifices it. If the player does, Bronze Bombshell deals 7 damage to him or her. text=When a player other than Bronze Bombshell's owner controls it, that player sacrifices it. If the player does, Bronze Bombshell deals 7 damage to him or her.
mana={4} mana={4}
@@ -1677,15 +1668,6 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Burning-Tree Bloodscale
text=Bloodthirst 1 (If an opponent was dealt damage this turn, this creature enters the battlefield with a +1/+1 counter on it.) -- {2}{R}: Target creature can't block Burning-Tree Bloodscale this turn. -- {2}{G}: Target creature blocks Burning-Tree Bloodscale this turn if able.
mana={2}{R}{G}
type=Creature
subtype=Viashino Berserker
power=2
toughness=2
[/card]
[card]
name=Burning-Tree Shaman name=Burning-Tree Shaman
text=Whenever a player activates an ability that isn't a mana ability, Burning-Tree Shaman deals 1 damage to that player. text=Whenever a player activates an ability that isn't a mana ability, Burning-Tree Shaman deals 1 damage to that player.
mana={1}{R}{G} mana={1}{R}{G}
@@ -2947,15 +2929,6 @@ mana={3}{B}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Crested Craghorn
text=Haste -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{R}
type=Creature
subtype=Goat Beast
power=4
toughness=1
[/card]
[card]
name=Crime // Punishment name=Crime // Punishment
text=Put target creature or enchantment card from an opponent's graveyard onto the battlefield under your control. -- // -- Destroy each artifact, creature, and enchantment with converted mana cost X. text=Put target creature or enchantment card from an opponent's graveyard onto the battlefield under your control. -- // -- Destroy each artifact, creature, and enchantment with converted mana cost X.
mana={3}{W}{B} // {X}{B}{G} mana={3}{W}{B} // {X}{B}{G}
@@ -3533,15 +3506,6 @@ mana={3}{U}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Deftblade Elite
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) -- {1}{W}: Prevent all combat damage that would be dealt to and dealt by Deftblade Elite this turn.
mana={W}
type=Creature
subtype=Human Soldier
power=1
toughness=1
[/card]
[card]
name=Degavolver name=Degavolver
text=Kicker {1}{B} and/or {R} (You may pay an additional {1}{B} and/or {R} as you cast this spell.) -- If Degavolver was kicked with its {1}{B} kicker, it enters the battlefield with two +1/+1 counters on it and with "Pay 3 life: Regenerate Degavolver." -- If Degavolver was kicked with its {R} kicker, it enters the battlefield with a +1/+1 counter on it and with first strike. text=Kicker {1}{B} and/or {R} (You may pay an additional {1}{B} and/or {R} as you cast this spell.) -- If Degavolver was kicked with its {1}{B} kicker, it enters the battlefield with two +1/+1 counters on it and with "Pay 3 life: Regenerate Degavolver." -- If Degavolver was kicked with its {R} kicker, it enters the battlefield with a +1/+1 counter on it and with first strike.
mana={1}{W} mana={1}{W}
@@ -4873,15 +4837,6 @@ power=0
toughness=0 toughness=0
[/card] [/card]
[card] [card]
name=Feral Throwback
text=Amplify 2 (As this creature enters the battlefield, put two +1/+1 counters on it for each Beast card you reveal in your hand.) -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{G}{G}
type=Creature
subtype=Beast
power=3
toughness=3
[/card]
[card]
name=Ferropede name=Ferropede
text=Ferropede is unblockable. -- Whenever Ferropede deals combat damage to a player, you may remove a counter from target permanent. text=Ferropede is unblockable. -- Whenever Ferropede deals combat damage to a player, you may remove a counter from target permanent.
mana={3} mana={3}
@@ -5605,15 +5560,6 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Giant Ambush Beetle
text=Haste -- When Giant Ambush Beetle enters the battlefield, you may have target creature block it this turn if able.
mana={3}{BG}{R}
type=Creature
subtype=Insect
power=4
toughness=3
[/card]
[card]
name=Giant Oyster name=Giant Oyster
text=You may choose not to untap Giant Oyster during your untap step. -- {T}: For as long as Giant Oyster remains tapped, target tapped creature doesn't untap during its controller's untap step, and at the beginning of each of your draw steps, put a -1/-1 counter on that creature. When Giant Oyster leaves the battlefield or becomes untapped, remove all -1/-1 counters from the creature. text=You may choose not to untap Giant Oyster during your untap step. -- {T}: For as long as Giant Oyster remains tapped, target tapped creature doesn't untap during its controller's untap step, and at the beginning of each of your draw steps, put a -1/-1 counter on that creature. When Giant Oyster leaves the battlefield or becomes untapped, remove all -1/-1 counters from the creature.
mana={2}{U}{U} mana={2}{U}{U}
@@ -5946,15 +5892,6 @@ mana={5}{R}{R}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Goblin Grappler
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={R}
type=Creature
subtype=Goblin
power=1
toughness=1
[/card]
[card]
name=Goblin Grenadiers name=Goblin Grenadiers
text=Whenever Goblin Grenadiers attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature and target land. text=Whenever Goblin Grenadiers attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature and target land.
mana={3}{R} mana={3}{R}
@@ -6985,15 +6922,6 @@ mana={G}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Hunter Sliver
text=All Sliver creatures have provoke. (When a Sliver attacks, its controller may have target creature defending player controls untap and block it if able.)
mana={1}{R}
type=Creature
subtype=Sliver
power=1
toughness=1
[/card]
[card]
name=Hushwing Gryff name=Hushwing Gryff
text=Flash (You may cast this spell any time you could cast an instant.) -- Flying -- Creatures entering the battlefield don't cause abilities to trigger. text=Flash (You may cast this spell any time you could cast an instant.) -- Flying -- Creatures entering the battlefield don't cause abilities to trigger.
mana={2}{W} mana={2}{W}
@@ -8365,15 +8293,6 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Krosan Vorine
text=Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) -- Krosan Vorine can't be blocked by more than one creature.
mana={3}{G}
type=Creature
subtype=Cat Beast
power=3
toughness=2
[/card]
[card]
name=Krovikan Vampire name=Krovikan Vampire
text=At the beginning of each end step, if a creature dealt damage by Krovikan Vampire this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of Krovikan Vampire. text=At the beginning of each end step, if a creature dealt damage by Krovikan Vampire this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of Krovikan Vampire.
mana={3}{B}{B} mana={3}{B}{B}
@@ -8909,15 +8828,6 @@ type=Enchantment
subtype=Aura subtype=Aura
[/card] [/card]
[card] [card]
name=Lowland Tracker
text=First strike -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{W}
type=Creature
subtype=Human Soldier
power=2
toughness=2
[/card]
[card]
name=Loxodon Smiter name=Loxodon Smiter
text=Loxodon Smiter can't be countered. -- If a spell or ability an opponent controls causes you to discard Loxodon Smiter, put it onto the battlefield instead of putting it into your graveyard. text=Loxodon Smiter can't be countered. -- If a spell or ability an opponent controls causes you to discard Loxodon Smiter, put it onto the battlefield instead of putting it into your graveyard.
mana={1}{G}{W} mana={1}{G}{W}
@@ -9329,15 +9239,6 @@ type=Artifact
subtype=Equipment subtype=Equipment
[/card] [/card]
[card] [card]
name=Matsu-Tribe Decoy
text={2}{G}: Target creature blocks Matsu-Tribe Decoy this turn if able. -- Whenever Matsu-Tribe Decoy deals combat damage to a creature, tap that creature and it doesn't untap during its controller's next untap step.
mana={2}{G}
type=Creature
subtype=Snake Warrior
power=1
toughness=3
[/card]
[card]
name=May Civilization Collapse name=May Civilization Collapse
text=When you set this scheme in motion, target opponent chooses self or others. If that player chooses self, he or she sacrifices two lands. If the player chooses others, each of your other opponents sacrifices a land. text=When you set this scheme in motion, target opponent chooses self or others. If that player chooses self, he or she sacrifices two lands. If the player chooses others, each of your other opponents sacrifices a land.
type=Scheme type=Scheme
@@ -12284,15 +12185,6 @@ mana={5}{R}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Rampant Elephant
text={G}: Target creature blocks Rampant Elephant this turn if able.
mana={3}{W}
type=Creature
subtype=Elephant
power=2
toughness=2
[/card]
[card]
name=Rapid Fire name=Rapid Fire
text=Cast Rapid Fire only before blockers are declared. -- Target creature gains first strike until end of turn. If it doesn't have rampage, that creature gains rampage 2 until end of turn. (Whenever this creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.) text=Cast Rapid Fire only before blockers are declared. -- Target creature gains first strike until end of turn. If it doesn't have rampage, that creature gains rampage 2 until end of turn. (Whenever this creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.)
mana={3}{W} mana={3}{W}
@@ -15675,15 +15567,6 @@ mana={4}{U}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Swooping Talon
text=Flying -- {1}: Swooping Talon loses flying until end of turn. -- Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.)
mana={4}{W}{W}
type=Creature
subtype=Bird Soldier
power=2
toughness=6
[/card]
[card]
name=Sword of the Ages name=Sword of the Ages
text=Sword of the Ages enters the battlefield tapped. -- {T}, Sacrifice Sword of the Ages and any number of creatures you control: Sword of the Ages deals X damage to target creature or player, where X is the total power of the creatures sacrificed this way, then exile Sword of the Ages and those creature cards. text=Sword of the Ages enters the battlefield tapped. -- {T}, Sacrifice Sword of the Ages and any number of creatures you control: Sword of the Ages deals X damage to target creature or player, where X is the total power of the creatures sacrificed this way, then exile Sword of the Ages and those creature cards.
mana={6} mana={6}
@@ -15827,15 +15710,6 @@ type=Planeswalker
subtype=Tamiyo subtype=Tamiyo
[/card] [/card]
[card] [card]
name=Tangle Angler
text=Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) -- {G}: Target creature blocks Tangle Angler this turn if able.
mana={3}{G}
type=Creature
subtype=Horror
power=1
toughness=5
[/card]
[card]
name=Tangle Wire name=Tangle Wire
text=Fading 4 (This artifact enters the battlefield with four fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) -- At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on Tangle Wire. text=Fading 4 (This artifact enters the battlefield with four fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) -- At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on Tangle Wire.
mana={3} mana={3}
@@ -16593,15 +16467,6 @@ type=Plane
subtype=Ergamon subtype=Ergamon
[/card] [/card]
[card] [card]
name=Trumpeting Armodon
text={1}{G}: Target creature blocks Trumpeting Armodon this turn if able.
mana={3}{G}
type=Creature
subtype=Elephant
power=3
toughness=3
[/card]
[card]
name=Truth or Tale name=Truth or Tale
text=Reveal the top five cards of your library and separate them into two piles. An opponent chooses one of those piles. Put a card from the chosen pile into your hand, then put all other cards revealed this way on the bottom of your library in any order. text=Reveal the top five cards of your library and separate them into two piles. An opponent chooses one of those piles. Put a card from the chosen pile into your hand, then put all other cards revealed this way on the bottom of your library in any order.
mana={1}{U} mana={1}{U}
@@ -16662,15 +16527,6 @@ mana={3}{W}{W}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Turntimber Basilisk
text=Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.) -- Landfall — Whenever a land enters the battlefield under your control, you may have target creature block Turntimber Basilisk this turn if able.
mana={1}{G}{G}
type=Creature
subtype=Basilisk
power=2
toughness=1
[/card]
[card]
name=Turri Island name=Turri Island
text=Creature spells cost {2} less to cast. -- Whenever you roll {C}, reveal the top three cards of your library. Put all creature cards revealed this way into your hand and the rest into your graveyard. text=Creature spells cost {2} less to cast. -- Whenever you roll {C}, reveal the top three cards of your library. Put all creature cards revealed this way into your hand and the rest into your graveyard.
type=Plane type=Plane
+59 -2
View File
@@ -7120,8 +7120,8 @@ public:
if(mt.size()) if(mt.size())
{ {
MTGAbility * fd = af.parseMagicLine(mt, GetId(), NULL, copy); MTGAbility * fd = af.parseMagicLine(mt, GetId(), NULL, copy);
if(fd && isCreature) if(fd)
{ {//allow morph to all if it exists
fd->target = copy; fd->target = copy;
if(fd->oneShot) if(fd->oneShot)
{ {
@@ -7165,6 +7165,63 @@ public:
return NEW AManifest(*this); return NEW AManifest(*this);
} }
}; };
//provoke
class AProvoke: public InstantAbility
{
public:
bool setblocker;
MTGAbility * andAbility;
AProvoke(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target) :
InstantAbility(observer, _id, _source)
{
target = _target;
andAbility = NULL;
setblocker = false;
}
int resolve()
{
MTGCardInstance * card = (MTGCardInstance *) target;
if (card)
{
card->isProvoked = true;
card->Provoker = source;
if(!setblocker)//not provoke
card->untap();
source->ProvokeTarget = card;
if(andAbility)
{
MTGAbility * andAbilityClone = andAbility->clone();
andAbilityClone->target = card;
if(andAbility->oneShot)
{
andAbilityClone->resolve();
SAFE_DELETE(andAbilityClone);
}
else
{
andAbilityClone->addToGame();
}
}
}
return 1;
}
const string getMenuText()
{
if(setblocker)
return "Set Blocker";
return "Provoke";
}
virtual ostream& toString(ostream& out) const
{
out << "AAProvoke ::: (";
return InstantAbility::toString(out) << ")";
}
AProvoke * clone() const
{
return NEW AProvoke(*this);
}
};
//------------------ //------------------
// utility functions // utility functions
+3
View File
@@ -68,6 +68,9 @@ public:
bool damageToOpponent; bool damageToOpponent;
bool damageToController; bool damageToController;
bool damageToCreature; bool damageToCreature;
bool isProvoked;
MTGCardInstance * ProvokeTarget;
MTGCardInstance * Provoker;
bool mPropertiesChangedSinceLastUpdate; bool mPropertiesChangedSinceLastUpdate;
int reduxamount; int reduxamount;
int flanked; int flanked;
+2
View File
@@ -186,7 +186,9 @@ public:
void untapAll(); void untapAll();
MTGCardInstance * getNextAttacker(MTGCardInstance * previous); MTGCardInstance * getNextAttacker(MTGCardInstance * previous);
MTGCardInstance * getNextLurer(MTGCardInstance * previous); MTGCardInstance * getNextLurer(MTGCardInstance * previous);
MTGCardInstance * getNextProvoker(MTGCardInstance * previous, MTGCardInstance * source);
MTGCardInstance * findALurer(); MTGCardInstance * findALurer();
MTGCardInstance * findAProvoker(MTGCardInstance * source);
virtual ostream& toString(ostream&) const; virtual ostream& toString(ostream&) const;
const char * getName(){return "battlefield";} const char * getName(){return "battlefield";}
}; };
+17
View File
@@ -984,6 +984,20 @@ void GameObserver::gameStateBasedEffects()
} }
} }
} }
///provoke clear///
if (mCurrentGamePhase == MTG_PHASE_COMBATEND)
{
for (int l = z->nb_cards - 1; l >= 0; l--)
{
MTGCardInstance * c = z->cards[l];
if(c)
{
c->isProvoked = false;
c->ProvokeTarget = NULL;
c->Provoker = NULL;
}
}
}
///////////////////////////////////////////////// /////////////////////////////////////////////////
//handle end of turn effects while we're at it.// //handle end of turn effects while we're at it.//
///////////////////////////////////////////////// /////////////////////////////////////////////////
@@ -1011,6 +1025,9 @@ void GameObserver::gameStateBasedEffects()
c->combatdamageToOpponent = false; c->combatdamageToOpponent = false;
c->damageToCreature = false; c->damageToCreature = false;
c->isAttacking = NULL; c->isAttacking = NULL;
c->isProvoked = false;
c->ProvokeTarget = NULL;
c->Provoker = NULL;
} }
for (int jj = z->nb_cards - 1; jj >= 0; jj--) for (int jj = z->nb_cards - 1; jj >= 0; jj--)
{ {
+30
View File
@@ -2910,6 +2910,36 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
return a; return a;
} }
//provoke
found = s.find("provoke");
if (found != string::npos)
{
MTGAbility * a = NEW AProvoke(observer, id, card, target);
a->oneShot = 1;
if(storedAndAbility.size())
{
string stored = storedAndAbility;
storedAndAbility.clear();
((AProvoke*)a)->andAbility = parseMagicLine(stored, id, spell, card);
}
return a;
}
//setblocker
found = s.find("setblocker");
if (found != string::npos)
{
MTGAbility * a = NEW AProvoke(observer, id, card, target);
a->oneShot = 1;
((AProvoke*)a)->setblocker = true;
if(storedAndAbility.size())
{
string stored = storedAndAbility;
storedAndAbility.clear();
((AProvoke*)a)->andAbility = parseMagicLine(stored, id, spell, card);
}
return a;
}
//clone //clone
found = s.find("clone"); found = s.find("clone");
if (found != string::npos) if (found != string::npos)
+3
View File
@@ -242,6 +242,9 @@ void MTGCardInstance::initMTGCI()
damageToOpponent = false; damageToOpponent = false;
damageToController = false; damageToController = false;
damageToCreature = false; damageToCreature = false;
isProvoked = false;
ProvokeTarget = NULL;
Provoker = NULL;
wasDealtDamage = false; wasDealtDamage = false;
isDualWielding = false; isDualWielding = false;
suspended = false; suspended = false;
+37
View File
@@ -1015,6 +1015,43 @@ MTGCardInstance * MTGInPlay::getNextLurer(MTGCardInstance * previous)
return NULL; return NULL;
} }
MTGCardInstance * MTGInPlay::getNextProvoker(MTGCardInstance * previous, MTGCardInstance * thiscard)
{
int foundprevious = 0;
if (previous == NULL)
{
foundprevious = 1;
}
for (int i = 0; i < nb_cards; i++)
{
MTGCardInstance * current = cards[i];
if (current == previous)
{
foundprevious = 1;
}
else if (foundprevious && current->isAttacker() && thiscard->isProvoked && current->ProvokeTarget)
{
if(thiscard == current->ProvokeTarget)
return current;
}
}
return NULL;
}
MTGCardInstance * MTGInPlay::findAProvoker(MTGCardInstance * thiscard)
{
for (int i = 0; i < nb_cards; i++)
{
MTGCardInstance * current = cards[i];
if (current->isAttacker() && current->ProvokeTarget)
{
if(current->ProvokeTarget == thiscard)
return current;
}
}
return NULL;
}
MTGCardInstance * MTGInPlay::findALurer() MTGCardInstance * MTGInPlay::findALurer()
{ {
for (int i = 0; i < nb_cards; i++) for (int i = 0; i < nb_cards; i++)
+23 -2
View File
@@ -2259,9 +2259,11 @@ int MTGBlockRule::receiveEvent(WEvent *e)
for (size_t i = 0; i < tf->cards.size(); i++) for (size_t i = 0; i < tf->cards.size(); i++)
{ {
MTGCardInstance * card = tf->cards[i]; MTGCardInstance * card = tf->cards[i];
if (card->has(Constants::MUSTBLOCK) && !card->defenser && card->canBlock()) if ((card->has(Constants::MUSTBLOCK) || card->isProvoked) && !card->defenser && card->canBlock())
{//force mustblockers to block the first thing theyre allowed to block if player leaves blockers with them {//force mustblockers to block the first thing theyre allowed to block if player leaves blockers with them
//unassigned as a block. //unassigned as a block.
if(!card->isProvoked)
{
for (size_t i = 0; i < Attacker.size(); i++) for (size_t i = 0; i < Attacker.size(); i++)
{ {
if (card->canBlock(Attacker[i]) && !card->defenser) if (card->canBlock(Attacker[i]) && !card->defenser)
@@ -2275,7 +2277,13 @@ int MTGBlockRule::receiveEvent(WEvent *e)
SAFE_DELETE(blocker); SAFE_DELETE(blocker);
} }
} }
}
else
{
MTGCardInstance * provoker = card->Provoker;
if(provoker && card->canBlock(provoker) && card->blockCost < 1)
card->setDefenser(provoker);
}
} }
} }
@@ -2370,6 +2378,19 @@ int MTGBlockRule::reactToClick(MTGCardInstance * card)
else else
card->toggleDefenser(NULL); card->toggleDefenser(NULL);
} }
else if(card->isProvoked)
{
while (!result)
{
currentOpponent = game->currentPlayer->game->inPlay->getNextProvoker(currentOpponent, card);
canDefend = card->toggleDefenser(currentOpponent);
DebugTrace("Defenser Toggle: " << card->getName() << endl
<< "- canDefend: " << (canDefend == 0) << endl
<< "- currentOpponent: " << currentOpponent);
result = (canDefend || currentOpponent == NULL);
}
}
else else
{ {
bool lured = false; bool lured = false;
+12 -1
View File
@@ -1819,9 +1819,20 @@ bool BlockableChooser::canTarget(Targetable * target,bool withoutProtections)
} }
if(lured && card->controller()->inPlay()->hasAbility(Constants::LURE) && !card->has(Constants::LURE)) if(lured && card->controller()->inPlay()->hasAbility(Constants::LURE) && !card->has(Constants::LURE))
return false; return false;
//provoke
bool provoked = false;
MTGCardInstance * provoker = observer->currentPlayer->game->inPlay->findAProvoker(source);
if(provoker)
{
provoked = true;
}
if(provoked && source->isProvoked && !card->ProvokeTarget)
return false;
if(provoked && source->isProvoked && card->ProvokeTarget && card->ProvokeTarget != source)
return false;
return true; return true;
} }
return TypeTargetChooser::canTarget(target,withoutProtections); return false;//TypeTargetChooser::canTarget(target,withoutProtections);
} }
BlockableChooser* BlockableChooser::clone() const BlockableChooser* BlockableChooser::clone() const