From 62fa9acc9ff5c924963b25582645c2cb09c8984f Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 3 Jun 2016 10:40:38 +0800 Subject: [PATCH 1/2] Cascade Class seperate cascade and fix cant life change :) --- projects/mtg/include/AllAbilities.h | 19 +++- projects/mtg/src/AllAbilities.cpp | 131 +++++++++++++++++----------- projects/mtg/src/Damage.cpp | 4 +- projects/mtg/src/GameObserver.cpp | 2 +- projects/mtg/src/MTGAbility.cpp | 2 +- 5 files changed, 97 insertions(+), 61 deletions(-) diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 1587f488b..8961159be 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -6076,16 +6076,27 @@ class AADepleter: public ActivatedAbilityTP public: string nbcardsStr; bool toexile; - bool cascade; AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL, - int who = TargetChooser::UNSET, bool toexile = false, bool cascade = false); + int who = TargetChooser::UNSET, bool toexile = false); int resolve(); - string Cascade; - void toCastCard(MTGCardInstance * card); const string getMenuText(); AADepleter * clone() const; }; + +//AACascade +class AACascade: public ActivatedAbilityTP +{ +public: + string nbcardsStr; + AACascade(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost = NULL, + int who = TargetChooser::UNSET); + int resolve(); + void toCastCard(MTGCardInstance * card); + const string getMenuText(); + AACascade * clone() const; +}; + //Generic skip turn/extra turn class AAModTurn: public ActivatedAbilityTP { diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 303d0bcd1..c11272807 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -261,12 +261,50 @@ AADamager * AADamager::clone() const //AADepleter -AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile, bool cascade) : - ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile),cascade(cascade) +AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who, bool toexile) : + ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr),toexile(toexile) { - Cascade = "Cascade"; } int AADepleter::resolve() + { + Player * player = getPlayerFromTarget(getTarget()); + if (player) + { + WParsedInt numCards(nbcardsStr, NULL, source); + MTGLibrary * library = player->game->library; + int counter = 0; + for (int i = 0; i < numCards.getValue(); i++) + { + if (library->nb_cards) + { + if(toexile) + player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile); + else + player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard); + } + } + } + return 1; + } + +const string AADepleter::getMenuText() +{ + if(toexile) + return "Ingest"; + return "Deplete"; +} + +AADepleter * AADepleter::clone() const +{ + return NEW AADepleter(*this); +} + +//AACascade +AACascade::AACascade(GameObserver* observer, int _id, MTGCardInstance * card, Targetable * _target,string nbcardsStr, ManaCost * _cost, int who) : + ActivatedAbilityTP(observer, _id, card, _target, _cost, who),nbcardsStr(nbcardsStr) +{ +} + int AACascade::resolve() { Player * player = getPlayerFromTarget(getTarget()); if (player) @@ -280,85 +318,72 @@ AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, { if (library->nb_cards) { - if(cascade) + for(int z = library->nb_cards; z >= 0; z--) { - for(int z = library->nb_cards; z >= 0; z--) + if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost())) { - if(!library->cards[z]->isLand() && (library->cards[z]->getManaCost()->getConvertedCost() < source->getManaCost()->getConvertedCost())) + viable = library->cards[z]; + player->game->putInZone(viable, library, exile); { - viable = library->cards[z]; - player->game->putInZone(viable, library, exile); + vectorselectedCards; + for(int j=0; j < library->nb_cards; j++) { - vectorselectedCards; - for(int j=0; j < library->nb_cards; j++) + if(library->cards[j]->isCascaded) + { + library->cards[j]->isCascaded = false; + selectedCards.push_back(library->cards[j]); + } + } + if(selectedCards.size()) + { + std::random_shuffle ( selectedCards.begin(), selectedCards.end() ); + for(unsigned int i = 0; i < selectedCards.size();++i) { - if(library->cards[j]->isCascaded) - { - library->cards[j]->isCascaded = false; - selectedCards.push_back(library->cards[j]); - } - } - if(selectedCards.size()) - { - std::random_shuffle ( selectedCards.begin(), selectedCards.end() ); - for(unsigned int i = 0; i < selectedCards.size();++i) + vectoroldOrder = library->cards; + vectornewOrder; + newOrder.push_back(selectedCards[i]); + for(unsigned int k = 0;k < oldOrder.size();++k) { - vectoroldOrder = library->cards; - vectornewOrder; - newOrder.push_back(selectedCards[i]); - for(unsigned int k = 0;k < oldOrder.size();++k) - { - MTGCardInstance * rearranged = oldOrder[k]; - if(rearranged != selectedCards[i]) - newOrder.push_back(rearranged); - } - library->cards = newOrder; + MTGCardInstance * rearranged = oldOrder[k]; + if(rearranged != selectedCards[i]) + newOrder.push_back(rearranged); } + library->cards = newOrder; } } - toCastCard(viable->next); - return 1; - } - else - { - library->cards[library->nb_cards - 1]->isCascaded=true; - counter++; } + toCastCard(viable->next); + return 1; + } + else + { + library->cards[library->nb_cards - 1]->isCascaded=true; + counter++; } } - else if(toexile) - player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->exile); - else - player->game->putInZone(library->cards[library->nb_cards - 1], library, player->game->graveyard); } } } return 1; } -void AADepleter::toCastCard(MTGCardInstance * thisCard) +void AACascade::toCastCard(MTGCardInstance * thisCard) { MTGAbility *ac = NEW AACastCard(game, game->mLayers->actionLayer()->getMaxId(), thisCard, thisCard,false,false,true,"","",false,false); - //ac->oneShot=true; - //ac->addToGame(); - MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard,true); + MayAbility *ma1 = NEW MayAbility(game, game->mLayers->actionLayer()->getMaxId(), ac, thisCard->clone(),true); MTGAbility *ga1 = NEW GenericAddToGame(game, game->mLayers->actionLayer()->getMaxId(), thisCard,NULL,ma1); ga1->resolve(); return; } -const string AADepleter::getMenuText() +const string AACascade::getMenuText() { - if(cascade) - return Cascade; - else if(toexile) - return "Ingest"; - return "Deplete"; + return "Cascade"; } -AADepleter * AADepleter::clone() const +AACascade * AACascade::clone() const { - return NEW AADepleter(*this); + return NEW AACascade(*this); } //take extra turns or skip turns, values in the negitive will make you skip. diff --git a/projects/mtg/src/Damage.cpp b/projects/mtg/src/Damage.cpp index 9338783f0..67dccdfc7 100644 --- a/projects/mtg/src/Damage.cpp +++ b/projects/mtg/src/Damage.cpp @@ -229,8 +229,8 @@ int Damage::resolve() { // "Normal" case, //return the left over amount after effects have been applied to them. - if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && !((Player *)target)->inPlay()->hasAbility(Constants::CANTCHANGELIFE)) - a = target->dealDamage(damage); + if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER && ((Player *)target)->inPlay()->hasAbility(Constants::CANTCHANGELIFE)) + ;//do nothing else a = target->dealDamage(damage); target->damageCount += damage;//the amount must be the actual damage so i changed this from 1 to damage, this fixes pdcount and odcount diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 2c2983450..423ec5efd 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -1666,7 +1666,7 @@ ostream& operator<<(ostream& out, const GameObserver& g) out << g.mSeed; out << endl; out << "rvalues:"; - g.randomGenerator.saveUsedRandValues(out); + out << g.randomGenerator.saveUsedRandValues(out); out << endl; out << g.startupGameSerialized; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index b1ff82ab6..8b618683d 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -2689,7 +2689,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG if (splitCascade.size()) { Targetable * t = spell ? spell->getNextTarget() : NULL; - MTGAbility * a = NEW AADepleter(observer, id, card, t , splitCascade[1], NULL, who, false,true); + MTGAbility * a = NEW AACascade(observer, id, card, t , splitCascade[1], NULL, who); a->oneShot = 1; return a; } From be53c68d28e0cf0ad0f7955c4c87df0d41057d92 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 3 Jun 2016 11:36:40 +0800 Subject: [PATCH 2/2] unused variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AllAbilities.cpp:275:17: error: unused variable ‘counter’ [-Werror=unused-variable] --- projects/mtg/src/AllAbilities.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index c11272807..35926512f 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -272,7 +272,6 @@ AADepleter::AADepleter(GameObserver* observer, int _id, MTGCardInstance * card, { WParsedInt numCards(nbcardsStr, NULL, source); MTGLibrary * library = player->game->library; - int counter = 0; for (int i = 0; i < numCards.getValue(); i++) { if (library->nb_cards)