diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 99235a632..cdfab77e5 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -469,6 +469,7 @@ sleeper_agent.txt slith_bloodletter.txt sneak_attack.txt soulblast.txt +souls_attendant_i489.txt spark_elemental.txt sphinx_summoner.txt spirit_link.txt diff --git a/projects/mtg/bin/Res/test/bugs/souls_attendant_i489.txt b/projects/mtg/bin/Res/test/souls_attendant_i489.txt similarity index 100% rename from projects/mtg/bin/Res/test/bugs/souls_attendant_i489.txt rename to projects/mtg/bin/Res/test/souls_attendant_i489.txt diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index a78f3d8a3..9d9e8da2d 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -137,9 +137,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int found = end + 1; } toTcCard->setAllZones(); + toTcCard->targetter = NULL; //avoid protection from starget = starget.substr(found, end - found).insert(0, "*|"); toTc = tcf.createTargetChooser(starget, card); - toTc->targetter = NULL; + toTc->targetter = NULL; //avoid protection from TargetChooser *fromTc = NULL; TargetChooser * fromTcCard = NULL; @@ -158,10 +159,11 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string magicText, int found = end + 1; } fromTcCard->setAllZones(); + fromTcCard->targetter=NULL; //avoid protection from end = s.find(")", found); starget = s.substr(found, end - found).insert(0, "*|"); fromTc = tcf.createTargetChooser(starget, card); - fromTc->targetter = NULL; + fromTc->targetter = NULL; //avoid protection from } return NEW TrCardAddedToZone(id, card, (TargetZoneChooser *) toTc, toTcCard, (TargetZoneChooser *) fromTc, fromTcCard); } diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 3a848f397..a19977d57 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -540,9 +540,12 @@ bool TargetChooser::canTarget(Targetable * target) tempcard = tempcard->previous; } } - if (source && targetter && card->isInPlay() && (card->has(Constants::SHROUD) || card->protectedAgainst(targetter))) return false; - if (source && targetter && card->isInPlay() && (targetter->controller() != card->controller()) && (card->has( - Constants::OPPONENTSHROUD) || card->protectedAgainst(targetter))) return false; + if (source && targetter && card->isInPlay()) + { + if (card->has(Constants::SHROUD)) return false; + if (card->protectedAgainst(targetter)) return false; + if ((targetter->controller() != card->controller()) && card->has(Constants::OPPONENTSHROUD)) return false; + } return true; } else if (target->typeAsTarget() == TARGET_STACKACTION) return true;