diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 6c2081444..d325e2e48 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -17,6 +17,7 @@ typedef enum GAME_TYPE_RANDOM2, GAME_TYPE_RANDOM3, GAME_TYPE_RANDOM5, + GAME_TYPE_RANDOMCOMMANDER, GAME_TYPE_HORDE, GAME_TYPE_SET_LIMITED, GAME_TYPE_STORY, diff --git a/projects/mtg/include/Rules.h b/projects/mtg/include/Rules.h index 5c86cef33..e769177a2 100644 --- a/projects/mtg/include/Rules.h +++ b/projects/mtg/include/Rules.h @@ -44,6 +44,7 @@ protected: Player * loadPlayerRandom(GameObserver* observer, int isAI, int mode); Player * loadPlayerRandomThree(GameObserver* observer, int isAI); Player * loadPlayerRandomFive(GameObserver* observer, int isAI); + Player * loadPlayerRandomCommander(GameObserver* observer, int isAI); Player * loadPlayerHorde(GameObserver* observer, int isAI); Player * loadRandomSetLimited(GameObserver* observer, int isAI); Player * initPlayer(GameObserver *observer, int playerId); diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index 10299c6af..f9e72acbd 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -168,7 +168,7 @@ void Rules::addExtraRules(GameObserver* g) difficultyRating = 0; else if(g->mRules->gamemode == GAME_TYPE_RANDOM1 || g->mRules->gamemode == GAME_TYPE_RANDOM2) difficultyRating = 0; - else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5) + else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5 || g->mRules->gamemode == GAME_TYPE_RANDOMCOMMANDER) difficultyRating = 0; else if(g->mRules->gamemode == GAME_TYPE_HORDE || g->mRules->gamemode == GAME_TYPE_SET_LIMITED) difficultyRating = 0; @@ -200,7 +200,7 @@ void Rules::addExtraRules(GameObserver* g) a->resolve(); else if(g->mRules->gamemode == GAME_TYPE_RANDOM1 || g->mRules->gamemode == GAME_TYPE_RANDOM2) a->resolve(); - else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5) + else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5 || g->mRules->gamemode == GAME_TYPE_RANDOMCOMMANDER) a->resolve(); else if (g->mRules->gamemode == GAME_TYPE_STORY) a->resolve(); @@ -365,7 +365,7 @@ Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI) int colors[] = { color1, color2, color3, color0 }; int nbcolors = 4; - string lands[] = { "", "forest", "island", "mountain", "swamp", "plains", "" }; + string lands[] = { "", "forest", "island", "mountain", "swamp", "plains" }; MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); tempDeck->addRandomCards(5, 0, 0, -1, lands[color1].c_str()); @@ -402,8 +402,65 @@ Player * Rules::loadPlayerRandomFive(GameObserver* observer, int isAI) MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); tempDeck->addRandomCards(24, 0, 0, -1, "land"); - tempDeck->addRandomCards(10, 0, 0, -1, "legendary"); - tempDeck->addRandomCards(26, 0, 0, -1, ""); + tempDeck->addRandomCards(36, 0, 0, -1, ""); + + string deckFile = "random"; + string deckFileSmall = "random"; + + Player *player = NULL; + if (!isAI) // Human Player + player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck); + else + player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck); + + return player; +} + +Player * Rules::loadPlayerRandomCommander(GameObserver* observer, int isAI) +{ + MTGDeck * cmdTempDeck = NEW MTGDeck(MTGCollection()); + MTGDeck * tempDeck = NEW MTGDeck(MTGCollection()); + tempDeck->meta_commander = true; + + string lands[] = { "", "forest", "island", "mountain", "swamp", "plains", "basic", "basic" }; + + cmdTempDeck->addRandomCards(1, 0, 0, -1, "legendary"); + DeckDataWrapper * myCommandZone = NEW DeckDataWrapper(cmdTempDeck); + MTGCard * commander = myCommandZone->getCard(0, true); + + while(!commander->data->isCreature()) + { + cmdTempDeck->addRandomCards(1, 0, 0, -1, "legendary"); + myCommandZone = NEW DeckDataWrapper(cmdTempDeck); + commander = myCommandZone->getCard(0, true); + } + + stringstream cid; + cid << commander->getMTGId(); + vector newCMD; + newCMD.push_back(cid.str()); + tempDeck->replaceCMD(newCMD); + + std::vector< int > colors; + + for (int i = 0; i < Constants::NB_Colors; i++) + { + if (commander->data->getManaCost()->hasColor(i)) + colors.push_back(i); + } + + if(colors.data()[0] != 0) { colors.insert(colors.begin(),0); } + + if(colors.size() > 1) + { + for (unsigned int i = 1; i < colors.size(); i++) + { + tempDeck->addRandomCards(40/(colors.size()-1), 0, 0, 'L', lands[colors.data()[i]].c_str()); + } + } + else { tempDeck->addRandomCards(40, 0, 0, -1, "basic"); } + + tempDeck->addRandomCards(59, 0, 0, -1, "", colors.data(), colors.size()); string deckFile = "random"; string deckFileSmall = "random"; @@ -429,9 +486,9 @@ Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI) "Sliver", "Spellshaper", "Spirit", "Wizard" }; const char* const whiteTribes[] = { "Angel", "Archer", "Bird", "Cat", "Cleric", "Griffin", "Kithkin", "Knight", "Kor", "Monk", "Rebel", "Samurai", "Scout", "Soldier", "Spirit" }; const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Mutant", "Nightmare", "Pirate", "Shapeshifter", "Sphinx", "Spirit", "Vedalken", "Wizard" }; - const char* const blackTribes[] = { "Assassin", "Cleric", "Demon", "Faerie", "Horror", "Insect", "Knight", "Nightmare", "Orc", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Spirit", "Vampire", "Wizard", "Zombie" }; + const char* const blackTribes[] = { "Assassin", "Cleric", "Demon", "Faerie", "Horror", "Insect", "Knight", "Nightmare", "Orc", "Phyrexian", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Spirit", "Vampire", "Wizard", "Zombie" }; const char* const redTribes[] = { "Artificer", "Beast", "Berserker", "Devil", "Dinosaur", "Dragon", "Dwarf", "Goblin", "Kavu", "Lizard", "Minotaur", "Ogre", "Orc", "Shaman", "Viashino", "Warrior", "Werewolf" }; - const char* const greenTribes[] = { "Archer", "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Dryad", "Elf", "Fungus", "Insect", "Kavu", "Lizard", "Mutant", "Plant", "Scout", "Shaman", "Snake", "Spider", "Treefolk", "Warrior", "Werewolf", "Wurm" }; + const char* const greenTribes[] = { "Archer", "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Dryad", "Elf", "Fungus", "Insect", "Kavu", "Lizard", "Mutant", "Plant", "Ranger", "Scout", "Shaman", "Snake", "Spider", "Treefolk", "Warrior", "Werewolf", "Wurm" }; int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]); int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]); @@ -508,6 +565,8 @@ Player * Rules::initPlayer(GameObserver *g, int playerId) return loadPlayerRandomThree(g, isAI); case GAME_TYPE_RANDOM5: return loadPlayerRandomFive(g, isAI); + case GAME_TYPE_RANDOMCOMMANDER: + return loadPlayerRandomCommander(g, isAI); case GAME_TYPE_HORDE: return loadPlayerHorde(g, isAI); case GAME_TYPE_SET_LIMITED: @@ -829,6 +888,7 @@ GameType Rules::strToGameMode(string s) if (s.compare("random2") == 0) return GAME_TYPE_RANDOM2; if (s.compare("random3") == 0) return GAME_TYPE_RANDOM3; if (s.compare("random5") == 0) return GAME_TYPE_RANDOM5; + if (s.compare("random_commander") == 0) return GAME_TYPE_RANDOMCOMMANDER; if (s.compare("horde") == 0) return GAME_TYPE_HORDE; if (s.compare("set_limited") == 0) return GAME_TYPE_SET_LIMITED; if (s.compare("story") == 0) return GAME_TYPE_STORY; diff --git a/projects/mtg/src/WGui.cpp b/projects/mtg/src/WGui.cpp index e73ffecb2..6e957d9ae 100644 --- a/projects/mtg/src/WGui.cpp +++ b/projects/mtg/src/WGui.cpp @@ -2145,7 +2145,7 @@ void WGuiFilterItem::updateValue() mParent->addArg("Rare", "r:r;"); mParent->addArg("Uncommon", "r:u;"); mParent->addArg("Common", "r:c;"); - mParent->addArg("Special Rarity", "{r:m;|r:t;|r:r;|r:u;|r:c;}"); + mParent->addArg("Special Rarity", "{r:m;|r:t;|r:r;|r:u;|r:c;|r:l;}"); } else if (filterType == FILTER_CMC) {