diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index f7223be6b..2dd637de4 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -5009,7 +5009,8 @@ public: string flipStats; bool isflipcard; bool forcedcopy; - AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats, bool isflipcard = false, bool forcedcopy = false); + string forcetype; + AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, string flipStats, bool isflipcard = false, bool forcedcopy = false, string forcetype = ""); int resolve(); int testDestroy(); const string getMenuText(); diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 77e68eeda..a018a85db 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -285,7 +285,8 @@ class Constants ADVENTURE = 159, MENTOR = 160, PROWESS = 161, - NB_BASIC_ABILITIES = 162, + NOFIZZLEALTERNATIVE = 162, + NB_BASIC_ABILITIES = 163, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 9d3d428ea..49a5eee7a 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -2999,6 +2999,8 @@ int AAFizzler::resolve() sCard = sTarget->source; if (!sCard || !sTarget || sCard->has(Constants::NOFIZZLE)) return 0; + if (sCard->has(Constants::NOFIZZLEALTERNATIVE) && sCard->alternateCostPaid[ManaCost::MANA_PAID_WITH_ALTERNATIVE]) // No fizzle if paid with alternative cost (es. Zendikar Rising Modal Double Faced cards). + return 0; if (source->alias == 111057 && sTarget)//Draining Whelk { for (int j = sTarget->cost->getConvertedCost(); j > 0; j--) @@ -3683,8 +3685,8 @@ AAMeld * AAMeld::clone() const } // flip a card -AAFlip::AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats, bool isflipcard, bool forcedcopy) : -InstantAbility(observer, id, card, _target),flipStats(flipStats),isflipcard(isflipcard),forcedcopy(forcedcopy) +AAFlip::AAFlip(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target,string flipStats, bool isflipcard, bool forcedcopy, string forcetype) : +InstantAbility(observer, id, card, _target),flipStats(flipStats),isflipcard(isflipcard),forcedcopy(forcedcopy),forcetype(forcetype) { target = _target; } @@ -3712,6 +3714,13 @@ int AAFlip::resolve() while (_target->next) _target = _target->next; + + if(forcetype != "" && _target) // Added to flip instants and sorceries as permanents (es. Zendikar Rising Modal Double Faced cards). + { + _target = _target->controller()->game->putInZone(_target,_target->currentZone,_target->controller()->game->battlefield, false); + source->addType(forcetype); + source->controller()->game->battlefield->cardsSeenThisTurn.push_back(source); + } AbilityFactory af(game); _target->isFlipped = true; diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index e17406426..8dacfba6e 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -825,6 +825,22 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe if(!found) return 0; } + check = restriction[i].find("can play land"); + if(check != string::npos) + { + bool isLand = card->hasType("Land"); + bool canplay = true; + if(!isLand) + card->addType("Land"); + if (observer->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, observer->currentActionPlayer->game->inPlay) == PlayRestriction::CANT_PLAY) + canplay = false; + if (!card->StackIsEmptyandSorcerySpeed()) + canplay = false; + if(!isLand) + card->removeType("Land"); + if(!canplay) + return 0; + } check = restriction[i].find("paid("); if(check != string::npos) { @@ -4042,8 +4058,14 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG /*vectorFlipStats = split(splitFlipStat[1],'%');*/ flipStats = splitFlipStat[1]; } + vector splitType = parseBetween(s, "forcetype(", ")", true); // Added to flip instants and sorceries as permanents (es. Zendikar Rising Modal Double Faced cards). + string forcetype = ""; + if(splitType.size() && splitType[1].size()) + { + forcetype = splitType[1]; + } bool transmode = card->getdoubleFaced() == "kamiflip"?true:false; - MTGAbility * a = NEW AAFlip(observer, id, card, target,flipStats,transmode); + MTGAbility * a = NEW AAFlip(observer, id, card, target, flipStats, transmode, false, forcetype); return a; } diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index c6c424e26..1a60cd259 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -192,7 +192,8 @@ const char* Constants::MTGBasicAbilities[] = { "mutate", //it can mutate "adventure", //it can be adventure "mentor", - "prowess" + "prowess", + "nofizzle alternative" // No fizzle if paid with alternative cost (es. Zendikar Rising Modal Double Faced cards). }; map Constants::MTGBasicAbilitiesMap;