Merge pull request #895 from kevlahnota/master

revised "steal" ability
This commit is contained in:
Anthony Calosa
2016-09-06 16:38:39 +08:00
committed by GitHub
13 changed files with 223 additions and 101 deletions
@@ -232,15 +232,6 @@ power=2
toughness=2 toughness=2
[/card] [/card]
[card] [card]
name=Orcish Squatters
text=Whenever Orcish Squatters attacks and isn't blocked, you may gain control of target land defending player controls for as long as you control Orcish Squatters. If you do, Orcish Squatters assigns no combat damage this turn.
mana={4}{R}
type=Creature
subtype=Orc
power=2
toughness=3
[/card]
[card]
name=Pentagram of the Ages name=Pentagram of the Ages
text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage. text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage.
mana={4} mana={4}
@@ -44,15 +44,6 @@ power=8
toughness=8 toughness=8
[/card] [/card]
[card] [card]
name=Dragonlord Silumgar
text=Flying, deathtouch -- When Dragonlord Silumgar enters the battlefield, gain control of target creature or planeswalker for as long as you control Dragonlord Silumgar.
mana={4}{U}{B}
type=Legendary Creature
subtype=Elder Dragon
power=3
toughness=5
[/card]
[card]
name=Dragonlord's Prerogative name=Dragonlord's Prerogative
text=As an additional cost to cast Dragonlord's Prerogative, you may reveal a Dragon card from your hand. -- If you revealed a Dragon card or controlled a Dragon as you cast Dragonlord's Prerogative, Dragonlord's Prerogative can't be countered. -- Draw four cards. text=As an additional cost to cast Dragonlord's Prerogative, you may reveal a Dragon card from your hand. -- If you revealed a Dragon card or controlled a Dragon as you cast Dragonlord's Prerogative, Dragonlord's Prerogative can't be countered. -- Draw four cards.
mana={4}{U}{U} mana={4}{U}{U}
@@ -81,15 +81,6 @@ mana={B}{B}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Thrull Champion
text=Thrull creatures get +1/+1. -- {T}: Gain control of target Thrull for as long as you control Thrull Champion.
mana={4}{B}
type=Creature
subtype=Thrull
power=2
toughness=2
[/card]
[card]
name=Tidal Flats name=Tidal Flats
text={U}{U}: For each attacking creature without flying, its controller may pay {1}. If he or she doesn't, creatures you control blocking that creature gain first strike until end of turn. text={U}{U}: For each attacking creature without flying, its controller may pay {1}. If he or she doesn't, creatures you control blocking that creature gain first strike until end of turn.
mana={U} mana={U}
@@ -491,15 +491,6 @@ power=2
toughness=2 toughness=2
[/card] [/card]
[card] [card]
name=Orcish Squatters
text=Whenever Orcish Squatters attacks and isn't blocked, you may gain control of target land defending player controls for as long as you control Orcish Squatters. If you do, Orcish Squatters assigns no combat damage this turn.
mana={4}{R}
type=Creature
subtype=Orc
power=2
toughness=3
[/card]
[card]
name=Pentagram of the Ages name=Pentagram of the Ages
text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage. text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage.
mana={4} mana={4}
@@ -68,15 +68,6 @@ power=6
toughness=6 toughness=6
[/card] [/card]
[card] [card]
name=Master Thief
text=When Master Thief enters the battlefield, gain control of target artifact for as long as you control Master Thief.
mana={2}{U}{U}
type=Creature
subtype=Human Rogue
power=2
toughness=2
[/card]
[card]
name=Monomania name=Monomania
text=Target player chooses a card in his or her hand and discards the rest. text=Target player chooses a card in his or her hand and discards the rest.
mana={3}{B}{B} mana={3}{B}{B}
@@ -124,15 +124,6 @@ mana={R}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Roil Elemental
text=Flying -- Landfall — Whenever a land enters the battlefield under your control, you may gain control of target creature for as long as you control Roil Elemental.
mana={3}{U}{U}{U}
type=Creature
subtype=Elemental
power=3
toughness=2
[/card]
[card]
name=Sorin Markov name=Sorin Markov
text=+2: Sorin Markov deals 2 damage to target creature or player and you gain 2 life. -- -3: Target opponent's life total becomes 10. -- -7: You control target player during that player's next turn. text=+2: Sorin Markov deals 2 damage to target creature or player and you gain 2 life. -- -3: Target opponent's life total becomes 10. -- -7: You control target player during that player's next turn.
mana={3}{B}{B}{B} mana={3}{B}{B}{B}
+54 -1
View File
@@ -29970,6 +29970,17 @@ power=5
toughness=4 toughness=4
[/card] [/card]
[card] [card]
name=Dragonlord Silumgar
abilities=flying,deathtouch
auto=steal target(*[creature;planeswalker])
text=Flying, deathtouch -- When Dragonlord Silumgar enters the battlefield, gain control of target creature or planeswalker for as long as you control Dragonlord Silumgar.
mana={4}{U}{B}
type=Legendary Creature
subtype=Elder Dragon
power=3
toughness=5
[/card]
[card]
name=Dragonlord's Servant name=Dragonlord's Servant
auto=lord(dragon|mycastingzone) altercost(colorless, -1) auto=lord(dragon|mycastingzone) altercost(colorless, -1)
text=Dragon spells you cast cost {1} less to cast. text=Dragon spells you cast cost {1} less to cast.
@@ -69088,6 +69099,16 @@ mana={3}{U}{R}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Master Thief
auto=steal target(artifact)
text=When Master Thief enters the battlefield, gain control of target artifact for as long as you control Master Thief.
mana={2}{U}{U}
type=Creature
subtype=Human Rogue
power=2
toughness=2
[/card]
[card]
name=Master Transmuter name=Master Transmuter
auto={H(artifact|mybattlefield)}{U}{T}:name(put artifact in play) transforms((,newability[ability$! moveTo(mybattlefield) notatarget(artifact|myhand) !$ controller])) oneshot auto={H(artifact|mybattlefield)}{U}{T}:name(put artifact in play) transforms((,newability[ability$! moveTo(mybattlefield) notatarget(artifact|myhand) !$ controller])) oneshot
text={U}, {T}, Return an artifact you control to its owner's hand: You may put an artifact card from your hand onto the battlefield. text={U}, {T}, Return an artifact you control to its owner's hand: You may put an artifact card from your hand onto the battlefield.
@@ -78857,7 +78878,7 @@ toughness=3
name=Olivia Voldaren name=Olivia Voldaren
abilities=flying abilities=flying
auto={1}{R}:all(this) counter(1/1,1) && target(other creature) damage:1 && transforms((vampire)) forever auto={1}{R}:all(this) counter(1/1,1) && target(other creature) damage:1 && transforms((vampire)) forever
auto={3}{B}{B}:target(vampire) moveTo(mybattlefield) && transforms((,newability[@movedTo(Olivia Voldaren|nonbattlezone) from(battlefield):moveTo(ownerbattlefield)])) forever auto={3}{B}{B}:target(vampire) steal
text=Flying -- {1}{R}: Olivia Voldaren deals 1 damage to another target creature. That creature becomes a Vampire in addition to its other types. Put a +1/+1 counter on Olivia Voldaren. -- {3}{B}{B}: Gain control of target Vampire for as long as you control Olivia Voldaren. text=Flying -- {1}{R}: Olivia Voldaren deals 1 damage to another target creature. That creature becomes a Vampire in addition to its other types. Put a +1/+1 counter on Olivia Voldaren. -- {3}{B}{B}: Gain control of target Vampire for as long as you control Olivia Voldaren.
mana={2}{B}{R} mana={2}{B}{R}
type=Legendary Creature type=Legendary Creature
@@ -79739,6 +79760,16 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Orcish Squatters
auto=@combat(notblocked) source(this):may steal target(land|opponentbattlefield) && fog from(this) ueot
text=Whenever Orcish Squatters attacks and isn't blocked, you may gain control of target land defending player controls for as long as you control Orcish Squatters. If you do, Orcish Squatters assigns no combat damage this turn.
mana={4}{R}
type=Creature
subtype=Orc
power=2
toughness=3
[/card]
[card]
name=Orcish Veteran name=Orcish Veteran
auto=cantbeblockerof(creature[white;power>=2]) auto=cantbeblockerof(creature[white;power>=2])
auto={R}:first strike auto={R}:first strike
@@ -92514,6 +92545,17 @@ power=5
toughness=5 toughness=5
[/card] [/card]
[card] [card]
name=Roil Elemental
abilities=flying
auto=@movedTo(land|myBattlefield):may steal target(creature)
text=Flying -- Landfall — Whenever a land enters the battlefield under your control, you may gain control of target creature for as long as you control Roil Elemental.
mana={3}{U}{U}{U}
type=Creature
subtype=Elemental
power=3
toughness=2
[/card]
[card]
name=Roil Spout name=Roil Spout
target=creature|battlefield target=creature|battlefield
auto=moveto(ownerlibrary) auto=moveto(ownerlibrary)
@@ -116332,6 +116374,17 @@ mana={4}{B}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Thrull Champion
auto=lord(creature[thrull]) 1/1
auto={T}:steal target(thrull)
text=Thrull creatures get +1/+1. -- {T}: Gain control of target Thrull for as long as you control Thrull Champion.
mana={4}{B}
type=Creature
subtype=Thrull
power=2
toughness=2
[/card]
[card]
name=Thrull Retainer name=Thrull Retainer
target=creature target=creature
auto=1/1 auto=1/1
@@ -4041,15 +4041,6 @@ power=8
toughness=8 toughness=8
[/card] [/card]
[card] [card]
name=Dragonlord Silumgar
text=Flying, deathtouch -- When Dragonlord Silumgar enters the battlefield, gain control of target creature or planeswalker for as long as you control Dragonlord Silumgar.
mana={4}{U}{B}
type=Legendary Creature
subtype=Elder Dragon
power=3
toughness=5
[/card]
[card]
name=Dragonlord's Prerogative name=Dragonlord's Prerogative
text=As an additional cost to cast Dragonlord's Prerogative, you may reveal a Dragon card from your hand. -- If you revealed a Dragon card or controlled a Dragon as you cast Dragonlord's Prerogative, Dragonlord's Prerogative can't be countered. -- Draw four cards. text=As an additional cost to cast Dragonlord's Prerogative, you may reveal a Dragon card from your hand. -- If you revealed a Dragon card or controlled a Dragon as you cast Dragonlord's Prerogative, Dragonlord's Prerogative can't be countered. -- Draw four cards.
mana={4}{U}{U} mana={4}{U}{U}
@@ -9463,15 +9454,6 @@ power=3
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Master Thief
text=When Master Thief enters the battlefield, gain control of target artifact for as long as you control Master Thief.
mana={2}{U}{U}
type=Creature
subtype=Human Rogue
power=2
toughness=2
[/card]
[card]
name=Master Warcraft name=Master Warcraft
text=Cast Master Warcraft only before attackers are declared. -- You choose which creatures attack this turn. -- You choose which creatures block this turn and how those creatures block. text=Cast Master Warcraft only before attackers are declared. -- You choose which creatures attack this turn. -- You choose which creatures block this turn and how those creatures block.
mana={2}{RW}{RW} mana={2}{RW}{RW}
@@ -11062,15 +11044,6 @@ type=Enchantment
subtype=Aura subtype=Aura
[/card] [/card]
[card] [card]
name=Orcish Squatters
text=Whenever Orcish Squatters attacks and isn't blocked, you may gain control of target land defending player controls for as long as you control Orcish Squatters. If you do, Orcish Squatters assigns no combat damage this turn.
mana={4}{R}
type=Creature
subtype=Orc
power=2
toughness=3
[/card]
[card]
name=Ordeal of Erebos name=Ordeal of Erebos
text=Enchant creature -- Whenever enchanted creature attacks, put a +1/+1 counter on it. Then if it has three or more +1/+1 counters on it, sacrifice Ordeal of Erebos. -- When you sacrifice Ordeal of Erebos, target player discards two cards. text=Enchant creature -- Whenever enchanted creature attacks, put a +1/+1 counter on it. Then if it has three or more +1/+1 counters on it, sacrifice Ordeal of Erebos. -- When you sacrifice Ordeal of Erebos, target player discards two cards.
mana={1}{B} mana={1}{B}
@@ -13202,15 +13175,6 @@ mana={G}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Roil Elemental
text=Flying -- Landfall — Whenever a land enters the battlefield under your control, you may gain control of target creature for as long as you control Roil Elemental.
mana={3}{U}{U}{U}
type=Creature
subtype=Elemental
power=3
toughness=2
[/card]
[card]
name=Roiling Waters name=Roiling Waters
text=Return up to two target creatures your opponents control to their owners' hands. Target player draws two cards. text=Return up to two target creatures your opponents control to their owners' hands. Target player draws two cards.
mana={5}{U}{U} mana={5}{U}{U}
@@ -16498,15 +16462,6 @@ type=Artifact
subtype=Equipment subtype=Equipment
[/card] [/card]
[card] [card]
name=Thrull Champion
text=Thrull creatures get +1/+1. -- {T}: Gain control of target Thrull for as long as you control Thrull Champion.
mana={4}{B}
type=Creature
subtype=Thrull
power=2
toughness=2
[/card]
[card]
name=Thrull Parasite name=Thrull Parasite
text=Extort (Whenever you cast a spell, you may pay {WB}. If you do, each opponent loses 1 life and you gain that much life.) -- {T}, Pay 2 life: Remove a counter from target nonland permanent. text=Extort (Whenever you cast a spell, you may pay {WB}. If you do, each opponent loses 1 life and you gain that much life.) -- {T}, Pay 2 life: Remove a counter from target nonland permanent.
mana={B} mana={B}
+34
View File
@@ -5386,6 +5386,38 @@ public:
ABlockSetCost * clone() const; ABlockSetCost * clone() const;
}; };
//ASeize
class ASeize: public MTGAbility
{
public:
MTGCardInstance * Seized;
Player * previousController;
bool resolved;
ASeize(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target);
void Update(float dt);
void resolveSeize();
int resolve();
int receiveEvent(WEvent * event);
const string getMenuText();
ASeize * clone() const;
~ASeize();
private:
void returntoOwner(MTGCardInstance *_target);
};
//SeizeWrapper
class ASeizeWrapper: public InstantAbility
{
public:
ASeize * ability;
ASeizeWrapper(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target);
int resolve();
const string getMenuText();
ASeizeWrapper * clone() const;
~ASeizeWrapper();
};
//AShackle //AShackle
class AShackle: public MTGAbility class AShackle: public MTGAbility
{ {
@@ -5416,6 +5448,7 @@ public:
~AShackleWrapper(); ~AShackleWrapper();
}; };
//Grant //Grant
class AGrant : public MTGAbility class AGrant : public MTGAbility
{ {
@@ -5448,6 +5481,7 @@ public:
~AGrantWrapper(); ~AGrantWrapper();
}; };
//ABlink //ABlink
class ABlink: public MTGAbility class ABlink: public MTGAbility
{ {
+1
View File
@@ -174,6 +174,7 @@ public:
MTGCardInstance * createSnapShot(); MTGCardInstance * createSnapShot();
MTGCardInstance * storedSourceCard; MTGCardInstance * storedSourceCard;
MTGCardInstance * shackled; MTGCardInstance * shackled;
MTGCardInstance * seized;
MTGCardInstance * isDefenser(); MTGCardInstance * isDefenser();
int initAttackersDefensers(); int initAttackersDefensers();
MTGCardInstance * getNextOpponent(MTGCardInstance * previous=NULL); MTGCardInstance * getNextOpponent(MTGCardInstance * previous=NULL);
+131
View File
@@ -6913,6 +6913,137 @@ ABlockSetCost * ABlockSetCost::clone() const
return NEW ABlockSetCost(*this); return NEW ABlockSetCost(*this);
} }
//ASeize
ASeize::ASeize(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target) :
MTGAbility(observer, _id, card)
{
target = _target;
Seized = NULL;
previousController = NULL;
resolved = false;
}
void ASeize::Update(float dt)
{
if (resolved == false)
{
resolved = true;
resolveSeize();
}
if (!source->isInPlay(game))
{
if (Seized == NULL || !Seized->isInPlay(game))
MTGAbility::Update(dt);
MTGCardInstance * _target = Seized;
returntoOwner(_target);
}
MTGAbility::Update(dt);
}
void ASeize::resolveSeize()
{
MTGCardInstance * _target = (MTGCardInstance *) target;
if (_target)
{
previousController = _target->controller();
previousController->game->putInZone(_target, _target->currentZone,
source->controller()->game->inPlay);
Seized = _target;
source->seized = Seized;
Seized->seized = source;
}
}
void ASeize::returntoOwner(MTGCardInstance* _target) {
MTGCardInstance * cardToReturn = _target;
if(!cardToReturn)
{
if (source)
source->seized = NULL;
this->forceDestroy = 1;
return;
}
if(previousController && cardToReturn->isInPlay(game))
{
cardToReturn->seized = NULL;
cardToReturn->controller()->game->putInZone(_target, _target->currentZone,
previousController->game->inPlay);
}
if (source)
source->seized = NULL;
this->forceDestroy = 1;
Seized = NULL;
return;
}
int ASeize::resolve()
{
return 0;
}
int ASeize::receiveEvent(WEvent * event)
{
WEventCardControllerChange * enters = dynamic_cast<WEventCardControllerChange *> (event);
if (enters && source)
{
if(enters->card == source)
{
if(Seized && Seized->controller() != enters->card->controller())
returntoOwner(Seized);
return 1;
}
}
return 0;
}
const string ASeize::getMenuText()
{
return "Gain Control";
}
ASeize * ASeize::clone() const
{
ASeize * a = NEW ASeize(*this);
a->forceDestroy = -1;
return a;
};
ASeize::~ASeize()
{
}
ASeizeWrapper::ASeizeWrapper(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target) :
InstantAbility(observer, _id, source, _target)
{
ability = NEW ASeize(observer, _id,card,_target);
}
int ASeizeWrapper::resolve()
{
ASeize * a = ability->clone();
a->target = target;
a->addToGame();
return 1;
}
const string ASeizeWrapper::getMenuText()
{
return "Gain Control";
}
ASeizeWrapper * ASeizeWrapper::clone() const
{
ASeizeWrapper * a = NEW ASeizeWrapper(*this);
a->ability = this->ability->clone();
a->oneShot = 1;
return a;
}
ASeizeWrapper::~ASeizeWrapper()
{
SAFE_DELETE(ability);
}
//AShackle //AShackle
AShackle::AShackle(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target) : AShackle::AShackle(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target) :
MTGAbility(observer, _id, card) MTGAbility(observer, _id, card)
+2 -1
View File
@@ -3903,10 +3903,11 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
return a; return a;
} }
//steal target until source leaves battlefield
found = s.find("steal"); found = s.find("steal");
if (found != string::npos) if (found != string::npos)
{ {
MTGAbility * a = NEW AInstantControlSteal(observer, id, card, target); MTGAbility * a = NEW ASeizeWrapper(observer, id, card, target);
a->oneShot = 1; a->oneShot = 1;
return a; return a;
} }
+1
View File
@@ -237,6 +237,7 @@ void MTGCardInstance::initMTGCI()
storedSourceCard = NULL; storedSourceCard = NULL;
myPair = NULL; myPair = NULL;
shackled = NULL; shackled = NULL;
seized = NULL;
miracle = false; miracle = false;
hasCopiedToken = false; hasCopiedToken = false;
countTrini = 0; countTrini = 0;