Added abilities for cards which have to return battlefield or hand instead of graveyard (e.g. just like exiledeath ability), improved fresh attribute management also for card moved in hand, library, commandzone and for instants and sorcery spells, added/fixed primitives.
This commit is contained in:
@@ -589,6 +589,18 @@ int PutInGraveyard::resolve()
|
||||
card->controller()->game->putInZone(card, zone, card->owner->game->exile);
|
||||
return 1;
|
||||
}
|
||||
if (card->basicAbilities[(int)Constants::HANDDEATH])
|
||||
{
|
||||
card->controller()->game->putInZone(card, zone, card->owner->game->hand);
|
||||
return 1;
|
||||
}
|
||||
if (card->basicAbilities[(int)Constants::INPLAYDEATH] || card->basicAbilities[(int)Constants::INPLAYTAPDEATH])
|
||||
{
|
||||
card->controller()->game->putInZone(card, zone, card->owner->game->battlefield);
|
||||
if(card->basicAbilities[(int)Constants::INPLAYTAPDEATH])
|
||||
card->tap(true);
|
||||
return 1;
|
||||
}
|
||||
if (zone == observer->players[0]->game->inPlay || zone == observer->players[1]->game->inPlay)
|
||||
{
|
||||
card->controller()->game->putInZone(card, zone, card->owner->game->graveyard);
|
||||
|
||||
@@ -4925,6 +4925,9 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
|
||||
badAbilities[(int)Constants::NOMANA] = true;
|
||||
badAbilities[(int)Constants::ONLYMANA] = true;
|
||||
badAbilities[(int)Constants::EXILEDEATH] = true;
|
||||
badAbilities[(int)Constants::HANDDEATH] = true;
|
||||
badAbilities[(int)Constants::INPLAYDEATH] = true;
|
||||
badAbilities[(int)Constants::INPLAYTAPDEATH] = true;
|
||||
badAbilities[(int)Constants::WEAK] = true;
|
||||
badAbilities[(int)Constants::NOLIFEGAIN] = true;
|
||||
badAbilities[(int)Constants::NOLIFEGAINOPPONENT] = true;
|
||||
@@ -5741,7 +5744,10 @@ void AbilityFactory::addAbilities(int _id, Spell * spell)
|
||||
if (card->basicAbilities[(int)Constants::EXILEDEATH])
|
||||
{
|
||||
card->controller()->game->putInZone(card, card->getCurrentZone(), card->owner->game->exile);
|
||||
|
||||
}
|
||||
else if (card->basicAbilities[(int)Constants::HANDDEATH])
|
||||
{
|
||||
card->controller()->game->putInZone(card, card->getCurrentZone(), card->owner->game->hand);
|
||||
}
|
||||
else if (card->alternateCostPaid[ManaCost::MANA_PAID_WITH_BUYBACK] > 0)
|
||||
{
|
||||
|
||||
@@ -510,6 +510,18 @@ int MTGCardInstance::toGrave( bool forced )
|
||||
p->game->putInZone(this, p->game->inPlay, owner->game->exile);
|
||||
return 1;
|
||||
}
|
||||
if (basicAbilities[(int)Constants::HANDDEATH])
|
||||
{
|
||||
p->game->putInZone(this, p->game->inPlay, owner->game->hand);
|
||||
return 1;
|
||||
}
|
||||
if (basicAbilities[(int)Constants::INPLAYDEATH] || basicAbilities[(int)Constants::INPLAYTAPDEATH])
|
||||
{
|
||||
p->game->putInZone(this, p->game->inPlay, owner->game->battlefield);
|
||||
if(basicAbilities[(int)Constants::INPLAYTAPDEATH])
|
||||
tap(true);
|
||||
return 1;
|
||||
}
|
||||
if (!basicAbilities[(int)Constants::INDESTRUCTIBLE])
|
||||
{
|
||||
p->game->putInZone(this, p->game->inPlay, owner->game->graveyard);
|
||||
|
||||
@@ -198,7 +198,10 @@ const char* Constants::MTGBasicAbilities[] = {
|
||||
"partner", //Has partner ability
|
||||
"canbecommander", //Can be a commander (eg. some planeswalkers can)
|
||||
"iscommander", //It's the current commander
|
||||
"threeblockers" //It can be blocked just by 3 creatures or more.
|
||||
"threeblockers", //It can be blocked just by 3 creatures or more.
|
||||
"handdeath", //It goes in hand after death.
|
||||
"inplaydeath", //It goes back in play untapped after death.
|
||||
"inplaytapdeath" //It goes back in play tapped after death.
|
||||
};
|
||||
|
||||
map<string,int> Constants::MTGBasicAbilitiesMap;
|
||||
|
||||
@@ -385,10 +385,20 @@ void MTGPlayerCards::showHand()
|
||||
// Moves a card to its owner's graveyard
|
||||
MTGCardInstance * MTGPlayerCards::putInGraveyard(MTGCardInstance * card)
|
||||
{
|
||||
if (card->basicAbilities[(int)Constants::EXILEDEATH])
|
||||
if (card->getCurrentZone() != card->controller()->game->hand && card->basicAbilities[(int)Constants::EXILEDEATH])
|
||||
{
|
||||
putInZone(card, card->getCurrentZone(), card->owner->game->exile);
|
||||
|
||||
return putInZone(card, card->getCurrentZone(), card->owner->game->exile);
|
||||
}
|
||||
else if (card->getCurrentZone() != card->controller()->game->hand && card->basicAbilities[(int)Constants::HANDDEATH])
|
||||
{
|
||||
return putInZone(card, card->getCurrentZone(), card->owner->game->hand);
|
||||
}
|
||||
else if (card->getCurrentZone() != card->controller()->game->hand && (card->basicAbilities[(int)Constants::INPLAYDEATH] || card->basicAbilities[(int)Constants::INPLAYTAPDEATH]))
|
||||
{
|
||||
MTGCardInstance* ret = putInZone(card, card->getCurrentZone(), card->owner->game->battlefield);
|
||||
if(card->basicAbilities[(int)Constants::INPLAYTAPDEATH])
|
||||
ret->tap(true);
|
||||
return ret;
|
||||
}
|
||||
return putInZone(card, card->currentZone, card->owner->game->graveyard);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user