diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index e74942aba..a73932331 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -860,7 +860,6 @@ public: if (!e) return 0; if (!tc->canTarget(e->card)) return 0; if (fromTc && !fromTc->canTarget(e->source)) return 0; - return 1; } diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index e3d72f2a7..3471392c9 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -97,7 +97,7 @@ class MTGCardInstance: public CardPrimitive, public MTGCard, public Damageable { int typeAsTarget(){return TARGET_CARD;} const string getDisplayName() const; MTGCardInstance * target; - MTGCardInstance * imprint; + Targetable * backupTargets[MAX_TARGETS]; //types diff --git a/projects/mtg/src/ActionStack.cpp b/projects/mtg/src/ActionStack.cpp index 0ae784f28..39b3dabd8 100644 --- a/projects/mtg/src/ActionStack.cpp +++ b/projects/mtg/src/ActionStack.cpp @@ -209,6 +209,11 @@ Interruptible(id), tc(tc), cost(_cost), payResult(payResult) mHeight = 40; type = ACTION_SPELL; from = _source->getCurrentZone(); + for(int i = 0;i < MAX_TARGETS;i++) + { + if(tc && tc->targets[i] != NULL) + _source->backupTargets[i] = tc->targets[i]; + } } int Spell::computeX(MTGCardInstance * card) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index a31819c93..2f482bc7e 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -110,7 +110,6 @@ void MTGCardInstance::initMTGCI() { sample = ""; model = NULL; - imprint = NULL; isToken = false; lifeOrig = 0; doDamageTest = 1; diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index ade4bd452..2245df19e 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -451,6 +451,16 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta size_t start = attribute.find("share!"); size_t end = attribute.find("!"); string CDtype = attribute.substr(start + 6,end - start); + if(card->isSpell() && card->backupTargets[0]->typeAsTarget() == TARGET_STACKACTION) + { + //spells always store their targets in :targets[] + //however they are all erased as the spell resolves + //added a array to store these backups incase theyre needed + //again for effects such as these. + Spell * spell; + spell = (Spell*)card->backupTargets[0]; + card->target = spell->source; + } if( CDtype.find("name") != string::npos ) { if(card->target)