added epic cards, fixed maxcast bug
maxcast(*)0 - checks for the current action player of that turn, but when you passes the turn to the opponent, you can cast instant or cards with flash instead because you are not the current player, it mustcheck the controller of the card with play restriction if he can play it or not whether it your turn or the opponents turn.
This commit is contained in:
@@ -1328,6 +1328,31 @@ AAFakeAbility * AAFakeAbility::clone() const
|
||||
return NEW AAFakeAbility(*this);
|
||||
}
|
||||
|
||||
//EPIC
|
||||
AAEPIC::AAEPIC(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * _target, string _named,ManaCost * cost):
|
||||
ActivatedAbility(observer, id, source, cost, 0),named(_named)
|
||||
{
|
||||
this->target = _target;
|
||||
}
|
||||
int AAEPIC::resolve()
|
||||
{
|
||||
MTGCardInstance * _target = (MTGCardInstance *)target;
|
||||
_target->controller()->epic = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const string AAEPIC::getMenuText()
|
||||
{
|
||||
if(named.size())
|
||||
return named.c_str();
|
||||
return "EPIC";
|
||||
}
|
||||
|
||||
AAEPIC * AAEPIC::clone() const
|
||||
{
|
||||
return NEW AAEPIC(*this);
|
||||
}
|
||||
|
||||
// Fizzler
|
||||
AAFizzler::AAFizzler(GameObserver* observer, int _id, MTGCardInstance * card, Spell * _target, ManaCost * _cost) :
|
||||
ActivatedAbility(observer, _id, card, _cost, 0)
|
||||
|
||||
@@ -2408,7 +2408,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
return a;
|
||||
}
|
||||
|
||||
//Reset damages on cards
|
||||
//Do nothing
|
||||
found = s.find("donothing");
|
||||
if (found != string::npos)
|
||||
{
|
||||
@@ -2418,6 +2418,16 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
||||
return a;
|
||||
}
|
||||
|
||||
//Epic
|
||||
found = s.find("epic");
|
||||
if (found != string::npos)
|
||||
{
|
||||
|
||||
MTGAbility * a = NEW AAEPIC(observer, id, card, target,newName);
|
||||
a->oneShot = 1;
|
||||
return a;
|
||||
}
|
||||
|
||||
//Damage
|
||||
vector<string> splitDamage = parseBetween(s, "damage:", " ", false);
|
||||
if (splitDamage.size())
|
||||
|
||||
@@ -318,13 +318,15 @@ int MTGPutInPlayRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
|
||||
}
|
||||
}
|
||||
else if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH)
|
||||
|| (player == currentPlayer && !game->isInterrupting
|
||||
|| (player == card->controller() && !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if(card->controller()->epic)
|
||||
return 0;
|
||||
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
ManaCost * cost = card->getManaCost();
|
||||
@@ -650,12 +652,14 @@ int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost *
|
||||
return 1;
|
||||
}
|
||||
else if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH)
|
||||
|| (player == currentPlayer && !game->isInterrupting
|
||||
|| (player == card->controller() && !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if(card->controller()->epic)
|
||||
return 0;
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, card->controller()->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
|
||||
@@ -1035,14 +1039,16 @@ int MTGMorphCostRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
|
||||
return 0;
|
||||
if(!allowedToAltCast(card,player))
|
||||
return 0;
|
||||
if(card->controller()->epic)//zoetic cavern... morph is casted for a cost...
|
||||
return 0;
|
||||
//note lands can morph too, this is different from other cost types.
|
||||
if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH) || (player == currentPlayer
|
||||
if ((card->hasType(Subtypes::TYPE_INSTANT)) || card->has(Constants::FLASH) || (player == card->controller()
|
||||
&& !game->isInterrupting
|
||||
&& (game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
|
||||
|| game->getCurrentGamePhase() == MTG_PHASE_SECONDMAIN))
|
||||
)
|
||||
{
|
||||
if (game->currentActionPlayer->game->playRestrictions->canPutIntoZone(card, game->currentActionPlayer->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
if (card->controller()->game->playRestrictions->canPutIntoZone(card, card->controller()->game->stack) == PlayRestriction::CANT_PLAY)
|
||||
return 0;
|
||||
ManaCost * playerMana = player->getManaPool();
|
||||
ManaCost * morph = card->getManaCost()->getMorph();
|
||||
|
||||
@@ -33,6 +33,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
|
||||
skippingTurn = 0;
|
||||
extraTurn = 0;
|
||||
drawCounter = 0;
|
||||
epic = 0;
|
||||
prowledTypes.clear();
|
||||
doesntEmpty = NEW ManaCost();
|
||||
poolDoesntEmpty = NEW ManaCost();
|
||||
|
||||
Reference in New Issue
Block a user