diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index cefa5a5d4..1bd266b1b 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -168,6 +168,7 @@ public: MTGCardInstance * myPair; MTGCardInstance * createSnapShot(); MTGCardInstance * storedSourceCard; + MTGCardInstance * shackled; MTGCardInstance * isDefenser(); int initAttackersDefensers(); MTGCardInstance * getNextOpponent(MTGCardInstance * previous=NULL); diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index e1bdca9cb..caea4b9d5 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -248,11 +248,13 @@ class Constants CANTPAYLIFE = 126, CANTBESACRIFIED = 127, SKULK = 128, - MENACE = 129, - NOSOLO = 130,//cant attack alone - MUSTBLOCK = 131,//blocks each turn - DETHRONE = 132, - NB_BASIC_ABILITIES = 133, + MENACE = 129, + NOSOLO = 130,//cant attack alone + MUSTBLOCK = 131,//blocks each turn + DETHRONE = 132, + OVERLOAD = 133, + SHACKLER = 134, + NB_BASIC_ABILITIES = 135, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/src/AIPlayerBaka.cpp b/projects/mtg/src/AIPlayerBaka.cpp index 5dabaa2fa..2da274c4c 100644 --- a/projects/mtg/src/AIPlayerBaka.cpp +++ b/projects/mtg/src/AIPlayerBaka.cpp @@ -2438,7 +2438,7 @@ int AIPlayerBaka::computeActions() cd.SetExclusionColor(Constants::MTG_COLOR_LAND); MTGCardInstance *freecard = cd.match(game->graveyard); int canCastCard = game->playRestrictions->canPutIntoZone(freecard, game->inPlay); - if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMGRAVEYARD) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (freecard->alias != 1111)) + if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMGRAVEYARD) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (!freecard->isCDA)) { MTGAbility * castFreeCard = observer->mLayers->actionLayer()->getAbility(MTGAbility::PAYZERO_COST); AIAction * aa = NEW AIAction(this, castFreeCard, freecard); //TODO putinplay action @@ -2453,7 +2453,7 @@ int AIPlayerBaka::computeActions() cd.SetExclusionColor(Constants::MTG_COLOR_LAND); MTGCardInstance *freecard = cd.match(game->exile); int canCastCard = game->playRestrictions->canPutIntoZone(freecard, game->inPlay); - if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMEXILE) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (freecard->alias != 1111)) + if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMEXILE) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (!freecard->isCDA)) { MTGAbility * castFreeCard = observer->mLayers->actionLayer()->getAbility(MTGAbility::PAYZERO_COST); AIAction * aa = NEW AIAction(this, castFreeCard, freecard); //TODO putinplay action diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index bb3c3f39d..e89becee5 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -6533,6 +6533,8 @@ void AShackle::resolveShackle() previousController->game->putInZone(_target, _target->currentZone, source->controller()->game->inPlay); Shackled = _target; + source->shackled = Shackled; + Shackled->shackled = source; } } @@ -6540,14 +6542,19 @@ void AShackle::returntoOwner(MTGCardInstance* _target) { MTGCardInstance * cardToReturn = _target; if(!cardToReturn) { + if (source) + source->shackled = NULL; this->forceDestroy = 1; return; } if(previousController && cardToReturn->isInPlay(game)) { + cardToReturn->shackled = NULL; cardToReturn->controller()->game->putInZone(_target, _target->currentZone, previousController->game->inPlay); } + if (source) + source->shackled = NULL; this->forceDestroy = 1; Shackled = NULL; return; diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index a4f18ed41..389427db7 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -274,8 +274,32 @@ void CardGui::Render() { if(cv->mHasFocus) { - highlightborder->SetColor(ARGB(200,57,28,248)); + highlightborder->SetColor(ARGB(200,57,28,248)); + renderer->RenderQuad(highlightborder.get(), actX, actY, actT, (30 * actZ + 1) / 16, 43 * actZ / 16); + } + } + } + if(card->shackled && card->shackled->isInPlay(game) && highlightborder) + { + if(mHasFocus) + { + if(card->has(Constants::SHACKLER)) + highlightborder->SetColor(ARGB(200,7,98,248)); + else + highlightborder->SetColor(ARGB(200,57,28,248)); + renderer->RenderQuad(highlightborder.get(), actX, actY, actT, (30 * actZ + 1) / 16, 43 * actZ / 16); + } + if(CardView* cv = dynamic_cast(card->shackled->view)) + { + if(cv->mHasFocus) + { + if(!card->shackled->has(Constants::SHACKLER)) + highlightborder->SetColor(ARGB(200,7,98,248)); + else + highlightborder->SetColor(ARGB(200,57,28,248)); + + renderer->RenderQuad(highlightborder.get(), actX, actY, actT, (30 * actZ + 1) / 16, 43 * actZ / 16); } } } @@ -386,7 +410,7 @@ void CardGui::Render() buff = "C"; //if(card->has(Constants::PAYZERO)) //buff += "Z"; - if(card->alias == 1000) + if(card->chooseacolor >= 1) { if(card->chooseacolor == 1) buff += "\n-Green"; @@ -1114,7 +1138,7 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder string cardsetname = setlist[card->setId].c_str(); if(!noborder) { - if(cardsetname == "2ED"||cardsetname == "RV"||cardsetname == "4ED"||cardsetname == "5ED"||cardsetname == "6ED"||cardsetname == "7ED"||cardsetname == "8ED"||cardsetname == "9ED"||cardsetname == "CHR") + if(cardsetname == "2ED"||cardsetname == "RV"||cardsetname == "4ED"||cardsetname == "5ED"||cardsetname == "6ED"||cardsetname == "7ED"||cardsetname == "8ED"||cardsetname == "9ED"||cardsetname == "CHR"||cardsetname == "DM") { //like white border renderer->FillRoundRect(x-92,pos.actY-130, (scale * quad->mWidth)-10, (scale * quad->mHeight)-11, 9.0f,ARGB(255,248,248,255)); diff --git a/projects/mtg/src/DeckMenu.cpp b/projects/mtg/src/DeckMenu.cpp index 898b83215..7d32a4727 100644 --- a/projects/mtg/src/DeckMenu.cpp +++ b/projects/mtg/src/DeckMenu.cpp @@ -122,7 +122,7 @@ void DeckMenu::RenderDeckManaColors() if (mSelectedDeck &&displayDeckMana) { string deckManaColors = mSelectedDeck->getColorIndex().c_str(); - if (deckManaColors.size() == 6) + if (deckManaColors.size() >= 6) { // due to space constraints don't display icons for colorless mana. for( int colorIdx = Constants::MTG_COLOR_GREEN; colorIdx < Constants::MTG_COLOR_WASTE; ++colorIdx ) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index bdb240071..f137c18a8 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -211,6 +211,7 @@ void MTGCardInstance::initMTGCI() storedCard = NULL; storedSourceCard = NULL; myPair = NULL; + shackled = NULL; miracle = false; countTrini = 0; imprintedCards.clear(); diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index 7c3178dcc..16aa9eebf 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -159,11 +159,13 @@ const char* Constants::MTGBasicAbilities[] = { "combattoughness", "cantpaylife", "cantbesacrified", - "skulk", - "menace", - "nosolo", - "mustblock", - "dethrone", + "skulk", + "menace", + "nosolo", + "mustblock", + "dethrone", + "overload", + "shackler" }; map Constants::MTGBasicAbilitiesMap; diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index cdbb8aed2..d8b4940d1 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -951,7 +951,7 @@ void MTGInPlay::untapAll() { MTGCardInstance * card = cards[i]; card->setUntapping(); - if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && card->alias != 50120) + if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && !card->basicAbilities[(int)Constants::SHACKLER]) { if (card->frozen < 1) { @@ -961,7 +961,6 @@ void MTGInPlay::untapAll() { card->frozen = 0; } - } } } diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 7cd9fcfea..657a54cf6 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -705,7 +705,7 @@ PermanentAbility(observer, _id) int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) { - if (card->alias == 11000) + if (card->has(Constants::OVERLOAD)) return 0;//overload has its own rule if(!card->getManaCost()->getAlternative()) return 0; @@ -1431,7 +1431,7 @@ MTGAlternativeCostRule(observer, _id) int MTGOverloadRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) { - if (card->alias != 11000) + if (!card->has(Constants::OVERLOAD)) return 0; if (card->isLand()) {