diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 78414efff..3d460bfdd 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -240,6 +240,7 @@ public: int swapT; bool isSwitchedPT; bool isACopier; + bool bypassTC; void eventattacked(); void eventattackedAlone(); diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 653104756..2c097b8ac 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1330,7 +1330,12 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG tcString = splitTarget[1]; if (!isTarget) + { + tc->targetter->bypassTC = true; tc->targetter = NULL; + } + else + tc->targetter->bypassTC = false; sWithoutTc = splitTarget[0]; sWithoutTc.append(splitTarget[2]); } diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 1744a8d56..b40c368e4 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -57,6 +57,7 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to isCDA = false; isSwitchedPT = false; isACopier = false; + bypassTC = false; } MTGCardInstance * MTGCardInstance::createSnapShot() diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index ca085a98e..2c91e7bc5 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -855,10 +855,10 @@ bool TargetChooser::canTarget(Targetable * target, bool withoutProtections) if (source && targetter && card->isInPlay(observer) && !withoutProtections) { - if (card->has(Constants::SHROUD)) return false; - if (card->protectedAgainst(targetter)) return false; - if (card->CantBeTargetby(targetter)) return false; - if ((targetter->controller() != card->controller()) && card->has(Constants::OPPONENTSHROUD)) return false; + if (card->has(Constants::SHROUD)) return targetter->bypassTC; + if (card->protectedAgainst(targetter)) return targetter->bypassTC; + if (card->CantBeTargetby(targetter)) return targetter->bypassTC; + if ((targetter->controller() != card->controller()) && card->has(Constants::OPPONENTSHROUD)) return targetter->bypassTC; } return true; }