From 11af6714963fc7d31ed86be8b90ba6dddcb3f435 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sun, 5 Jul 2009 10:08:13 +0000 Subject: [PATCH] Erwan - Added "Evil twin" Mode to unlock --- .../bin/Res/graphics/eviltwin_unlocked.png | Bin 0 -> 29500 bytes projects/mtg/include/AIMomirPlayer.h | 2 +- projects/mtg/include/AIPlayer.h | 6 +- projects/mtg/include/Credits.h | 1 + projects/mtg/include/GameOptions.h | 4 + projects/mtg/include/Player.h | 5 +- projects/mtg/src/AIMomirPlayer.cpp | 2 +- projects/mtg/src/AIPlayer.cpp | 129 +++++------------- projects/mtg/src/Credits.cpp | 16 ++- projects/mtg/src/GameStateDuel.cpp | 27 ++-- projects/mtg/src/Player.cpp | 5 +- projects/mtg/src/TestSuiteAI.cpp | 2 +- 12 files changed, 81 insertions(+), 118 deletions(-) create mode 100644 projects/mtg/bin/Res/graphics/eviltwin_unlocked.png diff --git a/projects/mtg/bin/Res/graphics/eviltwin_unlocked.png b/projects/mtg/bin/Res/graphics/eviltwin_unlocked.png new file mode 100644 index 0000000000000000000000000000000000000000..bdefab9d24feb0030336770480cba6f92392adb4 GIT binary patch literal 29500 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 literal 0 HcmV?d00001 diff --git a/projects/mtg/include/AIMomirPlayer.h b/projects/mtg/include/AIMomirPlayer.h index 67acd1815..904cac2ef 100644 --- a/projects/mtg/include/AIMomirPlayer.h +++ b/projects/mtg/include/AIMomirPlayer.h @@ -6,7 +6,7 @@ class AIMomirPlayer:public AIPlayerBaka{ public: - AIMomirPlayer(MTGPlayerCards * _deck, char * file, char * avatarFile); + AIMomirPlayer(MTGPlayerCards * _deck, char * file, char * fileSmall, char * avatarFile); int getEfficiency(AIAction * action); int momir(); int computeActions(); diff --git a/projects/mtg/include/AIPlayer.h b/projects/mtg/include/AIPlayer.h index 3c548f849..b3760f13a 100644 --- a/projects/mtg/include/AIPlayer.h +++ b/projects/mtg/include/AIPlayer.h @@ -65,7 +65,7 @@ class AIPlayer: public Player{ virtual int displayStack(){return 0;}; AIStats * stats; ManaCost * getPotentialMana(); - AIPlayer(MTGPlayerCards * _deck, string deckFile); + AIPlayer(MTGPlayerCards * _deck, string deckFile, string deckFileSmall); virtual ~AIPlayer(); virtual MTGCardInstance * chooseCard(TargetChooser * tc, MTGCardInstance * source, int random = 0); virtual int chooseTarget(TargetChooser * tc = NULL); @@ -85,7 +85,7 @@ class AIPlayerBaka: public AIPlayer{ float timer; MTGCardInstance * FindCardToPlay(ManaCost * potentialMana, const char * type); public: - AIPlayerBaka(MTGPlayerCards * _deck, char * deckFile, char * avatarFile); + AIPlayerBaka(MTGPlayerCards * _deck, char * deckFile, char * deckfileSmall, char * avatarFile); virtual int Act(float dt); void initTimer(); virtual int computeActions(); @@ -93,7 +93,7 @@ class AIPlayerBaka: public AIPlayer{ class AIPlayerFactory{ public: - AIPlayer * createAIPlayer(MTGAllCards * collection, MTGPlayerCards * oponents_deck, int deckid = 0); + AIPlayer * createAIPlayer(MTGAllCards * collection, Player * opponent, int deckid = 0); }; diff --git a/projects/mtg/include/Credits.h b/projects/mtg/include/Credits.h index 503b3a6ea..7a002cf14 100644 --- a/projects/mtg/include/Credits.h +++ b/projects/mtg/include/Credits.h @@ -24,6 +24,7 @@ class Credits{ private: int isDifficultyUnlocked(); int isMomirUnlocked(); + int isEvilTwinUnlocked(); public: int value; Player * p1, *p2; diff --git a/projects/mtg/include/GameOptions.h b/projects/mtg/include/GameOptions.h index df309bc2b..7bbd1a942 100644 --- a/projects/mtg/include/GameOptions.h +++ b/projects/mtg/include/GameOptions.h @@ -8,8 +8,12 @@ using std::string; #define OPTIONS_MUSICVOLUME "musicVolume" #define OPTIONS_SFXVOLUME "sfxVolume" + #define OPTIONS_DIFFICULTY_MODE_UNLOCKED "prx_handler" //huhu #define OPTIONS_MOMIR_MODE_UNLOCKED "prx_rimom" //haha +#define OPTIONS_EVILTWIN_MODE_UNLOCKED "prx_eviltwin" +#define OPTIONS_RANDOMDECK_MODE_UNLOCKED "prx_rnddeck" + #define OPTIONS_DIFFICULTY "difficulty" #define OPTIONS_CACHESIZE "cacheSize" #define OPTIONS_PLASMAEFFECT "plasmaEffect" diff --git a/projects/mtg/include/Player.h b/projects/mtg/include/Player.h index c40abbab6..f9ec8022e 100644 --- a/projects/mtg/include/Player.h +++ b/projects/mtg/include/Player.h @@ -25,7 +25,7 @@ class Player: public Damageable{ MTGPlayerCards * game; int testLife(); int afterDamage(); - Player(MTGPlayerCards * _deck, string deckFile); + Player(MTGPlayerCards * _deck, string deckFile, string deckFileSmall); virtual ~Player(); void unTapPhase(); MTGInPlay * inPlay(); @@ -37,11 +37,12 @@ class Player: public Damageable{ int getId(); JQuad * getIcon(); string deckFile; + string deckFileSmall; }; class HumanPlayer: public Player{ public: - HumanPlayer(MTGPlayerCards * _deck, char * _deckFile); + HumanPlayer(MTGPlayerCards * _deck, char * _deckFile, string _deckFileSmall); }; diff --git a/projects/mtg/src/AIMomirPlayer.cpp b/projects/mtg/src/AIMomirPlayer.cpp index 00a132c9a..e6ad918c8 100644 --- a/projects/mtg/src/AIMomirPlayer.cpp +++ b/projects/mtg/src/AIMomirPlayer.cpp @@ -9,7 +9,7 @@ MTGAbility * AIMomirPlayer::momirAbility = NULL; -AIMomirPlayer::AIMomirPlayer(MTGPlayerCards * _deck, char * file, char * avatarFile): AIPlayerBaka(_deck,file, avatarFile){ +AIMomirPlayer::AIMomirPlayer(MTGPlayerCards * _deck, char * file, char * fileSmall, char * avatarFile): AIPlayerBaka(_deck,file, fileSmall, avatarFile){ momirAbility = NULL; agressivity = 100; } diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index 682b24b54..81a50632f 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -26,7 +26,7 @@ int AIAction::Act(){ return 0; } -AIPlayer::AIPlayer(MTGPlayerCards * _deck, string file): Player(_deck, file){ +AIPlayer::AIPlayer(MTGPlayerCards * _deck, string file, string fileSmall): Player(_deck, file, fileSmall){ potentialMana = NEW ManaCost(); nextCardToPlay = NULL; stats = NULL; @@ -519,113 +519,54 @@ int AIPlayer::combatDamages(){ } -/* -int AIPlayer::combatDamages(){ - int result = 0; - GameObserver * gameObs = GameObserver::GetInstance(); - int currentGamePhase = gameObs->getCurrentGamePhase(); - - if (currentGamePhase == Constants::MTG_PHASE_COMBATBLOCKERS) return orderBlockers(); - - if (currentGamePhase != Constants::MTG_PHASE_COMBATDAMAGE) return 0; - DamageResolverLayer * drl = gameObs->mLayers->combatLayer(); -#if defined (WIN32) || defined (LINUX) - OutputDebugString("AI Combat Phase START\n"); -#endif - if (drl->currentChoosingPlayer == this){ -#if defined (WIN32) || defined (LINUX) - OutputDebugString("This player chooses\n"); -#endif - for (int i = 0; i < drl->mCount; i++){ -#if defined (WIN32) || defined (LINUX) - OutputDebugString("AI Combat Phase\n"); -#endif - DamagerDamaged * current = (DamagerDamaged *) drl->mObjects[i]; - if (current->damageSelecter == this){ - result = 1; - DamagerDamaged * canardEmissaire = NULL; - for (int j = 0; j < drl->mCount; j++){ - DamagerDamaged * opponent = (DamagerDamaged *) drl->mObjects[j]; - if (drl->isOpponent(current, opponent)){ - if (!canardEmissaire) canardEmissaire = opponent; - int over = opponent->hasLethalDamage(); - while(!over){ - if(!current->dealOneDamage(opponent)){ - over = 1; - }else{ - over = opponent->hasLethalDamage(); - } -#if defined (WIN32) || defined (LINUX) - char buf[4096]; - sprintf(buf, "==========\n%s deals %i damages to %s\n=============\n", current->card->getName(), 1, opponent->card->getName()); - OutputDebugString(buf); -#endif - } - } - } - if (canardEmissaire && !current->card->has(Constants::TRAMPLE)){ - while(current->dealOneDamage(canardEmissaire)){ -#if defined (WIN32) || defined (LINUX) - OutputDebugString("==========\nDealing damage to Canard Emissaire\n================\n"); -#endif - - } - } - } - } - - if (result){ - drl->nextPlayer(); - } - } - return result; - -} -*/ AIStats * AIPlayer::getStats(){ if (!stats){ char statFile[512]; - sprintf(statFile, RESPATH"/ai/baka/stats/%s.stats", opponent()->deckFile.c_str()); + sprintf(statFile, RESPATH"/ai/baka/stats/%s.stats", opponent()->deckFileSmall.c_str()); stats = NEW AIStats(this, statFile); } return stats; } -AIPlayer * AIPlayerFactory::createAIPlayer(MTGAllCards * collection, MTGPlayerCards * oponents_deck, int deckid){ - if (!deckid){ - int nbdecks = 0; - int found = 1; - while (found){ - found = 0; - char buffer[512]; - sprintf(buffer, RESPATH"/ai/baka/deck%i.txt",nbdecks+1); - std::ifstream file(buffer); - if(file){ - found = 1; - file.close(); - nbdecks++; - } - } - if (!nbdecks) return NULL; - deckid = 1 + rand() % (nbdecks); - } +AIPlayer * AIPlayerFactory::createAIPlayer(MTGAllCards * collection, Player * opponent, int deckid){ char deckFile[512]; - sprintf(deckFile, RESPATH"/ai/baka/deck%i.txt",deckid); char avatarFile[512]; - sprintf(avatarFile, "ai/baka/avatars/avatar%i.jpg",deckid); - char deckFileSmall[512]; - sprintf(deckFileSmall, "ai_baka_deck%i",deckid); -#if defined (WIN32) || defined (LINUX) - char debuf[4096]; - sprintf(debuf,"Deck File: %s", deckFile); - OutputDebugString(debuf); -#endif + + if (deckid == -1){ //Evil twin + sprintf(deckFile, opponent->deckFile.c_str()); + OutputDebugString(opponent->deckFile.c_str()); + sprintf(avatarFile, "player/avatar.jpg"); + sprintf(deckFileSmall, "ai_baka_eviltwin"); + }else{ + if (!deckid){ + int nbdecks = 0; + int found = 1; + while (found){ + found = 0; + char buffer[512]; + sprintf(buffer, RESPATH"/ai/baka/deck%i.txt",nbdecks+1); + std::ifstream file(buffer); + if(file){ + found = 1; + file.close(); + nbdecks++; + } + } + if (!nbdecks) return NULL; + deckid = 1 + rand() % (nbdecks); + } + sprintf(deckFile, RESPATH"/ai/baka/deck%i.txt",deckid); + sprintf(avatarFile, "ai/baka/avatars/avatar%i.jpg",deckid); + sprintf(deckFileSmall, "ai_baka_deck%i",deckid); + } + + MTGDeck * tempDeck = NEW MTGDeck(deckFile, NULL, collection); MTGPlayerCards * deck = NEW MTGPlayerCards(collection,tempDeck); delete tempDeck; - AIPlayerBaka * baka = NEW AIPlayerBaka(deck,deckFileSmall, avatarFile); + AIPlayerBaka * baka = NEW AIPlayerBaka(deck,deckFile, deckFileSmall, avatarFile); return baka; } @@ -665,7 +606,7 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * potentialMana, const c return nextCardToPlay; } -AIPlayerBaka::AIPlayerBaka(MTGPlayerCards * _deck, char * file, char * avatarFile): AIPlayer(_deck,file){ +AIPlayerBaka::AIPlayerBaka(MTGPlayerCards * _deck, char * file, char * fileSmall, char * avatarFile): AIPlayer(_deck,file, fileSmall){ if (fileExists(avatarFile)){ mAvatarTex = JRenderer::GetInstance()->LoadTexture(avatarFile, TEX_TYPE_USE_VRAM); }else{ diff --git a/projects/mtg/src/Credits.cpp b/projects/mtg/src/Credits.cpp index 3889178b2..244f07726 100644 --- a/projects/mtg/src/Credits.cpp +++ b/projects/mtg/src/Credits.cpp @@ -78,14 +78,16 @@ void Credits::compute(Player * _p1, Player * _p2, GameApp * _app){ unlockedQuad = NEW JQuad(unlockedTex, 2, 2, 396, 96); GameOptions::GetInstance()->values[OPTIONS_DIFFICULTY_MODE_UNLOCKED] = GameOption(1); GameOptions::GetInstance()->save(); - }else{ - unlocked = isMomirUnlocked(); - if (unlocked){ + }else if(unlocked = isMomirUnlocked()) { unlockedTex = JRenderer::GetInstance()->LoadTexture("graphics/momir_unlocked.png", TEX_TYPE_USE_VRAM); unlockedQuad = NEW JQuad(unlockedTex, 2, 2, 396, 96); GameOptions::GetInstance()->values[OPTIONS_MOMIR_MODE_UNLOCKED] = GameOption(1); GameOptions::GetInstance()->save(); - } + }else if(unlocked = isEvilTwinUnlocked()) { + unlockedTex = JRenderer::GetInstance()->LoadTexture("graphics/eviltwin_unlocked.png", TEX_TYPE_USE_VRAM); + unlockedQuad = NEW JQuad(unlockedTex, 2, 2, 396, 96); + GameOptions::GetInstance()->values[OPTIONS_EVILTWIN_MODE_UNLOCKED] = GameOption(1); + GameOptions::GetInstance()->save(); } if (unlocked){ JSample * sample = SampleCache::GetInstance()->getSample("sound/sfx/bonus.wav"); @@ -195,3 +197,9 @@ int Credits::isMomirUnlocked(){ if (p1->game->inPlay->countByType("land") == 8) return 1; return 0; } + +int Credits::isEvilTwinUnlocked(){ + if (GameOptions::GetInstance()->values[OPTIONS_EVILTWIN_MODE_UNLOCKED].getIntValue()) return 0; + if (p1->game->inPlay->nb_cards && (p1->game->inPlay->nb_cards == p2->game->inPlay->nb_cards)) return 1; + return 0; +} diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 3ec17f5d2..1f6944199 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -119,9 +119,9 @@ void GameStateDuel::loadPlayerMomir(int playerId, int isAI){ MTGDeck * tempDeck = NEW MTGDeck(deckFile, NULL, mParent->collection); deck[playerId] = NEW MTGPlayerCards(mParent->collection,tempDeck); if (!isAI){ //Human Player - mPlayers[playerId] = NEW HumanPlayer(deck[playerId],deckFileSmall); + mPlayers[playerId] = NEW HumanPlayer(deck[playerId],deckFile, deckFileSmall); }else{ - mPlayers[playerId] = NEW AIMomirPlayer(deck[playerId],deckFile,empty); + mPlayers[playerId] = NEW AIMomirPlayer(deck[playerId],deckFile,deckFileSmall, empty); } delete tempDeck; } @@ -138,15 +138,19 @@ void GameStateDuel::loadPlayer(int playerId, int decknb, int isAI){ MTGDeck * tempDeck = NEW MTGDeck(deckFile, NULL, mParent->collection); deck[playerId] = NEW MTGPlayerCards(mParent->collection,tempDeck); delete tempDeck; - mPlayers[playerId] = NEW HumanPlayer(deck[playerId],deckFileSmall); + mPlayers[playerId] = NEW HumanPlayer(deck[playerId],deckFile, deckFileSmall); }else{ //AI Player, chose deck AIPlayerFactory playerCreator; - mPlayers[playerId] = playerCreator.createAIPlayer(mParent->collection,NULL,decknb); + Player * opponent = NULL; + if (playerId == 1) opponent = mPlayers[0]; + mPlayers[playerId] = playerCreator.createAIPlayer(mParent->collection,opponent,decknb); deck[playerId] = mPlayers[playerId]->game; } - }else{ + }else{ //Random AI deck AIPlayerFactory playerCreator; - mPlayers[playerId] = playerCreator.createAIPlayer(mParent->collection,NULL); + Player * opponent = NULL; + if (playerId == 1) opponent = mPlayers[0]; + mPlayers[playerId] = playerCreator.createAIPlayer(mParent->collection,opponent); deck[playerId] = mPlayers[playerId]->game; } } @@ -262,6 +266,9 @@ void GameStateDuel::Update(float dt) if (!opponentMenu){ opponentMenu = NEW SimpleMenu(DUEL_MENU_CHOOSE_OPPONENT, this, opponentMenuFont, 35, 25, "Choose Opponent"); opponentMenu->Add(0,"Random"); + if (GameOptions::GetInstance()->values[OPTIONS_EVILTWIN_MODE_UNLOCKED].getIntValue()){ + opponentMenu->Add(-1,"Evil Twin", "Can you play against yourself?"); + } nbAIDecks = 0; int found = 1; while (found){ @@ -425,13 +432,13 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) switch(controlId){ case 0: loadPlayer(1); - opponentMenu->Close(); - mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; + opponentMenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; break; default: loadPlayer(1,controlId,1); - opponentMenu->Close(); - mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; + opponentMenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; break; } diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index 5e867db2b..091370130 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -4,8 +4,9 @@ #include "../include/DeckStats.h" -Player::Player(MTGPlayerCards * _deck, string file): Damageable(20){ +Player::Player(MTGPlayerCards * _deck, string file, string fileSmall): Damageable(20){ deckFile = file; + deckFileSmall = fileSmall; game = _deck; game->setOwner(this); manaPool = NEW ManaCost(); @@ -55,7 +56,7 @@ Player * Player::opponent(){ return NULL; } -HumanPlayer::HumanPlayer(MTGPlayerCards * _deck, char * file):Player(_deck, file){ +HumanPlayer::HumanPlayer(MTGPlayerCards * _deck, char * file, string fileSmall):Player(_deck, file, fileSmall){ mAvatarTex = JRenderer::GetInstance()->LoadTexture("player/avatar.jpg", TEX_TYPE_USE_VRAM); if (mAvatarTex) mAvatar = NEW JQuad(mAvatarTex, 0, 0, 35, 50); diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index 5fcca70a5..d812a4b30 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -8,7 +8,7 @@ #include using std::string; -TestSuiteAI::TestSuiteAI(TestSuite * _suite, int playerId):AIPlayer(_suite->buildDeck(playerId),"testsuite"){ +TestSuiteAI::TestSuiteAI(TestSuite * _suite, int playerId):AIPlayer(_suite->buildDeck(playerId),"testsuite", "testsuite"){ suite = _suite; timer= 0; mAvatarTex = JRenderer::GetInstance()->LoadTexture("ai/baka/avatar.jpg", TEX_TYPE_USE_VRAM);