diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 73b149c31..a2c24e3e3 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1470,17 +1470,40 @@ int AACopier::resolve() source->copy(_target->clone()); else { - if(!_target->isACopier) - source->copy(_target); - else + source->copy(_target); + } + //abilities + for(unsigned int i = 0;i < source->cardsAbilities.size();i++) + { + MTGAbility * a = dynamic_cast(source->cardsAbilities[i]); + + if(a) game->removeObserver(a); + } + source->cardsAbilities.clear(); + af.getAbilities(¤tAbilities, NULL, source); + for (size_t i = 0; i < currentAbilities.size(); ++i) + { + MTGAbility * a = currentAbilities[i]; + a->source = (MTGCardInstance *) source; + if (a) { - source->copy(_target); - source->power -= _target->pbonus; - source->toughness -= _target->tbonus; - source->life = source->toughness; + if (a->oneShot) + { + a->resolve(); + SAFE_DELETE(a); + } + else + { + a->addToGame(); + MayAbility * dontAdd = dynamic_cast(a); + if(!dontAdd) + { + source->cardsAbilities.push_back(a); + } + } } } - + // source->isACopier = true; source->hasCopiedToken = tokencopied; source->copiedID = _target->copiedID; @@ -3213,6 +3236,12 @@ int AAFlip::resolve() MTGCardInstance * _target = (MTGCardInstance *) target; if (_target) { + if(((_target->isACopier||_target->isToken) && !isflipcard) || _target->has(Constants::CANTTRANSFORM)) + { + game->removeObserver(this); + return 0; + } + while (_target->next) _target = _target->next; diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 56a79293f..dd3c57851 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -402,7 +402,8 @@ void CardGui::Render() mFont->SetColor(ARGB(static_cast(actA),255,255,255));//white default mFont->SetScale(actZ); mFont->SetScale(actZ); - mFont->DrawString(buffer, actX - 10 * actZ, actY + 7 * actZ); + float halfbufferW = (mFont->GetStringWidth(buffer))/2; + mFont->DrawString(buffer, actX - halfbufferW * actZ, actY + 7 * actZ); mFont->SetScale(1); } diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index e26f73644..3d2a8a5e4 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -96,10 +96,16 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to void MTGCardInstance::copy(MTGCardInstance * card) { - //MTGCard * source = card->model; - MTGCard * source = card; + MTGCard * source = NULL; + if(card->isToken || card->hasCopiedToken) + { + source = card; + } + else + source = MTGCollection()->getCardById(card->copiedID); + CardPrimitive * data = source->data; - basicAbilities = card->model->data->basicAbilities; + basicAbilities = data->basicAbilities; for (size_t i = 0; i < data->types.size(); i++) { types.push_back(data->types[i]); @@ -121,17 +127,19 @@ void MTGCardInstance::copy(MTGCardInstance * card) magicText = data->magicText; spellTargetType = data->spellTargetType; alias = data->alias; + copiedID = card->copiedID; + doubleFaced = data->doubleFaced; //Now this is dirty... int backupid = mtgid; int castMethodBackUP = this->castMethod; mtgid = source->getId(); MTGCardInstance * oldStored = this->storedSourceCard; - Spell * spell = NEW Spell(observer, this); + /*Spell * spell = NEW Spell(observer, this); observer = card->observer; AbilityFactory af(observer); af.addAbilities(observer->mLayers->actionLayer()->getMaxId(), spell); - delete spell; + delete spell;*/ if(observer->players[1]->playMode == Player::MODE_TEST_SUITE) mtgid = backupid; // there must be a way to get the token id... else