Laurent - Clean-up from code.
PLEASE REVIEW this one. I removed all unusued portion of code, some other cleaning work could be performed (will discuss in forum). Also just added "@each" as triggered ability in order to have it work properly with most cards "currentplayer" should be added to the TargetChooser.
This commit is contained in:
@@ -1583,36 +1583,6 @@ class AControlStealAura: public MTGAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Same as StealControl Aura ???? Obsolete ?
|
|
||||||
class ATakeControlAura:public MTGAbility{
|
|
||||||
public:
|
|
||||||
Player * previousController;
|
|
||||||
ATakeControlAura(int _id, MTGCardInstance * _source, MTGCardInstance * _target):MTGAbility(_id, _source,_target){
|
|
||||||
previousController = _target->controller();
|
|
||||||
previousController->game->putInZone(_target, previousController->game->inPlay, source->controller()->game->inPlay);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int destroy(){
|
|
||||||
MTGCardInstance * _target = (MTGCardInstance *) target;
|
|
||||||
Player * p = _target->controller();
|
|
||||||
if (p && p->game->inPlay->hasCard(_target)){
|
|
||||||
p->game->putInZone(_target, p->game->inPlay, previousController->game->inPlay);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "ATakeControlAura ::: previousController : " << previousController
|
|
||||||
<< " (";
|
|
||||||
return MTGAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//Creatures that kill their blockers
|
//Creatures that kill their blockers
|
||||||
//Ex : Cockatrice
|
//Ex : Cockatrice
|
||||||
class AOldSchoolDeathtouch:public MTGAbility{
|
class AOldSchoolDeathtouch:public MTGAbility{
|
||||||
@@ -1839,33 +1809,6 @@ class AArmageddonClock:public MTGAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//Black Vise
|
|
||||||
class ABlackVise: public MTGAbility{
|
|
||||||
public:
|
|
||||||
int nbcards;
|
|
||||||
ABlackVise(int id, MTGCardInstance * _source):MTGAbility(id, _source){
|
|
||||||
nbcards = game->opponent()->game->hand->nb_cards;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update(float dt){
|
|
||||||
if (newPhase == Constants::MTG_PHASE_UPKEEP && GameObserver::GetInstance()->opponent()->game->inPlay->hasCard(source)){
|
|
||||||
nbcards = game->currentPlayer->game->hand->nb_cards;
|
|
||||||
}
|
|
||||||
if (newPhase != currentPhase && newPhase == Constants::MTG_PHASE_DRAW && GameObserver::GetInstance()->opponent()->game->inPlay->hasCard(source)){
|
|
||||||
if ( nbcards > 4) game->mLayers->stackLayer()->addDamage(source,game->currentPlayer, nbcards - 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "ABlackVise ::: nbcards : " << nbcards
|
|
||||||
<< " (";
|
|
||||||
return MTGAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//Channel
|
//Channel
|
||||||
class AChannel:public ActivatedAbility{
|
class AChannel:public ActivatedAbility{
|
||||||
public:
|
public:
|
||||||
@@ -2257,26 +2200,6 @@ class AHowlingMine:public MTGAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//1119 Jayemdae Tome
|
|
||||||
class AJayemdaeTome:public ActivatedAbility{
|
|
||||||
public:
|
|
||||||
AJayemdaeTome(int _id, MTGCardInstance * card):ActivatedAbility(_id, card){
|
|
||||||
int _cost[] = {Constants::MTG_COLOR_ARTIFACT, 4};
|
|
||||||
cost = NEW ManaCost(_cost,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int resolve(){
|
|
||||||
game->mLayers->stackLayer()->addDraw(source->controller());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "AJayemdaeTome ::: (";
|
|
||||||
return ActivatedAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//Living Artifact
|
//Living Artifact
|
||||||
class ALivingArtifact:public MTGAbility{
|
class ALivingArtifact:public MTGAbility{
|
||||||
@@ -2524,8 +2447,6 @@ class AHypnoticSpecter:public MTGAbility{
|
|||||||
game->players[i]->game->discardRandom(game->players[i]->game->hand);
|
game->players[i]->game->discardRandom(game->players[i]->game->hand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
virtual ostream& toString(ostream& out) const
|
||||||
@@ -2635,32 +2556,6 @@ class AKudzu: public TargetAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Millstone
|
|
||||||
class AMillstone:public TargetAbility{
|
|
||||||
public:
|
|
||||||
AMillstone(int _id, MTGCardInstance * card):TargetAbility(_id,card, NEW PlayerTargetChooser(), NEW ManaCost()){
|
|
||||||
cost->add(Constants::MTG_COLOR_ARTIFACT, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int resolve(){
|
|
||||||
Player * player = tc->getNextPlayerTarget();
|
|
||||||
if (!player) return 0;
|
|
||||||
MTGLibrary * library = player->game->library;
|
|
||||||
for (int i = 0; i < 2; i++){
|
|
||||||
if (library->nb_cards)
|
|
||||||
player->game->putInZone(library->cards[library->nb_cards-1],library, player->game->graveyard);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "AMillstone ::: (";
|
|
||||||
return TargetAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//1172 Pestilence
|
//1172 Pestilence
|
||||||
class APestilence: public ActivatedAbility{
|
class APestilence: public ActivatedAbility{
|
||||||
public:
|
public:
|
||||||
@@ -2790,28 +2685,6 @@ class APowerSurge:public TriggeredAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//1175 Royal Assassin
|
|
||||||
class ARoyalAssassin:public TargetAbility{
|
|
||||||
public:
|
|
||||||
|
|
||||||
ARoyalAssassin(int _id, MTGCardInstance * _source):TargetAbility(_id,_source, NEW CreatureTargetChooser()){
|
|
||||||
}
|
|
||||||
|
|
||||||
int resolve(){
|
|
||||||
MTGCardInstance * _target = tc->getNextCardTarget();
|
|
||||||
if(_target && _target->tapped){
|
|
||||||
_target->controller()->game->putInGraveyard(_target);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "ARoyalAssassin ::: (";
|
|
||||||
return TargetAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//1176 Sacrifice
|
//1176 Sacrifice
|
||||||
@@ -3147,34 +3020,6 @@ class AIslandSanctuary:public MTGAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//1352 Karma
|
|
||||||
class AKarma: public TriggeredAbility{
|
|
||||||
public:
|
|
||||||
AKarma(int _id, MTGCardInstance * _source):TriggeredAbility(_id, _source){
|
|
||||||
}
|
|
||||||
|
|
||||||
int trigger(){
|
|
||||||
if (newPhase != currentPhase && newPhase == Constants::MTG_PHASE_UPKEEP) return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int resolve(){
|
|
||||||
int totaldamage = 0;
|
|
||||||
MTGGameZone * zone = game->currentPlayer->game->inPlay;
|
|
||||||
for (int i = 0; i < zone->nb_cards; i++){
|
|
||||||
if (zone->cards[i]->hasType("swamp")) totaldamage++;;
|
|
||||||
}
|
|
||||||
if (totaldamage) game->mLayers->stackLayer()->addDamage(source,game->currentPlayer, totaldamage);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "AKarma ::: (";
|
|
||||||
return TriggeredAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//Soul Net
|
//Soul Net
|
||||||
class ASoulNet:public ActivatedAbility{
|
class ASoulNet:public ActivatedAbility{
|
||||||
@@ -3266,28 +3111,7 @@ class AStasis:public ActivatedAbility{
|
|||||||
|
|
||||||
//--------------Addon Abra------------------
|
//--------------Addon Abra------------------
|
||||||
|
|
||||||
|
//Basilik --> needs to be made more generic to avoid duplicate (also something like if opponent=type then ...)
|
||||||
|
|
||||||
//Draft for counters
|
|
||||||
class ACounters: public MTGAbility{
|
|
||||||
public:
|
|
||||||
int counter;
|
|
||||||
int power;
|
|
||||||
int toughness;
|
|
||||||
ACounters(int id, MTGCardInstance * _source, MTGCardInstance * _target, int _power, int _toughness):MTGAbility(id,_source,_target),power(_power),toughness(_toughness){
|
|
||||||
_target->counters->addCounter(power, toughness);
|
|
||||||
}
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "ACounters ::: counter : " << counter
|
|
||||||
<< " ; power : " << power
|
|
||||||
<< " ; toughness : " << toughness
|
|
||||||
<< " (";
|
|
||||||
return MTGAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//Basilik
|
|
||||||
class ABasilik:public MTGAbility{
|
class ABasilik:public MTGAbility{
|
||||||
public:
|
public:
|
||||||
MTGCardInstance * opponents[20];
|
MTGCardInstance * opponents[20];
|
||||||
@@ -3517,49 +3341,6 @@ class AShieldOfTheAge: public TargetAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Abomination Kill blocking creature if white or green
|
|
||||||
class AAbomination :public MTGAbility{
|
|
||||||
public:
|
|
||||||
MTGCardInstance * opponents[20];
|
|
||||||
int nbOpponents;
|
|
||||||
AAbomination (int _id, MTGCardInstance * _source):MTGAbility(_id, _source){
|
|
||||||
nbOpponents = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update(float dt){
|
|
||||||
if (newPhase != currentPhase){
|
|
||||||
if( newPhase == Constants::MTG_PHASE_COMBATDAMAGE){
|
|
||||||
nbOpponents = 0;
|
|
||||||
MTGCardInstance * opponent = source->getNextOpponent();
|
|
||||||
while ((opponent && opponent->hasColor(Constants::MTG_COLOR_GREEN)) || opponent->hasColor(Constants::MTG_COLOR_WHITE)){
|
|
||||||
opponents[nbOpponents] = opponent;
|
|
||||||
nbOpponents ++;
|
|
||||||
opponent = source->getNextOpponent(opponent);
|
|
||||||
}
|
|
||||||
}else if (newPhase == Constants::MTG_PHASE_COMBATEND){
|
|
||||||
for (int i = 0; i < nbOpponents ; i++){
|
|
||||||
game->mLayers->stackLayer()->addPutInGraveyard(opponents[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int testDestroy(){
|
|
||||||
if(!game->isInPlay(source) && currentPhase != Constants::MTG_PHASE_UNTAP){
|
|
||||||
return 0;
|
|
||||||
}else{
|
|
||||||
return MTGAbility::testDestroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ostream& toString(ostream& out) const
|
|
||||||
{
|
|
||||||
out << "AAbomination ::: opponents : " << opponents
|
|
||||||
<< " ; nbOpponents : " << nbOpponents
|
|
||||||
<< " (";
|
|
||||||
return MTGAbility::toString(out) << ")";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// GiveLifeForTappedType
|
// GiveLifeForTappedType
|
||||||
class AGiveLifeForTappedType:public MTGAbility{
|
class AGiveLifeForTappedType:public MTGAbility{
|
||||||
@@ -3643,10 +3424,6 @@ class AMinionofLeshrac: public TargetAbility{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Generic Kird Ape
|
//Generic Kird Ape
|
||||||
class AKirdApe:public ListMaintainerAbility{
|
class AKirdApe:public ListMaintainerAbility{
|
||||||
public:
|
public:
|
||||||
@@ -3889,11 +3666,77 @@ class AInstantControlSteal: public InstantAbility{
|
|||||||
virtual ostream& toString(ostream& out) const
|
virtual ostream& toString(ostream& out) const
|
||||||
{
|
{
|
||||||
out << "AInstantControlSteal ::: TrueController : " << TrueController
|
out << "AInstantControlSteal ::: TrueController : " << TrueController
|
||||||
|
<< " ; TheftController : " << TheftController
|
||||||
<< " (";
|
<< " (";
|
||||||
return InstantAbility::toString(out) << ")";
|
return InstantAbility::toString(out) << ")";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Work in Progress also from no on all code could be removed...
|
||||||
|
|
||||||
|
//Draft for counters
|
||||||
|
class ACounters: public MTGAbility{
|
||||||
|
public:
|
||||||
|
int counter;
|
||||||
|
int power;
|
||||||
|
int toughness;
|
||||||
|
ACounters(int id, MTGCardInstance * _source, MTGCardInstance * _target, int _power, int _toughness):MTGAbility(id,_source,_target),power(_power),toughness(_toughness){
|
||||||
|
_target->counters->addCounter(power, toughness);
|
||||||
|
}
|
||||||
|
virtual ostream& toString(ostream& out) const
|
||||||
|
{
|
||||||
|
out << "ACounters ::: counter : " << counter
|
||||||
|
<< " ; power : " << power
|
||||||
|
<< " ; toughness : " << toughness
|
||||||
|
<< " (";
|
||||||
|
return MTGAbility::toString(out) << ")";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
///// Not working need to work on this one
|
||||||
|
///Abomination Kill blocking creature if white or green
|
||||||
|
class AAbomination :public MTGAbility{
|
||||||
|
public:
|
||||||
|
MTGCardInstance * opponents[20];
|
||||||
|
int nbOpponents;
|
||||||
|
AAbomination (int _id, MTGCardInstance * _source):MTGAbility(_id, _source){
|
||||||
|
nbOpponents = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update(float dt){
|
||||||
|
if (newPhase != currentPhase){
|
||||||
|
if( newPhase == Constants::MTG_PHASE_COMBATDAMAGE){
|
||||||
|
nbOpponents = 0;
|
||||||
|
MTGCardInstance * opponent = source->getNextOpponent();
|
||||||
|
while ((opponent && opponent->hasColor(Constants::MTG_COLOR_GREEN)) || opponent->hasColor(Constants::MTG_COLOR_WHITE)){
|
||||||
|
opponents[nbOpponents] = opponent;
|
||||||
|
nbOpponents ++;
|
||||||
|
opponent = source->getNextOpponent(opponent);
|
||||||
|
}
|
||||||
|
}else if (newPhase == Constants::MTG_PHASE_COMBATEND){
|
||||||
|
for (int i = 0; i < nbOpponents ; i++){
|
||||||
|
game->mLayers->stackLayer()->addPutInGraveyard(opponents[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int testDestroy(){
|
||||||
|
if(!game->isInPlay(source) && currentPhase != Constants::MTG_PHASE_UNTAP){
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
return MTGAbility::testDestroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ostream& toString(ostream& out) const
|
||||||
|
{
|
||||||
|
out << "AAbomination ::: opponents : " << opponents
|
||||||
|
<< " ; nbOpponents : " << nbOpponents
|
||||||
|
<< " (";
|
||||||
|
return MTGAbility::toString(out) << ")";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -167,6 +167,17 @@ Trigger * AbilityFactory::parseTrigger(string magicText){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Each Time...
|
||||||
|
found = magicText.find("each");
|
||||||
|
if (found != string::npos){
|
||||||
|
for (int i = 0; i < Constants::NB_MTG_PHASES; i++){
|
||||||
|
found = magicText.find(Constants::MTGPhaseCodeNames[i]);
|
||||||
|
if (found != string::npos){
|
||||||
|
return NEW TriggerAtPhase(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1309,11 +1320,6 @@ void AbilityFactory::addAbilities(int _id, Spell * spell){
|
|||||||
game->addObserver(NEW ARegularLifeModifierAura(_id+2, card, card, Constants::MTG_PHASE_DRAW, -1, 1));
|
game->addObserver(NEW ARegularLifeModifierAura(_id+2, card, card, Constants::MTG_PHASE_DRAW, -1, 1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//case 1126:// Millstone
|
|
||||||
// {
|
|
||||||
// game->addObserver( NEW AMillstone(_id ,card));
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
case 1215: //Power Leak
|
case 1215: //Power Leak
|
||||||
{
|
{
|
||||||
game->addObserver( NEW APowerLeak(_id ,card, card->target));
|
game->addObserver( NEW APowerLeak(_id ,card, card->target));
|
||||||
@@ -1699,7 +1705,7 @@ void AbilityFactory::addAbilities(int _id, Spell * spell){
|
|||||||
}
|
}
|
||||||
case 1352: //Karma
|
case 1352: //Karma
|
||||||
{
|
{
|
||||||
game->addObserver(NEW AKarma(_id, card));
|
game->addObserver(NEW ADamageForTypeControlled(_id, card,"swamp"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1359: //Red Ward
|
case 1359: //Red Ward
|
||||||
@@ -2051,13 +2057,6 @@ void AbilityFactory::addAbilities(int _id, Spell * spell){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// case 135268: //Colossus of Sardia
|
|
||||||
// {
|
|
||||||
// int cost[] = {Constants::MTG_COLOR_ARTIFACT, 9};
|
|
||||||
// game->addObserver(NEW AUntapManaBlocker(_id, card, NEW ManaCost(cost,1)));
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
case 129521: //Dehydratation
|
case 129521: //Dehydratation
|
||||||
// Don't understand why but target automatically untap when cast...
|
// Don't understand why but target automatically untap when cast...
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user