Fixed Commander Format selection of identity color, added/fixed primitives related to commanders abilities.

This commit is contained in:
valfieri
2020-12-08 00:32:33 +01:00
parent d6a1a8eda8
commit d18232df10
3 changed files with 69 additions and 44 deletions

View File

@@ -1783,7 +1783,7 @@ auto=if type(*[white]|myzones)~morethan~0 then transforms((,newability[{T}:add{W
auto=if type(*[green]|myzones)~morethan~0 then transforms((,newability[{T}:add{G}])) forever
auto=if type(*[blue]|myzones)~morethan~0 then transforms((,newability[{T}:add{U}])) forever
auto=if type(*[black]|myzones)~morethan~0 then transforms((,newability[{T}:add{B}])) forever
auto=if type(artifact|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
text={T}: Add one mana of any color in your commander's color identity.
mana={2}
type=Artifact
@@ -8235,7 +8235,7 @@ auto=if type(*[white]|myzones)~morethan~0 then transforms((,newability[{T}:add{W
auto=if type(*[green]|myzones)~morethan~0 then transforms((,newability[{T}:add{G}])) forever
auto=if type(*[blue]|myzones)~morethan~0 then transforms((,newability[{T}:add{U}])) forever
auto=if type(*[black]|myzones)~morethan~0 then transforms((,newability[{T}:add{B}])) forever
auto=if type(artifact|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
text={T}: Add to your mana pool one mana of any color in your commander's color identity.
type=Land
[/card]
@@ -8273,7 +8273,7 @@ auto=if type(*[white]|myzones)~lessthan~1 then teach(creature) protection from w
auto=if type(*[green]|myzones)~lessthan~1 then teach(creature) protection from green
auto=if type(*[blue]|myzones)~lessthan~1 then teach(creature) protection from blue
auto=if type(*[black]|myzones)~lessthan~1 then teach(creature) protection from black
auto=if type(artifact|myzones)~lessthan~1 then teach(creature) protection from(artifact)
auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~lessthan~1 then teach(creature) protection from(artifact)
text=Equipped creature gets +3/+3 and has protection from each color that's not in your commander's color identity. -- Equip commander {3} -- Equip {5}
mana={1}
type=Artifact
@@ -8286,7 +8286,7 @@ auto=if type(*[white]|myzones)~morethan~0 then transforms((,newability[{T}:add{W
auto=if type(*[green]|myzones)~morethan~0 then transforms((,newability[{T}:add{G}])) forever
auto=if type(*[blue]|myzones)~morethan~0 then transforms((,newability[{T}:add{U}])) forever
auto=if type(*[black]|myzones)~morethan~0 then transforms((,newability[{T}:add{B}])) forever
auto=if type(artifact|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
auto={S}:draw:1 controller
text={T}: Add to your mana pool one mana of any color in your commander's color identity. -- Sacrifice Commander's Sphere: Draw a card.
mana={3}
@@ -29242,6 +29242,14 @@ mana={2}{U}
type=Instant
[/card]
[card]
name=Myth Unbound
auto=thisforeach(variable{pnumofcommandcast}) lord(*[iscommander]|mycastingzone) altercost(colorless, -1)
auto=@movedto(*[iscommander]|mycommandzone):draw:1 controller
text=Your commander costs {1} less to cast for each time it's been cast from the command zone this game. -- Whenever your commander is put into the command zone from anywhere, draw a card.
mana={2}{G}
type=Enchantment
[/card]
[card]
name=Mythos of Brokkos
abilities=hiddenface
aicode=activate moveto(myGraveyard) target(*|mylibrary)
@@ -31416,6 +31424,19 @@ mana={2}{W}
type=Enchantment
[/card]
[card]
name=Opal Palace
auto={T}:add{C}
auto=if type(*[red]|myzones)~morethan~0 then transforms((,newability[{T}:add{R}])) forever
auto=if type(*[white]|myzones)~morethan~0 then transforms((,newability[{T}:add{W}])) forever
auto=if type(*[green]|myzones)~morethan~0 then transforms((,newability[{T}:add{G}])) forever
auto=if type(*[blue]|myzones)~morethan~0 then transforms((,newability[{T}:add{U}])) forever
auto=if type(*[black]|myzones)~morethan~0 then transforms((,newability[{T}:add{B}])) forever
auto=if type(*[-black;-red;-white;-blue;-green]|myzones)~morethan~0 then transforms((,newability[{T}:add{C}])) forever
auto=@movedto(*[iscommander]|mybattlefield) from(mycommandzone):all(trigger[to]) counter(1/1,pnumofcommandcast) limit:1
text={T}: Add {C} to your mana pool. -- {1}, {T}: Add to your mana pool one mana of any color in your commander's color identity. If you spend this mana to cast your commander, it enters the battlefield with a number of additional +1/+1 counters on it equal to the number of times it's been cast from the command zone this game.
type=Land
[/card]
[card]
name=Opal Titan
auto=@movedTo(creature[blue]|opponentstack):transforms((removetypes)) forever && transforms((Giant Creature,setpower=4,settoughness=4,newability[protection from blue)) forever
auto=@movedTo(creature[white]|opponentstack):transforms((removetypes)) forever && transforms((Giant Creature,setpower=4,settoughness=4,newability[protection from white)) forever
@@ -41044,6 +41065,14 @@ power=3
toughness=1
[/card]
[card]
name=Skull Storm
auto=if type(creature|opponentbattlefield)~lessthan~compare(pnumofcommandcastplus1plusend) then life:-halfupopponentlifetotal opponent
auto=thisforeach(variable{pnumofcommandcastplus1plusend}) ability$!name(sacrifice creature) notatarget(creature|mybattlefield) sacrifice!$ opponent
text=When you cast this spell, copy it for each time you've cast your commander from the command zone this game. -- Each opponent sacrifices a creature. Each opponent who can't loses half their life, rounded up.
mana={7}{B}{B}
type=Sorcery
[/card]
[card]
name=Skullcrack
#MISSING:Damage can't be prevented
auto=transforms((,newability[nolifegain],newability[nolifegainopponent])) ueot
@@ -52596,6 +52625,18 @@ power=0
toughness=0
[/card]
[card]
name=Yuriko, the Tiger's Shadow
autohand={U}{B}{N}:ninjutsu
auto=@combatdamagefoeof(player) from(ninja|myBattlefield):moveto(myhand) and!( transforms((,newability[damage:manacost opponent])) ueot )! all(*[zpos=1]|mylibrary)
auto=@combatdamageof(player) from(ninja|myBattlefield):moveto(myhand) and!( transforms((,newability[damage:manacost controller])) ueot )! all(*[zpos=1]|mylibrary)
text=Commander ninjutsu {U}{B} ({U}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand or the command zone tapped and attacking.) -- Whenever a Ninja you control deals combat damage to a player, reveal the top card of your library and put that card into your hand. Each opponent loses life equal to that card's converted mana cost.
mana={1}{U}{B}
type=Legendary Creature
subtype=Human Ninja
power=1
toughness=3
[/card]
[card]
name=Yurlok of Scorch Thrash
abilities=vigilance
auto={1}{T}:add{B}{R}{G} && add{B}{R}{G} opponent

View File

@@ -9086,12 +9086,6 @@ type=Enchantment
subtype=Aura
[/card]
[card]
name=Myth Unbound
text=Your commander costs {1} less to cast for each time it's been cast from the command zone this game. -- Whenever your commander is put into the command zone from anywhere, draw a card.
mana={2}{G}
type=Enchantment
[/card]
[card]
name=Mythos of Snapdax
text=Each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. If {B}{R} was spent to cast this spell, you choose the permanents for each player instead.
mana={2}{W}{W}
@@ -9649,11 +9643,6 @@ power=3
toughness=1
[/card]
[card]
name=Opal Palace
text={T}: Add {C} to your mana pool. -- {1}, {T}: Add to your mana pool one mana of any color in your commander's color identity. If you spend this mana to cast your commander, it enters the battlefield with a number of additional +1/+1 counters on it equal to the number of times it's been cast from the command zone this game.
type=Land
[/card]
[card]
name=Opal-Eye, Konda's Yojimbo
abilities=defender
text=Defender (This creature can't attack.) -- Bushido 1 (When this blocks or becomes blocked, it gets +1/+1 until end of turn.) -- {T}: The next time a source of your choice would deal damage this turn, that damage is dealt to Opal-Eye, Konda's Yojimbo instead. -- {1}{W}: Prevent the next 1 damage that would be dealt to Opal-Eye this turn.
@@ -9963,11 +9952,6 @@ power=3
toughness=3
[/card]
[card]
name=Path of Ancestry
text=Path of Ancestry enters the battlefield tapped. -- {T}: Add one mana of any color in your commander's color identity. When that mana is spent to cast a creature spell that shares a creature type with your commander, scry 1.
type=Land
[/card]
[card]
name=Patriarch's Bidding
text=Each player chooses a creature type. Each player returns all creature cards of a type chosen this way from his or her graveyard to the battlefield.
mana={3}{B}{B}
@@ -12272,12 +12256,6 @@ power=4
toughness=1
[/card]
[card]
name=Skull Storm
text=When you cast this spell, copy it for each time you've cast your commander from the command zone this game. -- Each opponent sacrifices a creature. Each opponent who can't loses half their life, rounded up.
mana={7}{B}{B}
type=Sorcery
[/card]
[card]
name=Skullbriar, the Walking Grave
text=Haste -- Whenever Skullbriar, the Walking Grave deals combat damage to a player, put a +1/+1 counter on it. -- Counters remain on Skullbriar as it moves to any zone other than a player's hand or library.
mana={B}{G}
@@ -15487,15 +15465,6 @@ power=1
toughness=1
[/card]
[card]
name=Yuriko, the Tiger's Shadow
text=Commander ninjutsu {U}{B} ({U}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand or the command zone tapped and attacking.) -- Whenever a Ninja you control deals combat damage to a player, reveal the top card of your library and put that card into your hand. Each opponent loses life equal to that card's converted mana cost.
mana={1}{U}{B}
type=Legendary Creature
subtype=Human Ninja
power=1
toughness=3
[/card]
[card]
name=Zada, Hedron Grinder
text=Whenever you cast an instant or sorcery spell that targets only Zada, Hedron Grinder, copy that spell for each other creature you control that the spell could target. Each copy targets a different one of those creatures.
mana={3}{R}

View File

@@ -81,23 +81,38 @@ void MTGPlayerCards::initDeck(MTGDeck * deck)
if(newCard->hasType("Land") && newCard->hasType("Basic")){ //There are no limitations for basic lands cards.
library->addCard(newCard);
} else{
bool colorFound = false; // All the cards have to share at least one color with commander identity color.
bool colorFound = false; // All the cards have to share at least one color with commander identity color (any symbol in manacost or magic text).
bool colorless = false; // Colorless card can be always added to deck.
for(unsigned int i = 0; i < commandzone->cards.size() && !colorFound; i++){
if((newCard->hasColor(Constants::MTG_COLOR_WHITE) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_WHITE)) ||
(newCard->hasColor(Constants::MTG_COLOR_BLACK) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_BLACK)) ||
(newCard->hasColor(Constants::MTG_COLOR_RED) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_RED)) ||
(newCard->hasColor(Constants::MTG_COLOR_BLUE) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_BLUE)) ||
(newCard->hasColor(Constants::MTG_COLOR_GREEN) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_GREEN))){
colorFound = true;
} else if((newCard->hasColor(Constants::MTG_COLOR_WHITE) && commandzone->cards[i]->magicText.find("{W}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_BLACK) && commandzone->cards[i]->magicText.find("{B}") != std::string::npos)||
(newCard->hasColor(Constants::MTG_COLOR_RED) && commandzone->cards[i]->magicText.find("{R}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_BLUE) && commandzone->cards[i]->magicText.find("{U}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_GREEN) && commandzone->cards[i]->magicText.find("{G}") != std::string::npos)){
(newCard->hasColor(Constants::MTG_COLOR_GREEN) && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_GREEN)) ||
(newCard->hasColor(Constants::MTG_COLOR_WHITE) && commandzone->cards[i]->magicText.find("{w}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_BLACK) && commandzone->cards[i]->magicText.find("{b}") != std::string::npos)||
(newCard->hasColor(Constants::MTG_COLOR_RED) && commandzone->cards[i]->magicText.find("{r}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_BLUE) && commandzone->cards[i]->magicText.find("{u}") != std::string::npos) ||
(newCard->hasColor(Constants::MTG_COLOR_GREEN) && commandzone->cards[i]->magicText.find("{g}") != std::string::npos) ||
(newCard->magicText.find("{w}") != std::string::npos && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_WHITE)) ||
(newCard->magicText.find("{b}") != std::string::npos && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_BLACK)) ||
(newCard->magicText.find("{r}") != std::string::npos && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_RED)) ||
(newCard->magicText.find("{u}") != std::string::npos && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_BLUE)) ||
(newCard->magicText.find("{g}") != std::string::npos && commandzone->cards[i]->hasColor(Constants::MTG_COLOR_GREEN)) ||
(newCard->magicText.find("{w}") != std::string::npos && commandzone->cards[i]->magicText.find("{w}") != std::string::npos) ||
(newCard->magicText.find("{b}") != std::string::npos && commandzone->cards[i]->magicText.find("{b}") != std::string::npos)||
(newCard->magicText.find("{r}") != std::string::npos && commandzone->cards[i]->magicText.find("{r}") != std::string::npos) ||
(newCard->magicText.find("{u}") != std::string::npos && commandzone->cards[i]->magicText.find("{u}") != std::string::npos) ||
(newCard->magicText.find("{g}") != std::string::npos && commandzone->cards[i]->magicText.find("{g}") != std::string::npos)){
colorFound = true;
}
}
if(colorFound || newCard->hasColor(Constants::MTG_COLOR_ARTIFACT) || newCard->colors == Constants::MTG_UNCOLORED || newCard->hasColor(Constants::MTG_COLOR_LAND)){
if(!colorFound)
colorless = (newCard->magicText.find("{g}") == std::string::npos && newCard->magicText.find("{w}") == std::string::npos && newCard->magicText.find("{b}") == std::string::npos &&
newCard->magicText.find("{r}") == std::string::npos && newCard->magicText.find("{u}") == std::string::npos && !newCard->hasColor(Constants::MTG_COLOR_BLUE) &&
!newCard->hasColor(Constants::MTG_COLOR_RED) && !newCard->hasColor(Constants::MTG_COLOR_WHITE) && !newCard->hasColor(Constants::MTG_COLOR_GREEN) &&
!newCard->hasColor(Constants::MTG_COLOR_BLACK));
if(colorFound || colorless){
bool onlyInstance = true; // In commander format only single cards are allowed if they are not basic lands.
for(unsigned int k = 0; k < library->cards.size() && onlyInstance; k++){
if(library->cards[k]->name == newCard->name)