Minor simplification of MTGRules.cpp

This commit is contained in:
wagic.the.homebrew
2011-10-10 13:27:30 +00:00
parent e17b20c9d8
commit c17d07d476
2 changed files with 55 additions and 197 deletions

View File

@@ -10,16 +10,22 @@
#include "CardSelector.h"
#include "ManaCost.h"
class OtherAbilitiesEventReceiver: public MTGAbility
class PermanentAbility: public MTGAbility
{
public:
int testDestroy() {return 0;};
PermanentAbility(GameObserver* observer, int _id);
};
class OtherAbilitiesEventReceiver: public PermanentAbility
{
public:
int testDestroy();
int receiveEvent(WEvent * event);
OtherAbilitiesEventReceiver(GameObserver* observer, int _id);
OtherAbilitiesEventReceiver * clone() const;
};
class MTGEventBonus: public MTGAbility
class MTGEventBonus: public PermanentAbility
{
public:
int textAlpha;
@@ -55,19 +61,17 @@ public:
int receiveEvent(WEvent * event);
void grantAward(string awardName,int amount);
int testDestroy();
void Update(float dt);
void Render();
MTGEventBonus(GameObserver* observer, int _id);
virtual MTGEventBonus * clone() const;
};
class MTGPutInPlayRule: public MTGAbility
class MTGPutInPlayRule: public PermanentAbility
{
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGPutInPlayRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -82,7 +86,6 @@ class MTGKickerRule: public MTGPutInPlayRule
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGKickerRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -92,7 +95,7 @@ public:
virtual MTGKickerRule * clone() const;
};
class MTGAlternativeCostRule: public MTGAbility
class MTGAlternativeCostRule: public PermanentAbility
{
protected:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana, ManaCost *alternateManaCost);
@@ -101,8 +104,6 @@ protected:
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGAlternativeCostRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -119,7 +120,6 @@ class MTGBuyBackRule: public MTGAlternativeCostRule
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGBuyBackRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -135,7 +135,6 @@ public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGFlashBackRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -150,7 +149,6 @@ class MTGRetraceRule: public MTGAlternativeCostRule
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGRetraceRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -160,13 +158,12 @@ public:
virtual MTGRetraceRule * clone() const;
};
class MTGMorphCostRule: public MTGAbility
class MTGMorphCostRule: public PermanentAbility
{
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGMorphCostRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -182,7 +179,6 @@ public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int receiveEvent(WEvent *e);
int reactToClick(MTGCardInstance * card);
int testDestroy();
string suspendmenu;
virtual ostream& toString(ostream& out) const;
MTGSuspendRule(GameObserver* observer, int _id);
@@ -198,7 +194,7 @@ public:
virtual MTGSuspendRule * clone() const;
};
class MTGAttackRule: public MTGAbility, public Limitor
class MTGAttackRule: public PermanentAbility, public Limitor
{
public:
@@ -206,7 +202,6 @@ public:
virtual bool greyout(Target*);
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGAttackRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -218,22 +213,20 @@ public:
};
/* handles combat trigger send recieve events*/
class MTGCombatTriggersRule: public MTGAbility
class MTGCombatTriggersRule: public PermanentAbility
{
public:
MTGCombatTriggersRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
virtual ostream& toString(ostream& out) const;
int testDestroy();
virtual MTGCombatTriggersRule * clone() const;
};
class MTGBlockRule: public MTGAbility
class MTGBlockRule: public PermanentAbility
{
public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card);
int testDestroy();
virtual ostream& toString(ostream& out) const;
MTGBlockRule(GameObserver* observer, int _id);
const char * getMenuText()
@@ -244,43 +237,39 @@ public:
};
/* Persist Rule */
class MTGPersistRule: public MTGAbility
class MTGPersistRule: public PermanentAbility
{
public:
MTGPersistRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
virtual ostream& toString(ostream& out) const;
int testDestroy();
virtual MTGPersistRule * clone() const;
};
/* vampire Rule */
class MTGVampireRule: public MTGAbility
class MTGVampireRule: public PermanentAbility
{
public:
MTGVampireRule(GameObserver* observer, int _id);
map<MTGCardInstance*,vector<MTGCardInstance*> > victems;
int receiveEvent(WEvent * event);
virtual ostream& toString(ostream& out) const;
int testDestroy();
virtual MTGVampireRule * clone() const;
};
//unearths destruction if leaves play effect
class MTGUnearthRule: public MTGAbility
class MTGUnearthRule: public PermanentAbility
{
public:
MTGUnearthRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
virtual ostream& toString(ostream& out) const;
int testDestroy();
virtual MTGUnearthRule * clone() const;
};
class MTGTokensCleanup: public MTGAbility
class MTGTokensCleanup: public PermanentAbility
{
public:
vector<MTGCardInstance *> list;
MTGTokensCleanup(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
int testDestroy();
virtual MTGTokensCleanup * clone() const;
};
@@ -313,7 +302,7 @@ public:
virtual MTGPlaneWalkerRule * clone() const;
};
class MTGMomirRule: public MTGAbility
class MTGMomirRule: public PermanentAbility
{
private:
int genRandomCreatureId(int convertedCost);
@@ -327,7 +316,6 @@ public:
int alreadyplayed;
MTGAllCards * collection;
MTGCardInstance * genCreature(int id);
int testDestroy();
void Update(float dt);
void Render();
MTGMomirRule(GameObserver* observer, int _id, MTGAllCards * _collection);
@@ -343,7 +331,7 @@ public:
};
//stone hewer gaint avatar mode
class MTGStoneHewerRule: public MTGAbility
class MTGStoneHewerRule: public PermanentAbility
{
private:
int genRandomEquipId(int convertedCost);
@@ -352,8 +340,7 @@ private:
public:
MTGAllCards * collection;
MTGCardInstance * genEquip(int id);
int testDestroy();
MTGStoneHewerRule(GameObserver* observer, int _id, MTGAllCards * _collection);
MTGStoneHewerRule(GameObserver* observer, int _id, MTGAllCards * _collection);
int receiveEvent(WEvent * event);
const char * getMenuText()
{
@@ -363,11 +350,10 @@ public:
virtual MTGStoneHewerRule * clone() const;
};
//Hermit Druid avatar mode
class MTGHermitRule: public MTGAbility
class MTGHermitRule: public PermanentAbility
{
public:
int testDestroy();
MTGHermitRule(GameObserver* observer, int _id);
MTGHermitRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
const char * getMenuText()
{
@@ -377,29 +363,26 @@ public:
};
//
/* LifeLink */
class MTGLifelinkRule: public MTGAbility
class MTGLifelinkRule: public PermanentAbility
{
public:
MTGLifelinkRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
int testDestroy();
virtual ostream& toString(ostream& out) const;
virtual MTGLifelinkRule * clone() const;
};
/* Deathtouch */
class MTGDeathtouchRule: public MTGAbility
class MTGDeathtouchRule: public PermanentAbility
{
public:
MTGDeathtouchRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
int testDestroy();
const char * getMenuText()
{
return "Deathtouch";
@@ -409,13 +392,12 @@ public:
};
/* handling parentchild */
class ParentChildRule: public MTGAbility
class ParentChildRule: public PermanentAbility
{
public:
ParentChildRule(GameObserver* observer, int _id);
int receiveEvent(WEvent * event);
virtual ostream& toString(ostream& out) const;
int testDestroy();
virtual ParentChildRule * clone() const;
};
/* HUD Display */
@@ -434,7 +416,7 @@ public:
;
};
class HUDDisplay: public MTGAbility
class HUDDisplay: public PermanentAbility
{
private:
list<HUDString *> events;
@@ -444,7 +426,6 @@ private:
float maxWidth;
int addEvent(string s);
public:
int testDestroy();
int receiveEvent(WEvent * event);
void Update(float dt);
void Render();

View File

@@ -7,8 +7,12 @@
#include "Credits.h"
#include "AllAbilities.h"
PermanentAbility::PermanentAbility(GameObserver* observer, int _id) : MTGAbility(observer, _id,NULL)
{
}
MTGEventBonus::MTGEventBonus(GameObserver* observer, int _id) :
MTGAbility(observer, _id,NULL)
PermanentAbility(observer, _id)
{
textAlpha = 0;
text = "";
@@ -245,11 +249,6 @@ void MTGEventBonus::grantAward(string awardName,int amount)
Credits::addCreditBonus(amount);
}
int MTGEventBonus::testDestroy()
{
return 0;
}
void MTGEventBonus::Update(float dt)
{
if (textAlpha)
@@ -278,7 +277,7 @@ MTGEventBonus * MTGEventBonus::clone() const
//
MTGPutInPlayRule::MTGPutInPlayRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::PUT_INTO_PLAY;
}
@@ -459,12 +458,6 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card)
return 1;
}
//The Put into play rule is never destroyed
int MTGPutInPlayRule::testDestroy()
{
return 0;
}
ostream& MTGPutInPlayRule::toString(ostream& out) const
{
out << "MTGPutInPlayRule ::: (";
@@ -597,11 +590,6 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
return 1;
}
int MTGKickerRule::testDestroy()
{
return 0;
}
ostream& MTGKickerRule::toString(ostream& out) const
{
out << "MTGKickerRule ::: (";
@@ -625,7 +613,7 @@ MTGKickerRule * MTGKickerRule::clone() const
//-------------------------------------------------------------------------
MTGAlternativeCostRule::MTGAlternativeCostRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::ALTERNATIVE_COST;
}
@@ -757,13 +745,6 @@ int MTGAlternativeCostRule::reactToClick(MTGCardInstance * card, ManaCost *alter
return 1;
}
//The Put into play rule is never destroyed
int MTGAlternativeCostRule::testDestroy()
{
return 0;
}
ostream& MTGAlternativeCostRule::toString(ostream& out) const
{
out << "MTGAlternativeCostRule ::: (";
@@ -810,12 +791,6 @@ int MTGBuyBackRule::reactToClick(MTGCardInstance * card)
}
//The Put into play rule is never destroyed
int MTGBuyBackRule::testDestroy()
{
return 0;
}
ostream& MTGBuyBackRule::toString(ostream& out) const
{
out << "MTGBuyBackRule ::: (";
@@ -858,12 +833,6 @@ int MTGFlashBackRule::reactToClick(MTGCardInstance * card)
}
//The Put into play rule is never destroyed
int MTGFlashBackRule::testDestroy()
{
return 0;
}
ostream& MTGFlashBackRule::toString(ostream& out) const
{
out << "MTGFlashBackRule ::: (";
@@ -910,13 +879,6 @@ int MTGRetraceRule::reactToClick(MTGCardInstance * card)
return MTGAlternativeCostRule::reactToClick(card, alternateCost, ManaCost::MANA_PAID_WITH_RETRACE);
}
//The Put into play rule is never destroyed
int MTGRetraceRule::testDestroy()
{
return 0;
}
ostream& MTGRetraceRule::toString(ostream& out) const
{
out << "MTGRetraceRule ::: (";
@@ -1027,13 +989,6 @@ int MTGSuspendRule::reactToClick(MTGCardInstance * card)
return 1;
}
//The Put into play rule is never destroyed
int MTGSuspendRule::testDestroy()
{
return 0;
}
ostream& MTGSuspendRule::toString(ostream& out) const
{
out << "MTGSuspendRule ::: (";
@@ -1052,7 +1007,7 @@ MTGSuspendRule * MTGSuspendRule::clone() const
MTGMorphCostRule::MTGMorphCostRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::MORPH_COST;
}
@@ -1155,12 +1110,6 @@ int MTGMorphCostRule::reactToClick(MTGCardInstance * card)
return 1;
}
//The morph rule is never destroyed
int MTGMorphCostRule::testDestroy()
{
return 0;
}
ostream& MTGMorphCostRule::toString(ostream& out) const
{
out << "MTGMorphCostRule ::: (";
@@ -1196,7 +1145,7 @@ bool MTGAttackRule::greyout(Target* t)
}
MTGAttackRule::MTGAttackRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::MTG_ATTACK_RULE;
}
@@ -1258,12 +1207,6 @@ int MTGAttackRule::reactToClick(MTGCardInstance * card)
return 1;
}
//The Attack rule is never destroyed
int MTGAttackRule::testDestroy()
{
return 0;
}
ostream& MTGAttackRule::toString(ostream& out) const
{
out << "MTGAttackRule ::: (";
@@ -1277,7 +1220,7 @@ MTGAttackRule * MTGAttackRule::clone() const
//this rules handles returning cards to combat triggers for activations.
MTGCombatTriggersRule::MTGCombatTriggersRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::MTG_COMBATTRIGGERS_RULE;
}
@@ -1376,12 +1319,6 @@ int MTGCombatTriggersRule::receiveEvent(WEvent *e)
return 0;
}
//trigger rules are never distroyed
int MTGCombatTriggersRule::testDestroy()
{
return 0;
}
ostream& MTGCombatTriggersRule::toString(ostream& out) const
{
out << "MTGCombatTriggersRule ::: (";
@@ -1395,7 +1332,7 @@ MTGCombatTriggersRule * MTGCombatTriggersRule::clone() const
///------------
OtherAbilitiesEventReceiver::OtherAbilitiesEventReceiver(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
@@ -1418,18 +1355,13 @@ int OtherAbilitiesEventReceiver::receiveEvent(WEvent *e)
return 0;
}
int OtherAbilitiesEventReceiver::testDestroy()
{
return 0;
}
OtherAbilitiesEventReceiver * OtherAbilitiesEventReceiver::clone() const
{
return NEW OtherAbilitiesEventReceiver(*this);
}
MTGBlockRule::MTGBlockRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
aType = MTGAbility::MTG_BLOCK_RULE;
}
@@ -1466,12 +1398,6 @@ int MTGBlockRule::reactToClick(MTGCardInstance * card)
return 1;
}
//The Block rule is never destroyed
int MTGBlockRule::testDestroy()
{
return 0;
}
ostream& MTGBlockRule::toString(ostream& out) const
{
out << "MTGBlockRule ::: (";
@@ -1494,7 +1420,7 @@ int MTGMomirRule::initialized = 0;
vector<int> MTGMomirRule::pool[20];
MTGMomirRule::MTGMomirRule(GameObserver* observer, int _id, MTGAllCards * _collection) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
collection = _collection;
if (!initialized)
@@ -1595,12 +1521,6 @@ int MTGMomirRule::genRandomCreatureId(int convertedCost)
return pool[convertedCost][start];
}
//The Momir rule is never destroyed
int MTGMomirRule::testDestroy()
{
return 0;
}
void MTGMomirRule::Update(float dt)
{
if (newPhase != currentPhase && newPhase == Constants::MTG_PHASE_UNTAP)
@@ -1649,7 +1569,7 @@ int MTGStoneHewerRule::initialized = 0;
vector<int> MTGStoneHewerRule::pool[20];
MTGStoneHewerRule::MTGStoneHewerRule(GameObserver* observer, int _id, MTGAllCards * _collection) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
collection = _collection;
if (!initialized)
@@ -1728,12 +1648,6 @@ int MTGStoneHewerRule::genRandomEquipId(int convertedCost)
return pool[convertedCost][start];
}
//The StoneHewer is never destroyed
int MTGStoneHewerRule::testDestroy()
{
return 0;
}
ostream& MTGStoneHewerRule::toString(ostream& out) const
{
out << "MTGStoneHewerRule ::: pool : " << pool << " ; initialized : " << initialized
@@ -1749,7 +1663,7 @@ MTGStoneHewerRule * MTGStoneHewerRule::clone() const
//------------------
//Hermit druid mode places a random land from your deck into play during each of your upkeeps
MTGHermitRule::MTGHermitRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
@@ -1780,12 +1694,6 @@ int MTGHermitRule::receiveEvent(WEvent * event)
return 0;
}
//The hermit is never destroyed
int MTGHermitRule::testDestroy()
{
return 0;
}
MTGHermitRule * MTGHermitRule::clone() const
{
return NEW MTGHermitRule(*this);
@@ -1793,10 +1701,6 @@ MTGHermitRule * MTGHermitRule::clone() const
//--------------------
//HUDDisplay
int HUDDisplay::testDestroy()
{
return 0;
}
void HUDDisplay::Update(float dt)
{
@@ -1886,7 +1790,7 @@ void HUDDisplay::Render()
}
}
HUDDisplay::HUDDisplay(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
timestamp = 0;
popdelay = 2;
@@ -1912,7 +1816,7 @@ HUDDisplay * HUDDisplay::clone() const
/* Persist */
MTGPersistRule::MTGPersistRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -1962,10 +1866,7 @@ ostream& MTGPersistRule::toString(ostream& out) const
out << "MTGPersistRule ::: (";
return MTGAbility::toString(out) << ")";
}
int MTGPersistRule::testDestroy()
{
return 0;
}
MTGPersistRule * MTGPersistRule::clone() const
{
return NEW MTGPersistRule(*this);
@@ -1975,7 +1876,7 @@ MTGPersistRule * MTGPersistRule::clone() const
//handled seperately as a rule since we only want one object to send out events that a card was "vampired".
//otherwise vampire event is sent per instance of @vampired on the battlefield, multipling the results.
MTGVampireRule::MTGVampireRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -2038,10 +1939,7 @@ ostream& MTGVampireRule::toString(ostream& out) const
out << "MTGVampireRule ::: (";
return MTGAbility::toString(out) << ")";
}
int MTGVampireRule::testDestroy()
{
return 0;
}
MTGVampireRule * MTGVampireRule::clone() const
{
return NEW MTGVampireRule(*this);
@@ -2050,7 +1948,7 @@ MTGVampireRule * MTGVampireRule::clone() const
//unearth rule----------------------------------
//if the card leaves play, exile it instead.
MTGUnearthRule::MTGUnearthRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -2100,17 +1998,14 @@ ostream& MTGUnearthRule::toString(ostream& out) const
out << "MTGUnearthRule ::: (";
return MTGAbility::toString(out) << ")";
}
int MTGUnearthRule::testDestroy()
{
return 0;
}
MTGUnearthRule * MTGUnearthRule::clone() const
{
return NEW MTGUnearthRule(*this);
}
//token clean up
MTGTokensCleanup::MTGTokensCleanup(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
@@ -2131,11 +2026,6 @@ int MTGTokensCleanup::receiveEvent(WEvent * e)
return 0;
}
int MTGTokensCleanup::testDestroy()
{
return 0;
}
MTGTokensCleanup * MTGTokensCleanup::clone() const
{
return NEW MTGTokensCleanup(*this);
@@ -2257,7 +2147,7 @@ MTGPlaneWalkerRule * MTGPlaneWalkerRule::clone() const
/* Lifelink */
MTGLifelinkRule::MTGLifelinkRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -2278,11 +2168,6 @@ int MTGLifelinkRule::receiveEvent(WEvent * event)
return 0;
}
int MTGLifelinkRule::testDestroy()
{
return 0;
}
ostream& MTGLifelinkRule::toString(ostream& out) const
{
out << "MTGLifelinkRule ::: (";
@@ -2295,7 +2180,7 @@ MTGLifelinkRule * MTGLifelinkRule::clone() const
/* Deathtouch */
MTGDeathtouchRule::MTGDeathtouchRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -2327,11 +2212,6 @@ int MTGDeathtouchRule::receiveEvent(WEvent * event)
return 0;
}
int MTGDeathtouchRule::testDestroy()
{
return 0;
}
MTGDeathtouchRule * MTGDeathtouchRule::clone() const
{
return NEW MTGDeathtouchRule(*this);
@@ -2339,7 +2219,7 @@ MTGDeathtouchRule * MTGDeathtouchRule::clone() const
//
//kai mod
ParentChildRule::ParentChildRule(GameObserver* observer, int _id) :
MTGAbility(observer, _id, NULL)
PermanentAbility(observer, _id)
{
}
;
@@ -2398,10 +2278,7 @@ ostream& ParentChildRule::toString(ostream& out) const
out << "ParentChildRule ::: (";
return MTGAbility::toString(out) << ")";
}
int ParentChildRule::testDestroy()
{
return 0;
}
ParentChildRule * ParentChildRule::clone() const
{
return NEW ParentChildRule(*this);