- "foreach" auto keyword improved, now works like lord
- a few cards using "foreach" added
This commit is contained in:
wagic.the.homebrew
2009-03-03 14:02:40 +00:00
parent 58700417da
commit bb23db4b16
17 changed files with 274 additions and 327 deletions

View File

@@ -777,7 +777,7 @@ class AExalted:public ListMaintainerAbility{
int canBeInList(MTGCardInstance * card){
if (card->isAttacker() && game->currentPlayer == source->controller()) return 1;
if (card->isAttacker() && game->currentPlayer == source->controller() && game->isInPlay(card)) return 1;
return 0;
}
@@ -819,7 +819,7 @@ class AExaltedAbility:public ListMaintainerAbility{
int canBeInList(MTGCardInstance * card){
if (card->isAttacker() && game->currentPlayer == source->controller()) return 1;
if (card->isAttacker() && game->currentPlayer == source->controller() && game->isInPlay(card)) return 1;
return 0;
}
@@ -856,7 +856,7 @@ class AConvertLandToCreatures:public ListMaintainerAbility{
int canBeInList(MTGCardInstance * card){
if (card->hasType(type)) return 1;
if (card->hasType(type) && game->isInPlay(card)) return 1;
return 0;
}
@@ -917,8 +917,8 @@ class ALord:public ListMaintainerAbility{
if (ability != -1 && card->basicAbilities[ability]) card->basicAbilities[ability] -=1;
if (regenCost){
if(regenerations.find(card) != regenerations.end()){
if (game->isInPlay(card)) game->removeObserver(regenerations[card]);
regenerations.erase(card);
if (game->isInPlay(card)) game->removeObserver(regenerations[card]);
regenerations.erase(card);
}
}
return 1;
@@ -927,6 +927,42 @@ class ALord:public ListMaintainerAbility{
};
//Foreach (plague rats...)
class AForeach:public ListMaintainerAbility{
public:
TargetChooser * tc;
int power, toughness;
int includeSelf;
AForeach(int _id, MTGCardInstance * card,MTGCardInstance * _target, TargetChooser * _tc, int _includeSelf, int _power = 0 , int _toughness = 0):ListMaintainerAbility(_id,card,_target){
tc = _tc;
tc->source = NULL;
includeSelf = _includeSelf;
power = _power;
toughness = _toughness;
if (!target) target = source; //Is this needed ?
}
int canBeInList(MTGCardInstance * card){
if ( (includeSelf || card!=source) && tc->canTarget(card)) return 1;
return 0;
}
int added(MTGCardInstance * card){
MTGCardInstance * _target = (MTGCardInstance *)target;
_target->power += power;
_target->addToToughness(toughness);
return 1;
}
int removed(MTGCardInstance * card){
MTGCardInstance * _target = (MTGCardInstance *)target;
_target->power -= power;
_target->addToToughness(-toughness);
return 1;
}
};
/* Standard Damager, can choose a NEW target each time the price is paid */
class ADamager:public TargetAbility{
@@ -1235,7 +1271,7 @@ class AAnkhOfMishra: public ListMaintainerAbility{
}
int canBeInList(MTGCardInstance * card){
if (card->hasType("land")) return 1;
if (card->hasType("land") && game->isInPlay(card)) return 1;
return 0;
}
@@ -1481,7 +1517,7 @@ class ADingusEgg: public ListMaintainerAbility{
}
int canBeInList(MTGCardInstance * card){
if (card->hasType("land")) return 1;
if (card->hasType("land") && game->isInPlay(card)) return 1;
return 0;
}
@@ -1974,30 +2010,6 @@ class AMillstone:public TargetAbility{
};
//1170: Nightmare
class ANightmare:public ListMaintainerAbility{
public:
ANightmare(int _id, MTGCardInstance * _source):ListMaintainerAbility(_id, _source){
}
int canBeInList(MTGCardInstance * card){
if (source->controller()->game->inPlay->hasCard(card) && card->hasType("swamp") ) return 1;
return 0;
}
int added(MTGCardInstance * card){
source->power += 1;
source->addToToughness(1);
return 1;
}
int removed(MTGCardInstance * card){
source->power -= 1;
source->addToToughness(-1);
return 1;
}
};
@@ -2029,36 +2041,6 @@ class APestilence: public ActivatedAbility{
};
//Plague Rats and similar. Power and toughness equal to number of cards that share a name
class APlagueRats:public ListMaintainerAbility{
public:
string name;
APlagueRats(int _id, MTGCardInstance * _source, const char * _name):ListMaintainerAbility(_id,_source){
name = _name;
std::transform(name.begin(), name.end(), name.begin(),::tolower );
}
int canBeInList(MTGCardInstance * card){
if (card == source) return 0;
string compared = card->name;
std::transform( compared.begin(), compared.end(), compared.begin(),::tolower );
if (name.compare(compared) == 0) return 1;
return 0;
}
int added(MTGCardInstance * card){
source->power += 1;
source->addToToughness(1);
return 1;
}
int removed(MTGCardInstance * card){
source->power -= 1;
source->addToToughness(-1);
return 1;
}
};
//Power Leak
class APowerLeak:public TriggeredAbility{
@@ -2249,7 +2231,7 @@ class AAspectOfWolf:public ListMaintainerAbility{
int canBeInList(MTGCardInstance * card){
if (card->controller() == source->controller() && card->hasType("forest")) return 1;
if (card->controller() == source->controller() && card->hasType("forest") && game->isInPlay(card)) return 1;
return 0;
}
@@ -2365,30 +2347,6 @@ class AForceOfNature:public ActivatedAbility{
}
};
//1301 KeldonWarlord
class AKeldonWarlord:public ListMaintainerAbility{
public:
AKeldonWarlord(int _id, MTGCardInstance * _source):ListMaintainerAbility(_id, _source){
}
int canBeInList(MTGCardInstance * card){
if (source->controller()->game->inPlay->hasCard(card) && card->isACreature() && !card->hasType("wall") ) return 1;
return 0;
}
int added(MTGCardInstance * card){
source->power += 1;
source->addToToughness(1);
return 1;
}
int removed(MTGCardInstance * card){
source->power -= 1;
source->addToToughness(-1);
return 1;
}
};
@@ -2704,58 +2662,9 @@ class AMinionofLeshrac: public TargetAbility{
};
//2703 Lost Order of Jarkeld
class ALostOrderofJarkeld:public ListMaintainerAbility{
public:
ALostOrderofJarkeld(int _id, MTGCardInstance * _source):ListMaintainerAbility(_id, _source){
}
int canBeInList(MTGCardInstance * card){
if (source->controller()->opponent()->game->inPlay->hasCard(card) && card->isACreature() ) return 1;
return 0;
}
int added(MTGCardInstance * card){
source->power += 1;
source->addToToughness(1);
return 1;
}
int removed(MTGCardInstance * card){
source->power -= 1;
source->addToToughness(-1);
return 1;
}
};
//CreaturePowerToughnessModifierForAllTypeControlled
class ACreaturePowerToughnessModifierForAllTypeControlled:public ListMaintainerAbility{
public:
char type[20];
ACreaturePowerToughnessModifierForAllTypeControlled(int _id, MTGCardInstance * _source, const char * _type):ListMaintainerAbility(_id, _source){
}
int canBeInList(MTGCardInstance * card){
if (source->controller()->game->inPlay->hasCard(card) && card->hasType(type) ) return 1;
return 0;
}
int added(MTGCardInstance * card){
source->power += 1;
source->addToToughness(1);
return 1;
}
int removed(MTGCardInstance * card){
source->power -= 1;
source->addToToughness(-1);
return 1;
}
};
//Generic Kird Ape
class AKirdApe:public ListMaintainerAbility{

View File

@@ -31,6 +31,9 @@ using std::map;
#define COUNT_POWER 1
#define PARSER_LORD 1
#define PARSER_FOREACH 2
class MTGAbility: public ActionElement{
protected:
char menuText[25];

View File

@@ -149,7 +149,7 @@ class MTGLegendRule:public ListMaintainerAbility{
MTGLegendRule(int _id):ListMaintainerAbility(_id){};
int canBeInList(MTGCardInstance * card){
if (card->basicAbilities[Constants::LEGENDARY]){
if (card->basicAbilities[Constants::LEGENDARY] && game->isInPlay(card)){
return 1;
}
return 0;