diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index c2c2b4154..ad1b6fd9d 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -37416,7 +37416,7 @@ subtype=Aura [card] name=Fury Charm auto=may destroy target(artifact) -auto=may 1/1 && trample target(creature) +auto=may name(1/1 & trample) target(creature) transforms((,newability[1/1],newability[trample])) ueot auto=may counter(0/0,-2,Time) target(*) text=Choose one - Destroy target artifact; or target creature gets +1/+1 and gains trample until end of turn; or remove two time counters from target permanent or suspended card. mana={1}{R} @@ -79332,6 +79332,7 @@ auto=this(variable{plandu}>0) {t}:add{u} auto=this(variable{plandr}>0) {t}:add{r} auto=this(variable{plandb}>0) {t}:add{b} auto=this(variable{plandw}>0) {t}:add{w} +auto=this(variable{plandc}>0) {t}:add{1} text={T}: Add to your mana pool one mana of any type that a land you control could produce. type=Land [/card] @@ -86780,7 +86781,7 @@ type=Artifact [/card] [card] name=Selesnya Charm -auto=choice target(creature) 2/2 && trample ueot +auto=choice name(2/2 & trample) target(creature) transforms((,newability[2/2],newability[trample])) ueot auto=choice moveTo(exile) target(creature[power>=5]) auto=choice token(Knight,Creature Knight,2/2,white,vigilance) text=Choose one — Target creature gets +2/+2 and gains trample until end of turn; or exile target creature with power 5 or greater; or put a 2/2 white Knight creature token with vigilance onto the battlefield. @@ -110430,7 +110431,7 @@ toughness=1 [card] name=Vitality Charm auto=choice token(Insect,creature insect, 1/1,green) -auto=aslongas(creature|battlefield) choice 1/1 && trample target(creature) +auto=aslongas(creature|battlefield) choice name(1/1 & trample) target(creature) transforms((,newability[1/1],newability[trample])) ueot auto=aslongas(beast|battlefield) choice regenerate target(beast) text=Choose one - Put a 1/1 green Insect creature token onto the battlefield; or target creature gets +1/+1 and gains trample until end of turn; or regenerate target Beast. mana={G} diff --git a/projects/mtg/bin/Res/test/Replenish.txt b/projects/mtg/bin/Res/test/Replenish.txt new file mode 100644 index 000000000..9d429243c --- /dev/null +++ b/projects/mtg/bin/Res/test/Replenish.txt @@ -0,0 +1,37 @@ +#Put in play Fists of Ironwood via Replenish +[INIT] +FIRSTMAIN +[PLAYER1] +life:20 +hand:Replenish, 4683, Replenish +graveyard:83672, Mass Hysteria +inplay:Swamp, Forest, Island, Mountain, Plains +manapool:{3}{W} +[PLAYER2] +life:20 +[DO] +Replenish +#Fists of Ironwood remains on graveyard since there are no valid targets +Swamp +4683 +Forest +Island +Plains +Mountain +Replenish +#Fists of Ironwood attach on Zombie Token created by Sarcomancy, Then produces 2 Saproling Tokens +-4683 +next +next +-83672 +-4683 +eot +[ASSERT] +UNTAP +[PLAYER1] +graveyard:Replenish, Replenish +inplay:Sarcomancy, Mass Hysteria, Swamp, Forest, Island, Mountain, Plains, -4683, -83672, -83672, 83672 +life:20 +[PLAYER2] +life:17 +[END] \ No newline at end of file diff --git a/projects/mtg/bin/Res/test/Show_and_Tell.txt b/projects/mtg/bin/Res/test/Show_and_Tell.txt new file mode 100644 index 000000000..7a0094c79 --- /dev/null +++ b/projects/mtg/bin/Res/test/Show_and_Tell.txt @@ -0,0 +1,23 @@ +#Put in play Fists of Ironwood via Show and Tell +[INIT] +FIRSTMAIN +[PLAYER1] +life:20 +hand:Show and Tell, Fists of Ironwood +manapool:{2}{U} +[PLAYER2] +life:20 +[DO] +Show and Tell +choice 0 +Fists of Ironwood +eot +[ASSERT] +UNTAP +[PLAYER1] +graveyard:Show and Tell +hand:Fists of Ironwood +life:20 +[PLAYER2] +life:20 +[END] diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 4d565dae5..850a0603e 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -577,6 +577,7 @@ regal_force.txt reinforcements_1.txt Rending_Vines.txt Rending_Vines2.txt +Replenish.txt resounding_roar.txt resurrection.txt resuscitate_i210.txt @@ -623,6 +624,7 @@ shimmer_myr_FORCEDALIVE.txt shivan_hellkite.txt shock.txt shock2.txt +Show_and_Tell.txt siege_gang_commander.txt simic_initiate.txt slate_of_ancestry.txt diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 79f3dc0ba..f8c9646b6 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -584,6 +584,11 @@ private: { intValue = countManaProducedby(Constants::MTG_COLOR_WHITE, target, target->controller()->opponent()); } + else if (s == "olandc") + { + intValue = countManaProducedby(Constants::MTG_COLOR_ARTIFACT, target, target->controller()->opponent()) + + countManaProducedby(Constants::MTG_COLOR_WASTE, target, target->controller()->opponent()); + } else if (s == "plandg") { intValue = countManaProducedby(Constants::MTG_COLOR_GREEN, target, target->controller()); @@ -604,6 +609,11 @@ private: { intValue = countManaProducedby(Constants::MTG_COLOR_WHITE, target, target->controller()); } + else if (s == "plandc") + { + intValue = countManaProducedby(Constants::MTG_COLOR_ARTIFACT, target, target->controller()) + + countManaProducedby(Constants::MTG_COLOR_WASTE, target, target->controller()); + } else if (s == "cantargetmycre")// can target my creature { intValue = countCanTargetby("creature", card, card->controller()); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 21d0ccba5..2aaaf1987 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -3010,7 +3010,7 @@ int AAMover::resolve() //inplay is a special zone ! for (int i = 0; i < 2; i++) { - if (destZone == game->players[i]->game->inPlay && fromZone != game->players[i]->game->inPlay && fromZone + if (!_target->hasSubtype(Subtypes::TYPE_AURA) && destZone == game->players[i]->game->inPlay && fromZone != game->players[i]->game->inPlay && fromZone != game->players[i]->opponent()->game->inPlay) { MTGCardInstance * copy = game->players[i]->game->putInZone(_target, fromZone, game->players[i]->game->temp); @@ -3038,21 +3038,45 @@ int AAMover::resolve() return 1; } } - p->game->putInZone(_target, fromZone, destZone); - while(_target->next) - _target = _target->next; - if(andAbility) - { - MTGAbility * andAbilityClone = andAbility->clone(); - andAbilityClone->target = _target; - if(andAbility->oneShot) - { - andAbilityClone->resolve(); - SAFE_DELETE(andAbilityClone); + if(_target->hasSubtype(Subtypes::TYPE_AURA) && (destZone == game->players[0]->game->inPlay || destZone == game->players[1]->game->inPlay)) + {//put into play aura if there is no valid targets then it will be in its current zone + MTGAbility *a = NEW AACastCard(game, game->mLayers->actionLayer()->getMaxId(), _target, _target,false,false,false,"","Put in play",false,true); + a->oneShot = false; + a->canBeInterrupted = false; + a->addToGame(); + if(andAbility && _target->next) + {//if successful target->next should be valid + MTGAbility * andAbilityClone = andAbility->clone(); + andAbilityClone->target = _target->next; + if(andAbility->oneShot) + { + andAbilityClone->resolve(); + SAFE_DELETE(andAbilityClone); + } + else + { + andAbilityClone->addToGame(); + } } - else + } + else + { + p->game->putInZone(_target, fromZone, destZone); + while(_target->next) + _target = _target->next; + if(andAbility) { - andAbilityClone->addToGame(); + MTGAbility * andAbilityClone = andAbility->clone(); + andAbilityClone->target = _target; + if(andAbility->oneShot) + { + andAbilityClone->resolve(); + SAFE_DELETE(andAbilityClone); + } + else + { + andAbilityClone->addToGame(); + } } } return 1;