diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index f7385de50..c275b622a 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -5707,7 +5707,7 @@ toughness=1 [/card] [card] name=Brass's Bounty -auto=foreach(land|mybattlefield) token(Treasure,Artifact) and!( transforms((,newability[{T}{S}:Add{W}])(,newability[{T}{S}:Add{R}])(,newability[{T}{S}:Add{G}])(,newability[{T}{S}:Add{U}])(,newability[{T}{S}:Add{B}])) forever )! +auto=foreach(land|mybattlefield) token(Treasure,Artifact Treasure) and!( transforms((,newability[{T}{S}:Add{W}])(,newability[{T}{S}:Add{R}])(,newability[{T}{S}:Add{G}])(,newability[{T}{S}:Add{U}])(,newability[{T}{S}:Add{B}])) forever )! text=For each land you control, create a Treasure token. (It’s an artifact with “{T}, Sacrifice this artifact: Add one mana of any color.”) mana={6}{R} type=Sorcery @@ -12039,7 +12039,7 @@ type=Enchantment [card] name=Diabolical Salvation abilities=split second -auto=token(Devil,Creature Devil,4/4,red,unreath) with((,newability ((@movedto(this|graveyard) from(battlefield):token(Treasure,Artifact) and!( transforms((,newability[{T}{S}:Add{W}])(,newability[{T}{S}:Add{R}])(,newability[{T}{S}:Add{G}])(,newability[{T}{S}:Add{U}])(,newability[{T}{S}:Add{B}])) forever )!)) +auto=token(Devil,Creature Devil,4/4,red,unreath) with((,newability ((@movedto(this|graveyard) from(battlefield):token(Treasure,Artifact Treasure) and!( transforms((,newability[{T}{S}:Add{W}])(,newability[{T}{S}:Add{R}])(,newability[{T}{S}:Add{G}])(,newability[{T}{S}:Add{U}])(,newability[{T}{S}:Add{B}])) forever )!)) text=Split second Create four 4/4 red Devil creature tokens with haste and “When this creature dies, create a colorless Treasure artifact token with ‘{T}, Sacrifice this artifact: Add one mana of any color.’” Sacrifice the Devil tokens at the beginning of the next end step. mana={2}{R}{R}{R}{R} type=Instant @@ -51693,7 +51693,7 @@ auto={T}{S}:add{B} auto={T}{S}:add{R} auto={T}{S}:add{G} text={T}, Sacrifice this artifact: Add one mana of any color. -type=Artifact +type=Artifact Treasure [/card] [card] name=Treasure Map @@ -51721,7 +51721,7 @@ auto={T}{S}:add{B} auto={T}{S}:add{R} auto={T}{S}:add{G} text={T}, Sacrifice this artifact: Add one mana of any color. -type=Artifact +type=Artifact Treasure [/card] [card] name=Treasure Sur @@ -51731,7 +51731,7 @@ auto={T}{S}:add{B} auto={T}{S}:add{R} auto={T}{S}:add{G} text={T}, Sacrifice this artifact: Add one mana of any color. -type=Artifact +type=Artifact Treasure [/card] [card] name=TreasureArtifactToken @@ -51741,7 +51741,7 @@ auto={T}{S}:add{B} auto={T}{S}:add{R} auto={T}{S}:add{G} text={T}, Sacrifice this artifact: Add one mana of any color. -type=Artifact +type=Artifact Treasure [/card] [card] name=Treefolk Umbra diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index c3e8ffaf9..2004c7dea 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -619,6 +619,33 @@ public: } }; +class TrCardBoasted: public Trigger +{ +public: + bool limitOnceATurn; + int triggeredTurn; + TrCardBoasted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false,bool limitOnceATurn = false) : + Trigger(observer, id, source,once, tc),limitOnceATurn(limitOnceATurn) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventCardBoasted * e = dynamic_cast (event); + if (!e) return 0; + if (limitOnceATurn && triggeredTurn == game->turn) + return 0; + if (!tc->canTarget(e->card)) return 0; + triggeredTurn = game->turn; + return 1; + } + + TrCardBoasted * clone() const + { + return NEW TrCardBoasted(*this); + } +}; + class TrCardSurveiled: public Trigger { public: @@ -3939,6 +3966,19 @@ public: AAAlterEnergy * clone() const; ~AAAlterEnergy(); }; +//Boast Event +class AABoastEvent: public ActivatedAbilityTP +{ +public: + MTGCardInstance * card; + + AABoastEvent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost = NULL, + int who = TargetChooser::UNSET); + int resolve(); + const string getMenuText(); + AABoastEvent * clone() const; + ~AABoastEvent(); +}; //Surveil Event class AASurveilEvent: public ActivatedAbilityTP { diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index 945b3d294..c7fb3964e 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -360,6 +360,12 @@ struct WEventplayerMonarch : public WEvent { virtual Targetable * getTarget(Player * player); }; +//boast event +struct WEventCardBoasted : public WEventCardUpdate { + WEventCardBoasted(MTGCardInstance * card); + virtual Targetable * getTarget(int target); +}; + //surveil event struct WEventCardSurveiled : public WEventCardUpdate { WEventCardSurveiled(MTGCardInstance * card); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index b12737e1f..4959b05b6 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1061,6 +1061,42 @@ AAExploresEvent::~AAExploresEvent() { } +//AA Boast Event +AABoastEvent::AABoastEvent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost, + int who) : + ActivatedAbilityTP(observer, _id, _source, _target, _cost, who), card(_source) +{ +} + +int AABoastEvent::resolve() +{ + Damageable * _target = (Damageable *) getTarget(); + if (_target) + { + Player * pTarget = (Player*)_target; + if(pTarget) + { + WEvent * e = NEW WEventCardBoasted(card); + game->receiveEvent(e); + } + } + return 0; +} + +const string AABoastEvent::getMenuText() +{ + return "Boast event called"; +} + +AABoastEvent * AABoastEvent::clone() const +{ + return NEW AABoastEvent(*this); +} + +AABoastEvent::~AABoastEvent() +{ +} + //AA Surveil Event AASurveilEvent::AASurveilEvent(GameObserver* observer, int _id, MTGCardInstance * _source, Targetable * _target, ManaCost * _cost, int who) : diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 3cf73e604..af5889242 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1224,6 +1224,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell if (TargetChooser * tc = parseSimpleTC(s, "mutated", card)) return NEW TrCardMutated(observer, id, card, tc, once, limitOnceATurn); + //boast has been performed from a card + if (TargetChooser * tc = parseSimpleTC(s, "boasted", card)) + return NEW TrCardBoasted(observer, id, card, tc, once, limitOnceATurn); + //Surveil has been performed from a card if (TargetChooser * tc = parseSimpleTC(s, "surveiled", card)) return NEW TrCardSurveiled(observer, id, card, tc, once, limitOnceATurn); @@ -3555,6 +3559,16 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG card->mutation += atoi(splitMutatedUnder[1].c_str()); } + //perform boast + found = s.find("doboast"); + if (found != string::npos) + { + Targetable * t = spell ? spell->getNextTarget() : NULL; + MTGAbility * a = NEW AABoastEvent(observer, id, card, t, NULL, who); + a->oneShot = 1; + return a; + } + //perform surveil found = s.find("surveil"); if (found != string::npos) diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index 9e4440cdb..dd7ef29f5 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -292,6 +292,11 @@ WEventplayerMonarch::WEventplayerMonarch(Player * player) : { } +WEventCardBoasted::WEventCardBoasted(MTGCardInstance * card) : + WEventCardUpdate(card) +{ +} + WEventCardSurveiled::WEventCardSurveiled(MTGCardInstance * card) : WEventCardUpdate(card) { @@ -535,6 +540,12 @@ Targetable * WEventCardMutated::getTarget(int target) return NULL; } +Targetable * WEventCardBoasted::getTarget(int target) +{ + if (target) return card; + return NULL; +} + Targetable * WEventCardSurveiled::getTarget(int target) { if (target) return card; diff --git a/projects/mtg/src/WParsedInt.cpp b/projects/mtg/src/WParsedInt.cpp index 916555fed..c7d3a0732 100644 --- a/projects/mtg/src/WParsedInt.cpp +++ b/projects/mtg/src/WParsedInt.cpp @@ -578,6 +578,20 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card) if(Constants::MTGBasicAbilities[i] == s.substr(10)) intValue = card->basicAbilities[i]; } + else if (s.find("hascnt") != string::npos) //Return the amount of specific counters on card + { + intValue = 0; + if (card->counters){ + Counters * counters = card->counters; + for(size_t i = 0; i < counters->counters.size(); ++i){ + Counter * counter = counters->counters[i]; + if(counter->name == s.substr(6)){ + intValue = counter->nb; + break; + } + } + } + } else if (s == "manacost") //Return the converted manacost { intValue = (target->currentZone == target->controller()->game->stack)?(target->myconvertedcost + target->castX):target->myconvertedcost;//X is 0 except if it's on the stack