diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index ea0b890a3..f3d5833a3 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -825,6 +825,20 @@ public: return a; } }; + +//make instant ability out of anything +class AGenericInstantWrapper: public InstantAbility +{ +public: + MTGAbility * ability; + + AGenericInstantWrapper(int id, MTGCardInstance * source, Damageable * target,MTGAbility * wrapThis); + int resolve(); + const char * getMenuText(); + AGenericInstantWrapper * clone() const; + ~AGenericInstantWrapper(); +}; + //counters class AACounter: public ActivatedAbility { @@ -1766,7 +1780,6 @@ public: GenericInstantAbility * clone() const { GenericInstantAbility * a = NEW GenericInstantAbility(*this); - a->ability = ability->clone(); a->isClone = 1; return a; } diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 698462046..92e028222 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -69,6 +69,39 @@ GenericActivatedAbility::~GenericActivatedAbility() SAFE_DELETE(ability); } +//a generic instant wrapper +//this turns any MTGAbility object into an instant ability. +AGenericInstantWrapper::AGenericInstantWrapper(int id, MTGCardInstance * source, Damageable * target,MTGAbility * wrapThis) : + InstantAbility(id, source, target) +{ + ability = wrapThis; +} + +int AGenericInstantWrapper::resolve() +{ + MTGAbility * a = ability->clone(); + GenericInstantAbility * wrapper = NEW GenericInstantAbility(1, source, (Damageable *) (this->target), a); + wrapper->addToGame(); + return 1; +} +const char * AGenericInstantWrapper::getMenuText() +{ + return ability->getMenuText(); +} + +AGenericInstantWrapper * AGenericInstantWrapper::clone() const +{ + AGenericInstantWrapper * a = NEW AGenericInstantWrapper(*this); + a->ability = this->ability->clone(); + a->isClone = 1; + return a; +} + +AGenericInstantWrapper::~AGenericInstantWrapper() +{ + SAFE_DELETE(ability); +} + //AA Alter Poison AAAlterPoison::AAAlterPoison(int _id, MTGCardInstance * _source, Targetable * _target, int poison, ManaCost * _cost, int who) : diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 38bfa91f5..967aafbc5 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -909,7 +909,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG if (!a1) return NULL; - return NEW GenericInstantAbility(1, card, (Damageable *) target, a1); + return NEW AGenericInstantWrapper(1, card, (Damageable *) target, a1); } //Upkeep Cost