diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index ad1c6b099..f7f6186eb 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -7015,8 +7015,7 @@ toughness=3 name=Avatar of Fury abilities=flying auto={R}:1/0 -otherrestriction=type(land|opponentbattlefield)~morethan~7 -other={R}{R} +anyzone=this(variable{type:land:opponentbattlefield}>6) changecost(colorless:-6) forcedalive text=If an opponent controls seven or more lands, Avatar of Fury costs {6} less to cast. -- Flying -- {R}: Avatar of Fury gets +1/+0 until end of turn. mana={6}{R}{R} type=Creature @@ -7027,8 +7026,7 @@ toughness=6 [card] name=Avatar of Might abilities=trample -otherrestriction=type(creature|mybattlefield)~lessthan~type(creature|opponentbattlefield)-3 -other={G}{G} +anyzone=while(restriction{outnumbered}) changecost(colorless:-6) forcedalive text=If an opponent controls at least four more creatures than you, Avatar of Might costs {6} less to cast. -- Trample (If this creature would deal enough damage to its blockers to destroy them, you may have it deal the rest of its damage to defending player or planeswalker.) mana={6}{G}{G} type=Creature @@ -7061,8 +7059,7 @@ toughness=2 [card] name=Avatar of Will abilities=flying -otherrestriction=type(*|opponenthand)~equalto~0 -other={U}{U} +anyzone=this(variable{type:*:opponenthand}<1) changecost(colorless:-6) forcedalive text=If an opponent has no cards in hand, Avatar of Will costs {6} less to cast. -- Flying mana={6}{U}{U} type=Creature @@ -7074,8 +7071,7 @@ toughness=6 name=Avatar of Woe abilities=fear auto={T}:bury target(creature) -otherrestriction=type(creature|graveyard)~morethan~9 -other={B}{B} +anyzone=this(variable{type:creature:graveyard}>9) changecost(colorless:-6) forcedalive text=If there are ten or more creature cards total in all graveyards, Avatar of Woe costs {6} less to cast. -- Fear (This creature can't be blocked except by artifact creatures and/or black creatures.) -- {T}: Destroy target creature. It can't be regenerated. mana={6}{B}{B} type=Creature @@ -19956,16 +19952,11 @@ toughness=3 [/card] [card] name=Cloud Key -auto=choice name(Artifact) counter(0/0,1,CloudKeyA) all(this) -auto=choice name(Creature) counter(0/0,1,CloudKeyC) all(this) -auto=choice name(Enchantment) counter(0/0,1,CloudKeyE) all(this) -auto=choice name(Instant) counter(0/0,1,CloudKeyI) all(this) -auto=choice name(Sorcery) counter(0/0,1,CloudKeyS) all(this) -auto=this(counter{0/0.1.CloudKeyA}) lord(Artifact|mycastingzone) altercost(colorless,-1) -auto=this(counter{0/0.1.CloudKeyC}) lord(Creature|mycastingzone) altercost(colorless,-1) -auto=this(counter{0/0.1.CloudKeyE}) lord(Enchantment|mycastingzone) altercost(colorless,-1) -auto=this(counter{0/0.1.CloudKeyI}) lord(Instant|mycastingzone) altercost(colorless,-1) -auto=this(counter{0/0.1.CloudKeyS}) lord(Sorcery|mycastingzone) altercost(colorless,-1) +auto=choice name(Artifact) transforms((,newability[lord(Artifact|mycastingzone) changecost(colorless:-1)])) forever +auto=choice name(Creature) transforms((,newability[lord(Creature|mycastingzone) changecost(colorless:-1)])) forever +auto=choice name(Enchantment) transforms((,newability[lord(Enchantment|mycastingzone) changecost(colorless:-1)])) forever +auto=choice name(Instant) transforms((,newability[lord(Instant|mycastingzone) changecost(colorless:-1)])) forever +auto=choice name(Sorcery) transforms((,newability[lord(Sorcery|mycastingzone) changecost(colorless:-1)])) forever text=As Cloud Key enters the battlefield, choose artifact, creature, enchantment, instant, or sorcery. -- Spells you cast of the chosen type cost {1} less to cast. mana={3} type=Artifact @@ -31585,7 +31576,7 @@ toughness=3 [card] name=Dusk Feaster abilities=flying -autohand=while(restriction{delirium}) altercost(colorless,-2) +anyzone=while(restriction{delirium}) changecost(colorless:-2) forcedalive text=Delirium — Dusk Feaster costs {2} less to cast if there are four or more card types among cards in your graveyard. -- Flying mana={5}{B}{B} type=Creature @@ -96278,7 +96269,7 @@ type=Instant [/card] [card] name=Scour the Laboratory -autohand=while(restriction{delirium}) altercost(colorless,-2) +anyzone=while(restriction{delirium}) changecost(colorless:-2) forcedalive auto=draw:3 text=Delirium — Scour the Laboratory costs {2} less to cast if there are four or more card types among cards in your graveyard. -- Draw three cards. mana={4}{U}{U} @@ -98104,29 +98095,16 @@ toughness=2 [/card] [card] name=Semblance Anvil -auto=choice name(Artifact) moveTo(myexile) notatarget(artifact|myhand) && counter(0/0,1,Artifact) all(this) -auto=choice name(Artifact Creature) moveTo(myexile) notatarget(creature[artifact]|myhand) && counter(0/0,1,ArtifactCreature) all(this) -auto=choice name(Creature) moveTo(myexile) notatarget(creature|myhand) && counter(0/0,1,Creature) all(this) -auto=choice name(Enchantment) moveTo(myexile) notatarget(enchantment|myhand) && counter(0/0,1,Enchantment) all(this) -auto=choice name(Instant) moveTo(myexile) notatarget(instant|myhand) && counter(0/0,1,Instant) all(this) -auto=choice name(Sorcery) moveTo(myexile) notatarget(sorcery|myhand) && counter(0/0,1,Sorcery) all(this) -auto=choice name(Tribal Instant) moveTo(myexile) notatarget(instant[tribal]|myhand) && counter(0/0,1,TribalInstant) all(this) -auto=choice name(Tribal Sorcery) moveTo(myexile) notatarget(sorcery[tribal]|myhand) && counter(0/0,1,TribalSorcery) all(this) +auto=choice name(Artifact) moveTo(myexile) notatarget(artifact|myhand) and!( all(this) transforms((,newability[lord(artifact|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Artifact Creature) moveTo(myexile) notatarget(creature[artifact]|myhand) and!( all(this) transforms((,newability[lord(*[creature;artifact]|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Creature) moveTo(myexile) notatarget(creature|myhand) and!( all(this) transforms((,newability[lord(creature|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Enchantment) moveTo(myexile) notatarget(enchantment|myhand) and!( all(this) transforms((,newability[lord(enchantment|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Instant) moveTo(myexile) notatarget(instant|myhand) and!( all(this) transforms((,newability[lord(instant|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Sorcery) moveTo(myexile) notatarget(sorcery|myhand) and!( all(this) transforms((,newability[lord(sorcery|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Tribal Instant) moveTo(myexile) notatarget(instant[tribal]|myhand) and!( all(this) transforms((,newability[lord(*[instant;tribal]|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Tribal Sorcery) moveTo(myexile) notatarget(sorcery[tribal]|myhand) and!( all(this) transforms((,newability[lord(*[sorcery;tribal]|mycastingzone) changecost(colorless:-2)])) forever )! +auto=choice name(Planeswalker) moveTo(myexile) notatarget(planeswalker|myhand) and!( all(this) transforms((,newability[lord(planeswalker|mycastingzone) changecost(colorless:-2)])) forever )! auto=choice name(cancel) donothing -auto=this(counter{0/0.1.Artifact}) lord(artifact|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.ArtifactCreature}) lord(artifact[-creature]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.ArtifactCreature}) lord(creature[-artifact]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.ArtifactCreature}) lord(creature[artifact]|mycastingzone) altercost(colorless,-2 ) -auto=this(counter{0/0.1.Creature}) lord(creature|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.Enchantment}) lord(enchantment|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.Instant}) lord(instant|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.Sorcery}) lord(sorcery|mycastingzone) altercost( colorless, -2 ) -auto=this(counter{0/0.1.TribalInstant}) lord(tribal[-instant]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.TribalInstant}) lord(instant[-tribal]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.TribalInstant}) lord(instant[tribal]|mycastingzone) altercost(colorless,-2 ) -auto=this(counter{0/0.1.TribalSorcery}) lord(tribal[-sorcery]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.TribalSorcery}) lord(sorcery[-tribal]|mycastingzone) altercost(colorless,-2) -auto=this(counter{0/0.1.TribalSorcery}) lord(sorcery[tribal]|mycastingzone) altercost(colorless,-2) text=Imprint - When Semblance Anvil enters the battlefield, you may exile a nonland card from your hand. -- Spells you cast that share a card type with the exiled card cost {2} less to cast. mana={3} type=Artifact @@ -99907,28 +99885,17 @@ toughness=2 [/card] [card] name=Shimmer -auto=choice name(plains gets phasing) counter(0/0,1,Plains) -auto=choice name(island gets phasing) counter(0/0,1,Island) -auto=choice name(swamp gets phasing) counter(0/0,1,Swamp) -auto=choice name(mountain gets phasing) counter(0/0,1,Mountain) -auto=choice name(forest gets phasing) counter(0/0,1,Forest) -auto=choice name(lair gets phasing) counter(0/0,1,Lair) -auto=choice name(locus gets phasing) counter(0/0,1,Locus) -auto=choice name(desert gets phasing) counter(0/0,1,Desert) -auto=choice name(urza's mine gets phasing) counter(0/0,1,Urza's Mine) -auto=choice name(urza's power-plant gets phasing) counter(0/0,1,Urza's Power-Plant) -auto=choice name(urza's tower gets phasing) counter(0/0,1,Urza's Tower) -auto=this(counter{0/0.1.Plains}) lord(plains) phasing -auto=this(counter{0/0.1.Island}) lord(island) phasing -auto=this(counter{0/0.1.Swamp}) lord(swamp) phasing -auto=this(counter{0/0.1.Mountain}) lord(mountain) phasing -auto=this(counter{0/0.1.Forest}) lord(forest) phasing -auto=this(counter{0/0.1.Lair}) lord(lair) phasing -auto=this(counter{0/0.1.Locus}) lord(locus) phasing -auto=this(counter{0/0.1.Desert}) lord(desert) phasing -auto=this(counter{0/0.1.Urza's Mine}) lord(urza's mine) phasing -auto=this(counter{0/0.1.Urza's Power-Plant}) lord(urza's power-plant) phasing -auto=this(counter{0/0.1.Urza's Tower}) lord(urza's tower) phasing +auto=choice name(plains gets phasing) transforms((,newability[lord(plains) phasing])) forever +auto=choice name(island gets phasing) transforms((,newability[lord(island) phasing])) forever +auto=choice name(swamp gets phasing) transforms((,newability[lord(swamp) phasing])) forever +auto=choice name(mountain gets phasing) transforms((,newability[lord(mountain) phasing])) forever +auto=choice name(forest gets phasing) transforms((,newability[lord(forest) phasing])) forever +auto=choice name(lair gets phasing) transforms((,newability[lord(lair) phasing])) forever +auto=choice name(locus gets phasing) transforms((,newability[lord(locus) phasing])) forever +auto=choice name(desert gets phasing) transforms((,newability[lord(desert) phasing])) forever +auto=choice name(urza's mine gets phasing) transforms((,newability[lord(urza's mine) phasing])) forever +auto=choice name(urza's power-plant gets phasing) transforms((,newability[lord(urza's power-plant) phasing])) forever +auto=choice name(urza's tower gets phasing) transforms((,newability[lord(urza's tower) phasing])) forever text=As Shimmer enters the battlefield, choose a land type. -- Each land of the chosen type has phasing. (It phases in or out before its controller untaps during each of his or her untap steps. While it's phased out, it's treated as though it doesn't exist.) mana={2}{U}{U} type=Enchantment diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index cb39af59d..e29295ba3 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -541,6 +541,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe return 0; } + check = restriction[i].find("outnumbered");//opponent controls atleast 4 or more creatures than you + if(check != string::npos) + { + bool isoutnumbered = (card->controller()->opponent()->inPlay()->countByType("creature") - card->controller()->inPlay()->countByType("creature"))>3; + if(!isoutnumbered) + return 0; + } + check = restriction[i].find("hasdefender"); if(check != string::npos) {