diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 9b63b64db..b128daab2 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -25061,6 +25061,14 @@ power=4 toughness=3 [/card] [card] +name=Martial Coup +mana={X}{W}{W} +type=Sorcery +text=Put X 1/1 soldier creature tokens into play. If X is 5 or more, destroy all other creatures. +auto=this(X>=5) destroy all(creature) +auto=token(Soldier,creature soldier,1/1,white) *X +[/card] +[card] name=Marton Stromgald auto=@each combatblockers:aslongas(Marton Stromgald[attacking]) foreach(other creature[attacking]) all(other creature[attacking]) 1/1 ueot auto=@each combatblockers:aslongas(Marton Stromgald[blocking]) foreach(other creature[blocking]) all(other creature[blocking]) 1/1 ueot diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index 9eff1eb10..a147869f4 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -309,6 +309,8 @@ living_artifact_i169.txt living_lands.txt lord_of_the_pit.txt lord_of_the_pit2.txt +martial_coup.txt +martial_coup2.txt master_decoy.txt master_of_etherium.txt meekstone.txt diff --git a/projects/mtg/bin/daily_build/template.exe b/projects/mtg/bin/daily_build/template.exe index 0ab0f54c6..544e7c75b 100644 Binary files a/projects/mtg/bin/daily_build/template.exe and b/projects/mtg/bin/daily_build/template.exe differ diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 84851ed7e..772bf5630 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -400,28 +400,13 @@ class GenericActivatedAbility:public ActivatedAbility, public NestedAbility{ int resolve(){ counters++; - setAbilityCost(ability); + source->X = abilityCost->Diff(cost)->hasX(); SAFE_DELETE(abilityCost); ability->target = target; //may have been updated... if (ability) return ability->resolve(); return 0; } - - void setAbilityCost(MTGAbility * _ability){ - SAFE_DELETE(_ability->cost); - _ability->cost = abilityCost->Diff(cost); - - NestedAbility * na = dynamic_cast(_ability); - if (na) setAbilityCost(na->ability); - - MultiAbility * ma = dynamic_cast(_ability); - if (ma) { - for (size_t i = 0; i < ma->abilities.size(); i++) { - setAbilityCost(ma->abilities[i]); - } - } - } const char * getMenuText(){ if (ability) return ability->getMenuText(); return "Error"; @@ -1914,13 +1899,8 @@ public: int resolve(){ //TODO check if ability is oneShot ? int match; - if (!td->compareAbility){ - match = td->match(source); - }else{ - match = td->match(this); - } - - if (match){ + match = td->match(source); + if (match > 0){ addAbilityToGame(); }else{ removeAbilityFromGame(); @@ -1986,11 +1966,7 @@ class AThisForEach:public MTGAbility, public NestedAbility{ int resolve(){ //TODO check if ability is oneShot ? int matches; - if (!td->compareAbility){ - matches = td->match(source); - }else{ - matches = td->match(this); - } + matches = td->match(source); if (matches > 0) { if (abilities.size()){ removeAbilityFromGame(); diff --git a/projects/mtg/include/CardPrimitive.h b/projects/mtg/include/CardPrimitive.h index 685b3234c..ad03f8844 100644 --- a/projects/mtg/include/CardPrimitive.h +++ b/projects/mtg/include/CardPrimitive.h @@ -15,9 +15,9 @@ class CardPrimitive { vector ftdText; int init(); string lcname; + ManaCost manaCost; public: - ManaCost manaCost; string text; string name; diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 208b24e15..20365de8d 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -43,6 +43,7 @@ class MTGCardInstance: public CardPrimitive, public MTGCard, public Damageable { public: MTGGameZone * currentZone; Pos* view; + int X; int regenerateTokens; int isToken; int stillInUse(); diff --git a/projects/mtg/include/ThisDescriptor.h b/projects/mtg/include/ThisDescriptor.h index 0fe38b57d..357b127d4 100644 --- a/projects/mtg/include/ThisDescriptor.h +++ b/projects/mtg/include/ThisDescriptor.h @@ -12,11 +12,9 @@ class ThisDescriptor{ public: - int compareAbility; int comparisonMode; int comparisonCriterion; virtual int match(MTGCardInstance * card) = 0; - virtual int match(MTGAbility * ability) = 0; int matchValue(int value); }; @@ -29,7 +27,7 @@ class ThisCounter:public ThisDescriptor{ public: Counter * counter; virtual int match(MTGCardInstance * card); - virtual int match(MTGAbility * ability) {return 0;}; + ThisCounter(Counter * _counter); ThisCounter(int power, int toughness, int nb, const char * name); ~ThisCounter(); @@ -38,28 +36,27 @@ class ThisCounter:public ThisDescriptor{ class ThisCounterAny:public ThisDescriptor{ public: virtual int match(MTGCardInstance *card); - virtual int match(MTGAbility * ability) {return 0;}; + ThisCounterAny(int nb); }; class ThisPower:public ThisDescriptor{ public: virtual int match(MTGCardInstance * card); - virtual int match(MTGAbility * ability) {return 0;}; + ThisPower(int power); }; class ThisToughness:public ThisDescriptor{ public: virtual int match(MTGCardInstance * card); - virtual int match(MTGAbility * ability) {return 0;}; + ThisToughness(int toughness); }; class ThisX:public ThisDescriptor{ public: - virtual int match(MTGAbility * ability); - virtual int match(MTGCardInstance * card) {return 0;}; + virtual int match(MTGCardInstance * card); ThisX(int x); }; diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index ccf0176c2..608e806e5 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1971,6 +1971,7 @@ void TargetAbility::Render(){ int TargetAbility::resolve(){ Targetable * t = tc->getNextTarget(); if (t && ability){ + source->X = abilityCost->Diff(cost)->hasX(); ability->target = t; if (ability->oneShot) return ability->resolve(); MTGAbility * a = ability->clone(); diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 33fdc03fe..91125566f 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -90,6 +90,7 @@ int MTGCardInstance::init(){ MTGCard::init(); CardPrimitive::init(); data = this; + X = 0; return 1; } diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index b461700aa..9f75630f4 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -212,6 +212,7 @@ MTGCardInstance * MTGGameZone::removeCard(MTGCardInstance * card, int createCopy copy->previous = card; copy->view = card->view; copy->isToken = card->isToken; + copy->X = card->X; //stupid bug with tokens... if (card->model == card) diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index fb1c22665..369364d12 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -70,6 +70,7 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card){ }else{ spell = game->mLayers->stackLayer()->addSpell(copy,NULL, spellCost, payResult); } + copy->X = spell->computeX(copy); } return 1; } diff --git a/projects/mtg/src/ThisDescriptor.cpp b/projects/mtg/src/ThisDescriptor.cpp index 316c534df..44b43bb2f 100644 --- a/projects/mtg/src/ThisDescriptor.cpp +++ b/projects/mtg/src/ThisDescriptor.cpp @@ -159,13 +159,11 @@ ThisDescriptor * ThisDescriptorFactory::createThisDescriptor(string s){ } ThisCounter::ThisCounter(Counter * _counter){ - compareAbility = 0; counter = _counter; comparisonCriterion = counter->nb; } ThisCounter::ThisCounter(int power, int toughness, int nb, const char * name){ - compareAbility = 0; counter = NEW Counter(NULL,name,power,toughness); comparisonCriterion = nb; } @@ -197,7 +195,6 @@ ThisCounter::~ThisCounter() { } ThisPower::ThisPower(int power){ - compareAbility = 0; comparisonCriterion = power; } @@ -206,7 +203,6 @@ int ThisPower::match(MTGCardInstance * card){ } ThisToughness::ThisToughness(int toughness){ - compareAbility = 0; comparisonCriterion = toughness; } @@ -215,7 +211,6 @@ int ThisToughness::match(MTGCardInstance * card){ } ThisCounterAny::ThisCounterAny(int nb){ - compareAbility = 0; comparisonCriterion = nb; } @@ -229,9 +224,8 @@ int ThisCounterAny::match(MTGCardInstance * card){ ThisX::ThisX(int x){ comparisonCriterion = x; - compareAbility = 1; } -int ThisX::match(MTGAbility * ability){ - return matchValue(ability->cost->hasX()); +int ThisX::match(MTGCardInstance * card){ + return matchValue(card->X); } \ No newline at end of file