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

View File

@@ -1,6 +1,6 @@
#Primitives Pack for Wagic the Homebrew.
#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]
name=Abandon Reason
target=<upto:2>creature
@@ -7851,6 +7851,7 @@ type=Instant
[card]
name=Aven Warhawk
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
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}
@@ -15207,6 +15208,17 @@ mana={2}{G}
type=Enchantment
[/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
mana={2}
type=Artifact Creature
@@ -15853,6 +15865,18 @@ mana={1}{R}
type=Sorcery
[/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
auto=Add{R}{G}
text=When Burning-Tree Emissary enters the battlefield, add {R}{G} to your mana pool.
@@ -16656,6 +16680,7 @@ subtype=Aura
[card]
name=Canopy Crawler
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
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}
@@ -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.
[/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
auto=lord(creature) -mountainwalk
text=Creatures with mountainwalk can be blocked as though they didn't have mountainwalk.
@@ -26235,6 +26271,7 @@ toughness=1
[/card]
[card]
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={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.
@@ -28063,6 +28100,17 @@ power=2
toughness=1
[/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
target=creature|mygraveyard
auto=moveto(mybattlefield) && transforms((,newability[if cantargetcard(angel) then counter(1/1.2)])) oneshot
@@ -35181,6 +35229,7 @@ toughness=3
name=Embalmed Brawler
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
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
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}
@@ -39822,6 +39871,18 @@ power=6
toughness=3
[/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
target=creature
auto=4/4
@@ -40227,6 +40288,13 @@ power=1
toughness=1
[/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
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.
@@ -40262,13 +40330,6 @@ mana={R}
type=Instant
[/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
target=creature
autograveyard=@movedTo(this|graveyard) from(battlefield):moveTo(ownerhand)
@@ -45528,6 +45589,7 @@ type=Sorcery
[/card]
[card]
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
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.
@@ -46046,6 +46108,17 @@ power=7
toughness=7
[/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
auto=@combat(blocking) source(this):2/2 ueot
text=Whenever Giant Badger blocks, it gets +2/+2 until end of turn.
@@ -47201,6 +47274,7 @@ toughness=3
[/card]
[card]
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
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}
@@ -47845,6 +47919,16 @@ power=6
toughness=6
[/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
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.
@@ -56228,6 +56312,16 @@ power=3
toughness=3
[/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
auto=preventAllCombatDamage from(creature[-Green]) ueot
text=Prevent all combat damage that would be dealt by nongreen creatures this turn.
@@ -62772,6 +62866,7 @@ toughness=3
name=Kilnmouth Dragon
abilities=flying
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
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}
@@ -64653,6 +64748,17 @@ text=Krosan Verge enters the battlefield tapped. -- {T}: Add {1} to your mana po
type=Land
[/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
auto={1}{G}:regenerate target(beast)
auto=lord(beast|mycastingzone) altercost(colorless,-1)
@@ -68561,6 +68667,17 @@ power=3
toughness=3
[/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
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.
@@ -71823,6 +71940,13 @@ power=3
toughness=2
[/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
auto=@facedup(*|mybattlefield):life:type:creature:battlefield controller
auto={3}{W}:manifest all(*[zpos=1]|mylibrary)
@@ -71831,13 +71955,6 @@ mana={1}{W}
type=Enchantment
[/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
auto=upcost[{D(*|myhand)}] sacrifice
auto={2}:damage:1 target(creature)
@@ -71891,6 +72008,17 @@ power=2
toughness=2
[/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
auto=@damaged(creature) from(this):all(trigger[to]) tap && all(trigger[to]) frozen
auto={T}:damage:1 target(creature[flying])
@@ -74759,8 +74887,8 @@ type=Sorcery
[/card]
[card]
name=Mist Dragon
auto={0}:flying
auto={0}:-flying
auto={0}:flying forever
auto={0}:-flying forever
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.)
mana={4}{U}{U}
@@ -91686,6 +91814,16 @@ power=6
toughness=4
[/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
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
@@ -116509,6 +116647,18 @@ power=3
toughness=3
[/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
auto={W}{W}:-1/0 target(creature[attacking])
text={W}{W}: Target attacking creature gets -1/-0 until end of turn.
@@ -117634,6 +117784,17 @@ mana={1}{W}
type=Instant
[/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
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.
@@ -124486,6 +124647,16 @@ mana={2}{R}
type=Instant
[/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
auto=hmodifer:2 controller
auto=@each my upkeep:moveTo(ownerhand) notatarget(creature[blue]|myBattlefield)
@@ -124755,6 +124926,17 @@ type=Instant
mana={2}{U}{U}
[/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
auto=tap(noevent)
auto=1/1 target(creature) ueot
@@ -137186,6 +137368,7 @@ toughness=3
[card]
name=Zombie Brute
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
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}

View File

@@ -1584,15 +1584,6 @@ mana={4}{B}
type=Instant
[/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
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}
@@ -1677,15 +1668,6 @@ power=3
toughness=3
[/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
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}
@@ -2947,15 +2929,6 @@ mana={3}{B}
type=Enchantment
[/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
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}
@@ -3533,15 +3506,6 @@ mana={3}{U}
type=Instant
[/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
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}
@@ -4873,15 +4837,6 @@ power=0
toughness=0
[/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
text=Ferropede is unblockable. -- Whenever Ferropede deals combat damage to a player, you may remove a counter from target permanent.
mana={3}
@@ -5605,15 +5560,6 @@ power=1
toughness=1
[/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
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}
@@ -5946,15 +5892,6 @@ mana={5}{R}{R}
type=Sorcery
[/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
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}
@@ -6985,15 +6922,6 @@ mana={G}
type=Sorcery
[/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
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}
@@ -8365,15 +8293,6 @@ power=3
toughness=3
[/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
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}
@@ -8909,15 +8828,6 @@ type=Enchantment
subtype=Aura
[/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
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}
@@ -9329,15 +9239,6 @@ type=Artifact
subtype=Equipment
[/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
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
@@ -12284,15 +12185,6 @@ mana={5}{R}
type=Sorcery
[/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
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}
@@ -15675,15 +15567,6 @@ mana={4}{U}
type=Sorcery
[/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
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}
@@ -15827,15 +15710,6 @@ type=Planeswalker
subtype=Tamiyo
[/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
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}
@@ -16593,15 +16467,6 @@ type=Plane
subtype=Ergamon
[/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
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}
@@ -16662,15 +16527,6 @@ mana={3}{W}{W}
type=Instant
[/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
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

View File

@@ -7120,8 +7120,8 @@ public:
if(mt.size())
{
MTGAbility * fd = af.parseMagicLine(mt, GetId(), NULL, copy);
if(fd && isCreature)
{
if(fd)
{//allow morph to all if it exists
fd->target = copy;
if(fd->oneShot)
{
@@ -7165,6 +7165,63 @@ public:
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

View File

@@ -68,6 +68,9 @@ public:
bool damageToOpponent;
bool damageToController;
bool damageToCreature;
bool isProvoked;
MTGCardInstance * ProvokeTarget;
MTGCardInstance * Provoker;
bool mPropertiesChangedSinceLastUpdate;
int reduxamount;
int flanked;

View File

@@ -186,7 +186,9 @@ public:
void untapAll();
MTGCardInstance * getNextAttacker(MTGCardInstance * previous);
MTGCardInstance * getNextLurer(MTGCardInstance * previous);
MTGCardInstance * getNextProvoker(MTGCardInstance * previous, MTGCardInstance * source);
MTGCardInstance * findALurer();
MTGCardInstance * findAProvoker(MTGCardInstance * source);
virtual ostream& toString(ostream&) const;
const char * getName(){return "battlefield";}
};

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.//
/////////////////////////////////////////////////
@@ -1011,6 +1025,9 @@ void GameObserver::gameStateBasedEffects()
c->combatdamageToOpponent = false;
c->damageToCreature = false;
c->isAttacking = NULL;
c->isProvoked = false;
c->ProvokeTarget = NULL;
c->Provoker = NULL;
}
for (int jj = z->nb_cards - 1; jj >= 0; jj--)
{

View File

@@ -2910,6 +2910,36 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
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
found = s.find("clone");
if (found != string::npos)

View File

@@ -242,6 +242,9 @@ void MTGCardInstance::initMTGCI()
damageToOpponent = false;
damageToController = false;
damageToCreature = false;
isProvoked = false;
ProvokeTarget = NULL;
Provoker = NULL;
wasDealtDamage = false;
isDualWielding = false;
suspended = false;

View File

@@ -1015,6 +1015,43 @@ MTGCardInstance * MTGInPlay::getNextLurer(MTGCardInstance * previous)
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()
{
for (int i = 0; i < nb_cards; i++)

View File

@@ -2259,23 +2259,31 @@ int MTGBlockRule::receiveEvent(WEvent *e)
for (size_t i = 0; i < tf->cards.size(); 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
//unassigned as a block.
for (size_t i = 0; i < Attacker.size(); i++)
if(!card->isProvoked)
{
if (card->canBlock(Attacker[i]) && !card->defenser)
for (size_t i = 0; i < Attacker.size(); i++)
{
blocker = NEW AABlock(card->getObserver(), -1, card, NULL);
blocker->oneShot = true;
blocker->forceDestroy = 1;
blocker->canBeInterrupted = false;
blocker->target = Attacker[i];
blocker->resolve();
SAFE_DELETE(blocker);
if (card->canBlock(Attacker[i]) && !card->defenser)
{
blocker = NEW AABlock(card->getObserver(), -1, card, NULL);
blocker->oneShot = true;
blocker->forceDestroy = 1;
blocker->canBeInterrupted = false;
blocker->target = Attacker[i];
blocker->resolve();
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
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
{
bool lured = false;

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))
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 TypeTargetChooser::canTarget(target,withoutProtections);
return false;//TypeTargetChooser::canTarget(target,withoutProtections);
}
BlockableChooser* BlockableChooser::clone() const