From 2eca7240013da2fd225c401eacd9fef67cb7dbee Mon Sep 17 00:00:00 2001 From: "omegablast2002@yahoo.com" Date: Sun, 3 Apr 2011 12:24:21 +0000 Subject: [PATCH] 2 things, fixed a bug with Withering Wisps, moved the parsing of the limit string into the isreactingtoclick function, this allows word varibles such as type: to be used. 2nd, removed a varible isTempPhased, it *appear* it might not be needed, tho i didn't handle phasing the way im converting it to for a reason, so cross your fingers and hope all goes well. BTW: do not email me about any bugs that ariase with phasing or phased out creature, im not excepting bug reports on it to my email box...instead open a ticket with a repro method and mark it as critical. --- projects/mtg/include/AllAbilities.h | 6 ++++-- projects/mtg/include/MTGCardInstance.h | 1 - projects/mtg/src/AllAbilities.cpp | 27 +++++++++++++++++++++----- projects/mtg/src/GameObserver.cpp | 5 ++--- projects/mtg/src/MTGAbility.cpp | 8 ++++---- projects/mtg/src/MTGCardInstance.cpp | 1 - 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 45fcdbcf7..7344e122c 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1027,10 +1027,11 @@ class GenericActivatedAbility: public ActivatedAbility, public NestedAbility { public: int limitPerTurn; + string limit; int counters; MTGGameZone * activeZone; - GenericActivatedAbility(int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, int _tap = 0, int limit = 0, + GenericActivatedAbility(int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, int _tap = 0, string limit = "", int restrictions = 0, MTGGameZone * dest = NULL); int resolve(); const char * getMenuText(); @@ -1153,11 +1154,12 @@ class GenericTargetAbility: public TargetAbility public: int limitPerTurn; + string limit; int counters; MTGGameZone * activeZone; GenericTargetAbility(int _id, MTGCardInstance * _source, TargetChooser * _tc, MTGAbility * a, ManaCost * _cost = NULL, - int _tap = 0, int limit = 0, int restrictions = 0, MTGGameZone * dest = NULL); + int _tap = 0, string limit = "", int restrictions = 0, MTGGameZone * dest = NULL); const char * getMenuText(); ~GenericTargetAbility(); GenericTargetAbility * clone() const; diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 4dfa934e3..1cef23edc 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -76,7 +76,6 @@ class MTGCardInstance: public CardPrimitive, public MTGCard, public Damageable { bool turningOver; bool isMorphed; bool isPhased; - bool isTempPhased; int phasedTurn; bool graveEffects; bool exileEffects; diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index e84765410..ac6fa6623 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -5,8 +5,8 @@ //Generic Activated Abilities GenericActivatedAbility::GenericActivatedAbility(int _id, MTGCardInstance * card, MTGAbility * a, ManaCost * _cost, int _tap, - int limit, int restrictions, MTGGameZone * dest) : - ActivatedAbility(_id, card, _cost, restrictions, _tap), NestedAbility(a), limitPerTurn(limit), activeZone(dest) + string limit, int restrictions, MTGGameZone * dest) : + ActivatedAbility(_id, card, _cost, restrictions, _tap), NestedAbility(a), limit(limit), activeZone(dest) { counters = 0; target = ability->target; @@ -37,6 +37,12 @@ int GenericActivatedAbility::isReactingToClick(MTGCardInstance * card, ManaCost { if (dynamic_cast (ability) && !card->isMorphed && !card->morphed && card->turningOver) return 0; + if(limit.size()) + { + WParsedInt * value = NEW WParsedInt(limit.c_str(),NULL,source); + limitPerTurn = value->getValue(); + delete value; + } if (limitPerTurn && counters >= limitPerTurn) return 0; return ActivatedAbility::isReactingToClick(card, mana); @@ -268,7 +274,12 @@ int AAPhaseOut::resolve() MTGCardInstance * _target = (MTGCardInstance *) target; if (_target) { - _target->isTempPhased = true; + _target->isPhased = true; + + _target->phasedTurn = game->turn; + if(_target->view) + _target->view->alpha = 50; + _target->initAttackersDefensers(); return 1; } return 0; @@ -2001,8 +2012,8 @@ MultiAbility::~MultiAbility() //Generic Target Ability GenericTargetAbility::GenericTargetAbility(int _id, MTGCardInstance * _source, TargetChooser * _tc, MTGAbility * a, - ManaCost * _cost, int _tap, int limit, int restrictions, MTGGameZone * dest) : - TargetAbility(_id, _source, _tc, _cost, restrictions, _tap), limitPerTurn(limit), activeZone(dest) + ManaCost * _cost, int _tap, string limit, int restrictions, MTGGameZone * dest) : + TargetAbility(_id, _source, _tc, _cost, restrictions, _tap), limit(limit), activeZone(dest) { ability = a; MTGAbility * core = AbilityFactory::getCoreAbility(a); @@ -2088,6 +2099,12 @@ int GenericTargetAbility::resolve() int GenericTargetAbility::isReactingToClick(MTGCardInstance * card, ManaCost * mana) { + if(limit.size()) + { + WParsedInt * value = NEW WParsedInt(limit.c_str(),NULL,source); + limitPerTurn = value->getValue(); + delete value; + } if (limitPerTurn && counters >= limitPerTurn) return 0; return TargetAbility::isReactingToClick(card, mana); diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index afc72a672..8a2d7e9b2 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -435,7 +435,7 @@ void GameObserver::gameStateBasedEffects() ////////////////////////// //handles phasing events// ////////////////////////// - if((card->has(Constants::PHASING)&& currentGamePhase == Constants::MTG_PHASE_UNTAP && currentPlayer == card->controller() && card->phasedTurn != turn && !card->isPhased) || (card->isTempPhased && !card->isPhased)) + if(card->has(Constants::PHASING)&& currentGamePhase == Constants::MTG_PHASE_UNTAP && currentPlayer == card->controller() && card->phasedTurn != turn && !card->isPhased) { card->isPhased = true; card->phasedTurn = turn; @@ -443,13 +443,12 @@ void GameObserver::gameStateBasedEffects() card->view->alpha = 50; card->initAttackersDefensers(); } - else if((card->has(Constants::PHASING) || card->isTempPhased)&& currentGamePhase == Constants::MTG_PHASE_UNTAP && currentPlayer == card->controller() && card->phasedTurn != turn) + else if((card->has(Constants::PHASING) || card->isPhased)&& currentGamePhase == Constants::MTG_PHASE_UNTAP && currentPlayer == card->controller() && card->phasedTurn != turn) { card->isPhased = false; card->phasedTurn = turn; if(card->view) card->view->alpha = 255; - card->isTempPhased = false; } if (card->target && isInPlay(card->target) && (card->hasSubtype("equipment") || card->hasSubtype("aura"))) { diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index f424e5d70..e5e8ee1a0 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -930,11 +930,11 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG return amp; } - int limit = 0; + string limit = ""; size_t limit_str = sWithoutTc.find("limit:"); if (limit_str != string::npos) { - limit = atoi(sWithoutTc.substr(limit_str + 6).c_str()); + limit = sWithoutTc.substr(limit_str + 6); } AEquip *ae = dynamic_cast (a); @@ -3184,7 +3184,7 @@ void AbilityFactory::addAbilities(int _id, Spell * spell) if (spell->getNbTargets() == 1) { card->target = spell->getNextCardTarget(); - if (card->target && (!spell->tc->canTarget(card->target) || card->target->isTempPhased)) + if (card->target && (!spell->tc->canTarget(card->target) || card->target->isPhased)) { MTGPlayerCards * zones = card->controller()->game; zones->putInZone(card, spell->from, card->owner->game->graveyard); @@ -4195,7 +4195,7 @@ int TargetAbility::resolve() ability->target = t; //do nothing if the target controller responded by phasing out the target. MTGCardInstance * targeted = (MTGCardInstance*)t; - if (targeted->typeAsTarget() == TARGET_CARD && targeted->isTempPhased) + if (targeted->typeAsTarget() == TARGET_CARD && targeted->isPhased) return 0; if (ability->oneShot) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 807128d4f..25f135de5 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -136,7 +136,6 @@ void MTGCardInstance::initMTGCI() turningOver = false; isMorphed = false; isPhased = false; - isTempPhased = false; phasedTurn = -1; didattacked = 0; didblocked = 0;