diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 826868a63..1b770e0d0 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -2378,7 +2378,7 @@ public: int removed(MTGCardInstance * card) { - if (abilities.find(card) != abilities.end()) + if (abilities.find(card) != abilities.end() && !(forceDestroy == -1 && forcedAlive == 1))//only embelms have forcedestroy = -1 and forcedalive = 1 { game->removeObserver(abilities[card]); abilities.erase(card); @@ -5095,6 +5095,8 @@ public: { if(forceDestroy != -1) return 1; + if(!(source->hasType(Subtypes::TYPE_INSTANT)||source->hasType(Subtypes::TYPE_INSTANT)) && !source->isInPlay(game)) + return 1; return 0; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index ce96f0216..a1e6adc9d 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1318,7 +1318,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG if (!a1) return NULL; - return NEW GenericAbilityMod(observer, 1, card,spell?spell->getNextDamageableTarget():(Damageable *) target, a1);; + return NEW GenericAbilityMod(observer, 1, card->controller()->getObserver()->ExtraRules,card->controller()->getObserver()->ExtraRules, a1); } //choose a color diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index 8d0494084..1a7488d70 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -147,6 +147,7 @@ void Rules::addExtraRules(GameObserver* g) //Trick so that the abilities don't die; g->ExtraRules[i].currentZone = p->game->inPlay; g->ExtraRules[i].lastController = p; + g->ExtraRules[i].owner = p; for (size_t j = 0; j < initState.playerData[i].extraRules.size(); ++j) { AbilityFactory af(g);