diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MOC.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MOC.txt index 38bf5bed6..92940a79a 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MOC.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MOC.txt @@ -22,9 +22,6 @@ toughness=4 [card] name=Elenda and Azor abilities=flying -auto=Flying_WARD_(2) -auto=_ATTACKING_may pay( {x}{w}{u}{b} draw x cards -auto=@each endofturn:create(1/1 black vampire knight:creature 1/1 black vampire knight:number:of:lifelink equal to the number of cards you've drawn this turn) text=Flying, ward {2} -- Whenever Elenda and Azor attacks, you may pay {X}{W}{U}{B}. If you do, draw X cards. -- At the beginning of each end step, you may pay 4 life. If you do, create a number of 1/1 black Vampire Knight creature tokens with lifelink equal to the number of cards you've drawn this turn. mana={3}{W}{U}{B} type=Legendary Creature @@ -199,9 +196,6 @@ type=Sorcery [card] name=Elenda and Azor abilities=flying -auto=Flying_WARD_(2) -auto=_ATTACKING_may pay( {x}{w}{u}{b} draw x cards -auto=@each endofturn:create(1/1 black vampire knight:creature 1/1 black vampire knight:number:of:lifelink equal to the number of cards you've drawn this turn) text=Flying, ward {2} -- Whenever Elenda and Azor attacks, you may pay {X}{W}{U}{B}. If you do, draw X cards. -- At the beginning of each end step, you may pay 4 life. If you do, create a number of 1/1 black Vampire Knight creature tokens with lifelink equal to the number of cards you've drawn this turn. mana={3}{W}{U}{B} type=Legendary Creature diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ONE.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ONE.txt new file mode 100644 index 000000000..b20bdb6c4 --- /dev/null +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ONE.txt @@ -0,0 +1,58 @@ +[card] +name=Elesh Norn, Mother of Machines +abilities=vigilance +text=Vigilance -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- Permanents entering the battlefield don't cause abilities of permanents your opponents control to trigger. +mana={4}{W} +type=Legendary Creature +subtype=Phyrexian Praetor +power=4 +toughness=7 +[/card] +[card] +name=Elesh Norn, Mother of Machines +abilities=vigilance +text=Vigilance -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- Permanents entering the battlefield don't cause abilities of permanents your opponents control to trigger. +mana={4}{W} +type=Legendary Creature +subtype=Phyrexian Praetor +power=4 +toughness=7 +[/card] +[card] +name=Drivnod, Carnage Dominus +text=If a creature dying causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- {B/P}{B/P}, Exile three creature cards from your graveyard: Put an indestructible counter on Drivnod, Carnage Dominus. ({B/P} can be paid with either {B} or 2 life.) +mana={3}{B}{B} +type=Legendary Creature +subtype=Phyrexian Horror +power=8 +toughness=3 +[/card] +[card] +name=Elesh Norn, Mother of Machines +abilities=vigilance +text=Vigilance -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- Permanents entering the battlefield don't cause abilities of permanents your opponents control to trigger. +mana={4}{W} +type=Legendary Creature +subtype=Phyrexian Praetor +power=4 +toughness=7 +[/card] +[card] +name=Elesh Norn, Mother of Machines +abilities=vigilance +text=Vigilance -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- Permanents entering the battlefield don't cause abilities of permanents your opponents control to trigger. +mana={4}{W} +type=Legendary Creature +subtype=Phyrexian Praetor +power=4 +toughness=7 +[/card] +[card] +name=Drivnod, Carnage Dominus +text=If a creature dying causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- {B/P}{B/P}, Exile three creature cards from your graveyard: Put an indestructible counter on Drivnod, Carnage Dominus. ({B/P} can be paid with either {B} or 2 life.) +mana={3}{B}{B} +type=Legendary Creature +subtype=Phyrexian Horror +power=8 +toughness=3 +[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/missingCardList.txt b/projects/mtg/bin/Res/missing_cards_by_sets/missingCardList.txt index 2aa3de279..64bfbbfd7 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/missingCardList.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/missingCardList.txt @@ -4,13 +4,10 @@ Pyre-Sledge Arsonist Sokenzan Smelter Star Pupil Sun Droplet -Elesh Norn, Mother of Machines Melira, the Living Cure Thrun, Breaker of Silence Soulless Jailer -Mercurial Spelldancer Tablet of Compleation -Meldweb Strider The Mycosynth Gardens Rhuk, Hexgold Nabber The Seedcore @@ -20,25 +17,19 @@ Kinzu of the Bleak Coven Red Sun's Twilight Urabrask's Forge Green Sun's Twilight -Ichormoon Gauntlet Conduit of Worlds Mirran Safehouse -Jace, the Perfected Mind Monument to Perfection Argentum Masticore The Filigree Sylex Carnivorous Canopy Contagious Vorrac Evolved Spinoderm -Bring the Ending Expand the Sphere Evolving Adaptive -Experimental Augury -Black Sun's Twilight Glissa Sunslayer Kethek, Crucible Goliath Atraxa, Grand Unifier -Ezuri, Stalker of Spheres Ovika, Enigma Goliath Ria Ivor, Bane of Bladehold Malcator, Purity Overseer @@ -47,17 +38,12 @@ Venser, Corpse Puppet Slobad, Iron Goblin Solphim, Mayhem Dominus Capricious Hellraiser -Skrelv, Defector Mite -Drivnod, Carnage Dominus -Tekuthal, Inquiry Dominus Kaito, Dancing Shadow Kaya, Intangible Slayer Nahiri, the Unforgiving Nissa, Ascended Animist Tyvar, Jubilant Brawler Lukka, Bound to Ruin -Vraska, Betrayal's Sting -The Eternal Wanderer Maze's Mantle Lattice-Blade Mantis Plague Nurse @@ -67,18 +53,10 @@ Molten Rebuke Rebel Salvo Churning Reservoir Bladehold War-Whip -Forgehammer Centurion Slaughter Singer -Awaken the Sleeper -All Will Be One -Against All Odds -Bladegraft Aspirant -Cacophony Scamp -Scheming Aspirant Ichorplate Golem Serum-Core Chimera Tainted Observer -Necrosquito Voidwing Hybrid Vivisection Evangelist Atraxa's Skitterfang diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index c43f4e49d..fbad106de 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -1,7 +1,7 @@ grade=borderline #Bordeline 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 programmatically - Thanks to Vitty85 13-06-2023 +#I sorted this programmatically - Thanks to Vitty85 15-06-2023 [card] name=+2 Mace auto={3}:equip @@ -953,6 +953,17 @@ text=As Agadeem, the Undercrypt enters the battlefield, you may pay 3 life. If y type=Land [/card] [card] +name=Against All Odds +auto=if type(*[artifact;creature]|mybattlefield)~morethan~0 then choice name(Exile artifact or creature) name(Exile artifact or creature) target(*[artifact;creature]|mybattlefield) moveto(myexile) and!( moveto(ownerbattlefield) )! +auto=if type(artifact[manacost<=3]|mygraveyard)~morethan~0 then choice name(Return artifact) name(Return artifact) target(artifact[manacost<=3]|mygraveyard) moveto(mybattlefield) +auto=if type(creature[manacost<=3]|mygraveyard)~morethan~0 then choice name(Return creature) name(Return creature) target(creature[manacost<=3]|mygraveyard) moveto(mybattlefield) +auto=if type(*[artifact;creature]|mybattlefield)~morethan~0 then if type(artifact[manacost<=3]|mygraveyard)~morethan~0 then choice name(Exile and return artifact) name(Exile and return artifact) name(Exile and return artifact) target(*[artifact;creature]|mybattlefield) moveto(myexile) and!( transforms((,newability[name(Return artifact) name(Return artifact) target(artifact[manacost<=3]|mygraveyard) moveto(mybattlefield)],newability[moveto(ownerbattlefield)])) ueot )! +auto=if type(*[artifact;creature]|mybattlefield)~morethan~0 then if type(creature[manacost<=3]|mygraveyard)~morethan~0 then choice name(Exile and return creature) name(Exile and return creature) name(Exile and return creature) target(*[artifact;creature]|mybattlefield) moveto(myexile) and!( transforms((,newability[name(Return creature) name(Return creature) target(creature[manacost<=3]|mygraveyard) moveto(mybattlefield)],newability[moveto(ownerbattlefield)])) ueot )! +text=Choose one or both -- Exile target artifact or creature you control, then return it to the battlefield under its owner's control. -- Return target artifact or creature card with mana value 3 or less from your graveyard to the battlefield. +mana={3}{W} +type=Sorcery +[/card] +[card] name=Ageless Guardian mana={1}{W} type=Creature @@ -1557,6 +1568,16 @@ type=Enchantment subtype=Aura [/card] [card] +name=All Will Be One +auto=@totalcounteradded(any) from(*|mybattlefield):name(Deal damage) ability$!name(Choose one) choice name(Damage opponent) damage:storedthatmuch opponent _ choice name(Damage creature or planeswalker) target(*[creature;planeswalker]|opponentbattlefield) damage:storedthatmuch!$ controller +auto=@energizedof(player):name(Deal damage) ability$!name(Choose one) choice name(Damage opponent) damage:storedthatmuch opponent _ choice name(Damage creature or planeswalker) target(*[creature;planeswalker]|opponentbattlefield) damage:storedthatmuch!$ controller +auto=@experiencedof(player):name(Deal damage) ability$!name(Choose one) choice name(Damage opponent) damage:storedthatmuch opponent _ choice name(Damage creature or planeswalker) target(*[creature;planeswalker]|opponentbattlefield) damage:storedthatmuch!$ controller +auto=@poisonedfoeof(player):name(Deal damage) ability$!name(Choose one) choice name(Damage opponent) damage:storedthatmuch opponent _ choice name(Damage creature or planeswalker) target(*[creature;planeswalker]|opponentbattlefield) damage:storedthatmuch!$ controller +text=Whenever you put one or more counters on a permanent or player, All Will Be One deals that much damage to target opponent, creature an opponent controls, or planeswalker an opponent controls. +mana={3}{R}{R} +type=Enchantment +[/card] +[card] name=Allied Assault auto=choice name(Target 0 creatures) donothing auto=choice name(Target 1 creature) target(creature) calculateparty/calculateparty ueot @@ -2652,8 +2673,9 @@ toughness=2 [/card] [card] name=Animation Module -auto=@counteradded(1/1) from(*|mybattlefield):name(pay 1 for 1/1 Servo) pay[[{1}]] name(pay 1 for 1/1 Servo) _SERVOTOKEN_ -auto={3}{T}:name(Add a counter) name(Add a counter) target(proliferation) duplicatecounters(single) +auto=@totalcounteradded(1/1) from(*|mybattlefield):name(pay 1 for 1/1 Servo) pay[[{1}]] name(pay 1 for 1/1 Servo) _SERVOTOKEN_ +auto={3}{T}:name(Add a counter on player) name(Add a counter on player) target(player) duplicatecounters(single) +auto={3}{T}:name(Add a counter on permanent) name(Add a counter on permanent) target(*[counter{any}]|battlefield) duplicatecounters(single) text=Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token. -- {3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind. mana={1} type=Artifact @@ -5524,6 +5546,14 @@ mana={3}{R} type=Enchantment [/card] [card] +name=Awaken the Sleeper +target=creature +auto=moveto(mybattlefield) and!(transforms((,newability[phaseaction[endofturn sourceinplay] moveTo(previousbattlefield)],newability[untap],newability[haste],newability[if cantargetcard(*[geared]|*) then may name(Destroy equipments) name(Destroy equipments) all(myeqp) destroy])) ueot)! +text=Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. If it's equipped, you may destroy all Equipment attached to that creature. +mana={3}{R} +type=Sorcery +[/card] +[card] name=Awaken the Woods auto=create(Dryad Arbor)*X text=Create X 1/1 green Forest Dryad land creature tokens. (They're affected by summoning sickness.) @@ -8116,6 +8146,29 @@ power=2 toughness=2 [/card] [card] +name=Black Sun's Twilight +auto=may name(Creature gets -X/-X) target(creature|battlefield) -fullpaid/-fullpaid ueot +auto=if compare(fullpaid)~equalto~5 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=5]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~6 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=6]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~7 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=7]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~8 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=8]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~9 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=9]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~10 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=10]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~11 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=11]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~12 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=12]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~13 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=13]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~14 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=14]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~15 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=15]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~16 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=16]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~17 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=17]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~18 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=18]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~equalto~19 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=19]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +auto=if compare(fullpaid)~morethan~19 then name(Return creature) ability$!name(Return creature) name(Return creature) target(creature[manacost<=20]|mygraveyard) moveto(mybattlefield) and!( tap(noevent) )!!$ controller +text=Up to one target creature gets -X/-X until end of turn. If X is 5 or more, return a creature card with mana value X or less from your graveyard to the battlefield tapped. +mana={X}{B} +type=Instant +[/card] +[card] name=Blackblade Reforged auto=teach(creature) type:land:mybattlefield/type:land:mybattlefield nonstatic auto=name(Equip legendary) {3}:rehook target(creature[legendary]|mybattlefield) asSorcery @@ -8314,6 +8367,18 @@ type=Artifact subtype=Equipment [/card] [card] +name=Bladegraft Aspirant +#MISSING: Activated abilities of Equipment you control that target Bladegraft Aspirant cost {1} less to activate. +abilities=menace +auto=lord(equipment|mycastingzone) altercost(colorless,-1) +text=Menace -- Equipment spells you cast cost {1} less to cast. -- Activated abilities of Equipment you control that target Bladegraft Aspirant cost {1} less to activate. +mana={2}{R} +type=Creature +subtype=Phyrexian Warrior +power=2 +toughness=3 +[/card] +[card] name=Bladegriff Prototype abilities=flying auto=@combatdamagefoeof(player) from(this):ability$!name(destroy) notatarget(*[-land]|mybattlefield) destroy!$ opponent @@ -11486,6 +11551,14 @@ mana={3}{W} type=Sorcery [/card] [card] +name=Bring the Ending +target=*|stack +auto=transforms((,newability[if compare(mypoisoncount)~lessthan~3 then pay[[{2}]] name(pay 2 mana) donothing?fizzle],newability[if compare(mypoisoncount)~morethan~2 then pay[[{0}]] name(counter spell) fizzle?fizzle])) forever +text=Counter target spell unless its controller pays {2}. -- Corrupted - Counter that spell instead if its controller has three or more poison counters. +mana={1}{U} +type=Instant +[/card] +[card] name=Bring to Trial target=creature[power>=4] auto=moveto(exile) @@ -12295,6 +12368,18 @@ power=2 toughness=5 [/card] [card] +name=Cacophony Scamp +auto={0}:name(Test) _PROLIFERATE_ +auto=@combatdamaged(player) from(this):may name(Sacrifice and proliferate) sacrifice and!( _PROLIFERATE_ )! +auto=_DIES_name(Damage any target) damage:power target(player,creature,planeswalker) +text=Whenever Cacophony Scamp deals combat damage to a player, you may sacrifice it. If you do, proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) -- When Cacophony Scamp dies, it deals damage equal to its power to any target. +mana={R} +type=Creature +subtype=Phyrexian Goblin Warrior +power=1 +toughness=1 +[/card] +[card] name=Cadira, Caller of the Small abilities=trample auto=@combatdamaged(player) from(this):create(rabbit:creature rabbit:1/1:white)*type:*[token]:myBattlefield @@ -28753,6 +28838,14 @@ power=1 toughness=1 [/card] [card] +name=Experimental Augury +aicode=activate transforms((,newability[target(*[zpos<=3]|mylibrary) moveto(myhand) and!( transforms((,newability[_PROLIFERATE_],newability[all(other *[zpos<=3]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) oneshot)!])) oneshot +auto=name(Look top 3 cards) reveal:3 optionone name(Get a card) target(*|reveal) moveto(myhand) optiononeend optiontwo name(Put on bottom) target(<2>*|reveal) bottomoflibrary optiontwoend afterrevealed _PROLIFERATE_ afterrevealedend revealend +text=Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order. Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) +mana={1}{U} +type=Instant +[/card] +[card] name=Experimental Frenzy abilities=showfromtoplibrary,canplayfromlibrarytop auto=lord(*|myhand) altercost(colorless, 99) @@ -29107,6 +29200,17 @@ power=3 toughness=3 [/card] [card] +name=Ezuri, Stalker of Spheres +auto=may name(Proliferate twice) name(Proliferate twice) pay({3}) name(Proliferate twice) name(Proliferate twice) thisforeach(variable{2}) ability$!name(Proliferate twice) name(Proliferate twice)) target(proliferation) proliferate!$ controller +auto=@proliferateof(player):name(Draw a card) draw:1 controller +text=When Ezuri, Stalker of Spheres enters the battlefield, you may pay {3}. If you do, proliferate twice. -- Whenever you proliferate, draw a card. +mana={2}{G}{U} +type=Legendary Creature +subtype=Phyrexian Elf Warrior +power=3 +toughness=3 +[/card] +[card] name=Ezzaroot Channeler abilities=reach auto=token(manareducer,manareducer,0/0,shroud,indestructible,treason) and!( transforms((,newability[thisforeach(variable{lifegain}>0) lord(creature|mycastingzone) changecost(colorless:-1) forcedalive])) forever )! @@ -32581,6 +32685,17 @@ text={T}: Add {C}. -- {T}: Choose target commander that entered the battlefield type=Land [/card] [card] +name=Forgehammer Centurion +auto=@movedto(other *[creature;artifact]|graveyard) from(mybattlefield):name(Put oil counter) counter(0/0,1,Oil) +auto=@combat(attacking) source(this) restriction{compare(hascntoil)~morethan~1}:may name(Remove 2 oil counters) counter(0/0,-2,Oil) && ability$!name(Creature can't block) name(Creature can't block) target(creature|battlefield) transforms((,newability[cantblock])) ueot!$ controller +text=Whenever another creature or artifact you control is put into a graveyard from the battlefield, put an oil counter on Forgehammer Centurion. -- Whenever Forgehammer Centurion attacks, you may remove two oil counters from it. When you do, target creature can't block this turn. +mana={2}{R} +type=Creature +subtype=Phyrexian Warrior +power=3 +toughness=2 +[/card] +[card] name=Forging the Anchor aicode=activate transforms((,newability[if type(artifact[zpos<=5]|myLibrary)~morethan~0 then all(artifact[zpos<=5]|myLibrary) moveTo(myHand) and!( all(other *[zpos<=5]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! else all(*[zpos<=5]|mylibrary) moveto(myreveal) and!( bottomoflibrary and!( draw:1 controller)! )! ])) oneshot auto=name(Look 5 cards) reveal:5 optionone name(Get artifacts) target(artifact|reveal) moveto(myhand) optiononeend optiontwo name(Put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend @@ -43365,6 +43480,15 @@ power=1 toughness=3 [/card] [card] +name=Ichormoon Gauntlet +auto=lord(planeswalker|myBattlefield) transforms((,newability[{C(0/0.0.Loyalty)}:name(+0: Proliferate) _PROLIFERATE_])) +auto=lord(planeswalker|myBattlefield) transforms((,newability[{C(0/0.-12.Loyalty)}:name(-12: Take an extra turn) turns:+1 controller])) +auto=@movedTo(*[-creature]|mystack):name(Add a counter on permanent) name(Add a counter on permanent) target(*[counter{any}]|battlefield) duplicatecounters(single) +text=Planeswalkers you control have "[0]: Proliferate" and "[-12]: Take an extra turn after this one." -- Whenever you cast a noncreature spell, choose a counter on target permanent. Put an additional counter of that kind on that permanent. +mana={2}{U} +type=Artifact +[/card] +[card] name=Ichorspit Basilisk abilities=deathtouch,poisontoxic text=Deathtouch -- Toxic 1 (Players dealt combat damage by this creature also get a poison counter.) @@ -56032,6 +56156,21 @@ power=3 toughness=4 [/card] [card] +name=Meldweb Strider +abilities=vigilance +auto=counter(0/0,1,Oil) +auto={C(0/0,-1,Oil)}:name(Becomes an artifact creature) transforms((Artifact Creature)) ueot +auto={crew(other creature[power>=3]|myBattlefield)}:name(crew 3 [1 creature]) becomes(Artifact Creature) ueot restriction{type(other creature[-tapped;power>=3]|mybattlefield)~morethan~0,compare(crewtotalpower)~morethan~2} +auto={crew(other creature[power>=1]|myBattlefield)}{crew(other creature[power>=2]|myBattlefield)}:name(crew 3 [2 creature]) becomes(Artifact Creature) ueot restriction{type(other creature[-tapped;power>=1]|mybattlefield)~morethan~0,type(other creature[-tapped;power>=2]|mybattlefield)~morethan~0,type(other creature[-tapped;-cantcrew]|mybattlefield)~morethan~1,compare(crewtotalpower)~morethan~2} +auto={crew(other creature[power>=1]|myBattlefield)}{crew(other creature[power>=1]|myBattlefield)}{crew(other creature[power>=1]|myBattlefield)}:name(crew 3 [3 creature]) becomes(Artifact Creature) ueot restriction{type(other creature[-tapped;power>=1]|mybattlefield)~morethan~2,compare(crewtotalpower)~morethan~2} +text=Vigilance -- Meldweb Strider enters the battlefield with an oil counter on it. -- Remove an oil counter from Meldweb Strider: It becomes an artifact creature until end of turn. -- Crew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.) +mana={4}{U} +type=Artifact +subtype=Vehicle +power=5 +toughness=5 +[/card] +[card] name=Meletis Charlatan auto={2}{U}{T}:name(Controller copies instant or sorcery) target(*[instant;sorcery]|stack) transforms((,newability[activate castcard(copied)])) oneshot text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy. @@ -56281,6 +56420,18 @@ mana={4}{B}{B} type=Instant [/card] [card] +name=Mercurial Spelldancer +abilities=unblockable +auto=@movedTo(*[-creature]|mystack):name(put an oil counter) counter(0/0,1,Oil) +auto=@combatdamaged(player) from(this) restriction{compare(hascntoil)~morethan~1}:may name(Remove 2 oil counters) counter(0/0,-2,Oil) && emblem transforms((,newability[@movedTo(*[instant;sorcery]|mystack) turnlimited:name(Copy spell) all(trigger[to]<1>) activate castcard(copied noevent)])) ueot +text=Mercurial Spelldancer can't be blocked. -- Whenever you cast a noncreature spell, put an oil counter on Mercurial Spelldancer. -- Whenever Mercurial Spelldancer deals combat damage to a player, you may remove two oil counters from it. If you do, when you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy. +mana={1}{U} +type=Creature +subtype=Phyrexian Rogue +power=2 +toughness=1 +[/card] +[card] name=Mercurial Transformation target=*[-land]|battlefield other={1}{U} name(Choose octopus) @@ -60261,6 +60412,20 @@ power=4 toughness=5 [/card] [card] +name=Necrosquito +abilities=flying +auto=2/2 ueot +auto=transforms((,newability[counter(0/0.2.Oil)],newability[-2/-2])) ueot +anyzone=hascntoil/hascntoil cdaactive +auto=@movedto(other *[creature;artifact]|graveyard) from(mybattlefield):name(Put oil counter) counter(0/0,1,Oil) +text=Flying -- Necrosquito enters the battlefield with two oil counters on it. -- Necrosquito gets +1/+1 for each oil counter on it. -- Whenever another creature or artifact you control is put into a graveyard from the battlefield, put an oil counter on Necrosquito. +mana={3}{B} +type=Creature +subtype=Phyrexian Insect +power=0 +toughness=0 +[/card] +[card] name=Necrosynthesis target=creature aicode=activate target(*[zpos<=power]|mylibrary) moveto(myhand) and!( all(other *[zpos<=power]|mylibrary) moveto(myreveal) and !( bottomoflibrary )! )! @@ -77481,6 +77646,17 @@ power=3 toughness=3 [/card] [card] +name=Scheming Aspirant +auto=@proliferateof(player):name(You gain 2 life) life:2 controller +auto=@proliferateof(player):name(Opponent loses 2 life) life:-2 opponent +text=Whenever you proliferate, each opponent loses 2 life and you gain 2 life. +mana={1}{B} +type=Creature +subtype=Phyrexian Advisor +power=1 +toughness=3 +[/card] +[card] name=Scheming Symmetry auto=ability$!choice name(search a card) notatarget(*|mylibrary) moveto(mylibrary)!$ controller auto=ability$!choice name(search a card) notatarget(*|mylibrary) moveto(mylibrary)!$ opponent @@ -82201,6 +82377,26 @@ power=4 toughness=5 [/card] [card] +name=Skrelv, Defector Mite +abilities=poisontoxic,cantblock +auto={W}{T}:name(Choose white) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from white],newability[cantbeblockedby(creature[white])])) ueot +auto={W}{T}:name(Choose red) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from red],newability[cantbeblockedby(creature[red])])) ueot +auto={W}{T}:name(Choose black) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from black],newability[cantbeblockedby(creature[black])])) ueot +auto={W}{T}:name(Choose green) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from green],newability[cantbeblockedby(creature[green])])) ueot +auto={W}{T}:name(Choose blue) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from blue],newability[cantbeblockedby(creature[blue])])) ueot +auto={L:2}{T}:name(Pay life and choose white) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from white],newability[cantbeblockedby(creature[white])])) ueot +auto={L:2}{T}:name(Pay life and choose red) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from red],newability[cantbeblockedby(creature[red])])) ueot +auto={L:2}{T}:name(Pay life and choose black) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from black],newability[cantbeblockedby(creature[black])])) ueot +auto={L:2}{T}:name(Pay life and choose green) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from green],newability[cantbeblockedby(creature[green])])) ueot +auto={L:2}{T}:name(Pay life and choose blue) target(other creature|myBattlefield) transforms((,newability[poisontoxic],newability[protection from blue],newability[cantbeblockedby(creature[blue])])) ueot +text=Toxic 1 (Players dealt combat damage by this creature also get a poison counter.) -- Skrelv, Defector Mite can't block. -- {W/P}, {T}: Choose a color. Another target creature you control gains toxic 1 and hexproof from that color until end of turn. It can't be blocked by creatures of that color this turn. ({W/P} can be paid with either {W} or 2 life.) +mana={W} +type=Legendary Artifact Creature +subtype=Phyrexian Mite +power=1 +toughness=1 +[/card] +[card] name=Skrelv's Hive auto=@each my upkeep:life:-1 controller && _PHYREXIANMITETOKEN_ auto=this(variable{opponentpoisoncount}>2) lord(other creature[poisontoxic]|myBattlefield) lifelink @@ -90606,6 +90802,20 @@ type=Legendary Planeswalker subtype=Teferi [/card] [card] +name=Tekuthal, Inquiry Dominus +abilities=flying +auto=@proliferateof(player) except(this):name(Proliferate twice) name(Proliferate twice) notatarget(proliferation) proliferate +auto=this(variable{totcntallanycnt}>2) {1}{U}{U}:name(Remove 3 counters) transforms((,newability[thisforeach(variable{3}) ability$!name(Remove a counter) name(Remove a counter) target(other *[counter{any}]|battlefield) removesinglecountertype(1)!$ controller],newability[counter(0/0.1.Indestructible)],newability[this(counter{0/0.1.Indestructible}>=1) indestructible])) forever +auto=this(variable{totcntallanycnt}>2) {1}{U}{L:2}:name(Pay 2 life and remove 3 counters) transforms((,newability[thisforeach(variable{3}) ability$!name(Remove a counter) name(Remove a counter) target(other *[counter{any}]|battlefield) removesinglecountertype(1)!$ controller],newability[counter(0/0.1.Indestructible)],newability[this(counter{0/0.1.Indestructible}>=1) indestructible])) forever +auto=this(variable{totcntallanycnt}>2) {1}{L:4}:name(Pay 4 life and remove 3 counters) transforms((,newability[thisforeach(variable{3}) ability$!name(Remove a counter) name(Remove a counter) target(other *[counter{any}]|battlefield) removesinglecountertype(1)!$ controller],newability[counter(0/0.1.Indestructible)],newability[this(counter{0/0.1.Indestructible}>=1) indestructible])) forever +text=Flying -- If you would proliferate, proliferate twice instead. -- {1}{U/P}{U/P}, Remove three counters from among other artifacts, creatures, and planeswalkers you control: Put an indestructible counter on Tekuthal, Inquiry Dominus. ({U/P} can be paid with either {U} or 2 life.) +mana={2}{U}{U} +type=Legendary Creature +subtype=Phyrexian Horror +power=3 +toughness=5 +[/card] +[card] name=Telepathy abilities=showopponenthand text=Your opponents play with their hands revealed. @@ -96102,7 +96312,7 @@ type=Instant name=Tyrite Sanctum auto={T}:add{C} auto={2}{T}:name(Creature becomes god) target(creature[legendary]|battlefield) transforms((God,newability[counter(1/1)])) forever -auto={4}{T}{S}:name(Sacrifice and put indestructible counter) target(*[god]|battlefield) transforms((,newability[counter(0/0.1.Indestructible)],newability[this(counter{0/0.1.Indestructible}>=1) indestructible])) forever dontremove +auto={4}{T}{S}:name(Sacrifice and put indestructible counter) target(*[god]|battlefield) transforms((,newability[counter(0/0.1.Indestructible)],newability[this(counter{0/0.1.Indestructible}>=1) indestructible])) forever text={T}: Add {C}. -- {2}, {T}: Target legendary creature becomes a God in addition to its other types. Put a +1/+1 counter on it. -- {4}, {T}, Sacrifice Tyrite Sanctum: Put an indestructible counter on target God. type=Land [/card] diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index 0abeec08a..5aa42d3fc 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -1,6 +1,6 @@ #Planeswalkers Primitives Pack for Wagic the Homebrew. #Please keep these card alphabetized, and try to have the "name=" line at the top of each card -#We sorted this in alphabetical order - Luruz & Vitty85 10-06-2023 +#We sorted this in alphabetical order - Luruz & Vitty85 15-06-2023 [card] name=Abian, Luvion Usurper auto=counter(0/0,5,loyalty) @@ -1434,6 +1434,60 @@ type=Legendary Planeswalker subtype=Jace [/card] [card] +name=Jace, the Perfected Mind +auto=if paid(alternative) then counter(0/0,3,loyalty) +auto=ifnot paid(alternative) then counter(0/0,5,loyalty) +auto={C(0/0,+1,Loyalty)}:name(+1: Target creature gains -3/-0) target(creature|battlefield) transforms((,newability[-3/-0])) uynt +auto={C(0/0,+1,Loyalty)}:name(+1: Don't target any creature) donothing +auto={C(0/0,-2,Loyalty)}:name(-2: You mill 3 cards) deplete:3 controller && if type(*|mygraveyard)~morethan~19 then draw:3 controller else if type(*|opponentgraveyard)~morethan~19 then draw:3 controller else draw:1 controller +auto={C(0/0,-2,Loyalty)}:name(-2: Opponent mills 3 cards) deplete:3 opponent && if type(*|mygraveyard)~morethan~19 then draw:3 controller else if type(*|opponentgraveyard)~morethan~19 then draw:3 controller else draw:1 controller +auto={C(0/0,-1,Loyalty)}:name(-1: You mill 1 card three times) thisforeach(variable{3}) ability$!name(Mill 1 card) name(Mill 1 card) deplete:1!$ controller +auto={C(0/0,-1,Loyalty)}:name(-1: Opponent mills 1 card three times) thisforeach(variable{3}) ability$!name(Mill 1 card) name(Mill 1 card) deplete:1!$ opponent +auto={C(0/0,-2,Loyalty)}:name(-2: You mill 2 cards three times) thisforeach(variable{3}) ability$!name(Mill 2 cards) name(Mill 2 cards) deplete:2!$ controller +auto={C(0/0,-2,Loyalty)}:name(-2: Opponent mills 2 cards three times) thisforeach(variable{3}) ability$!name(Mill 2 cards) name(Mill 2 cards) deplete:2!$ opponent +auto={C(0/0,-3,Loyalty)}:name(-3: You mill 3 cards three times) thisforeach(variable{3}) ability$!name(Mill 3 cards) name(Mill 3 cards) deplete:3!$ controller +auto={C(0/0,-3,Loyalty)}:name(-3: Opponent mills 3 cards three times) thisforeach(variable{3}) ability$!name(Mill 3 cards) name(Mill 3 cards) deplete:3!$ opponent +auto={C(0/0,-4,Loyalty)}:name(-4: You mill 4 cards three times) thisforeach(variable{3}) ability$!name(Mill 4 cards) name(Mill 4 cards) deplete:4!$ controller +auto={C(0/0,-4,Loyalty)}:name(-4: Opponent mills 4 cards three times) thisforeach(variable{3}) ability$!name(Mill 4 cards) name(Mill 4 cards) deplete:4!$ opponent +auto={C(0/0,-5,Loyalty)}:name(-5: You mill 5 cards three times) thisforeach(variable{3}) ability$!name(Mill 5 cards) name(Mill 5 cards) deplete:5!$ controller +auto={C(0/0,-5,Loyalty)}:name(-5: Opponent mills 5 cards three times) thisforeach(variable{3}) ability$!name(Mill 5 cards) name(Mill 5 cards) deplete:5!$ opponent +auto={C(0/0,-6,Loyalty)}:name(-6: You mill 6 cards three times) thisforeach(variable{3}) ability$!name(Mill 6 cards) name(Mill 6 cards) deplete:6!$ controller +auto={C(0/0,-6,Loyalty)}:name(-6: Opponent mills 6 cards three times) thisforeach(variable{3}) ability$!name(Mill 6 cards) name(Mill 6 cards) deplete:6!$ opponent +auto={C(0/0,-7,Loyalty)}:name(-7: You mill 7 cards three times) thisforeach(variable{3}) ability$!name(Mill 7 cards) name(Mill 7 cards) deplete:7!$ controller +auto={C(0/0,-7,Loyalty)}:name(-7: Opponent mills 7 cards three times) thisforeach(variable{3}) ability$!name(Mill 7 cards) name(Mill 7 cards) deplete:7!$ opponent +auto={C(0/0,-8,Loyalty)}:name(-8: You mill 8 cards three times) thisforeach(variable{3}) ability$!name(Mill 8 cards) name(Mill 8 cards) deplete:8!$ controller +auto={C(0/0,-8,Loyalty)}:name(-8: Opponent mills 8 cards three times) thisforeach(variable{3}) ability$!name(Mill 8 cards) name(Mill 8 cards) deplete:8!$ opponent +auto={C(0/0,-9,Loyalty)}:name(-9: You mill 9 cards three times) thisforeach(variable{3}) ability$!name(Mill 9 cards) name(Mill 9 cards) deplete:9!$ controller +auto={C(0/0,-9,Loyalty)}:name(-9: Opponent mills 9 cards three times) thisforeach(variable{3}) ability$!name(Mill 9 cards) name(Mill 9 cards) deplete:9!$ opponent +auto={C(0/0,-10,Loyalty)}:name(-10: You mill 10 cards three times) thisforeach(variable{3}) ability$!name(Mill 10 cards) name(Mill 10 cards) deplete:10!$ controller +auto={C(0/0,-10,Loyalty)}:name(-10: Opponent mills 10 cards three times) thisforeach(variable{3}) ability$!name(Mill 10 cards) name(Mill 10 cards) deplete:10!$ opponent +auto={C(0/0,-11,Loyalty)}:name(-11: You mill 11 cards three times) thisforeach(variable{3}) ability$!name(Mill 11 cards) name(Mill 11 cards) deplete:11!$ controller +auto={C(0/0,-11,Loyalty)}:name(-11: Opponent mills 11 cards three times) thisforeach(variable{3}) ability$!name(Mill 11 cards) name(Mill 11 cards) deplete:11!$ opponent +auto={C(0/0,-12,Loyalty)}:name(-12: You mill 12 cards three times) thisforeach(variable{3}) ability$!name(Mill 12 cards) name(Mill 12 cards) deplete:12!$ controller +auto={C(0/0,-12,Loyalty)}:name(-12: Opponent mills 12 cards three times) thisforeach(variable{3}) ability$!name(Mill 12 cards) name(Mill 12 cards) deplete:12!$ opponent +auto={C(0/0,-13,Loyalty)}:name(-13: You mill 13 cards three times) thisforeach(variable{3}) ability$!name(Mill 13 cards) name(Mill 13 cards) deplete:13!$ controller +auto={C(0/0,-13,Loyalty)}:name(-13: Opponent mills 13 cards three times) thisforeach(variable{3}) ability$!name(Mill 13 cards) name(Mill 13 cards) deplete:13!$ opponent +auto={C(0/0,-14,Loyalty)}:name(-14: You mill 14 cards three times) thisforeach(variable{3}) ability$!name(Mill 14 cards) name(Mill 14 cards) deplete:14!$ controller +auto={C(0/0,-14,Loyalty)}:name(-14: Opponent mills 14 cards three times) thisforeach(variable{3}) ability$!name(Mill 14 cards) name(Mill 14 cards) deplete:14!$ opponent +auto={C(0/0,-15,Loyalty)}:name(-15: You mill 15 cards three times) thisforeach(variable{3}) ability$!name(Mill 15 cards) name(Mill 15 cards) deplete:15!$ controller +auto={C(0/0,-15,Loyalty)}:name(-15: Opponent mills 15 cards three times) thisforeach(variable{3}) ability$!name(Mill 15 cards) name(Mill 15 cards) deplete:15!$ opponent +auto={C(0/0,-16,Loyalty)}:name(-16: You mill 16 cards three times) thisforeach(variable{3}) ability$!name(Mill 16 cards) name(Mill 16 cards) deplete:16!$ controller +auto={C(0/0,-16,Loyalty)}:name(-16: Opponent mills 16 cards three times) thisforeach(variable{3}) ability$!name(Mill 16 cards) name(Mill 16 cards) deplete:16!$ opponent +auto={C(0/0,-17,Loyalty)}:name(-17: You mill 17 cards three times) thisforeach(variable{3}) ability$!name(Mill 17 cards) name(Mill 17 cards) deplete:17!$ controller +auto={C(0/0,-17,Loyalty)}:name(-17: Opponent mills 17 cards three times) thisforeach(variable{3}) ability$!name(Mill 17 cards) name(Mill 17 cards) deplete:17!$ opponent +auto={C(0/0,-18,Loyalty)}:name(-18: You mill 18 cards three times) thisforeach(variable{3}) ability$!name(Mill 18 cards) name(Mill 18 cards) deplete:18!$ controller +auto={C(0/0,-18,Loyalty)}:name(-18: Opponent mills 18 cards three times) thisforeach(variable{3}) ability$!name(Mill 18 cards) name(Mill 18 cards) deplete:18!$ opponent +auto={C(0/0,-19,Loyalty)}:name(-19: You mill 19 cards three times) thisforeach(variable{3}) ability$!name(Mill 19 cards) name(Mill 19 cards) deplete:19!$ controller +auto={C(0/0,-19,Loyalty)}:name(-19: Opponent mills 19 cards three times) thisforeach(variable{3}) ability$!name(Mill 19 cards) name(Mill 19 cards) deplete:19!$ opponent +auto={C(0/0,-20,Loyalty)}:name(-20: You mill 20 cards three times) thisforeach(variable{3}) ability$!name(Mill 20 cards) name(Mill 20 cards) deplete:20!$ controller +auto={C(0/0,-20,Loyalty)}:name(-20: Opponent mills 20 cards three times) thisforeach(variable{3}) ability$!name(Mill 20 cards) name(Mill 20 cards) deplete:20!$ opponent +text=Compleated ({U/P} can be paid with {U} or 2 life. If life was paid, this planeswalker enters with two fewer loyalty counters.) -- [+1]: Until your next turn, up to one target creature gets -3/-0. -- [-2]: Target player mills three cards. Then if a graveyard has twenty or more cards in it, you draw three cards. Otherwise, you draw a card. -- [-X]: Target player mills three times X cards. +other={2}{U}{L:2} name(Pay 2 life) +mana={2}{U}{U} +type=Legendary Planeswalker +subtype=Jace +[/card] +[card] name=Jace, Unraveler of Secrets auto=counter(0/0,5,loyalty) aicode=activate transforms((,newability[draw:1 controller])) oneshot @@ -3068,6 +3122,19 @@ type=Legendary Planeswalker subtype=Tezzeret [/card] [card] +name=The Eternal Wanderer +#MISSING: No more than one creature can attack The Eternal Wanderer each combat +auto=counter(0/0,5,loyalty) +auto={C(0/0,+1,Loyalty)}:name(+1: Exile creature or artifact) target(*[artifact;creature]|battlefield) moveto(ownerexile) and!( transforms((,newability[phaseaction[my endofturn once sourceinplay] moveto(ownerbattlefield)])) forever )! +auto={C(0/0,+1,Loyalty)}:name(+1: Don't exile creature or artifact) donothing +auto={C(0/0,0,Loyalty)}:name(+0: Create a samurai) token(Samurai,Creature Samurai,2/2,white,double strike) +auto=this(variable{type:creature:mybattlefield}>0) {C(0/0,-4,Loyalty)}:name(-4: Sacrifice creatures) name(-4: Sacrifice creatures) target(creature|mybattlefield) transforms((,newability[all(other creature|mybattlefield) sacrifice],newability[name(Choose opponent creature) name(Choose opponent creature) target(creature|opponentbattlefield) transforms((,newability[all(other creature|mybattlefield) sacrifice])) ueot])) ueot +auto=this(variable{type:creature:mybattlefield}=0) {C(0/0,-4,Loyalty)}:name(-4: Sacrifice creatures) name(-4: Sacrifice creatures) target(creature|opponentbattlefield) transforms((,newability[sacrifice])) forever +text=No more than one creature can attack The Eternal Wanderer each combat. -- [+1]: Exile up to one target artifact or creature. Return that card to the battlefield under its owner's control at the beginning of that player's next end step. -- [0]: Create a 2/2 white Samurai creature token with double strike. -- [-4]: For each player, choose a creature that player controls. Each player sacrifices all creatures they control not chosen this way. +mana={4}{W}{W} +type=Legendary Planeswalker +[/card] +[card] name=The Royal Scions auto=counter(0/0,5,loyalty) auto={C(0/0,1,Loyalty)}:name(+1: Draw and Discard) draw:1 controller && ability$!name(discard a card) notatarget(*|myhand) reject!$ controller @@ -3315,6 +3382,20 @@ type=Legendary Planeswalker subtype=Vivien [/card] [card] +name=Vraska, Betrayal's Sting +auto=if paid(alternative) then counter(0/0,4,loyalty) +auto=ifnot paid(alternative) then counter(0/0,6,loyalty) +auto={C(0/0,0,Loyalty)}:name(0: Draw card and lose life) draw:1 controller && life:-1 controller && _PROLIFERATE_ +auto={C(0/0,-2,Loyalty)}:name(-2: Creature becomes treasure) target(creature|battlefield) flip(Treasure Sur) +auto={C(0/0,-9,Loyalty)}:name(-9: You get poison counter) alterpoison:9minusmypoisoncountminusend controller +auto={C(0/0,-9,Loyalty)}:name(-9: Opponent gets poison counter) alterpoison:9minusopponentpoisoncountminusend opponent +text=Compleated ({B/P} can be paid with {B} or 2 life. If life was paid, this planeswalker enters with two fewer loyalty counters.) -- [0]: You draw a card and you lose 1 life. Proliferate. -- [-2]: Target creature becomes a Treasure artifact with "{T}, Sacrifice this artifact: Add one mana of any color" and loses all other card types and abilities. -- [-9]: If target player has fewer than nine poison counters, they get a number of poison counters equal to the difference. +other={2}{B}{L:2} name(Pay 2 life) +mana={4}{B}{B} +type=Legendary Planeswalker +subtype=Vraska +[/card] +[card] name=Vraska, Golgari Queen auto=counter(0/0,4,loyalty) auto={C(0/0,2,Loyalty)}:name(+2: May sacrifice to gain 1 life and draw a card) ability$!name(May sacrifice) may sacrifice notatarget(other *|myBattlefield) && life:1 controller && draw:1 controller!$ controller diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 35f26fb9f..a92fb1829 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -2671,6 +2671,15 @@ mana={2} type=Artifact [/card] [card] +name=Drivnod, Carnage Dominus +text=If a creature dying causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- {B/P}{B/P}, Exile three creature cards from your graveyard: Put an indestructible counter on Drivnod, Carnage Dominus. ({B/P} can be paid with either {B} or 2 life.) +mana={3}{B}{B} +type=Legendary Creature +subtype=Phyrexian Horror +power=8 +toughness=3 +[/card] +[card] name=Dromoka's Command text=Choose two -- Prevent all damage target instant or sorcery spell would deal this turn. -- Target player sacrifices an enchantment. -- Put a +1/+1 counter on target creature. -- Target creature you control fights target creature you don't control. mana={G}{W} @@ -2798,9 +2807,6 @@ subtype=Aura [card] name=Elenda and Azor abilities=flying -auto=Flying_WARD_(2) -auto=_ATTACKING_may pay( {x}{w}{u}{b} draw x cards -auto=@each endofturn:create(1/1 black vampire knight:creature 1/1 black vampire knight:number:of:lifelink equal to the number of cards you've drawn this turn) text=Flying, ward {2} -- Whenever Elenda and Azor attacks, you may pay {X}{W}{U}{B}. If you do, draw X cards. -- At the beginning of each end step, you may pay 4 life. If you do, create a number of 1/1 black Vampire Knight creature tokens with lifelink equal to the number of cards you've drawn this turn. mana={3}{W}{U}{B} type=Legendary Creature @@ -2809,6 +2815,16 @@ power=6 toughness=6 [/card] [card] +name=Elesh Norn, Mother of Machines +abilities=vigilance +text=Vigilance -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. -- Permanents entering the battlefield don't cause abilities of permanents your opponents control to trigger. +mana={4}{W} +type=Legendary Creature +subtype=Phyrexian Praetor +power=4 +toughness=7 +[/card] +[card] name=Elkin Lair text=At the beginning of each player's upkeep, that player exiles a card at random from his or her hand. The player may play that card this turn. At the beginning of the next end step, if the player hasn't played the card, he or she puts it into his or her graveyard. mana={3}{R} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 2f5d14e70..5a510f8b4 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -553,6 +553,8 @@ public: amount = amount / 2; e->player->poisonCount = e->player->poisonCount - amount; } + e->player->thatmuch = e->nb_count; + this->source->thatmuch = e->nb_count; return 1; } @@ -596,6 +598,8 @@ public: amount = amount / 2; e->player->energyCount = e->player->energyCount - amount; } + e->player->thatmuch = e->nb_count; + this->source->thatmuch = e->nb_count; return 1; } @@ -639,6 +643,8 @@ public: amount = amount / 2; e->player->experienceCount = e->player->experienceCount - amount; } + e->player->thatmuch = e->nb_count; + this->source->thatmuch = e->nb_count; return 1; } @@ -677,6 +683,37 @@ public: } }; +class TrplayerProliferated: public Trigger +{ +public: + bool thiscontroller, thisopponent; + MTGCardInstance * proliferateException; //added exception to avid a proliferation loop (eg. Tekuthal, Inquiry Dominus) + TrplayerProliferated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool thiscontroller = false, bool thisopponent = false, MTGCardInstance * proliferateException = NULL) : + Trigger(observer, id, source, once, tc), thiscontroller(thiscontroller), thisopponent(thisopponent), proliferateException(proliferateException) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventplayerProliferated * e = dynamic_cast (event); + if (!e) return 0; + if (proliferateException && e->source && !strcmp(proliferateException->data->name.c_str(), e->source->data->name.c_str())) return 0; //If the source of proliferation it's the exception card it doesn't have effect (loop avoidance); + if (!tc->canTarget(e->player)) return 0; + if(thiscontroller) + if(e->player != source->controller()) + return 0; + if(thisopponent) + if(e->player == source->controller()) + return 0; + return 1; + } + + TrplayerProliferated * clone() const + { + return NEW TrplayerProliferated(*this); + } +}; + class TrplayerInitiative: public Trigger { public: @@ -1517,7 +1554,7 @@ public: int triggeredTurn; MTGCardInstance * counterException; //added exception to avid a counter loop (eg. Doubling Season) TrTotalCounter(GameObserver* observer, int id, MTGCardInstance * source, Counter * counter, TargetChooser * tc, int type = 0, bool once = false, bool duplicate = false, bool half = false, int plus = 0, bool limitOnceATurn = false, MTGCardInstance * counterException = NULL) : - Trigger(observer, id, source, once, tc), counter(counter), type(type), duplicate(duplicate), plus(plus), limitOnceATurn(limitOnceATurn), counterException(counterException) + Trigger(observer, id, source, once, tc), counter(counter), type(type), duplicate(duplicate), half(half), plus(plus), limitOnceATurn(limitOnceATurn), counterException(counterException) { triggeredTurn = -1; } @@ -1543,6 +1580,7 @@ public: e->targetCard->counters->removeCounter(e->name.c_str(),e->power,e->toughness,true,true,e->source); } e->source->thatmuch = e->totalamount + plus; + this->source->thatmuch = e->totalamount + plus; } else if (duplicate){ if(type == 1) { @@ -1553,6 +1591,7 @@ public: e->targetCard->counters->removeCounter(e->name.c_str(),e->power,e->toughness,true,true,e->source); } e->source->thatmuch = e->totalamount * 2; + this->source->thatmuch = e->totalamount * 2; } else if (half){ int amount = e->totalamount; @@ -1567,6 +1606,10 @@ public: e->targetCard->counters->addCounter(e->name.c_str(),e->power,e->toughness,true,true,e->source); } e->source->thatmuch = e->totalamount - amount; + this->source->thatmuch = e->totalamount - amount; + } else { + e->source->thatmuch = e->totalamount; + this->source->thatmuch = e->totalamount; } triggeredTurn = game->turn; return 1; @@ -1784,6 +1827,7 @@ class AAProliferate: public ActivatedAbility { public: bool allcounters; + bool notrigger; AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL); int resolve(); const string getMenuText(); diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index f10e3a2b9..788e6ff77 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -404,6 +404,15 @@ struct WEventplayerMonarch : public WEvent { virtual Targetable * getTarget(Player * player); }; +//proliferate event +struct WEventplayerProliferated : public WEvent { + WEventplayerProliferated(Player * player); + Player * player; + MTGCardInstance * source; + using WEvent::getTarget; + virtual Targetable * getTarget(Player * player); +}; + //initiative event struct WEventplayerInitiative : public WEvent { WEventplayerInitiative(Player * player); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 4c43ffc45..c6a8fe275 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -3052,7 +3052,7 @@ int AADuplicateCounters::resolve() } else { - MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source,false,pcounters); + MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source, true, pcounters); a->resolve(); } } @@ -3082,6 +3082,7 @@ ActivatedAbility(observer, id, source, cost, 0) { this->GetId(); allcounters = false; + notrigger = false; } int AAProliferate::resolve() @@ -3138,6 +3139,11 @@ int AAProliferate::resolve() a->resolve(); } } + if(!notrigger){ + WEventplayerProliferated * e = NEW WEventplayerProliferated(source->controller()); + e->source = source; + game->receiveEvent(e); + } return 1; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 526f0aae2..4cafeacb8 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1509,6 +1509,24 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell return NEW TrplayerExperienced(observer, id, card, tc, once, false, true, plus, duplicate, half); } + //proliferated - controller of card + if (TargetChooser * tc = parseSimpleTC(s, "proliferateof", card)){ + TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify an exception in order to avoid proliferation loop (eg. Tekuthal, Inquiry Dominus) + if(exception) + return NEW TrplayerProliferated(observer, id, card, tc, once, true, false, exception->source); + else + return NEW TrplayerProliferated(observer, id, card, tc, once, true, false); + } + + //proliferated - opponent of card controller + if (TargetChooser * tc = parseSimpleTC(s, "proliferatefoeof", card)){ + TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify an exception in order to avoid proliferation loop (eg. Tekuthal, Inquiry Dominus) + if(exception) + return NEW TrplayerProliferated(observer, id, card, tc, once, false, true, exception->source); + else + return NEW TrplayerProliferated(observer, id, card, tc, once, false, true); + } + //becomes monarch - controller of card if (TargetChooser * tc = parseSimpleTC(s, "becomesmonarchof", card)) return NEW TrplayerMonarch(observer, id, card, tc, once, true, false); @@ -5353,9 +5371,12 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG MTGAbility * a = NEW AAProliferate(observer, id, card, target); a->oneShot = 1; a->canBeInterrupted = false; + bool noevent = (s.find("noproftrg") != string::npos)?true:false; // Added a way to don't trigger @proliferate effect. ((AAProliferate*)a)->allcounters = true; + ((AAProliferate*)a)->notrigger = noevent; return a; } + //proliferate all counters found = s.find("propagate"); if (found != string::npos) @@ -5363,7 +5384,9 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG MTGAbility * a = NEW AAProliferate(observer, id, card, target); a->oneShot = 1; a->canBeInterrupted = false; + bool noevent = (s.find("noproftrg") != string::npos)?true:false; // Added a way to don't trigger @proliferated effect. ((AAProliferate*)a)->allcounters = true; + ((AAProliferate*)a)->notrigger = noevent; return a; } diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index e70d007f0..917325686 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -317,6 +317,11 @@ WEventplayerMonarch::WEventplayerMonarch(Player * player) : { } +WEventplayerProliferated::WEventplayerProliferated(Player * player) : + player(player) +{ +} + WEventplayerInitiative::WEventplayerInitiative(Player * player) : player(player) { @@ -700,6 +705,12 @@ Targetable * WEventplayerMonarch::getTarget(Player * player) return NULL; } +Targetable * WEventplayerProliferated::getTarget(Player * player) +{ + if (player) return player; + return NULL; +} + Targetable * WEventplayerInitiative::getTarget(Player * player) { if (player) return player;