Added missing cards from GRN sets, improved mutation trigger, improved Surveil ability, implemented trigger and offset on surveil ability to allow combo with other cards (see issue #1037 opened by luisguerin).

This commit is contained in:
valfieri
2020-10-12 01:25:34 +02:00
parent 8cf2b7ab69
commit 29985718a7
13 changed files with 791 additions and 101 deletions
+74
View File
@@ -1023,6 +1023,80 @@ AAAlterPoison::~AAAlterPoison()
{
}
//AA Surveil Event
AASurveilEvent::AASurveilEvent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost,
int who) :
ActivatedAbilityTP(observer, _id, _source, _target, _cost, who), card(_source)
{
}
int AASurveilEvent::resolve()
{
Damageable * _target = (Damageable *) getTarget();
if (_target)
{
Player * pTarget = (Player*)_target;
if(pTarget)
{
WEvent * e = NEW WEventCardSurveiled(card);
game->receiveEvent(e);
}
}
return 0;
}
const string AASurveilEvent::getMenuText()
{
return "Surveil event called";
}
AASurveilEvent * AASurveilEvent::clone() const
{
return NEW AASurveilEvent(*this);
}
AASurveilEvent::~AASurveilEvent()
{
}
//AA Surveil Offset
AAAlterSurveilOffset::AAAlterSurveilOffset(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int surveilOffset, ManaCost * _cost,
int who) :
ActivatedAbilityTP(observer, _id, _source, _target, _cost, who), surveilOffset(surveilOffset)
{
}
int AAAlterSurveilOffset::resolve()
{
Damageable * _target = (Damageable *) getTarget();
if (_target)
{
Player * pTarget = (Player*)_target;
if(pTarget)
{
pTarget->surveilOffset += surveilOffset;
if(pTarget->surveilOffset < 0)
pTarget->surveilOffset = 0;
}
}
return 0;
}
const string AAAlterSurveilOffset::getMenuText()
{
WParsedInt parsedNum(surveilOffset);
return _(parsedNum.getStringValue() + " Surveil Offset ").c_str();
}
AAAlterSurveilOffset * AAAlterSurveilOffset::clone() const
{
return NEW AAAlterSurveilOffset(*this);
}
AAAlterSurveilOffset::~AAAlterSurveilOffset()
{
}
//AA Yidaro Count
AAAlterYidaroCount::AAAlterYidaroCount(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int yidarocount, ManaCost * _cost,
int who) :
+27 -2
View File
@@ -1208,8 +1208,12 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
//Card is mutated
if (TargetChooser * tc = parseSimpleTC(s, "mutated", card))
return NEW TrCardMutated(observer, id, card, tc,once);
return NEW TrCardMutated(observer, id, card, tc,once,limitOnceATurn);
//Surveil has been performed from controller
if (TargetChooser * tc = parseSimpleTC(s, "surveiled", card))
return NEW TrCardSurveiled(observer, id, card, tc,once,limitOnceATurn);
//Token has been created
if (TargetChooser * tc = parseSimpleTC(s, "tokencreated", card))
return NEW TrTokenCreated(observer, id, card, tc,once);
@@ -3389,6 +3393,27 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
card->mutation += atoi(splitMutatedUnder[1].c_str());
}
//perform surveil
found = s.find("surveil");
if (found != string::npos)
{
Targetable * t = spell ? spell->getNextTarget() : NULL;
MTGAbility * a = NEW AASurveilEvent(observer, id, card, t, NULL, who);
a->oneShot = 1;
return a;
}
//set surveil offset controller (eg. Enhanced Surveillance)
vector<string> splitSurveilOffset = parseBetween(s, "altersurvoffset:", " ", false);
if (splitSurveilOffset.size())
{
int surveilOffset = atoi(splitSurveilOffset[1].c_str());
Targetable * t = spell ? spell->getNextTarget() : NULL;
MTGAbility * a = NEW AAAlterSurveilOffset(observer, id, card, t, surveilOffset, NULL, who);
a->oneShot = 1;
return a;
}
//prevent next damage
vector<string> splitPrevent = parseBetween(s, "prevent:", " ", false);
if (splitPrevent.size())
+1
View File
@@ -36,6 +36,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
drawCounter = 0;
energyCount = 0;
yidaroCount = 0;
surveilOffset = 0;
epic = 0;
forcefield = 0;
dealsdamagebycombat = 0;
+1
View File
@@ -598,6 +598,7 @@ void Rules::initGame(GameObserver *g, bool currentPlayerSet)
p->preventable = initState.playerData[i].player->preventable;
p->energyCount = initState.playerData[i].player->energyCount;
p->yidaroCount = initState.playerData[i].player->yidaroCount;
p->surveilOffset = initState.playerData[i].player->surveilOffset;
if (initState.playerData[i].player->mAvatarName.size())
{
p->mAvatarName = initState.playerData[i].player->mAvatarName;
+11
View File
@@ -287,6 +287,11 @@ WEventplayerEnergized::WEventplayerEnergized(Player * player, int nb_count) :
{
}
WEventCardSurveiled::WEventCardSurveiled(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventCardMutated::WEventCardMutated(MTGCardInstance * card) :
WEventCardUpdate(card)
{
@@ -500,6 +505,12 @@ Targetable * WEventCardMutated::getTarget(int target)
return NULL;
}
Targetable * WEventCardSurveiled::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventTokenCreated::getTarget(int target)
{
if (target) return card;