added miracle ability.

i choose to use other cost instead of creating a brand new cost type.

otherrestriction determines if the card is the miracle for the turn.

[card]
name=Devastation Tide
auto=all(*[-land]) moveto(ownerhand)
other={1}{u} name(Miracle)
otherrestriction=miracle
text=Return all nonland permanents to their owners' hands. -- Miracle {1}{U} (You may cast this card for its miracle cost when you draw it if it's the first card you drew this turn.)
mana={3}{U}{U}
type=Sorcery
[/card]
This commit is contained in:
omegablast2002@yahoo.com
2013-05-19 01:48:51 +00:00
parent 4b167c3776
commit a055044281
6 changed files with 22 additions and 0 deletions

View File

@@ -88,6 +88,7 @@ public:
bool graveEffects;
bool exileEffects;
bool suspended;
bool miracle;
int chooseacolor;
string chooseasubtype;
int coinSide;//1 = tails

View File

@@ -131,6 +131,7 @@ class MTGGameZone {
class MTGLibrary: public MTGGameZone {
public:
bool miracle;//we already consider a card a miracle drawn from here.
vector<MTGCardInstance*>placeOnTop;
virtual ostream& toString(ostream&) const;
const char * getName(){return "library";}

View File

@@ -209,6 +209,7 @@ void GameObserver::nextGamePhase()
mLayers->actionLayer()->cleanGarbage(); //clean abilities history for this turn;
mLayers->stackLayer()->garbageCollect(); //clean stack history for this turn;
mLayers->actionLayer()->Update(0);
currentPlayer->game->library->miracle = false;
for (int i = 0; i < 2; i++)
{
//Cleanup of each player's gamezones

View File

@@ -333,6 +333,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
if(!isMorbid)
return 0;
}
check = restriction[i].find("miracle");
if(check != string::npos)
{
if(!card->miracle)
return 0;
}
check = restriction[i].find("ownerscontrol");
if(check != string::npos)
{

View File

@@ -100,6 +100,7 @@ void MTGCardInstance::copy(MTGCardInstance * card)
castMethod = castMethodBackUP;
backupTargets = this->backupTargets;
storedCard = oldStored;
miracle = false;
}
MTGCardInstance::~MTGCardInstance()
@@ -171,6 +172,7 @@ void MTGCardInstance::initMTGCI()
storedCard = NULL;
storedSourceCard = NULL;
myPair = NULL;
miracle = false;
for (int i = 0; i < ManaCost::MANA_PAID_WITH_SUSPEND +1; i++)
alternateCostPaid[i] = 0;

View File

@@ -242,18 +242,27 @@ void MTGPlayerCards::drawFromLibrary()
}
if(putInZone(toMove, library, hand))
{
toMove->currentZone = hand;
if (!library->miracle)
{
library->miracle = true;
toMove->miracle = true;
}
}
}
void MTGPlayerCards::resetLibrary()
{
SAFE_DELETE(library);
library = NEW MTGLibrary();
library->miracle = false;
}
void MTGPlayerCards::init()
{
library = NEW MTGLibrary();
library->miracle = false;
graveyard = NEW MTGGraveyard();
hand = NEW MTGHand();
inPlay = NEW MTGInPlay();