diff --git a/projects/mtg/include/GameOptions.h b/projects/mtg/include/GameOptions.h index df873da68..6b2187b5b 100644 --- a/projects/mtg/include/GameOptions.h +++ b/projects/mtg/include/GameOptions.h @@ -46,6 +46,7 @@ public: CHEATMODEAIDECK, OSD, BLKBORDER, + SHOWTOKENS, CLOSEDHAND, HANDDIRECTION, MANADISPLAY, diff --git a/projects/mtg/include/WFilter.h b/projects/mtg/include/WFilter.h index 0a246925b..a7f57e8d3 100644 --- a/projects/mtg/include/WFilter.h +++ b/projects/mtg/include/WFilter.h @@ -233,8 +233,8 @@ public: ; WCFilterSet(string arg); bool isMatch(MTGCard *c) - { - return (setid == MTGSets::ALL_SETS || c->setId == setid) && (c->getRarity() != Constants::RARITY_T); //removes viewing of card tokens. tokens will not display on spoiler and should not affect gameplay :) + {//exclude negative id's and tokens + return (setid == MTGSets::ALL_SETS || c->setId == setid) && ((c->getId() > 0) && (c->getRarity() != Constants::RARITY_T)); } ; string getCode(); diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index aa9d7219b..2d4b1c81e 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -22,6 +22,7 @@ const string Options::optionNames[] = { "cheatmodedecks", "displayOSD", "BlackBorder", + "ShowTokens", "closed_hand", "hand_direction", "mana_display", diff --git a/projects/mtg/src/GameStateOptions.cpp b/projects/mtg/src/GameStateOptions.cpp index 4a7d2d401..08044077e 100644 --- a/projects/mtg/src/GameStateOptions.cpp +++ b/projects/mtg/src/GameStateOptions.cpp @@ -57,6 +57,7 @@ void GameStateOptions::Start() optionsList = NEW WGuiList("Game"); optionsList->Add(NEW WGuiHeader("Interface Options")); optionsList->Add(NEW OptionInteger(Options::BLKBORDER, "All Black Border")); + optionsList->Add(NEW OptionInteger(Options::SHOWTOKENS, "Show Tokens in Editor")); optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::CLOSEDHAND, "Closed hand", 1, 1, 0))); optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::HANDDIRECTION, "Hand direction", 1, 1, 0))); optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::MANADISPLAY, "Mana display", 3, 1, 0))); diff --git a/projects/mtg/src/GuiStatic.cpp b/projects/mtg/src/GuiStatic.cpp index 877cc858c..845628f86 100644 --- a/projects/mtg/src/GuiStatic.cpp +++ b/projects/mtg/src/GuiStatic.cpp @@ -28,12 +28,18 @@ GuiAvatar::GuiAvatar(float x, float y, bool hasFocus, Player * player, Corner co void GuiAvatar::Render() { + GameObserver * game = player->getObserver(); JRenderer * r = JRenderer::GetInstance(); int life = player->life; int poisonCount = player->poisonCount; int energyCount = player->energyCount; WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); + TargetChooser * tc = NULL; + + if (game) + tc = game->getCurrentTargetChooser(); + //Avatar int lifeDiff = life - currentLife; if (lifeDiff < 0 && currentLife > 0) @@ -74,6 +80,10 @@ void GuiAvatar::Render() break; } player->getIcon()->SetColor(ARGB((int)actA, 255, avatarRed, avatarRed)); + if (tc && !tc->canTarget(player)) + { + player->getIcon()->SetColor(ARGB((int)actA, 50, 50, 50)); + } r->RenderQuad(player->getIcon().get(), actX, actY, actT, Width/player->getIcon()->mWidth*actZ, Height/player->getIcon()->mHeight*actZ); if (mHasFocus) { diff --git a/projects/mtg/src/WDataSrc.cpp b/projects/mtg/src/WDataSrc.cpp index d4b0721fd..59069f5b1 100644 --- a/projects/mtg/src/WDataSrc.cpp +++ b/projects/mtg/src/WDataSrc.cpp @@ -295,8 +295,15 @@ void WSrcCards::validate() updateCounts(); if (!filtersRoot) return; for (size_t t = 0; t < cards.size(); t++) - {//don't add tokens or negative id - if (matchesFilters(cards[t]) && (cards[t]->getId() > 0) && (cards[t]->getRarity() != Constants::RARITY_T)) validated.push_back(t); + { + if(!options[Options::SHOWTOKENS].number) + {//don't add tokens or negative id + if (matchesFilters(cards[t]) && (cards[t]->getId() > 0) && (cards[t]->getRarity() != Constants::RARITY_T)) validated.push_back(t); + } + else + {//show but you cant add + if (matchesFilters(cards[t])) validated.push_back(t); + } } } @@ -391,8 +398,15 @@ WSrcUnlockedCards::WSrcUnlockedCards(float delay) : } for (it = ac->collection.begin(); it != ac->collection.end(); it++) - {//no tokens or negative id's - if (it->second && unlocked[it->second->setId] && (it->second->getId() > 0) && (it->second->getRarity() != Constants::RARITY_T)) cards.push_back(it->second); + { + if(!options[Options::SHOWTOKENS].number) + {//dont show tokens & negative id's + if (it->second && unlocked[it->second->setId] && (it->second->getId() > 0) && (it->second->getRarity() != Constants::RARITY_T)) cards.push_back(it->second); + } + else + {//show but you cant add + if (it->second && unlocked[it->second->setId]) cards.push_back(it->second); + } } if (unlocked) { @@ -416,10 +430,21 @@ int WSrcDeck::loadMatches(MTGDeck * deck) for (it = deck->cards.begin(); it != deck->cards.end(); it++) { MTGCard * c = deck->getCardById(it->first); - if (c && matchesFilters(c) && (c->getId() > 0) && (c->getRarity() != Constants::RARITY_T)) - { - Add(c, it->second); - count++; + if(!options[Options::SHOWTOKENS].number) + {//dont show tokens & negative id's + if (c && matchesFilters(c) && (c->getId() > 0) && (c->getRarity() != Constants::RARITY_T)) + { + Add(c, it->second); + count++; + } + } + else + {//show but you cant add + if (c && matchesFilters(c)) + { + Add(c, it->second); + count++; + } } } validate();