From 60d7675a368e67b712dde6524f4bc0b47ffc713f Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 15 Feb 2017 10:27:56 +0800 Subject: [PATCH] necroed hide cards using necroed also fix castcard target if its a land. --- projects/mtg/include/AllAbilities.h | 1 + projects/mtg/include/MTGDefinitions.h | 3 ++- projects/mtg/src/AllAbilities.cpp | 36 ++++++++++++++++++-------- projects/mtg/src/CardGui.cpp | 37 ++++++++++++++++++++++++--- projects/mtg/src/MTGAbility.cpp | 1 + projects/mtg/src/MTGDefinitions.cpp | 3 ++- 6 files changed, 65 insertions(+), 16 deletions(-) diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index b5bc6110a..4968f9630 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -2115,6 +2115,7 @@ public: class AAMover: public ActivatedAbility { public: + bool necro; string destination; MTGAbility * andAbility; string named; diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 678a847a0..86486e21a 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -265,7 +265,8 @@ class Constants CANTCREW = 143, HIDDENFACE = 144, ANYTYPEOFMANA = 145, - NB_BASIC_ABILITIES = 146, + NECROED = 146, + NB_BASIC_ABILITIES = 147, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index e2c562873..41aa9f93c 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -4391,6 +4391,7 @@ AAMover::AAMover(GameObserver* observer, int _id, MTGCardInstance * _source, MTG andAbility = NULL; if(!named.size() && source->controller()->isAI()) named = overrideNamed(destination); + necro = false; } MTGGameZone * AAMover::destinationZone(Targetable * target) @@ -4411,6 +4412,8 @@ int AAMover::resolve() MTGCardInstance * _target = (MTGCardInstance *) target; if (target) { + if(necro) + _target->basicAbilities[Constants::NECROED] = 1; Player* p = _target->controller(); if (p) { @@ -4496,18 +4499,23 @@ int AAMover::resolve() MTGCardInstance *newTarget = p->game->putInZone(_target, fromZone, destZone); /*while(_target->next) _target = _target->next;*/ - if(andAbility) + if(newTarget) { - MTGAbility * andAbilityClone = andAbility->clone(); - andAbilityClone->target = newTarget; - if(andAbility->oneShot) + if(necro) + newTarget->basicAbilities[Constants::NECROED] = 1; + if(andAbility) { - andAbilityClone->resolve(); - SAFE_DELETE(andAbilityClone); - } - else - { - andAbilityClone->addToGame(); + MTGAbility * andAbilityClone = andAbility->clone(); + andAbilityClone->target = newTarget; + if(andAbility->oneShot) + { + andAbilityClone->resolve(); + SAFE_DELETE(andAbilityClone); + } + else + { + andAbilityClone->addToGame(); + } } } } @@ -8104,7 +8112,13 @@ int AACastCard::resolveSpell() if (_target) { if (_target->isLand()) - putinplay = true; + { + MTGCardInstance * copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->battlefield,noEvent); + copy->changeController(source->controller(),true); + this->forceDestroy = true; + processed = true; + return 1; + } Spell * spell = NULL; MTGCardInstance * copy = NULL; diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index bfd80dea4..88a0dcae3 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -502,16 +502,32 @@ void CardGui::Render() } } + //shadow that covers the whole card for targetchooser... if (tc && !tc->canTarget(card)) { if (!shadow) shadow = card->getObserver()->getResourceManager()->GetQuad("shadow"); if (shadow) { - shadow->SetColor(ARGB(200,255,255,255)); + shadow->SetColor(ARGB(190,255,255,255)); renderer->RenderQuad(shadow.get(), actX, actY, actT, (28 * actZ + 1) / 16, 40 * actZ / 16); } } + + //for necro + if (!shadow) + shadow = card->getObserver()->getResourceManager()->GetQuad("shadow"); + if (shadow) + { + int myA = 0; + if(game && card->has(Constants::NECROED))//no peeking... + myA = 255; + else + myA = 0; + + shadow->SetColor(ARGB(myA,255,255,255)); + renderer->RenderQuad(shadow.get(), actX, actY, actT, (28 * actZ + 1) / 16, 40 * actZ / 16); + } PlayGuiObject::Render(); } @@ -1151,6 +1167,20 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder JQuadPtr quad = thumb ? WResourceManager::Instance()->RetrieveCard(card, RETRIEVE_THUMB) : WResourceManager::Instance()->RetrieveCard(card); MTGCardInstance * kcard = dynamic_cast(card); + GameObserver * game = NULL; + //TargetChooser * tc = NULL; + bool myA = true; + if(kcard) + { + game = kcard->getObserver(); + if(game) + { + if(kcard->has(Constants::NECROED)) + myA = false; + else + myA = true; + } + } if(kcard && !kcard->isToken && kcard->name != kcard->model->data->name) { MTGCard * fcard = MTGCollection()->getCardByName(kcard->name); @@ -1162,7 +1192,7 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder quad = thumb ? WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_THUMB, 1, abs(kcard->copiedID)) : WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_NORMAL, 1, abs(kcard->copiedID)); } - if (quad.get()) + if (quad.get() && myA) { if (quad->mHeight < quad->mWidth) { @@ -1216,7 +1246,8 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder //DebugTrace("Unable to fetch image: " << card->getImageName()); // If we come here, we do not have the picture. - AlternateRender(card, pos); + if(myA) + AlternateRender(card, pos); } string CardGui::FormattedData(string data, string replace, string value) diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index adbeeb958..11bc1df3e 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -2797,6 +2797,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG MTGAbility * a = NEW AAMover(observer, id, card, target, splitMove[1],newName); a->oneShot = true; + ((AAMover*)a)->necro = s.find("hiddenmoveto") != string::npos?true:false; if(storedAndAbility.size()) { string stored = storedAndAbility; diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index c9d02d911..2f1ac37d8 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -176,7 +176,8 @@ const char* Constants::MTGBasicAbilities[] = { "oppnomaxhand", "cantcrew", "hiddenface",//test for hiding card - "anytypeofmana" + "anytypeofmana", + "necroed"//hide necored }; map Constants::MTGBasicAbilitiesMap;