diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 4e84b29a1..fa7803ee0 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -171,7 +171,6 @@ public: int canBlock(); int canBlock(MTGCardInstance * opponent); int canAttack(); - int canPWAttack(); int isAttacker(); Targetable * isAttacking; MTGCardInstance * storedCard; diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index e48bfa906..86486e21a 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -266,8 +266,7 @@ class Constants HIDDENFACE = 144, ANYTYPEOFMANA = 145, NECROED = 146, - CANTATTACKPW = 147, - NB_BASIC_ABILITIES = 148, + NB_BASIC_ABILITIES = 147, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/include/MTGRules.h b/projects/mtg/include/MTGRules.h index 76362fe44..45cd82c56 100644 --- a/projects/mtg/include/MTGRules.h +++ b/projects/mtg/include/MTGRules.h @@ -279,7 +279,7 @@ public: MTGAttackRule(GameObserver* observer, int _id); const string getMenuText() { - return "Attack Player"; + return "Attacker"; } int receiveEvent(WEvent * event); virtual MTGAttackRule * clone() const; diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 8b8268c83..99236b420 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1158,14 +1158,7 @@ AADamager::AADamager(GameObserver* observer, int _id, MTGCardInstance * _source, { MTGCardInstance * _target = dynamic_cast(target); if(_target && _target->hasType(Subtypes::TYPE_PLANESWALKER)) - { - if(d.size()) - { - WParsedInt parsedNum(d, NULL, source); - return _("Deal " + parsedNum.getStringValue() + " Damage to " + _target->name).c_str(); - } return _target->name.c_str(); - } if(redirected) { if(d.size()) diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index dc8a2011d..160edc59e 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -684,8 +684,6 @@ void GameObserver::gameStateBasedEffects() int onum = w+1; card->zpos = abs(onum - zone->nb_cards)+1; } - if(card && zone->owner)//last controller - card->lastController = zone->owner; } @@ -714,6 +712,8 @@ void GameObserver::gameStateBasedEffects() for (int j = zone->nb_cards - 1; j >= 0; j--) { MTGCardInstance * card = zone->cards[j]; + //lastcontroller zone update + card->lastController = players[i]; card->entersBattlefield = 0; card->LKIpower = card->power; card->LKItoughness = card->toughness; @@ -1049,14 +1049,15 @@ void GameObserver::gameStateBasedEffects() int skipLevel = (currentPlayer->playMode == Player::MODE_TEST_SUITE || mLoading) ? Constants::ASKIP_NONE : options[Options::ASPHASES].number; bool noattackers = currentPlayer->noPossibleAttackers(); - bool hasdiaochan = currentPlayer->game->inPlay->hasAlias(10544);//diaochan activated ability combat begins + bool nodiaochan = (currentPlayer->game->battlefield->countByAlias(10544)<1)?true:false; if (skipLevel == Constants::ASKIP_SAFE || skipLevel == Constants::ASKIP_FULL) { if ((opponent()->isAI() && !(isInterrupting)) && ((mCurrentGamePhase == MTG_PHASE_UNTAP) || (mCurrentGamePhase == MTG_PHASE_DRAW) - || ((mCurrentGamePhase == MTG_PHASE_COMBATBEGIN) && (!hasdiaochan)) + || ((mCurrentGamePhase == MTG_PHASE_COMBATBEGIN) && (nodiaochan)) || ((mCurrentGamePhase == MTG_PHASE_COMBATATTACKERS) && (noattackers)) - || (mCurrentGamePhase == MTG_PHASE_COMBATEND) || (mCurrentGamePhase == MTG_PHASE_ENDOFTURN) + || (mCurrentGamePhase == MTG_PHASE_COMBATEND) + || (mCurrentGamePhase == MTG_PHASE_ENDOFTURN) || ((mCurrentGamePhase == MTG_PHASE_CLEANUP) && (currentPlayer->game->hand->nb_cards < 8)))) userRequestNextGamePhase(); } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index ae0e396fa..99289b7e8 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -742,10 +742,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe } check = restriction[i].find("didnotcastnontoken"); if(check != string::npos) + { + restriction.push_back("lastturn(*[-token]|mystack,mybattlefield)~lessthan~1"); + } + check = restriction[i].find("didnotcastnontoken"); + if(check != string::npos) { restriction.push_back("lastturn(*[-token]|opponentstack,opponentbattlefield)~lessthan~1"); } - check = restriction[i].find("paid("); if(check != string::npos) { diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 38dec1f10..63bcc6707 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -690,23 +690,6 @@ int MTGCardInstance::canAttack() return 1; } -int MTGCardInstance::canPWAttack() -{ - if (has(Constants::CANTATTACKPW)) - return 0; - if (tapped) - return 0; - if (hasSummoningSickness()) - return 0; - if (has(Constants::DEFENSER) && !has(Constants::CANATTACK)) - return 0; - if (!isCreature()) - return 0; - if (!isInPlay(observer)) - return 0; - return 1; -} - int MTGCardInstance::addToToughness(int value) { toughness += value; diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index c776d4310..2f1ac37d8 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -177,8 +177,7 @@ const char* Constants::MTGBasicAbilities[] = { "cantcrew", "hiddenface",//test for hiding card "anytypeofmana", - "necroed"//hide necored, - "cantpwattack" + "necroed"//hide necored }; map Constants::MTGBasicAbilitiesMap; diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index 8c1a3471a..277f92371 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -1142,8 +1142,6 @@ MTGGameZone * MTGGameZone::intToZone(GameObserver *g, int zoneId, MTGCardInstanc else p2 = target->controller(); - //if(p2 != p && p2 != p->opponent())//should match at least one - //p2 = p; MTGGameZone * result = intToZone(zoneId, p, p2); if (result) return result; diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 98a60bedf..9c4e75428 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -1862,13 +1862,8 @@ int MTGAttackRule::receiveEvent(WEvent *e) card->setAttacker(0); if (card->isAttacker() && !card->has(Constants::VIGILANCE)) card->tap(); - if (card->isAttacker() && card->has(Constants::CANTATTACK) && (card->isAttacking && ((Damageable*)card->isAttacking)->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)) + if (card->isAttacker() && card->has(Constants::CANTATTACK)) card->toggleAttacker();//if a card has cantattack, then you cant - /*if (card->isAttacker() && card->has(Constants::CANTATTACKPW) && (card->isAttacking && ((Damageable*)card->isAttacking)->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE)) - { - if(((MTGCardInstance *)card->isAttacking)->hasType("planeswalker")) - card->toggleAttacker(); - }*/ } return 1; } @@ -1920,7 +1915,7 @@ int MTGPlaneswalkerAttackRule::isReactingToClick(MTGCardInstance * card, ManaCos return 0; if (card->isAttacker()) return 1; - if (card->canPWAttack() && card->attackPlaneswalkerCost < 1) + if (card->canAttack() && card->attackPlaneswalkerCost < 1) return 1; } return 0; @@ -1977,7 +1972,7 @@ bool MTGPlaneswalkerAttackRule::select(Target* t) if (CardView* c = dynamic_cast(t)) { MTGCardInstance * card = c->getCard(); - if (card->canPWAttack() && !card->isPhased) + if (card->canAttack() && !card->isPhased) return true; } return false; diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index cb2309c86..33bb22994 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -262,8 +262,6 @@ bool Player::hasPossibleAttackers() MTGCardInstance * c = z->cards[j]; if (c->canAttack() && c->isCreature()) return true; - if (c->canPWAttack() && c->isCreature() && c->controller()->opponent()->inPlay()->hasType("planeswalker")) - return true; } return false; }