diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/5ED.txt b/projects/mtg/bin/Res/missing_cards_by_sets/5ED.txt index ddb952d4b..90181aa27 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/5ED.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/5ED.txt @@ -232,15 +232,6 @@ power=2 toughness=2 [/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 text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage. mana={4} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt b/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt index fbed1818f..d093c3a8e 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/DTK.txt @@ -44,15 +44,6 @@ power=8 toughness=8 [/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 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} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/FEM.txt b/projects/mtg/bin/Res/missing_cards_by_sets/FEM.txt index ba192be58..c2133c836 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/FEM.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/FEM.txt @@ -81,15 +81,6 @@ mana={B}{B} type=Sorcery [/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 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} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt index db17b4285..c2f698c52 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ICE.txt @@ -491,15 +491,6 @@ power=2 toughness=2 [/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 text={4}, {T}: The next time a source of your choice would deal damage to you this turn, prevent that damage. mana={4} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/M12.txt b/projects/mtg/bin/Res/missing_cards_by_sets/M12.txt index 3fe45f461..8e167dc3f 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/M12.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/M12.txt @@ -68,15 +68,6 @@ power=6 toughness=6 [/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 text=Target player chooses a card in his or her hand and discards the rest. mana={3}{B}{B} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt b/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt index 2922eb34b..85ac05b6c 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/ZEN.txt @@ -124,15 +124,6 @@ mana={R} type=Enchantment [/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 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} diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index c7355d234..6e263366b 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -29970,6 +29970,17 @@ power=5 toughness=4 [/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 auto=lord(dragon|mycastingzone) altercost(colorless, -1) text=Dragon spells you cast cost {1} less to cast. @@ -69088,6 +69099,16 @@ mana={3}{U}{R} type=Sorcery [/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 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. @@ -78857,7 +78878,7 @@ toughness=3 name=Olivia Voldaren abilities=flying 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. mana={2}{B}{R} type=Legendary Creature @@ -79739,6 +79760,16 @@ power=1 toughness=1 [/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 auto=cantbeblockerof(creature[white;power>=2]) auto={R}:first strike @@ -92514,6 +92545,17 @@ power=5 toughness=5 [/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 target=creature|battlefield auto=moveto(ownerlibrary) @@ -116332,6 +116374,17 @@ mana={4}{B} type=Instant [/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 target=creature auto=1/1 diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 4ea59e6f6..883dc9f5a 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -4041,15 +4041,6 @@ power=8 toughness=8 [/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 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} @@ -9463,15 +9454,6 @@ power=3 toughness=3 [/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 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} @@ -11062,15 +11044,6 @@ type=Enchantment subtype=Aura [/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 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} @@ -13202,15 +13175,6 @@ mana={G} type=Sorcery [/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 text=Return up to two target creatures your opponents control to their owners' hands. Target player draws two cards. mana={5}{U}{U} @@ -16498,15 +16462,6 @@ type=Artifact subtype=Equipment [/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 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} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 142c6d029..6bd22aace 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -5386,6 +5386,38 @@ public: 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 class AShackle: public MTGAbility { @@ -5416,6 +5448,7 @@ public: ~AShackleWrapper(); }; + //Grant class AGrant : public MTGAbility { @@ -5448,6 +5481,7 @@ public: ~AGrantWrapper(); }; + //ABlink class ABlink: public MTGAbility { diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 1e031f525..1949b3468 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -174,6 +174,7 @@ public: MTGCardInstance * createSnapShot(); MTGCardInstance * storedSourceCard; MTGCardInstance * shackled; + MTGCardInstance * seized; MTGCardInstance * isDefenser(); int initAttackersDefensers(); MTGCardInstance * getNextOpponent(MTGCardInstance * previous=NULL); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 233c0c9eb..d1097855c 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -6913,6 +6913,137 @@ ABlockSetCost * ABlockSetCost::clone() const 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 (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(GameObserver* observer, int _id, MTGCardInstance * card, MTGCardInstance * _target) : MTGAbility(observer, _id, card) diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 22ffa4b41..a0ea2f56f 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -3903,10 +3903,11 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG return a; } + //steal target until source leaves battlefield found = s.find("steal"); if (found != string::npos) { - MTGAbility * a = NEW AInstantControlSteal(observer, id, card, target); + MTGAbility * a = NEW ASeizeWrapper(observer, id, card, target); a->oneShot = 1; return a; } diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 70d64c07c..62b6a2317 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -237,6 +237,7 @@ void MTGCardInstance::initMTGCI() storedSourceCard = NULL; myPair = NULL; shackled = NULL; + seized = NULL; miracle = false; hasCopiedToken = false; countTrini = 0;