Added CMR set, added Monarch game mode, added/fix several primitives and improved Android downloader.

This commit is contained in:
valfieri
2020-11-30 10:55:42 +01:00
parent d751ed3540
commit c704dfbfb2
18 changed files with 5392 additions and 266 deletions
+40
View File
@@ -1135,6 +1135,46 @@ AAAlterYidaroCount::~AAAlterYidaroCount()
{
}
//AA Monarch
AAAlterMonarch::AAAlterMonarch(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost,
int who) :
ActivatedAbilityTP(observer, _id, _source, _target, _cost, who)
{
}
int AAAlterMonarch::resolve()
{
Damageable * _target = (Damageable *) getTarget();
if (_target)
{
Player * pTarget = (Player*)_target;
if(pTarget)
{
if(!pTarget->monarch){
pTarget->monarch = 1;
pTarget->opponent()->monarch = 0;
WEvent * e = NEW WEventplayerMonarch(pTarget);
game->receiveEvent(e);
}
}
}
return 0;
}
const string AAAlterMonarch::getMenuText()
{
return _("A player becomes the Monarch").c_str();
}
AAAlterMonarch * AAAlterMonarch::clone() const
{
return NEW AAAlterMonarch(*this);
}
AAAlterMonarch::~AAAlterMonarch()
{
}
//AA Energy Counters
AAAlterEnergy::AAAlterEnergy(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, int energy, ManaCost * _cost,
int who) :
+18
View File
@@ -1194,6 +1194,14 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
if (TargetChooser * tc = parseSimpleTC(s, "energizedfoeof", card))
return NEW TrplayerEnergized(observer, id, card, tc,once,false,true);
//becomes monarch - controller of card
if (TargetChooser * tc = parseSimpleTC(s, "becomesmonarchof", card))
return NEW TrplayerMonarch(observer, id, card, tc,once,true,false);
//becomes monarch - opponent of card controller
if (TargetChooser * tc = parseSimpleTC(s, "becomesmonarchfoeof", card))
return NEW TrplayerMonarch(observer, id, card, tc,once,false,true);
//drawn player - controller of card - dynamic version drawof(player) -> returns current controller even with exchange of card controller
if (TargetChooser * tc = parseSimpleTC(s, "drawof", card))
return NEW TrcardDrawn(observer, id, card, tc,once,true,false);
@@ -3372,6 +3380,16 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
return a;
}
//becomes monarch
vector<string> splitMonarch = parseBetween(s, "becomesmonarch", " ", false);
if (splitMonarch.size())
{
Targetable * t = spell ? spell->getNextTarget() : NULL;
MTGAbility * a = NEW AAAlterMonarch(observer, id, card, t, NULL, who);
a->oneShot = 1;
return a;
}
//alter mutation counter on target card with trigger activation
vector<string> splitMutated = parseBetween(s, "altermutationcounter:", " ", false);
if (splitMutated.size())
+2 -1
View File
@@ -194,7 +194,8 @@ const char* Constants::MTGBasicAbilities[] = {
"mentor",
"prowess",
"nofizzle alternative", //No fizzle if card has been paid with alternative cost.
"hasotherkicker" //Kicker cost is expressed with "other" keyword (es. not mana kicker such as life and/or tap a creature)
"hasotherkicker", //Kicker cost is expressed with "other" keyword (es. not mana kicker such as life and/or tap a creature),
"partner" //Has partner ability
};
map<string,int> Constants::MTGBasicAbilitiesMap;
+1
View File
@@ -36,6 +36,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
drawCounter = 0;
energyCount = 0;
yidaroCount = 0;
monarch = 0;
surveilOffset = 0;
epic = 0;
forcefield = 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->monarch = initState.playerData[i].player->monarch;
p->surveilOffset = initState.playerData[i].player->surveilOffset;
if (initState.playerData[i].player->mAvatarName.size())
{
+11
View File
@@ -287,6 +287,11 @@ WEventplayerEnergized::WEventplayerEnergized(Player * player, int nb_count) :
{
}
WEventplayerMonarch::WEventplayerMonarch(Player * player) :
player(player)
{
}
WEventCardSurveiled::WEventCardSurveiled(MTGCardInstance * card) :
WEventCardUpdate(card)
{
@@ -523,6 +528,12 @@ Targetable * WEventplayerEnergized::getTarget(Player * player)
return NULL;
}
Targetable * WEventplayerMonarch::getTarget(Player * player)
{
if (player) return player;
return NULL;
}
std::ostream& WEvent::toString(std::ostream& out) const
{
return out << "EVENT";