added a modifier for "tap" for cards that say "enters the battlefield tapped", they are supposed to be tapped when put in play, which mean they should not trigger @tapped(.

for cards with the line or options "do/pay MANA or this card enters the battlefield tapped"
simply change it to tap(noevent)
it will simulate the card being placed into play already tapped.
This commit is contained in:
zethfoxster
2016-07-07 19:02:41 -04:00
parent 34d10bba3c
commit 61d22eb498
8 changed files with 15 additions and 8 deletions
+3 -3
View File
@@ -4334,8 +4334,8 @@ ABestow * ABestow::clone() const
}
//Tapper
AATapper::AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost) :
ActivatedAbility(observer, id, card, _cost, 0)
AATapper::AATapper(GameObserver* observer, int id, MTGCardInstance * card, MTGCardInstance * _target, ManaCost * _cost, bool sendNoEvent) :
ActivatedAbility(observer, id, card, _cost, 0),_sendNoEvent(sendNoEvent)
{
target = _target;
aType = MTGAbility::TAPPER;
@@ -4348,7 +4348,7 @@ int AATapper::resolve()
{
while (_target->next)
_target = _target->next; //This is for cards such as rampant growth
_target->tap();
_target->tap(_sendNoEvent);
}
return 1;
}
+1 -1
View File
@@ -3575,7 +3575,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
found = s.find("tap");
if (found != string::npos)
{
MTGAbility * a = NEW AATapper(observer, id, card, target);
MTGAbility * a = NEW AATapper(observer, id, card, target, NULL, bool(s.find("tap(noevent)") != string::npos));
a->oneShot = 1;
return a;
}
+3 -1
View File
@@ -467,12 +467,14 @@ void MTGCardInstance::eventblocked(MTGCardInstance * opponent)
}
//Taps the card
void MTGCardInstance::tap()
void MTGCardInstance::tap(bool sendNoEvent)
{
if (tapped)
return;
tapped = 1;
WEvent * e = NEW WEventCardTap(this, 0, 1);
if (sendNoEvent)
dynamic_cast<WEventCardTap*>(e)->noTrigger = true;
observer->receiveEvent(e);
}
+1 -1
View File
@@ -364,7 +364,7 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
to = g->players[i]->game->exile;
}
//close the currently open MAIN display.
if (from == g->players[i]->game->library || from == g->players[i]->game->graveyard || from == g->players[i]->game->exile)
{
if (g->guiOpenDisplay)
+1
View File
@@ -56,6 +56,7 @@ WEvent(CHANGE_PHASE), from(from), to(to)
WEventCardTap::WEventCardTap(MTGCardInstance * card, bool before, bool after) :
WEventCardUpdate(card), before(before), after(after)
{
noTrigger = false;
}
WEventCardTappedForMana::WEventCardTappedForMana(MTGCardInstance * card, bool before, bool after) :