From 9ac1540cdcbbc3fffd6be56d6dcea4dd871c2fad Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 13 Jun 2016 15:27:33 +0800 Subject: [PATCH] Corrections --- projects/mtg/bin/Res/sets/primitives/mtg.txt | 11 +++++ .../bin/Res/sets/primitives/unsupported.txt | 9 ---- projects/mtg/include/AllAbilities.h | 44 +++++++++---------- projects/mtg/include/ExtraCost.h | 1 + projects/mtg/include/MTGDefinitions.h | 3 +- projects/mtg/src/ExtraCost.cpp | 37 ++++++++++++++-- projects/mtg/src/MTGDefinitions.cpp | 3 +- 7 files changed, 71 insertions(+), 37 deletions(-) diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 429d86ef0..af1f5be8e 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -3075,6 +3075,17 @@ power=4 toughness=6 [/card] [card] +name=Angel of Jubilation +abilities=flying,cantpaylifeorsaccreatures +auto=lord(other creature[-black]|mybattlefield) 1/1 +text=Flying -- Other nonblack creatures you control get +1/+1. -- Players can't pay life or sacrifice creatures to cast spells or activate abilities. +mana={1}{W}{W}{W} +type=Creature +subtype=Angel +power=3 +toughness=3 +[/card] +[card] name=Angel of Light abilities=flying,vigilance text=Flying, vigilance diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 18d4ac130..dfc7dbd30 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -527,15 +527,6 @@ power=6 toughness=6 [/card] [card] -name=Angel of Jubilation -text=Flying -- Other nonblack creatures you control get +1/+1. -- Players can't pay life or sacrifice creatures to cast spells or activate abilities. -mana={1}{W}{W}{W} -type=Creature -subtype=Angel -power=3 -toughness=3 -[/card] -[card] name=Angel of Renewal text=Flying -- When Angel of Renewal enters the battlefield, you gain 1 life for each creature you control. mana={5}{W} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 285d50efc..3d8b6e376 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -634,25 +634,25 @@ private: { intValue = 0; for (int j = card->controller()->game->inPlay->nb_cards - 1; j >= 0; --j) - { if (card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_CREATURE) && card->controller()->game->inPlay->cards[j] != card) intValue += card->controller()->game->inPlay->cards[j]->getManaCost()->getConvertedCost(); - } } else if (s == "pdauntless")//Dauntless Dourbark { + MTGGameZone * checkZone = card->controller()->inPlay(); intValue = - countCardTypeinZone("forest",card->controller()->inPlay()) + - countCardTypeinZone("treefolk",card->controller()->inPlay()); + countCardTypeinZone("forest",checkZone) + + countCardTypeinZone("treefolk",checkZone); } else if (s == "pbasiclandtypes")//Basic Land types { + MTGGameZone * checkZone = card->controller()->inPlay(); intValue = - cardHasTypeinZone("forest",card->controller()->inPlay()) + - cardHasTypeinZone("plains",card->controller()->inPlay()) + - cardHasTypeinZone("swamp",card->controller()->inPlay()) + - cardHasTypeinZone("island",card->controller()->inPlay()) + - cardHasTypeinZone("mountain",card->controller()->inPlay()); + cardHasTypeinZone("forest",checkZone) + + cardHasTypeinZone("plains",checkZone) + + cardHasTypeinZone("swamp",checkZone) + + cardHasTypeinZone("island",checkZone) + + cardHasTypeinZone("mountain",checkZone); } else if (s == "myname")//Name of the card you control { @@ -662,9 +662,7 @@ private: { intValue = 0; for (int i = 0; i < 2; i++) - { intValue += countCardNameinZone(card->name,card->getObserver()->players[i]->game->battlefield); - } } else if (s == "pgbzombie")//Soulless One { @@ -689,24 +687,24 @@ private: { for (int i = 0; i < 2; i++) { + MTGGameZone * checkZone = card->getObserver()->players[i]->game->graveyard; intValue = - cardHasTypeinZone("planeswalker",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("tribal",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("sorcery",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("land",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("instant",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("enchantment",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("creature",card->getObserver()->players[i]->game->graveyard) + - cardHasTypeinZone("artifact",card->getObserver()->players[i]->game->graveyard); + cardHasTypeinZone("planeswalker",checkZone) + + cardHasTypeinZone("tribal",checkZone) + + cardHasTypeinZone("sorcery",checkZone) + + cardHasTypeinZone("land",checkZone) + + cardHasTypeinZone("instant",checkZone) + + cardHasTypeinZone("enchantment",checkZone) + + cardHasTypeinZone("creature",checkZone) + + cardHasTypeinZone("artifact",checkZone); } } else if (s == "morethanfourcards") { intValue = 0; - if ((card->playerTarget) && (card->playerTarget->game->hand->nb_cards - 4)>0) - intValue = (card->playerTarget->game->hand->nb_cards - 4); - else if ((card->controller()->opponent()->game->hand->nb_cards - 4)>0) - intValue = (card->controller()->opponent()->game->hand->nb_cards - 4); + int damage = card->playerTarget ? card->playerTarget->game->hand->nb_cards - 4 : card->controller()->opponent()->game->hand->nb_cards - 4; + if ( damage > 0 ) + intValue = damage; } else if (s == "powertotalinplay")//Count Total Power of Creatures you control... Formidable { diff --git a/projects/mtg/include/ExtraCost.h b/projects/mtg/include/ExtraCost.h index 12cdd6b17..a42a3f779 100644 --- a/projects/mtg/include/ExtraCost.h +++ b/projects/mtg/include/ExtraCost.h @@ -76,6 +76,7 @@ class SacrificeCost : public ExtraCost { public: SacrificeCost(TargetChooser *_tc = NULL); + virtual int canPay(); virtual int doPay(); virtual SacrificeCost * clone() const; }; diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 3ac589f10..d11f06148 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -244,7 +244,8 @@ class Constants DEVOID = 123, CANTCHANGELIFE = 124, COMBATTOUGHNESS = 125, - NB_BASIC_ABILITIES = 126, + CANTPAYLIFEORSACCREATURES = 126, + NB_BASIC_ABILITIES = 127, RARITY_S = 'S', //Special Rarity diff --git a/projects/mtg/src/ExtraCost.cpp b/projects/mtg/src/ExtraCost.cpp index 2f09a71b9..31c772b84 100644 --- a/projects/mtg/src/ExtraCost.cpp +++ b/projects/mtg/src/ExtraCost.cpp @@ -245,7 +245,9 @@ LifeCost::LifeCost(TargetChooser *_tc) int LifeCost::canPay() { MTGCardInstance * _target = (MTGCardInstance *) target; - if(_target->controller()->life <= 0 || _target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE)) + if (_target->controller()->life <= 0 || _target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE) || + _target->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) || + _target->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES)) { return 0; } @@ -283,7 +285,9 @@ SpecificLifeCost::SpecificLifeCost(TargetChooser *_tc, int slc) int SpecificLifeCost::canPay() { MTGCardInstance * _target = (MTGCardInstance *) target; - if(_target->controller()->life >= slc && !_target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE)) + if(_target->controller()->life >= slc && !_target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE) && + !_target->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) && + !_target->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES)) { return 1; } @@ -331,7 +335,16 @@ LifeorManaCost::LifeorManaCost(TargetChooser *_tc, string manaType) int LifeorManaCost::canPay() { MTGCardInstance * _target = (MTGCardInstance *) target; - if (_target->controller()->getManaPool()->canAfford(getManaCost()) || _target->controller()->life > 1) + if ( _target->controller()->life <= 1 || _target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE) || + _target->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) || + _target->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES)) + { + return _target->controller()->getManaPool()->canAfford(getManaCost()); + } + else if((_target->controller()->life > 1 || _target->controller()->getManaPool()->canAfford(getManaCost())) && + (!_target->controller()->inPlay()->hasAbility(Constants::CANTCHANGELIFE) && + !_target->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) && + !_target->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES))) { return 1; } @@ -923,6 +936,12 @@ ExtraCost("Select creature to offer", _tc) int Offering::canPay() { + if(source->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) || + source->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES)) + { + return 0; + } + if (target && (!source->controller()->getManaPool()->canAfford(source->getManaCost()->Diff(target->getManaCost())))) { tc->removeTarget(target); @@ -980,6 +999,18 @@ SacrificeCost::SacrificeCost(TargetChooser *_tc) { } +int SacrificeCost::canPay() +{ + if(source->controller()->opponent()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES) || + source->controller()->game->battlefield->hasAbility(Constants::CANTPAYLIFEORSACCREATURES)) + { + if (target && target->isCreature()) + return 0; + } + + return 1; +} + int SacrificeCost::doPay() { if (target) diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index bbdd5cf9b..8199569b6 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -155,7 +155,8 @@ const char* Constants::MTGBasicAbilities[] = { "libraryeater", "devoid", "cantchangelife", - "combattoughness" + "combattoughness", + "cantpaylifeorsaccreatures" }; map Constants::MTGBasicAbilitiesMap;