diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index b0ca91a69..9e6ff93eb 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -845,6 +845,18 @@ power=3 toughness=3 [/card] [card] +name=Aetherwing, Golden-Scale Flagship +abilities=flying +anyzone=type:artifact:myBattlefield/4 cdaactive +auto={crew(other creature[power>=1]|myBattlefield)}:name(crew 1 [1 creature]) becomes(Artifact Creature) ueot restriction{type(other creature[-tapped;power>=1]|mybattlefield)~morethan~0,compare(crewtotalpower)~morethan~0} +text=Flying -- Aetherwing, Golden-Scale Flagship's power is equal to the number of artifacts you control. -- Crew 1 (Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.) +coor=blue,red +type=Legendary Artifact +subtype=Vehicle +power=* +toughness=4 +[/card] +[card] name=Aeve, Progenitor Ooze auto=foreach(other ooze|mybattlefield) counter(1/1) auto=if cantargetcard(*[-token]) then thisforeach(variable{pstormcount}>=2) clone options(nolegend) @@ -4719,7 +4731,8 @@ toughness=1 [card] name=Attentive Skywarden abilities=flying -auto=combatdamaged(player) from(this):may name(Transform incubator) target(incubator|mybattlefield) transforms((,newability[name(Becomes creature) becomes(Creature Phyrexian) forever])) forever +auto=@combatdamaged(player) from(this):may name(Transform incubator) target(incubator|myBattlefield) flip(backside) +auto=@combatdamaged(battle) from(this):may name(Transform incubator) target(incubator|myBattlefield) flip(backside) text=Flying -- Whenever Attentive Skywarden deals combat damage to a player or battle, transform up to one target Incubator token you control. mana={2}{W} type=Creature @@ -9215,6 +9228,17 @@ power=4 toughness=4 [/card] [card] +name=Bloomwielder Dryads +auto=_WARD_(2) +auto=@each my endofturn:name(Put 1/1 counter) target(creature|myBattlefield) counter(1/1) +text=Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.) -- At the beginning of your end step, put a +1/+1 counter on target creature you control. +color=green,white +type=Creature +subtype=Dryad +power=3 +toughness=3 +[/card] +[card] name=Blossom Dryad auto={T}:untap target(land) text={T}: Untap target land. @@ -9986,6 +10010,18 @@ type=Artifact subtype=Equipment [/card] [card] +name=Borborygmos and Fblthp +auto=name(Draw and discard lands) draw:1 && transforms((,newability[if type(land|myhand)~morethan~0 then choice name(Don't discard any land) name(Don't discard any land) donothing],newability[if type(land|myhand)~morethan~0 then choice name(Discard 1 land) name(Discard 1 land) target(land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:2 )!],newability[if type(land|myhand)~morethan~1 then choice name(Discard 2 lands) name(Discard 2 lands) target(<2>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:4 )!],newability[if type(land|myhand)~morethan~2 then choice name(Discard 3 lands) name(Discard 3 lands) target(<3>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:6 )!],newability[if type(land|myhand)~morethan~3 then choice name(Discard 4 lands) name(Discard 4 lands) target(<4>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:8 )!],newability[if type(land|myhand)~morethan~4 then choice name(Discard 5 lands) name(Discard 5 lands) target(<5>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:10 )!],newability[if type(land|myhand)~morethan~5 then choice name(Discard 6 lands) name(Discard 6 lands) target(<6>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:12 )!],newability[if type(land|myhand)~morethan~6 then choice name(Discard 7 lands) name(Discard 7 lands) target(<7>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:14 )!],newability[if type(land|myhand)~morethan~7 then choice name(Discard 8 lands) name(Discard 8 lands) target(<8>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:16 )!],newability[if type(land|myhand)~morethan~8 then choice name(Discard 9 lands) name(Discard 9 lands) target(<9>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:18 )!],newability[if type(land|myhand)~morethan~9 then choice name(Discard 10 lands) name(Discard 10 lands) target(<10>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:20 )!],newability[if type(land|myhand)~morethan~10 then choice name(Discard 11 lands) name(Discard 11 lands) target(<11>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:22 )!],newability[if type(land|myhand)~morethan~11 then choice name(Discard 12 lands) name(Discard 12 lands) target(<12>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:24 )!],newability[if type(land|myhand)~morethan~12 then choice name(Discard 13 lands) name(Discard 13 lands) target(<13>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:26 )!],newability[if type(land|myhand)~morethan~13 then choice name(Discard 14 lands) name(Discard 14 lands) target(<14>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:28 )!],newability[if type(land|myhand)~morethan~14 then choice name(Discard 15 lands) name(Discard 15 lands) target(<15>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:30 )!],newability[if type(land|myhand)~morethan~15 then choice name(Discard 16 lands) name(Discard 16 lands) target(<16>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:32 )!],newability[if type(land|myhand)~morethan~16 then choice name(Discard 17 lands) name(Discard 17 lands) target(<17>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:34 )!],newability[if type(land|myhand)~morethan~17 then choice name(Discard 18 lands) name(Discard 18 lands) target(<18>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:36 )!],newability[if type(land|myhand)~morethan~18 then choice name(Discard 19 lands) name(Discard 19 lands) target(<19>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:38 )!],newability[if type(land|myhand)~morethan~19 then choice name(Discard 20 lands) name(Discard 20 lands) target(<20>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:40 )!])) oneshot +auto=_ATTACKING_name(Draw and discard lands) draw:1 && transforms((,newability[if type(land|myhand)~morethan~0 then name(Don't discard any land) choice name(Don't discard any land) donothing],newability[if type(land|myhand)~morethan~0 then choice name(Discard 1 land) name(Discard 1 land) target(land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:2 )!],newability[if type(land|myhand)~morethan~1 then choice name(Discard 2 lands) name(Discard 2 lands) target(<2>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:4 )!],newability[if type(land|myhand)~morethan~2 then choice name(Discard 3 lands) name(Discard 3 lands) target(<3>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:6 )!],newability[if type(land|myhand)~morethan~3 then choice name(Discard 4 lands) name(Discard 4 lands) target(<4>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:8 )!],newability[if type(land|myhand)~morethan~4 then choice name(Discard 5 lands) name(Discard 5 lands) target(<5>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:10 )!],newability[if type(land|myhand)~morethan~5 then choice name(Discard 6 lands) name(Discard 6 lands) target(<6>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:12 )!],newability[if type(land|myhand)~morethan~6 then choice name(Discard 7 lands) name(Discard 7 lands) target(<7>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:14 )!],newability[if type(land|myhand)~morethan~7 then choice name(Discard 8 lands) name(Discard 8 lands) target(<8>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:16 )!],newability[if type(land|myhand)~morethan~8 then choice name(Discard 9 lands) name(Discard 9 lands) target(<9>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:18 )!],newability[if type(land|myhand)~morethan~9 then choice name(Discard 10 lands) name(Discard 10 lands) target(<10>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:20 )!],newability[if type(land|myhand)~morethan~10 then choice name(Discard 11 lands) name(Discard 11 lands) target(<11>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:22 )!],newability[if type(land|myhand)~morethan~11 then choice name(Discard 12 lands) name(Discard 12 lands) target(<12>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:24 )!],newability[if type(land|myhand)~morethan~12 then choice name(Discard 13 lands) name(Discard 13 lands) target(<13>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:26 )!],newability[if type(land|myhand)~morethan~13 then choice name(Discard 14 lands) name(Discard 14 lands) target(<14>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:28 )!],newability[if type(land|myhand)~morethan~14 then choice name(Discard 15 lands) name(Discard 15 lands) target(<15>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:30 )!],newability[if type(land|myhand)~morethan~15 then choice name(Discard 16 lands) name(Discard 16 lands) target(<16>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:32 )!],newability[if type(land|myhand)~morethan~16 then choice name(Discard 17 lands) name(Discard 17 lands) target(<17>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:34 )!],newability[if type(land|myhand)~morethan~17 then choice name(Discard 18 lands) name(Discard 18 lands) target(<18>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:36 )!],newability[if type(land|myhand)~morethan~18 then choice name(Discard 19 lands) name(Discard 19 lands) target(<19>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:38 )!],newability[if type(land|myhand)~morethan~19 then choice name(Discard 20 lands) name(Discard 20 lands) target(<20>land|myhand) reject and!( name(Damage creature) target(creature|battlefield) damage:40 )!])) oneshot +auto={1}{U}:name(Put third from top) placefromthetop(3) +text=Whenever Borborygmos and Fblthp enters the battlefield or attacks, draw a card, then you may discard any number of land cards. When you discard one or more cards this way, Borborygmos and Fblthp deals twice that much damage to target creature. -- {1}{U}: Put Borborygmos and Fblthp into its owner's library third from the top. +mana={2}{G}{U}{R} +type=Legendary Creature +subtype=Cyclops Homunculus +power=6 +toughness=5 +[/card] +[card] name=Boreal Elemental abilities=flying auto=@targeted(this) from(*[instant;sorcery]|opponentzones):choice name(This spell costs 2 more) name(This spell costs 2 more) target(*[instant;sorcery]|opponentzones) transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?fizzle])) oneshot @@ -22580,6 +22616,19 @@ mana={X}{U}{U}{U} type=Instant [/card] [card] +name=Djeru and Hazoret +aicode=activate transforms((,newability[if type(creature[legendary&zpos<=6]|myLibrary)~morethan~0 then target(creature[legendary&zpos<=6]|myLibrary) moveTo(myexile) and!( transforms((,newability[canplayfromexile],newability[zerocast],newability[all(other *[zpos<=6]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) ueot )!],newability[if type(creature[legendary&zpos<=6]|myLibrary)~equalto~0 then all(*[zpos<=6]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! ])) oneshot +auto=_ATTACKING_name(Look top 6 cards) reveal:6 optionone name(Exile legendary creature) target(creature[legendary]|reveal) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[zerocast])) ueot )! optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend +auto=aslongas(*|myhand) vigilance <2 +auto=aslongas(*|myhand) haste <2 +text=As long as you have one or fewer cards in hand, Djeru and Hazoret has vigilance and haste. -- Whenever Djeru and Hazoret attacks, look at the top six cards of your library. You may exile a legendary creature card from among them. Put the rest on the bottom of your library in a random order. Until end of turn, you may cast the exiled card without paying its mana cost. +mana={2}{R}{R}{W} +type=Legendary Creature +subtype=Human God +power=5 +toughness=4 +[/card] +[card] name=Djeru's Renunciation abilities=cycling target=creature @@ -23548,6 +23597,18 @@ power=3 toughness=2 [/card] [card] +name=Drana and Linvala +#MISSING: has all activated abilities +abilities=flying,vigilance +auto=lord(creature|opponentBattlefield) noactivatedability +text=Flying, vigilance -- Activated abilities of creatures your opponents control can't be activated. -- Drana and Linvala has all activated abilities of all creatures your opponents control. You may spend mana as though it were mana of any color to activate those abilities. +mana={1}{W}{W}{B} +type=Legendary Creature +subtype=Vampire Angel +power=3 +toughness=4 +[/card] +[card] name=Drana, the Last Bloodchief abilities=flying auto=_ATTACKING_ability$!name(Choose a non-legendary creature) notAtarget(creature[-legendary]|opponentGraveyard) moveTo(opponentBattlefield) and!( counter(1/1) and!(becomes(vampire) forever)! )! !$ opponent @@ -27158,6 +27219,35 @@ power=4 toughness=2 [/card] [card] +name=Etali, Primal Conqueror +abilities=trample +backside=Etali, Primal Sickness +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=ability$!name(Exile top cards) all(*[zpos<=findfirsttypenonland]|mylibrary) moveto(myexile) and!( if cantargetcard(*[-land]|*) then transforms((,newability[choice name(Cast spell) activate castcard(normal)],newability[choice name(Don't cast spell) donothing])) oneshot )!!$ opponent +auto=name(Exile top cards) all(*[zpos<=findfirsttypenonland]|mylibrary) moveto(myexile) and!( if cantargetcard(*[-land]|*) then transforms((,newability[choice name(Cast spell) activate castcard(normal)],newability[choice name(Don't cast spell) donothing])) oneshot )! +auto={9}{G}:name(Pay G and transform Etali) flip(backside) asSorcery +auto={9}{L:2}:name(Pay life and transform Etali) flip(backside) asSorcery +text=Trample -- When Etali, Primal Conqueror enters the battlefield, each player exiles cards from the top of their library until they exile a nonland card. You may cast any number of spells from among the nonland cards exiled this way without paying their mana costs. -- {9}{G/P}: Transform Etali. Activate only as a sorcery. +mana={5}{R}{R} +type=Legendary Creature +subtype=Elder Dinosaur +power=7 +toughness=7 +[/card] +[card] +name=Etali, Primal Sickness +abilities=indestructible,trample +auto=@combatdamagefoeof(player) from(this):name(Infect player) thisforeach(variable{thatmuch}>0) alterpoison:1 opponent +auto=@combatdamageof(player) from(this):name(Infect player) thisforeach(variable{thatmuch}>0) alterpoison:1 controller +text=Trample, indestructible -- Whenever Etali, Primal Sickness deals combat damage to a player, they get that many poison counters. (A player with ten or more poison counters loses the game.) +color=red,green +type=Legendary Creature +subtype=Phyrexian Elder Dinosaur +power=11 +toughness=11 +[/card] +[card] name=Etali, Primal Storm auto=_ATTACKING_Reveal:1 revealzone(mylibrary) revealuntil(*|mylibrary) optionone choice name(Cast Card) target(*[-land]|reveal) moveto(myExile) and!(activate castcard(putinplay))! optiononeend optiontwo target(<1>*|reveal) moveto(myExile) optiontwoend revealend auto=_ATTACKING_Reveal:1 revealzone(opponentlibrary) revealuntil(*|opponentlibrary) optionone choice name(Cast Card) target(*[-land]|reveal) moveto(opponentExile) and!(activate castcard(putinplay))! optiononeend optiontwo target(<1>*|reveal) moveto(opponentExile) optiontwoend revealend @@ -32940,6 +33030,19 @@ power=7 toughness=5 [/card] [card] +name=Gargantuan Slabhorn +abilities=trample +auto=_WARD_(2) +auto=lord(other *[isflipped]|myBattlefield) trample +auto=@targeted(other *[isflipped]|myBattlefield) from(*|opponentzones):choice name(This spell costs 2 more) name(This spell costs 2 more) target(*|opponentzones) transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?fizzle])) oneshot +text=Trample, ward {2} -- Other transformed permanents you control have trample and ward {2}. +color=green,blue +type=Creature +subtype=Beast +power=4 +toughness=4 +[/card] +[card] name=Gargos, Vicious Watcher abilities=vigilance auto=lord(hydra|mycastingzone) altercost(colorless,-4) @@ -33605,6 +33708,17 @@ power=3 toughness=4 [/card] [card] +name=Ghalta and Mavren +abilities=trample +auto=@each my blockers:name(Choose one) transforms((,newability[choice name(Create Dinosaur) token(Dinosaur^Creature Dinosaur^power:highest:creature[attacking]:mybattlefield/power:highest:creature[attacking]:mybattlefield^trample^battleready)],newability[choice name(Create vampires) token(Vampire^Creature Vampire^1/1^white^lifelink)*type:creature[attacking]:myBattlefield])) oneshot +text=Trample -- Whenever you attack, choose one -- Create a tapped and attacking X/X green Dinosaur creature token with trample, where X is the greatest power among other attacking creatures. -- Create X 1/1 white Vampire creature tokens with lifelink, where X is the number of other attacking creatures. +mana={3}{G}{G}{W}{W} +type=Legendary Creature +subtype=Dinosaur Vampire +power=12 +toughness=12 +[/card] +[card] name=Ghalta, Primal Hunger abilities=trample anyzone=thisforeach(variable{pwrtotalinplay}>0) changecost(colorless:-1) forcedalive @@ -34738,6 +34852,16 @@ power=0 toughness=0 [/card] [card] +name=Glissa, Herald of Predation +auto=@each my combatbegins:name(Choose one) transforms((,newability[choice name(Create Incubate 2 twice) thisforeach(variable{2}) activate castcard(noevent costx!:2:! named!:Incubator:!)],newability[choice name(Transform all incubator) all(incubator|myBattlefield) flip(backside)],newability[choice name(All phyrexians gain first strike and deathtouch) all(phyrexian|myBattlefield) transforms((,newability[first strike],newability[deathtouch])) ueot])) oneshot +text=At the beginning of combat on your turn, choose one -- Incubate 2 twice. (To incubate 2, create an Incubator token with two +1/+1 counters on it and "{2}: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.) -- Transform all Incubator tokens you control. -- Phyrexians you control gain first strike and deathtouch until end of turn. +mana={3}{B}{G} +type=Legendary Creature +subtype=Phyrexian Zombie Elf +power=3 +toughness=5 +[/card] +[card] name=Glissa Sunseeker abilities=first strike auto={T}:name(destroy artifact) name(destroy artifact) destroy target(artifact[manacost=mypoolcount]) @@ -38323,6 +38447,20 @@ text=Cumulative upkeep {1} (At the beginning of your upkeep, put an age counter type=Land [/card] [card] +name=Halo Forager +abilities=flying +auto=if type(instant[manacost=fullpaid]|mygraveyard)~morethan~0 then choice name(Don't cast spell) name(Don't cast spell) name(Don't cast spell) donothing +auto=if type(instant[manacost=fullpaid]|mygraveyard)~equalto~0 then if type(sorcery[manacost=fullpaid]|mygraveyard)~morethan~0 then choice name(Don't cast spell) name(Don't cast spell) name(Don't cast spell) donothing +auto=if type(instant[manacost=fullpaid]|mygraveyard)~morethan~0 then choice name(Cast instant) name(Cast instant) target(instant[manacost=fullpaid]|mygraveyard) activate castcard(normal) and!( transforms((,newability[gainedexiledeath])) forever )! +auto=if type(sorcery[manacost=fullpaid]|mygraveyard)~morethan~0 then choice name(Cast sorcery) name(Cast sorcery) target(sorcery[manacost=fullpaid]|mygraveyard) activate castcard(normal) and!( transforms((,newability[gainedexiledeath])) forever )! +text=Flying -- When Halo Forager enters the battlefield, you may pay {X}. When you do, you may cast target instant or sorcery card with mana value X from a graveyard without paying its mana cost. If that spell would be put into a graveyard, exile it instead. +mana={X}{1}{U}{B} +type=Creature +subtype=Faerie Rogue +power=3 +toughness=1 +[/card] +[card] name=Halo Fountain auto={W}{T}{Q(creature[tapped]|mybattlefield)}:create(citizen:creature citizen:1/1:green,white) auto={W}{W}{T}{Q(creature[tapped]|mybattlefield)}{Q(creature[tapped]|mybattlefield)}:draw:1 @@ -40157,6 +40295,18 @@ power=4 toughness=5 [/card] [card] +name=Hidetsugu and Kairi +abilities=flying +auto=draw:3 && transforms((,newability[name(Put on library) target(<2>*|myhand) moveto(mylibrary)])) oneshot +auto=_DIES_name(Exile top card) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((,newability[life:-manacost opponent],newability[if cantargetcard(*[instant;sorcery]|*) then may name(Cast card) activate castcard(normal)])) ueot )! +text=Flying -- When Hidetsugu and Kairi enters the battlefield, draw three cards, then put two cards from your hand on top of your library in any order. -- When Hidetsugu and Kairi dies, exile the top card of your library. Target opponent loses life equal to its mana value. If it's an instant or sorcery card, you may cast it without paying its mana cost. +mana={2}{U}{U}{B} +type=Legendary Creature +subtype=Ogre Demon Dragon +power=5 +toughness=4 +[/card] +[card] name=Hieroglyphic Illumination abilities=cycling auto=draw:2 controller @@ -40668,6 +40818,15 @@ type=Artifact subtype=Equipment [/card] [card] +name=Holy Frazzle-Cannon +auto={1}:equip +auto=teach(creature) transforms((,newability[_ATTACKING_name(Put 1/1 counter) all(other *[creature;share!types!]|myBattlefield) counter(1/1)])) +text=Whenever equipped creature attacks, put a +1/+1 counter on that creature and each other creature you control that shares a creature type with it. -- Equip {1} +color=black,white +type=Artifact +subtype=Equipment +[/card] +[card] name=Homarid Explorer auto=target(player) deplete:4 text=When Homarid Explorer enters the battlefield, target player mills four cards. @@ -44349,6 +44508,20 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of Kaladesh +backside=Aetherwing, Golden-Scale Flagship +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.4.Defense) +auto=ability$!name(Create a thopter) _THOPTERTOKEN_ !$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Legendary Artifact Vehicle) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Kaladesh enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying. +mana={U}{R} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Kamigawa backside=Rooftop Saboteurs restriction=compare(isflipped)~equalto~0 @@ -44391,6 +44564,34 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of Kylem +backside=Valor's Reach Tag Team +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.5.Defense) +auto=ability$!may name(Creatures get 2/0) target(creature|battlefield) transforms((,newability[2/0],newability[vigilance],newability[haste])) ueot !$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( moveto(ownergraveyard) and!( transforms((,newability[activate castcard(copied named!:valor's reach tag team:!)])) oneshot )! )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Kylem enters the battlefield, up to two target creatures each get +2/+0 and gain vigilance and haste until end of turn. +mana={2}{R}{W} +type=Battle +subtype=Siege +[/card] +[card] +name=Invasion of Lorwyn +backside=Winnowing Forces +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.5.Defense) +auto=ability$!name(Destroy creature) target(creature[-elf&power<=type:land:mybattlefield]|opponentBattlefield) destroy!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Elf Warrior) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Lorwyn enters the battlefield, destroy target non-Elf creature an opponent controls with power X or less, where X is the number of lands you control. +mana={4}{B}{G} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Mercadia backside=Kyren Flamewright restriction=compare(isflipped)~equalto~0 @@ -44405,6 +44606,20 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of Moag +backside=Bloomwielder Dryads +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.5.Defense) +auto=ability$!name(Put 1/1 counter) all(creature|myBattlefield) counter(1/1)!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Dryad) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Moag enters the battlefield, put a +1/+1 counter on each creature you control. +mana={2}{G}{W} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Muraganda backside=Primordial Plasm restriction=compare(isflipped)~equalto~0 @@ -44419,6 +44634,49 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of New Capenna +backside=Holy Frazzle-Cannon +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=this(variable{isflipped}<1) counter(0/0.4.Defense) +auto=this(variable{isflipped}<1) ability$!may name(Sacrifice artifact or creature) target(*[artifact;creature]|mybattlefield) sacrifice and!( name(Exile creature or artifact) target(*[artifact;creature]|opponentbattlefield) moveto(ownerexile) )! !$ controller +auto=this(variable{isflipped}<1) moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Artifact) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of New Capenna enters the battlefield, you may sacrifice an artifact or creature. When you do, exile target artifact or creature an opponent controls. +mana={W}{B} +type=Battle +subtype=Siege +[/card] +[card] +name=Invasion of New Phyrexia +backside=Teferi Akosa of Zhalfir +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.6.Defense) +auto=thisforeach(variable{fullpaid}>0) ability$!name(Create knight) token(Knight,Creature Knight,2/2,white,blue,vigilance)!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Legendary Planeswalker Teferi) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of New Phyrexia enters the battlefield, create X 2/2 white and blue Knight creature tokens with vigilance. +mana={X}{W}{U} +type=Battle +subtype=Siege +[/card] +[card] +name=Invasion of Pyrulea +backside=Gargantuan Slabhorn +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.4.Defense) +aicode=activate transforms((,newability[all(*[zpos=1]|mylibrary) transforms((,newability[if cantargetcard(*[land;hasbackside]|*) then name(Draw a card) draw:1 controller])) oneshot])) oneshot +auto=ability$!scry:3 scrycore delayed dontshow transforms((,newability[if type(*[hasbackside&zpos=1]|mylibrary)~equalto~1 then all(*[hasbackside&zpos=1]|mylibrary) moveto(myhand) else if type(land[zpos=1]|mylibrary)~equalto~1 then all(land[zpos=1]|mylibrary) moveto(myhand)])) oneshot scrycoreend scryend!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Beast) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Pyrulea enters the battlefield, scry 3, then reveal the top card of your library. If it's a land or double-faced card, draw a card. +mana={G}{U} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Ravnica backside=Guildpact Paragon restriction=compare(isflipped)~equalto~0 @@ -44516,6 +44774,20 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of Tolvada +backside=The Broken Sky +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.5.Defense) +auto=ability$!name(Return permanent) target(*[-instant;-sorcery;-battle]|mygraveyard) moveTo(mybattlefield)!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Beast) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Tolvada enters the battlefield, return target nonbattle permanent card from your graveyard to the battlefield. +mana={3}{W}{B} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Ulgrotha backside=Grandmother Ravi Sengir restriction=compare(isflipped)~equalto~0 @@ -44545,6 +44817,20 @@ type=Battle subtype=Siege [/card] [card] +name=Invasion of Xerex +backside=Vertex Paladin +restriction=compare(isflipped)~equalto~0 +anyzone={0}:doubleside(backside) +auto=counter(0/0.4.Defense) +auto=ability$!may name(Return creature) name(Return creature) target(creature|battlefield) moveto(ownerhand)!$ controller +auto=moveto(opponentbattlefield) +auto=@defeated(this):name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Creature Beast) )! +text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Xerex enters the battlefield, return up to one target creature to its owner's hand. +mana={2}{W}{U} +type=Battle +subtype=Siege +[/card] +[card] name=Invasion of Zendikar backside=Awakened Skyclave restriction=compare(isflipped)~equalto~0 @@ -45971,6 +46257,17 @@ type=Artifact subtype=Equipment [/card] [card] +name=Joyful Stormsculptor +auto=name(Create 2 Elementals) token(Elemental,Creature Elemental,1/1,blue,red)*2 +auto=@movedTo(*[hasconvoke]|mystack):name(Deals 1 damage) transforms((,newability[all(battle|opponentBattlefield) damage:1],newability[damage:1 opponent])) oneshot +text=When Joyful Stormsculptor enters the battlefield, create two 1/1 blue and red Elemental creature tokens. -- Whenever you cast a spell that has convoke, Joyful Stormsculptor deals 1 damage to each opponent and each battle they protect. +mana={3}{U}{R} +type=Creature +subtype=Human Shaman +power=2 +toughness=3 +[/card] +[card] name=Jubilant Mascot auto=@each my combatbegins:may pay({3}{w}):target(other creature|battlefield) counter(1/1) text=At the beginning of combat on your turn, you may pay {3}{W}. If you do, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) @@ -48251,6 +48548,18 @@ power=6 toughness=6 [/card] [card] +name=Kogla and Yidaro +autohand={2}{R}{G}:name(Discard and destroy) reject and!( transforms((,newability[may name(Destroy artifact or enchantment) target(*[artifact;enchantment]|battlefield) destroy],newability[name(Shuffle into library) moveto(mylibrary) and!( shuffle )!],newability[draw:1 controller])) oneshot )! +auto=choice name(Gets trample and haste) transforms((,newability[haste],newability[trample])) ueot +auto=choice name(Fights opponent's creature) transforms((,newability[target(creature|opponentBattlefield) dynamicability])) ueot +text=When Kogla and Yidaro enters the battlefield, choose one -- It gains trample and haste until end of turn. -- It fights target creature you don't control. -- {2}{R}{G}, Discard Kogla and Yidaro: Destroy up to one target artifact or enchantment. Shuffle Kogla and Yidaro into your library from your graveyard, then draw a card. +mana={2}{R}{R}{G}{G} +type=Legendary Creature +subtype=Ape Dinosaur Turtle +power=7 +toughness=7 +[/card] +[card] name=Kogla, the Titan Ape auto=target(creature|opponentbattlefield) dynamicability auto=_ATTACKING_destroy target(artifact,enchantment|opponentBattlefield) @@ -56696,6 +57005,17 @@ mana={X}{U}{U} type=Sorcery [/card] [card] +name=Mutagen Connoisseur +abilities=flying,vigilance +auto=foreach(*[isflipped]|myBattlefield) 1/0 +text=Flying, vigilance -- Mutagen Connoisseur gets +1/+0 for each transformed permanent you control. +mana={1}{G}{U} +type=Creature +subtype=Vedalken Mutant +power=0 +toughness=5 +[/card] +[card] name=Mutiny target=creature|opponentbattlefield auto=transforms((,newability[dynamicability target(other creature|myBattlefield)])) ueot @@ -71319,8 +71639,8 @@ restriction=compare(isflipped)~equalto~0 anyzone={0}:doubleside(backside) auto=@movedTo(*[legendary]|mystack) restriction{compare(isflipped)~equalto~0}:name(Untap rona) name(Untap rona) untap auto={T}:name(Draw and discard) draw:1 && transforms((,newability[name(Discard a card) target(*|myhand) reject])) oneshot -auto={5}{B}:name(Pay B and transform Rona) flip(backside) forcetype(Legendary Creature Phyrexian Wizard) asSorcery -auto={5}{L:2}:name(Pay life and transform Rona) flip(backside) forcetype(Legendary Creature Phyrexian Wizard) asSorcery +auto={5}{B}:name(Pay B and transform Rona) flip(backside) asSorcery +auto={5}{L:2}:name(Pay life and transform Rona) flip(backside) asSorcery text=Whenever you cast a legendary spell, untap Rona, Herald of Invasion. -- {T}: Draw a card, then discard a card. -- {5}{B/P}: Transform Rona. Activate only as a sorcery. ({B/P} can be paid with either {B} or 2 life.) mana={1}{U} type=Legendary Creature @@ -87668,6 +87988,14 @@ mana={B}{B}{B} type=Legendary Artifact [/card] [card] +name=The Broken Sky +auto=lord(creature[token]|myBattlefield) transforms((,newability[1/0],newability[lifelink])) +auto=@each my endofturn:name(Create spirit) token(Spirit,Creature Spirit,1/1,white,black,flying) +text=Creature tokens you control get +1/+0 and have lifelink. -- At the beginning of your end step, create a 1/1 white and black Spirit creature token with flying. +color=white,black +type=Enchantment +[/card] +[card] name=The Cauldron of Eternity anyzone=foreach(creature|mygraveyard) changecost(colorless:-2) forcedalive auto=@movedTo(graveyard) from(creature|myBattlefield):all(trigger[from]) bottomoflibrary @@ -93548,6 +93876,14 @@ type=Artifact subtype=Equipment [/card] [card] +name=Valor's Reach Tag Team +abilities=doublefacedeath +auto=name(Create warriors) token(Warrior,Creature Warrior,3/2,red,white)*2 and!( transforms((,newability[@combat(attacking) source(this) restriction{type(creature[attacking]|battlefield)~morethan~1}:name(Put 1/1 counter) counter(1/1)])) forever )! +text=Create two 3/2 red and white Warrior creature tokens with "Whenever this creature and at least one other creature token attack, put a +1/+1 counter on this creature." +color=red,white +type=Sorcery +[/card] +[card] name=Valor Singer auto=@each my combatbegins:name(Creature gets 1/0) target(creature|myBattlefield) 1/0 ueot text=Combat Inspiration - At the beginning of combat on your turn, target creature you control gets +1/+0 until end of turn. @@ -94535,6 +94871,17 @@ power=2 toughness=2 [/card] [card] +name=Vertex Paladin +abilities=flying +anyzone=type:creature:myBattlefield/type:creature:myBattlefield cdaactive +text=Flying -- Vertex Paladin's power and toughness are each equal to the number of creatures you control. +color=white,blue +type=Creature +subtype=Angel Knight +power=* +toughness=* +[/card] +[card] name=Vesperlark abilities=flying other={1}{W} name(Evoke) @@ -98121,6 +98468,16 @@ power=2 toughness=3 [/card] [card] +name=Winnowing Forces +anyzone=type:land:mybattlefield/type:land:mybattlefield cdaactive +text=Winnowing Forces's power and toughness are each equal to the number of lands you control. +mana=black,green +type=Creature +subtype=Elf Warrior +power=* +toughness=* +[/card] +[card] name=Winota, Joiner of Forces auto=@combat(attacking) source(creature[-human]|myBattlefield):Reveal:6 revealzone(mylibrary) optionone name(Get Creature) target(human|reveal) transforms((,newability[moveto(mybattlefield)],newability[battleready],newability[indestructible])) ueot optiononeend optiontwo choice name(Shuffle) all(*|reveal) bottomoflibrary && shuffle controller optiontwoend revealend text=Whenever a non-Human creature you control attacks, look at the top six cards of your library. You may put a Human creature card from among them onto the battlefield tapped and attacking. It gains indestructible until end of turn. Put the rest of the cards on the bottom of your library in a random order. diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index 29d7660f6..2d0210330 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -2806,6 +2806,37 @@ type=Legendary Planeswalker subtype=Tasha [/card] [card] +name=Teferi Akosa of Zhalfir +auto=counter(0/0,4,loyalty) +auto={C(0/0,1,Loyalty)}:name(+1: Draw and discard) draw:2 controller && transforms((,newability[if type(creature|myhand)~morethan~0 then choice name(Discard a creature) name(Discard a creature) target(creature|myhand) reject],newability[choice name(Discard 2 cards) target(<2>*[-creature]|myhand) reject])) oneshot +auto={C(0/0,-2,Loyalty)}:name(-2: Emblem for knights) emblem transforms((,newability[lord(knight|mybattlefield) transforms((,newability[1/0],newability[_WARD_(1)]))])) forever dontremove +auto={C(0/0,-3,Loyalty)}:name(-3: Tap 0 creatures and return permanent) target(*[-land&manacost<=0]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 1 creature and return permanent) target(*[-land&manacost<=1]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 2 creatures and return permanent) target(*[-land&manacost<=2]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 3 creatures and return permanent) target(*[-land&manacost<=3]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 4 creatures and return permanent) target(*[-land&manacost<=4]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 5 creatures and return permanent) target(*[-land&manacost<=5]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 6 creatures and return permanent) target(*[-land&manacost<=6]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 7 creatures and return permanent) target(*[-land&manacost<=7]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 8 creatures and return permanent) target(*[-land&manacost<=8]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 9 creatures and return permanent) target(*[-land&manacost<=9]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 10 creatures and return permanent) target(*[-land&manacost<=10]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 11 creatures and return permanent) target(*[-land&manacost<=11]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 12 creatures and return permanent) target(*[-land&manacost<=12]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 13 creatures and return permanent) target(*[-land&manacost<=13]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 14 creatures and return permanent) target(*[-land&manacost<=14]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 15 creatures and return permanent) target(*[-land&manacost<=15]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 16 creatures and return permanent) target(*[-land&manacost<=16]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 17 creatures and return permanent) target(*[-land&manacost<=17]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 18 creatures and return permanent) target(*[-land&manacost<=18]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 19 creatures and return permanent) target(*[-land&manacost<=19]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +auto={C(0/0,-3,Loyalty)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}{T(creature[-tapped]|mybattlefield)}:name(-3: Tap 20 creatures and return permanent) target(*[-land&manacost<=20]|opponentbattlefield) moveto(ownerlibrary) and!( transforms((,newability[shuffle])) oneshot )! +text=[+1]: Draw two cards. Then discard two cards unless you discard a creature card. -- [−2]: You get an emblem with "Knights you control get +1/+0 and have ward {1}." -- [−3]: Tap X untapped creatures you control. When you do, shuffle target nonland permanent an opponent controls with mana value X or less into its owner's library. +color=white,blue +type=Legendary Planeswalker +subtype=Teferi +[/card] +[card] name=Teferi, Hero of Dominaria auto=counter(0/0,4,loyalty) auto={C(0/0,1,Loyalty)}:name(+1: Draw a card and untap two lands) draw:1 controller && phaseaction[endofturn once] untap target(<2>land) diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index dacbd8016..fd72dce18 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -6530,6 +6530,16 @@ mana={7} type=Artifact [/card] [card] +name=Mirror-Shield Hoplite +abilities=vigilance +text=Vigilance -- Whenever a creature you control becomes the target of a backup ability, copy that ability. You may choose new targets for the copy. This ability triggers only once each turn. +mana={R}{W} +type=Creature +subtype=Human Soldier +power=2 +toughness=2 +[/card] +[card] name=Mirror Strike text=All combat damage that would be dealt to you this turn by target unblocked creature is dealt to its controller instead. mana={3}{W} diff --git a/projects/mtg/include/CardDescriptor.h b/projects/mtg/include/CardDescriptor.h index 2c21b1540..bd155d13a 100644 --- a/projects/mtg/include/CardDescriptor.h +++ b/projects/mtg/include/CardDescriptor.h @@ -46,6 +46,7 @@ class CardDescriptor: public MTGCardInstance int zposComparisonMode; int zposition; int hasKickerCost; + int hasConvokeCost; int hasFlashbackCost; int hasBackSide; int hasPartner; @@ -55,6 +56,7 @@ class CardDescriptor: public MTGCardInstance CardDescriptor(); void unsecureSetKicked(int i); void unsecureSetHasKickerCost(int i); + void unsecureSetHasConvokeCost(int i); void unsecureSetHasFlashbackCost(int i); void unsecureSetHasBackSide(int i); void unsecureSetHasPartner(int i); diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index 944cb4170..dac9630c9 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -3,6 +3,7 @@ #include "CardDescriptor.h" #include "Subtypes.h" #include "Counters.h" +#include "ExtraCost.h" CardDescriptor::CardDescriptor() : MTGCardInstance(), mColorExclusions(0) @@ -23,6 +24,7 @@ CardDescriptor::CardDescriptor() zposComparisonMode = COMPARISON_NONE; zposition = -1; hasKickerCost = 0; + hasConvokeCost = 0; hasFlashbackCost = 0; hasBackSide = 0; hasPartner = 0; @@ -69,6 +71,11 @@ void CardDescriptor::unsecureSetHasKickerCost(int k) hasKickerCost = k; } +void CardDescriptor::unsecureSetHasConvokeCost(int k) +{ + hasConvokeCost = k; +} + void CardDescriptor::unsecureSetHasFlashbackCost(int k) { hasFlashbackCost = k; @@ -296,6 +303,21 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card) if (excludedSet.any()) return NULL; + if (hasConvokeCost != 0){ + bool hasConvoke = false; + ManaCost * extra = card->getManaCost()->getAlternative(); + if(extra && extra->extraCosts){ + for(unsigned int i = 0; i < extra->extraCosts->costs.size() && !hasConvoke; i++){ + if(dynamic_cast (extra->extraCosts->costs[i])) + hasConvoke = true; + } + } + if ((hasConvokeCost == -1 && hasConvoke) || (hasConvokeCost == 1 && !hasConvoke)) + { + match = NULL; + } + } + if ((hasKickerCost == -1 && ((card->getManaCost()->getKicker() && !card->basicAbilities[Constants::HASNOKICKER]) || (!card->getManaCost()->getKicker() && card->basicAbilities[Constants::HASOTHERKICKER]))) || (hasKickerCost == 1 && !((card->getManaCost()->getKicker() && !card->basicAbilities[Constants::HASNOKICKER]) || (!card->getManaCost()->getKicker() && card->basicAbilities[Constants::HASOTHERKICKER])))) { match = NULL; //Some kicker costs are not a real kicker (e.g. Fuse cost). diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index eeeae6a12..81c4c920a 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -1520,7 +1520,19 @@ bool CardGui::FilterCard(MTGCard * _card,string filter) cd.unsecureSetHasKickerCost(1); } } - //Has kicker cost + //Has convoke cost + else if (attribute.find("hasconvoke") != string::npos) + { + if (minus) + { + cd.unsecureSetHasConvokeCost(-1); + } + else + { + cd.unsecureSetHasConvokeCost(1); + } + } + //Has flashback cost else if (attribute.find("hasflashback") != string::npos) { if (minus) diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 5e92f2a8d..31ff7191d 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -615,6 +615,18 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta cd->unsecureSetHasKickerCost(1); } } + //Has convoke cost + else if (attribute.find("hasconvoke") != string::npos) + { + if (minus) + { + cd->unsecureSetHasConvokeCost(-1); + } + else + { + cd->unsecureSetHasConvokeCost(1); + } + } //Has flashback cost else if (attribute.find("hasflashback") != string::npos) {