Completed STX set, fixed/added primitives, improved Android downloader, implemented the usage of ^ instead of , char (e.g. target multiple zones within transforms keyword), improved the code to avoid the multiple triggers in case of abilities gained from other cards (e.g. Kasmina, Enigma Sage).

This commit is contained in:
Vittorio Alfieri
2021-04-26 19:23:31 +02:00
parent 68a64238cb
commit e265dc3e7f
8 changed files with 2662 additions and 108 deletions

View File

@@ -1822,8 +1822,10 @@ public class ImgDownloader {
cardurl = "https://c1.scryfall.com/file/scryfall-cards/large/back/8/c/8cfd0887-0c83-4b33-a85e-8b8ec5bf758d.jpg?1617453475";
else if(id.equals("513652"))
cardurl = "https://c1.scryfall.com/file/scryfall-cards/large/front/6/5/65008352-bc7e-40b2-a832-b46813e5dc4c.jpg?1617453527";
else if(id.equals("513653"))
cardurl = "https://c1.scryfall.com/file/scryfall-cards/large/back/6/5/65008352-bc7e-40b2-a832-b46813e5dc4c.jpg?1617453527";
else if(id.equals("513652t") || id.equals("513638t") || id.equals("513543t"))
cardurl = "https://c1.scryfall.com/file/scryfall-cards/large/front/d/0/d0ddbe3e-4a66-494d-9304-7471232549bf.jpg?1617626099";
else if(id.equals("513634t"))
cardurl = "https://c1.scryfall.com/file/scryfall-cards/large/front/9/1/910f48ab-b04e-4874-b31d-a86a7bc5af14.jpg?1617626097";
return cardurl;
}
@@ -2702,7 +2704,8 @@ public class ImgDownloader {
if (rarity == null || !rarity.equals("t") || set.equals("DKA") || set.equals("EMN") ||
set.equals("ISD") || set.equals("ORI") || set.equals("RIX") || set.equals("V17") ||
set.equals("UNH") || set.equals("XLN") || set.equals("SOI") || set.equals("SOK") ||
set.equals("BOK") || set.equals("CHK") || set.equals("ZNR") || set.equals("KHM"))
set.equals("BOK") || set.equals("CHK") || set.equals("ZNR") || set.equals("KHM") ||
set.equals("STX"))
rarity = "";
if(id != null && (id.equals("209162") || id.equals("209163") || id.equals("401721") || id.equals("401722") || id.equals("491633")))
rarity = "t";
@@ -2717,6 +2720,14 @@ public class ImgDownloader {
mappa.put("503837t", "Koma's Coil");
if(id.equals("503841"))
mappa.put("503841t", "Shard");
if(id.equals("513652"))
mappa.put("513652t", "Pest");
if(id.equals("513638"))
mappa.put("513638t", "Pest");
if(id.equals("513543"))
mappa.put("513543t", "Pest");
if(id.equals("513634"))
mappa.put("513634t", "Fractal");
if (id.equals("114921")) {
mappa.put("11492111t", "Citizen");
mappa.put("11492112t", "Camarid");

View File

@@ -3,7 +3,7 @@ author=Wagic Team
name=Strixhaven: School of Mages
orderindex=EXP-ZZI.STX
year=2021-04-23
total=337
total=340
[/meta]
[card]
primitive=Pest
@@ -16,6 +16,11 @@ id=-513728
rarity=T
[/card]
[card]
primitive=Inkling
id=-513722
rarity=T
[/card]
[card]
primitive=Spirit
id=-513712
rarity=T
@@ -151,6 +156,11 @@ id=-513585
rarity=T
[/card]
[card]
primitive=Inkling
id=-513566
rarity=T
[/card]
[card]
primitive=Pest
id=-513563
rarity=T
@@ -161,6 +171,11 @@ id=-513550
rarity=T
[/card]
[card]
primitive=Pest
id=-513543
rarity=T
[/card]
[card]
primitive=Fractal
id=-513529
rarity=T
@@ -181,7 +196,7 @@ id=-513502
rarity=T
[/card]
[card]
primitive=Elemental
primitive=Inkling
id=-513481
rarity=T
[/card]
@@ -218,7 +233,7 @@ rarity=R
[card]
primitive=Explore the Vastlands
id=513483
rarity=R
rarity=T
[/card]
[card]
primitive=Academic Probation
@@ -928,7 +943,7 @@ rarity=R
[card]
primitive=Echoing Equation
id=513625
rarity=R
rarity=T
[/card]
[card]
primitive=Blex, Vexing Pest
@@ -938,7 +953,7 @@ rarity=M
[card]
primitive=Search for Blex
id=513627
rarity=M
rarity=T
[/card]
[card]
primitive=Extus, Oriq Overlord
@@ -948,7 +963,7 @@ rarity=M
[card]
primitive=Awaken the Blood Avatar
id=513629
rarity=M
rarity=T
[/card]
[card]
primitive=Flamescroll Celebrant
@@ -958,7 +973,7 @@ rarity=R
[card]
primitive=Revel in Silence
id=513631
rarity=R
rarity=T
[/card]
[card]
primitive=Jadzi, Oracle of Arcavios
@@ -968,7 +983,7 @@ rarity=M
[card]
primitive=Journey to the Oracle
id=513633
rarity=M
rarity=T
[/card]
[card]
primitive=Kianne, Dean of Substance
@@ -978,7 +993,7 @@ rarity=R
[card]
primitive=Imbraham, Dean of Theory
id=513635
rarity=R
rarity=T
[/card]
[card]
primitive=Mila, Crafty Companion
@@ -988,7 +1003,7 @@ rarity=M
[card]
primitive=Lukka, Wayward Bonder
id=513637
rarity=M
rarity=T
[/card]
[card]
primitive=Pestilent Cauldron
@@ -998,7 +1013,7 @@ rarity=R
[card]
primitive=Restorative Burst
id=513639
rarity=R
rarity=T
[/card]
[card]
primitive=Plargg, Dean of Chaos
@@ -1008,7 +1023,7 @@ rarity=R
[card]
primitive=Augusta, Dean of Order
id=513641
rarity=R
rarity=T
[/card]
[card]
primitive=Rowan, Scholar of Sparks
@@ -1018,7 +1033,7 @@ rarity=M
[card]
primitive=Will, Scholar of Frost
id=513643
rarity=M
rarity=T
[/card]
[card]
primitive=Selfless Glyphweaver
@@ -1028,7 +1043,7 @@ rarity=R
[card]
primitive=Deadly Vanity
id=513645
rarity=R
rarity=T
[/card]
[card]
primitive=Shaile, Dean of Radiance
@@ -1038,7 +1053,7 @@ rarity=R
[card]
primitive=Embrose, Dean of Shadow
id=513647
rarity=R
rarity=T
[/card]
[card]
primitive=Torrent Sculptor
@@ -1048,7 +1063,7 @@ rarity=R
[card]
primitive=Flamethrower Sonata
id=513649
rarity=R
rarity=T
[/card]
[card]
primitive=Uvilda, Dean of Perfection
@@ -1058,7 +1073,7 @@ rarity=R
[card]
primitive=Nassari, Dean of Expression
id=513651
rarity=R
rarity=T
[/card]
[card]
primitive=Valentin, Dean of the Vein
@@ -1068,7 +1083,7 @@ rarity=R
[card]
primitive=Lisette, Dean of the Root
id=513653
rarity=R
rarity=T
[/card]
[card]
primitive=Aether Helix

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#Primitives Pack for Wagic the Homebrew.
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
#I sorted this programatically so the other comments are removed except for AUTO_DEFINE - Vitty85 30-11-2020
#I sorted this programatically so the other comments are removed except for AUTO_DEFINE - Vitty85 25-04-2021
[card]
name=Abandon Reason
target=<upto:2>creature
@@ -1975,7 +1975,7 @@ type=Enchantment
[/card]
[card]
name=Ajani's Pridemate
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):counter(1/1,1)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):counter(1/1,1)
text=Whenever you gain life, put a +1/+1 counter on Ajani's Pridemate.
mana={1}{W}
type=Creature
@@ -3466,8 +3466,7 @@ type=Sorcery
[/card]
[card]
name=Ancient Amphitheater
auto=tap(noevent)
auto=aslongas(giant|myHand) untap
auto=if type(*[giant]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{R}
auto={T}:Add{W}
text=As Ancient Amphitheater enters the battlefield, you may reveal a Giant card from your hand. If you don't, Ancient Amphitheater enters the battlefield tapped. -- {T}: Add {R} or {W} to your mana pool.
@@ -5144,7 +5143,7 @@ toughness=4
[card]
name=Archangel of Thune
abilities=flying,lifelink
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):all(creature|mybattlefield) counter(1/1,1)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):all(creature|mybattlefield) counter(1/1,1)
text=Flying. -- Lifelink. -- Whenever you gain life, put a +1/+1 counter on each creature you control.
mana={3}{W}{W}
type=Creature
@@ -6907,8 +6906,7 @@ toughness=1
[/card]
[card]
name=Auntie's Hovel
auto=tap(noevent)
auto=aslongas(goblin|myHand) untap
auto=if type(*[goblin]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{B}
auto={T}:Add{R}
text=As Auntie's Hovel enters the battlefield, you may reveal a Goblin card from your hand. If you don't, Auntie's Hovel enters the battlefield tapped. -- {T}: Add {B} or {R} to your mana pool.
@@ -12219,7 +12217,7 @@ type=Enchantment
[/card]
[card]
name=Bloodbond Vampire
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):counter(1/1,1)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):counter(1/1,1)
text=Whenever you gain life, put a +1/+1 counter on Bloodbond Vampire.
mana={2}{B}{B}
type=Creature
@@ -19444,7 +19442,7 @@ toughness=2
[/card]
[card]
name=Choked Estuary
auto=aslongas(island,swamp|myhand) tap(noevent) <1
auto=if type(*[island;swamp]|myhand)~equalto~0 then tap(noevent)
auto={T}:add{U}
auto={T}:add{B}
text=As Choked Estuary enters the battlefield, you may reveal an Island or Swamp card from your hand. If you don't, Choked Estuary enters the battlefield tapped. -- {T}: Add {U} or {B} to your mana pool.
@@ -20323,7 +20321,7 @@ toughness=1
[card]
name=Cliffhaven Vampire
abilities=flying
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):life:-1 opponent
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):life:-1 opponent
text=Flying -- Whenever you gain life, each opponent loses 1 life.
mana={2}{W}{B}
type=Creature
@@ -32126,7 +32124,7 @@ toughness=4
[card]
name=Drogskol Reaver
abilities=flying,double strike,lifelink
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):draw:1 controller
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):draw:1 controller
text=Flying, double strike, lifelink -- Whenever you gain life, draw a card.
mana={5}{W}{U}
type=Creature
@@ -41212,8 +41210,7 @@ toughness=1
[/card]
[card]
name=Flamekin Village
auto=tap(noevent)
auto=aslongas(Elemental|myHand) untap
auto=if type(*[elemental]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{r}
auto={r}{t}:target(creature) haste ueot
text=As Flamekin Village enters the battlefield, you may reveal an Elemental card from your hand. If you don't, Flamekin Village enters the battlefield tapped. -- {T}: Add {R} to your mana pool. -- {R}, {T}: Target creature gains haste until end of turn.
@@ -42707,7 +42704,7 @@ toughness=1
[/card]
[card]
name=Foreboding Ruins
auto=aslongas(mountain,swamp|myhand) tap(noevent) <1
auto=if type(*[mountain;swamp]|myhand)~equalto~0 then tap(noevent)
auto={T}:add{B}
auto={T}:add{R}
text=As Foreboding Ruins enters the battlefield, you may reveal a Swamp or Mountain card from your hand. If you don't, Foreboding Ruins enters the battlefield tapped. -- {T}: Add {B} or {R} to your mana pool.
@@ -42962,7 +42959,7 @@ toughness=6
[/card]
[card]
name=Fortified Village
auto=aslongas(forest,plains|myhand) tap(noevent) <1
auto=if type(*[plains;forest]|myhand)~equalto~0 then tap(noevent)
auto={T}:add{G}
auto={T}:add{W}
text=As Fortified Village enters the battlefield, you may reveal a Forest or Plains card from your hand. If you don't, Fortified Village enters the battlefield tapped. -- {T}: Add {G} or {W} to your mana pool.
@@ -44475,7 +44472,7 @@ type=Sorcery
[/card]
[card]
name=Game Trail
auto=aslongas(mountain,forest|myhand) tap(noevent) <1
auto=if type(*[mountain;forest]|myhand)~equalto~0 then tap(noevent)
auto={T}:add{R}
auto={T}:add{G}
text=As Game Trail enters the battlefield, you may reveal a Mountain or Forest card from your hand. If you don't, Game Trail enters the battlefield tapped. -- {T}: Add {R} or {G} to your mana pool.
@@ -46418,8 +46415,7 @@ toughness=3
[/card]
[card]
name=Gilt-Leaf Palace
auto=tap(noevent)
auto=aslongas(elf|myHand) untap
auto=if type(*[elf]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{B}
auto={T}:Add{G}
text=As Gilt-Leaf Palace enters the battlefield, you may reveal an Elf card from your hand. If you don't, Gilt-Leaf Palace enters the battlefield tapped. -- {T}: Add {B} or {G} to your mana pool.
@@ -61152,7 +61148,7 @@ toughness=2
[/card]
[card]
name=Kalastria Nightwatch
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):flying ueot
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):flying ueot
text=Whenever you gain life, Kalastria Nightwatch gains flying until end of turn.
mana={4}{B}
type=Creature
@@ -61549,7 +61545,7 @@ type=Sorcery
[/card]
[card]
name=Karlov of the Ghost Council
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):counter(1/1,2)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):counter(1/1,2)
auto={W}{B}{C(1/1,-6)}:moveto(exile) target(creature)
text=Whenever you gain life, put two +1/+1 counters on Karlov of the Ghost Council. -- {W}{B}, Remove six +1/+1 counters from Karlov of the Ghost Council: Exile target creature.
mana={W}{B}
@@ -70056,7 +70052,7 @@ toughness=1
[card]
name=Malakir Familiar
abilities=flying,deathtouch
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):1/1 ueot
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):1/1 ueot
text=Flying, deathtouch -- Whenever you gain life, Malakir Familiar gets +1/+1 until end of turn.
mana={2}{B}
type=Creature
@@ -77134,7 +77130,7 @@ toughness=4
[/card]
[card]
name=Murmuring Bosk
auto=if type(treefolk|myhand)~lessthan~1 then tap(noevent)
auto=if type(treefolk|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{W} and!( damage:1 controller )!
auto={T}:Add{B} and!( damage:1 controller )!
text=({T}: Add {G} to your mana pool.) -- As Murmuring Bosk enters the battlefield, you may reveal a Treefolk card from your hand. If you don't, Murmuring Bosk enters the battlefield tapped. -- {T}: Add {W} or {B} to your mana pool. Murmuring Bosk deals 1 damage to you.
@@ -80038,7 +80034,7 @@ toughness=1
[/card]
[card]
name=Nirkana Assassin
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):deathtouch ueot
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):deathtouch ueot
text=Whenever you gain life, Nirkana Assassin gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)
mana={2}{B}
type=Creature
@@ -87568,7 +87564,7 @@ toughness=2
[/card]
[card]
name=Port Town
auto=aslongas(island,plains|myhand) tap(noevent) <1
auto=if type(*[plains;island]|myhand)~equalto~0 then tap(noevent)
auto={T}:add{W}
auto={T}:add{U}
text=As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. -- {T}: Add {W} or {U} to your mana pool.
@@ -97604,8 +97600,7 @@ toughness=1
[/card]
[card]
name=Rustic Clachan
auto=tap(noevent)
auto=aslongas(kithkin|myHand) untap
auto=if type(*[kithkin]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{W}
autohand={1}{W}{discard}:counter(1/1,1) target(creature)
text=As Rustic Clachan enters the battlefield, you may reveal a Kithkin card from your hand. If you don't, Rustic Clachan enters the battlefield tapped. -- {T}: Add {W} to your mana pool. -- Reinforce 1 - {1}{W} ({1}{W}, Discard this card: Put a +1/+1 counter on target creature.)
@@ -101136,7 +101131,7 @@ type=Instant
[/card]
[card]
name=Searing Meditation
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):pay({2}) target(creature,player) damage:2
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):pay({2}) target(creature,player) damage:2
text=Whenever you gain life, you may pay {2}. If you do, Searing Meditation deals 2 damage to target creature or player.
mana={1}{R}{W}
type=Enchantment
@@ -101263,8 +101258,7 @@ type=Artifact Land
[/card]
[card]
name=Secluded Glen
auto=tap(noevent)
auto=aslongas(faerie|myHand) untap
auto=if type(*[faerie]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{U}
auto={T}:Add{B}
text=As Secluded Glen enters the battlefield, you may reveal a Faerie card from your hand. If you don't, Secluded Glen enters the battlefield tapped. -- {T}: Add {U} or {B} to your mana pool.
@@ -102343,7 +102337,7 @@ type=Sorcery
[/card]
[card]
name=Serene Steward
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):pay({W}) counter(1/1) target(creature)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):pay({W}) counter(1/1) target(creature)
text=Whenever you gain life, you may pay {W}. If you do, put a +1/+1 counter on target creature.
mana={1}{W}
type=Creature
@@ -131082,7 +131076,7 @@ toughness=5
[card]
name=Wall of Limbs
abilities=defender
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection]):counter(1/1,1)
auto=@lifeof(player) from(*[-Alhammarret's Archive;-Angel of Vitality;-Boon Reflection;-Honor Troll]):counter(1/1,1)
auto={5}{B}{B}{S}:name(Lose Life) target(player) life:-storedpower
text=Defender (This creature can't attack.) -- Whenever you gain life, put a +1/+1 counter on Wall of Limbs. -- {5}{B}{B}, Sacrifice Wall of Limbs: Target player loses X life, where X is Wall of Limbs's power.
mana={2}{B}
@@ -131510,8 +131504,7 @@ subtype=Aura
[/card]
[card]
name=Wanderwine Hub
auto=tap(noevent)
auto=aslongas(merfolk|myHand) untap
auto=if type(*[merfolk]|myhand)~equalto~0 then tap(noevent)
auto={T}:Add{W}
auto={T}:Add{U}
text=As Wanderwine Hub enters the battlefield, you may reveal a Merfolk card from your hand. If you don't, Wanderwine Hub enters the battlefield tapped. -- {T}: Add {W} or {U} to your mana pool.

View File

@@ -1,7 +1,7 @@
grade=borderline
#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 30-11-2020
#We sorted this in alphabetical order - Luruz & Vitty85 25-04-2021
[card]
name=Abian, Luvion Usurper
auto=counter(0/0,5,loyalty)
@@ -570,7 +570,7 @@ color=red
name=Chandra, the Firebrand
auto=counter(0/0,3,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage to any target) damage:1 target(player,creature,planeswalker)
auto={C(0/0,-2,Loyalty)}:name(-2: When cast instant or sorcery, copy spell) emblem transforms((,newability[@moveTo(*[instant;sorcery]|myStack):castcard(copied noevent) target(*[instant;sorcery]|mystack)])) oneshot ueot
auto={C(0/0,-2,Loyalty)}:name(-2: When cast instant or sorcery, copy spell) emblem transforms((,newability[@movedto(*[instant;sorcery]|myStack) turnlimited:all(trigger[to]) activate castcard(copied noevent)])) ueot
auto={C(0/0,-6,Loyalty)}:name(-6: Deals 6 damage up to six targets) ability$!name(Choose one) choice name(Damage opponent and five creature) damage:6 opponent && damage:6 target(<upto:5>creature) _ choice name(Damage controller and five creature) damage:6 controller && damage:6 target(<upto:5>creature) _ choice name(Damage creature) damage:6 target(<upto:6>creature)!$ controller
text=+1: Chandra, the Firebrand deals 1 damage to any target. -- -2: When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy. -- -6: Chandra, the Firebrand deals 6 damage to each of up to six target creatures and/or players.
mana={3}{R}
@@ -727,18 +727,6 @@ type=Legendary Planeswalker
subtype=Dovin
[/card]
[card]
name=Personal Decoy
abilities=exiledeath
auto=counter(0/0,lifetotal,loyalty)
auto=lord(creature|opponentBattlefield) cantattack
auto={C(0/0,1,Loyalty)}:name(+1: Gain 1 life) life:1 controller
auto={C(0/0,-4,Loyalty)}:name(-4: Draw a card) draw:1 controller
text=Personal Decoy enters the battlefield with a number of loyalty counters on it equal to your life total. If it would leave the battlefield, exile it instead of putting it anywhere else. You cant be attacked. -- +1: You gain 1 life. -- 4: Draw a card.
mana={5}{W}{U}
type=Planeswalker
subtype=Duck
[/card]
[card]
name=Elspeth, Knight-Errant
auto=counter(0/0,4,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Create a 1/1 soldier) create(Soldier:creature Soldier:1/1:white)
@@ -1355,6 +1343,59 @@ type=Legendary Planeswalker
subtype=Karn
[/card]
[card]
name=Kasmina, Enigma Sage
auto=counter(0/0,2,Loyalty)
aicode=activate transforms((,newability[all(*[zpos<=1]|mylibrary) transforms((,newability[may name(Put on bottom of library) moveto(myreveal) and!( bottomoflibrary )!])) oneshot])) oneshot
auto={C(0/0.2.Loyalty)}:limit:1 name(+2: Scry 1) scry:1 scrycore delayed dontshow donothing scrycoreend scryend
auto={C(0/0.-1.Loyalty)}:limit:1 name(-1: Create fractal with 1 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.1) )!
auto={C(0/0.-2.Loyalty)}:limit:1 name(-2: Create fractal with 2 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.2) )!
auto={C(0/0.-3.Loyalty)}:limit:1 name(-3: Create fractal with 3 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.3) )!
auto={C(0/0.-4.Loyalty)}:limit:1 name(-4: Create fractal with 4 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.4) )!
auto={C(0/0.-5.Loyalty)}:limit:1 name(-5: Create fractal with 5 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.5) )!
auto={C(0/0.-6.Loyalty)}:limit:1 name(-6: Create fractal with 6 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.6) )!
auto={C(0/0.-7.Loyalty)}:limit:1 name(-7: Create fractal with 7 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.7) )!
auto={C(0/0.-8.Loyalty)}:limit:1 name(-8: Create fractal with 8 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.8) )!
auto={C(0/0.-9.Loyalty)}:limit:1 name(-9: Create fractal with 9 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.9) )!
auto={C(0/0.-10.Loyalty)}:limit:1 name(-10: Create fractal with 10 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.10) )!
auto={C(0/0.-11.Loyalty)}:limit:1 name(-11: Create fractal with 11 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.11) )!
auto={C(0/0.-12.Loyalty)}:limit:1 name(-12: Create fractal with 12 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.12) )!
auto={C(0/0.-13.Loyalty)}:limit:1 name(-13: Create fractal with 13 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.13) )!
auto={C(0/0.-14.Loyalty)}:limit:1 name(-14: Create fractal with 14 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.14) )!
auto={C(0/0.-15.Loyalty)}:limit:1 name(-15: Create fractal with 15 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.15) )!
auto={C(0/0.-16.Loyalty)}:limit:1 name(-16: Create fractal with 16 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.16) )!
auto={C(0/0.-17.Loyalty)}:limit:1 name(-17: Create fractal with 17 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.17) )!
auto={C(0/0.-18.Loyalty)}:limit:1 name(-18: Create fractal with 18 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.18) )!
auto={C(0/0.-19.Loyalty)}:limit:1 name(-19: Create fractal with 19 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.19) )!
auto={C(0/0.-20.Loyalty)}:limit:1 name(-20: Create fractal with 20 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.20) )!
auto={C(0/0.-8.Loyalty)}:limit:1 name(-8: Search instant or sorcery) target(*[instant;sorcery;share!color!]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[zerocast],newability[@each untap:canplayfromexile],newability[@each untap:zerocast])) forever )!
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.2.Loyalty)}:limit:1 name(+2: Scry 1) scry:1 scrycore delayed dontshow donothing scrycoreend scryend]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-1.Loyalty)}:limit:1 name(-1: Create fractal with 1 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.1) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-2.Loyalty)}:limit:1 name(-2: Create fractal with 2 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.2) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-3.Loyalty)}:limit:1 name(-3: Create fractal with 3 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.3) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-4.Loyalty)}:limit:1 name(-4: Create fractal with 4 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.4) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-5.Loyalty)}:limit:1 name(-5: Create fractal with 5 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.5) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-6.Loyalty)}:limit:1 name(-6: Create fractal with 6 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.6) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-7.Loyalty)}:limit:1 name(-7: Create fractal with 7 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.7) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-8.Loyalty)}:limit:1 name(-8: Create fractal with 8 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.8) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-9.Loyalty)}:limit:1 name(-9: Create fractal with 9 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.9) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-10.Loyalty)}:limit:1 name(-10: Create fractal with 10 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.10) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-11.Loyalty)}:limit:1 name(-11: Create fractal with 11 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.11) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-12.Loyalty)}:limit:1 name(-12: Create fractal with 12 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.12) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-13.Loyalty)}:limit:1 name(-13: Create fractal with 13 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.13) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-14.Loyalty)}:limit:1 name(-14: Create fractal with 14 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.14) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-15.Loyalty)}:limit:1 name(-15: Create fractal with 15 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.15) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-16.Loyalty)}:limit:1 name(-16: Create fractal with 16 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.16) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-17.Loyalty)}:limit:1 name(-17: Create fractal with 17 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.17) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-18.Loyalty)}:limit:1 name(-18: Create fractal with 18 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.18) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-19.Loyalty)}:limit:1 name(-19: Create fractal with 19 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.19) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-20.Loyalty)}:limit:1 name(-20: Create fractal with 20 counter) token(Fractal^Creature Fractal^0/0^green^blue) and!( counter(1/1.20) )!]))
auto=lord(other planeswalker|mybattlefield) transforms((,newability[{C(0/0.-8.Loyalty)}:limit:1 name(-8: Search instant or sorcery) target(*[instant;sorcery;share!color!]|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[zerocast],newability[@each untap:canplayfromexile],newability[@each untap:zerocast])) forever )!]))
text=Each other planeswalker you control has the loyalty abilities of Kasmina, Enigma Sage. -- +2: Scry 1. -- X: Create a 0/0 green and blue Fractal creature token. Put X +1/+1 counters on it. -- 8: Search your library for an instant or sorcery card that shares a color with this planeswalker, exile that card, then shuffle. You may cast that card without paying its mana cost.
mana={1}{G}{U}
type=Legendary Planeswalker
subtype=Kasmina
[/card]
[card]
name=Kasmina, Enigmatic Mentor
auto=counter(0/0,5,loyalty)
auto=@targeted(*[creature;planeswalker]|myBattlefield) 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
@@ -1634,6 +1675,18 @@ type=Legendary Planeswalker
subtype=Lukka
[/card]
[card]
name=Lukka, Wayward Bonder
auto=counter(0/0,5,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Don't discard any card) donothing
auto={C(0/0,1,Loyalty)}:name(+1: Discard and draw) target(*|myhand) transforms((,newability[reject],newability[if cantargetcard(*[creature]|*) then draw:2 else draw:1])) oneshot
auto={C(0/0,-2,Loyalty)}:name(-2: Return creature from graveyard) target(creature|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[unearth],newability[haste])) forever )!
auto={C(0/0,-7,Loyalty)}:name(-7: Get emblem powerstrike) emblem transforms((,newability[@movedTo(creature|mybattlefield):name(Damage any target) all(trigger[to]) transforms((,newability[name(Damage any target) damage:power target(player^creature^planeswalker)])) oneshot])) forever dontremove
text=+1: You may discard a card. If you do, draw a card. If a creature card was discarded this way, draw two cards instead. -- 2: Return target creature card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of your next upkeep. -- 7: You get an emblem with "Whenever a creature enters the battlefield under your control, it deals damage equal to its power to any target."
mana={4}{R}{R}
type=Legendary Planeswalker
subtype=Lukka
[/card]
[card]
name=Mu Yanling
auto=counter(0/0,5,loyalty)
auto={C(0/0,2,Loyalty)}:name(+2: Target creature can't be blocked) unblockable target(creature)
@@ -2002,6 +2055,31 @@ type=Legendary Planeswalker
subtype=Oko
[/card]
[card]
name=Personal Decoy
abilities=exiledeath
auto=counter(0/0,lifetotal,loyalty)
auto=lord(creature|opponentBattlefield) cantattack
auto={C(0/0,1,Loyalty)}:name(+1: Gain 1 life) life:1 controller
auto={C(0/0,-4,Loyalty)}:name(-4: Draw a card) draw:1 controller
text=Personal Decoy enters the battlefield with a number of loyalty counters on it equal to your life total. If it would leave the battlefield, exile it instead of putting it anywhere else. You cant be attacked. -- +1: You gain 1 life. -- 4: Draw a card.
mana={5}{W}{U}
type=Planeswalker
subtype=Duck
[/card]
[card]
name=Professor Onyx
auto=counter(0/0,5,Loyalty)
auto=@movedto(*[instant;sorcery]|mystack):name(Gain life) life:2 controller && life:-2 opponent
aicode=activate transforms((,newability[target(*[zpos<=3]|mylibrary) moveto(myhand) and!( all(*[zpos<=3]|mylibrary) moveto(mygraveyard) )!])) ueot
auto={C(0/0,1,Loyalty)}:name(+1: Lose life and look cards) life:-1 controller && name(Look top cards) reveal:3 optionone name(Get a Card) target(<1>*|reveal) moveto(myhand) optiononeend optiontwo name(put in grave) all(*|reveal) moveto(mygraveyard) optiontwoend revealend
auto={C(0/0,-3,Loyalty)}:name(-3: Sacrifice creature) ability$!name(Sacrifice creature) name(Sacrifice creature) sacrifice notatarget(creature[power=power:highest:creature:myBattlefield]|mybattlefield)!$ opponent
auto={C(0/0,-8,Loyalty)}:name(-8: Discard or lose life) name(-8: Discard or lose life) life:-7minusohandcountminusend opponent && life:-7minusohandcountminusend opponent && life:-7minusohandcountminusend opponent && ability$!name(Choose cards) name(Choose cards) target(<7>*|myhand) transforms((,newability[choice name(Discard this card) reject],newability[choice name(Lose 3 life) life:-3 controller])) oneshot!$ opponent
text=Magecraft — Whenever you cast or copy an instant or sorcery spell, each opponent loses 2 life and you gain 2 life. -- +1: You lose 1 life. Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. -- 3: Each opponent sacrifices a creature with the greatest power among creatures that player controls. -- 8: Each opponent may discard a card. If they don't, they lose 3 life. Repeat this process six more times.
mana={4}{B}{B}
type=Legendary Planeswalker
subtype=Liliana
[/card]
[card]
name=Ral, Caller of Storms
auto=counter(0/0,4,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Draw a card) draw:1 controller
@@ -2030,7 +2108,7 @@ auto=counter(0/0,4,loyalty)
aicode=activate transforms((,newability[all(*[zpos<=1]|mylibrary) transforms((,newability[may name(Put on bottom of library) moveto(myreveal) and!( bottomoflibrary )!])) oneshot])) oneshot
auto=@movedTo(*[instant;sorcery]|myStack):ability$!name(Choose one) choice name(Damage opponent) damage:1 target(opponent) _ choice name(Damage Planeswalker) damage:1 target(planeswalker)!$ controller
auto={C(0/0,2,Loyalty)}:name(+2: Scry: 1) scry:1 scrycore delayed dontshow donothing scrycoreend scryend
auto={C(0/0,-2,Loyalty)}:name(-2: Whenever cast instant or sorcery copy spell) emblem transforms((,newability[@movedTo(*[instant;sorcery]|myStack):castcard(copied noevent) target(*[instant;sorcery]|mystack)])) ueot oneshot
auto={C(0/0,-2,Loyalty)}:name(-2: Whenever cast instant or sorcery copy spell) emblem transforms((,newability[@movedto(*[instant;sorcery]|myStack) turnlimited:all(trigger[to]) activate castcard(copied noevent)])) ueot
text=Whenever you cast or copy an instant or sorcery spell, Ral, Storm Conduit deals 1 damage to target opponent or planeswalker. -- +2: Scry 1. -- 2: When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy.
mana={3}{U}{R}
type=Legendary Planeswalker
@@ -2072,6 +2150,20 @@ type=Legendary Planeswalker
subtype=Rowan
[/card]
[card]
name=Rowan, Scholar of Sparks
other={4}{U} name(Will, Scholar of Frost)
otherrestriction=can play planeswalker
autostack=if paid(alternative) then name(Will, Scholar of Frost) name(Will, Scholar of Frost) flip(Will, Scholar of Frost) forcetype(Legendary Planeswalker)
auto=if paid(alternative) then counter(0/0,4,Loyalty) else counter(0/0,2,loyalty)
auto=this(variable{isflipped}<1) lord(instant,sorcery|mycastingzone) altercost(colorless,-1)
auto=this(variable{isflipped}<1) {C(0/0,1,Loyalty)}:name(+1: Deals damage) name(+1: Deals damage) if compare(pdrewcount)~lessthan~3 then damage:1 opponent else damage:3 opponent
auto=this(variable{isflipped}<1) {C(0/0,-4,Loyalty)}:name(-4: Emblem copy spells) name(-4: Emblem copy spells) emblem transforms((,newability[@movedto(*[instant;sorcery]|mystack):all(trigger[to]<1>) transforms((,newability[pay[[{2}]] name(copy spell) activate name(copy spell) castcard(copied noevent)])) forever])) forever dontremove
text=Instant and sorcery spells you cast cost {1} less to cast. -- +1: Rowan, Scholar of Sparks deals 1 damage to each opponent. If you've drawn three or more cards this turn, she deals 3 damage to each opponent instead. -- 4: You get an emblem with "Whenever you cast an instant or sorcery spell, you may pay 2 . If you do, copy that spell. You may choose new targets for the copy."
mana={2}{R}
type=Legendary Planeswalker
subtype=Rowan
[/card]
[card]
name=Saheeli Rai
auto=counter(0/0,3,loyalty)
aicode=activate transforms((,newability[all(*[zpos<=1]|mylibrary) transforms((,newability[may name(Put on bottom of library) moveto(myreveal) and!( bottomoflibrary )!])) oneshot])) oneshot
@@ -2825,6 +2917,19 @@ type=Legendary Planeswalker
subtype=Will
[/card]
[card]
name=Will, Scholar of Frost
auto=counter(0/0,4,loyalty)
auto=this(variable{isflipped}>0) lord(instant,sorcery|mycastingzone) altercost(colorless,-1)
auto=this(variable{isflipped}>0) {C(0/0,1,Loyalty)}:name(+1: Dont't target any creature) name(+1: Dont't target any creature) donothing
auto=this(variable{isflipped}>0) {C(0/0,1,Loyalty)}:name(+1: Target creature becomes 0/2) name(+1: Target creature becomes 0/2) target(creature) transforms((,setpower=0,settoughness=2)) uynt
auto=this(variable{isflipped}>0) {C(0/0,-3,Loyalty)}:name(-3: Draw 2 cards) name(-3: Draw 2 cards) draw:2 controller
auto=this(variable{isflipped}>0) {C(0/0,-7,Loyalty)}:name(-7: Exile 5 permanents) name(-7: Exile 5 permanents) target(<upto:5>*|battlefield) moveto(exile) and!( transforms((,newability[token(Elemental^Creature Elemental^4/4^blue^red)])) oneshot )!
text=Instant and sorcery spells you cast cost {1} less to cast. -- +1: Up to one target creature has base power and toughness 0/2 until your next turn. -- 3: Draw two cards. -- 7: Exile up to five target permanents. For each permanent exiled this way, its controller creates a 4/4 blue and red Elemental creature token.
mana={4}{U}
type=Legendary Planeswalker
subtype=Will
[/card]
[card]
name=Wrenn and Six
auto=counter(0/0,3,loyalty)
auto={C(0/0,1,Loyalty)}:restriction{type(land|mygraveyard)~morethan~0} name(+1: Return target land from graveyard) moveTo(myHand) target(land|myGraveyard)

View File

@@ -2,7 +2,7 @@ grade=unsupported
#The cards in this file are not implemented/incomplete yet.
#Updated Card lists not in primitives (Borderline, Crappy, Unsupported and Missing Cards up to Aether Revolt) as of 3/14/2017
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
#I sorted this programatically - Vitty85 30-11-2020
#I sorted this programatically - Vitty85 25-04-2021
[card]
name="Ach! Hans, Run!"
text=At the beginning of your upkeep, you may say "Ach Hans, run It's the . . ." and name a creature card. If you do, search your library for the named card, put it into play, then shuffle your library. That creature has haste. Remove it from the game at end of turn.

View File

@@ -6219,11 +6219,18 @@ int ActivatedAbility::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
return 1;
if(card->hasType(Subtypes::TYPE_PLANESWALKER))
{
for(unsigned int k = 0;k < card->cardsAbilities.size();++k)
/*for(unsigned int k = 0;k < card->cardsAbilities.size();++k)
{
ActivatedAbility * check = dynamic_cast<ActivatedAbility*>(card->cardsAbilities[k]);
if(check && check->counters)
return 0;
}*/
// Improved the check to avoid the multiple triggers in case of abilities gained from other cards (e.g. Kasmina, Enigma Sage)
for(unsigned int k = 0;k < card->getObserver()->mLayers->actionLayer()->mObjects.size();++k)
{
ActivatedAbility * check = dynamic_cast<ActivatedAbility*>(card->getObserver()->mLayers->actionLayer()->mObjects[k]);
if(check && check->source == card && check->counters)
return 0;
}
if (player != game->currentPlayer)
return 0;

View File

@@ -171,6 +171,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta
s2 = s.substr(found + 1);
while (s2.size())
{
replace(s2.begin(), s2.end(), '^', ','); // To allow the usage of ^ instead of , char (e.g. target multiple zones within transforms keyword)
found = s2.find(",");
string zoneName;
if (found != string::npos)