Added/fixed primitives, updated the "missing_cards_by_sets" folder, added new ability "hasstrive" to implement Strive cost with multikicker and refactored all cards with Strive cost (now they use a special version of multikicker but they don't count as kicked spell), improved "targeted" and "vampired" trigger to allow the "turnlimited" option, improved Android gesture to emulate "option menu" button pressure (slide down) and emulate "back" button pressure (slide up).
This commit is contained in:
@@ -1150,31 +1150,31 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
|
||||
//Card unTapped
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"untapped", card))
|
||||
return NEW TrCardTapped(observer, id, card, tc, false,once);
|
||||
return NEW TrCardTapped(observer, id, card, tc, false, once);
|
||||
|
||||
//Card Tapped
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"tapped", card))
|
||||
return NEW TrCardTapped(observer, id, card, tc, true,once);
|
||||
return NEW TrCardTapped(observer, id, card, tc, true, once);
|
||||
|
||||
//Card Tapped for mana
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"tappedformana", card))
|
||||
return NEW TrCardTappedformana(observer, id, card, tc, true,once);
|
||||
return NEW TrCardTappedformana(observer, id, card, tc, true, once);
|
||||
|
||||
//Card Transforms
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"transformed", card))
|
||||
return NEW TrCardTransformed(observer, id, card, tc,once);
|
||||
return NEW TrCardTransformed(observer, id, card, tc, once);
|
||||
|
||||
//Card Faces Up
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"facedup", card))
|
||||
return NEW TrCardFaceUp(observer, id, card, tc,once);
|
||||
return NEW TrCardFaceUp(observer, id, card, tc, once);
|
||||
|
||||
//Card Phases In
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card))
|
||||
return NEW TrCardPhasesIn(observer, id, card, tc,once);
|
||||
return NEW TrCardPhasesIn(observer, id, card, tc, once);
|
||||
|
||||
//Card Exerted
|
||||
if (TargetChooser *tc = parseSimpleTC(s,"exerted", card))
|
||||
return NEW TrCardExerted(observer, id, card, tc,once);
|
||||
return NEW TrCardExerted(observer, id, card, tc, once);
|
||||
|
||||
//CombatTrigger
|
||||
//Card card attacked and is blocked
|
||||
@@ -1210,8 +1210,8 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
|
||||
return NEW TrCombatTrigger(observer, id, card, tc, fromTc,once,limitOnceATurn,sourceUntapped,opponentPoisoned,
|
||||
attackingTrigger,attackedAloneTrigger,notBlockedTrigger,attackBlockedTrigger,blockingTrigger);
|
||||
return NEW TrCombatTrigger(observer, id, card, tc, fromTc, once, limitOnceATurn, sourceUntapped, opponentPoisoned,
|
||||
attackingTrigger, attackedAloneTrigger, notBlockedTrigger, attackBlockedTrigger, blockingTrigger);
|
||||
}
|
||||
|
||||
//energized player - controller of card
|
||||
@@ -1349,7 +1349,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
|
||||
//Card is sacrificed
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card))
|
||||
return NEW TrCardSacrificed(observer, id, card, tc ,once);
|
||||
return NEW TrCardSacrificed(observer, id, card, tc, once);
|
||||
|
||||
//Card is Discarded
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "discarded", card))
|
||||
@@ -1357,69 +1357,69 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
|
||||
//Card is cycled
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "cycled", card))
|
||||
return NEW TrCardDiscarded(observer, id, card, tc,once,true);
|
||||
return NEW TrCardDiscarded(observer, id, card, tc, once, true);
|
||||
|
||||
//Card Damaging non combat current controller
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamageof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2,false,false,once,true,false);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2, false, false, once, true, false);
|
||||
}
|
||||
|
||||
//Card Damaging non combat current opponent
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamagefoeof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2,false,false,once,false,true);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2, false, false, once, false, true);
|
||||
}
|
||||
|
||||
//Card Damaging non combat static
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamaged", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2,once);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 2, once);
|
||||
}
|
||||
|
||||
//Card Damaging combat current controller
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "combatdamageof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once,true,false);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once, true, false);
|
||||
}
|
||||
|
||||
//Card Damaging combat current opponent
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "combatdamagefoeof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once,false,true);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once, false, true);
|
||||
}
|
||||
|
||||
//Card Damaging combat static
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "combatdamaged", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once);
|
||||
}
|
||||
|
||||
//Card Damaging current controller
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "damageof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once,true,false);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once, true, false);
|
||||
}
|
||||
|
||||
//Card Damaging current opponent
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "damagefoeof", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once,false,true);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once, false, true);
|
||||
}
|
||||
|
||||
//Card Damaging static
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "damaged", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once);
|
||||
return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once);
|
||||
}
|
||||
|
||||
//Lifed current controller
|
||||
@@ -1428,9 +1428,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,true,false,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, true, false, limitOnceATurn, exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,true,false,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, true, false, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Lifed current opponent
|
||||
@@ -1439,9 +1439,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,true,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped,once, false, true, limitOnceATurn, exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,true,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped,once, false, true, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Lifed static
|
||||
@@ -1450,9 +1450,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,false,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, false, false, limitOnceATurn, exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,false,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, false, false, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Life Loss current player
|
||||
@@ -1461,9 +1461,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,true,false,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, true, false, limitOnceATurn, exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,true,false,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, true, false, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Life Loss current opponent
|
||||
@@ -1472,9 +1472,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,true,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, true, limitOnceATurn,exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,true,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, true, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Life Loss static
|
||||
@@ -1483,23 +1483,23 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality)
|
||||
if(exception)
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,false,limitOnceATurn,exception->source);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, false, limitOnceATurn, exception->source);
|
||||
else
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,false,limitOnceATurn);
|
||||
return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, false, limitOnceATurn);
|
||||
}
|
||||
|
||||
//Card Damaged and killed by a creature this turn
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "vampired", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrVampired(observer, id, card, tc, fromTc,once);
|
||||
return NEW TrVampired(observer, id, card, tc, fromTc, once, limitOnceATurn);
|
||||
}
|
||||
|
||||
//when card becomes the target of a spell or ability
|
||||
if (TargetChooser * tc = parseSimpleTC(s, "targeted", card))
|
||||
{
|
||||
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
|
||||
return NEW TrTargeted(observer, id, card, tc, fromTc, 0,once);
|
||||
return NEW TrTargeted(observer, id, card, tc, fromTc, 0, once, limitOnceATurn);
|
||||
}
|
||||
|
||||
if (s.find("counteradded(") != string::npos)
|
||||
@@ -1569,7 +1569,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
found = s.find(Constants::MTGPhaseCodeNames[i]);
|
||||
if (found != string::npos)
|
||||
{
|
||||
return NEW TriggerNextPhase(observer, id, card, target, i, who,sourceUntapped,once);
|
||||
return NEW TriggerNextPhase(observer, id, card, target, i, who, sourceUntapped, once);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1583,7 +1583,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
found = s.find(Constants::MTGPhaseCodeNames[i]);
|
||||
if (found != string::npos)
|
||||
{
|
||||
return NEW TriggerAtPhase(observer, id, card, target, i, who,sourceUntapped,sourceTap,lifelost,lifeamount,once);
|
||||
return NEW TriggerAtPhase(observer, id, card, target, i, who, sourceUntapped, sourceTap, lifelost, lifeamount, once);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1592,7 +1592,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
||||
found = s.find("rebounded");
|
||||
if (found != string::npos)
|
||||
{
|
||||
return NEW TriggerRebound(observer, id, card, target, 2, 1,sourceUntapped,once);
|
||||
return NEW TriggerRebound(observer, id, card, target, 2, 1, sourceUntapped, once);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user