diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 2fafc9a73..531ecb07f 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -23337,8 +23337,8 @@ subtype=Arcane [/card] [card] name=Crushing Vines -auto=choice name(Destroy flying creature) destroy target(creature[flying]) -auto=choice name(Destroy artifact) destroy target(artifact) +target=*[artifact;creature&flying] +auto=destroy text=Choose one - Destroy target creature with flying, or destroy target artifact. mana={2}{G} type=Instant @@ -43592,18 +43592,18 @@ type=Sorcery [card] name=Geth, Lord of the Vault abilities=intimidate -auto={0}{B}:name(X = 0) moveTo(myBattlefield) target(*[artifact;creature;manacost=0]|opponentgraveyard) && tap && deplete:0 opponent -auto={1}{B}:name(X = 1) moveTo(myBattlefield) target(*[artifact;creature;manacost=1]|opponentgraveyard) && tap && deplete:1 opponent -auto={2}{B}:name(X = 2) moveTo(myBattlefield) target(*[artifact;creature;manacost=2]|opponentgraveyard) && tap && deplete:2 opponent -auto={3}{B}:name(X = 3) moveTo(myBattlefield) target(*[artifact;creature;manacost=3]|opponentgraveyard) && tap && deplete:3 opponent -auto={4}{B}:name(X = 4) moveTo(myBattlefield) target(*[artifact;creature;manacost=4]|opponentgraveyard) && tap && deplete:4 opponent -auto={5}{B}:name(X = 5) moveTo(myBattlefield) target(*[artifact;creature;manacost=5]|opponentgraveyard) && tap && deplete:5 opponent -auto={6}{B}:name(X = 6) moveTo(myBattlefield) target(*[artifact;creature;manacost=6]|opponentgraveyard) && tap && deplete:6 opponent -auto={7}{B}:name(X = 7) moveTo(myBattlefield) target(*[artifact;creature;manacost=7]|opponentgraveyard) && tap && deplete:7 opponent -auto={8}{B}:name(X = 8) moveTo(myBattlefield) target(*[artifact;creature;manacost=8]|opponentgraveyard) && tap && deplete:8 opponent -auto={9}{B}:name(X = 9) moveTo(myBattlefield) target(*[artifact;creature;manacost=9]|opponentgraveyard) && tap && deplete:9 opponent -auto={10}{B}:name(X = 10) moveTo(myBattlefield) target(*[artifact;creature;manacost=10]|opponentgraveyard) && tap && deplete:10 opponent -auto={11}{B}:name(X = 11) moveTo(myBattlefield) target(*[artifact;creature;manacost=11]|opponentgraveyard) && tap && deplete:11 opponent +auto={0}{B}:name(X = 0) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=0]|opponentgraveyard) && deplete:0 opponent +auto={1}{B}:name(X = 1) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=1]|opponentgraveyard) && deplete:1 opponent +auto={2}{B}:name(X = 2) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=2]|opponentgraveyard) && deplete:2 opponent +auto={3}{B}:name(X = 3) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=3]|opponentgraveyard) && deplete:3 opponent +auto={4}{B}:name(X = 4) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=4]|opponentgraveyard) && deplete:4 opponent +auto={5}{B}:name(X = 5) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=5]|opponentgraveyard) && deplete:5 opponent +auto={6}{B}:name(X = 6) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=6]|opponentgraveyard) && deplete:6 opponent +auto={7}{B}:name(X = 7) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=7]|opponentgraveyard) && deplete:7 opponent +auto={8}{B}:name(X = 8) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=8]|opponentgraveyard) && deplete:8 opponent +auto={9}{B}:name(X = 9) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=9]|opponentgraveyard) && deplete:9 opponent +auto={10}{B}:name(X = 10) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=10]|opponentgraveyard) && deplete:10 opponent +auto={11}{B}:name(X = 11) moveTo(myBattlefield) and!( tap(noevent) )! target(*[artifact;creature;manacost=11]|opponentgraveyard) && deplete:11 opponent text=Intimidate -- {X}{B}: Put target artifact or creature card with converted mana cost X from an opponent's graveyard onto the battlefield under your control tapped. Then that player puts the top X cards of his or her library into his or her graveyard. mana={4}{B}{B} type=Legendary Creature @@ -52655,7 +52655,7 @@ toughness=3 [/card] [card] name=Hollow Specter -auto=@combatdamagefoeof(player) from(this):may pay({x}) name(Specter Pay X) Reveal:x revealzone(opponenthand) optionone choice name(choose Discards) target(<1>*|reveal) transforms((,newability[moveto(ownerhand)],newability[reject])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend revealend +auto=@combatdamagefoeof(player) from(this):may pay({x}) name(Specter Pay X) Reveal:x revealzone(opponenthand) optionone choice name(choose Discards) target(<1>*|reveal) transforms((,newability[moveto(ownerhand) and!(reject)!])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend revealend text=Flying -- Whenever Hollow Specter deals combat damage to a player, you may pay {X}. If you do, that player reveals X cards from his or her hand and you choose one of them. That player discards that card. mana={1}{B}{B} type=Creature @@ -77312,7 +77312,7 @@ type=Artifact name=Noggin Whack other={1}{b} name(Prowl) otherrestriction=prowl -auto=Reveal:3 revealzone(opponenthand) optionone choice name(choose Discards) target(<2>*|reveal) transforms((,newability[moveto(ownerhand)],newability[reject])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend revealend +auto=Reveal:3 revealzone(opponenthand) optionone choice name(choose Discards) target(<2>*|reveal) transforms((,newability[moveto(ownerhand) and!(reject)!])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend revealend text=Prowl {1}{B} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Rogue.) -- Target player reveals three cards from his or her hand. You choose two of them. That player discards those cards. mana={2}{B}{B} type=Tribal Sorcery @@ -86039,7 +86039,7 @@ type=Instant [card] name=Pulse of the Dross target=player -auto=Reveal:3 revealzone(targetedpersonshand) optionone choice name(choose Discards) target(<1>*|reveal) transforms((,newability[moveto(ownerhand)],newability[reject])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend afterrevealed if type(*|myhand)~lessthan~type(*|opponenthand) then moveto(myhand) afterrevealedend revealend +auto=Reveal:3 revealzone(targetedpersonshand) optionone choice name(choose Discards) target(<1>*|reveal) transforms((,newability[moveto(ownerhand) and!(reject)!])) oneshot optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) oneshot optiontwoend afterrevealed if type(*|myhand)~lessthan~type(*|opponenthand) then moveto(myhand) afterrevealedend revealend text=Target player reveals three cards from his or her hand and you choose one of them. That player discards that card. Then if that player has more cards in hand than you, return Pulse of the Dross to its owner's hand. mana={1}{B}{B} type=Sorcery @@ -89065,7 +89065,7 @@ toughness=1 name=Reanimate target=creature|graveyard auto=moveTo(myBattlefield) -auto=damage:manacost controller +auto=life:-manacost controller text=Put target creature card from a graveyard onto the battlefield under your control. You lose life equal to its converted mana cost. mana={B} type=Sorcery diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index a744e34f3..a1f684c96 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1464,6 +1464,34 @@ public: return NEW TrCombatTrigger(*this); } }; +class TrplayerEnergized: public Trigger +{ +public: + bool thiscontroller, thisopponent; + TrplayerEnergized(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false, bool thiscontroller = false, bool thisopponent = false) : + Trigger(observer, id, source,once, tc),thiscontroller(thiscontroller),thisopponent(thisopponent) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventplayerEnergized * e = dynamic_cast (event); + if (!e) return 0; + if (!tc->canTarget(e->player)) return 0; + if(thiscontroller) + if(e->player != source->controller()) + return 0; + if(thisopponent) + if(e->player == source->controller()) + return 0; + return 1; + } + + TrplayerEnergized * clone() const + { + return NEW TrplayerEnergized(*this); + } +}; class TrcardDrawn: public Trigger { diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index 39ed06385..1358bf57d 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -306,6 +306,15 @@ struct WEventCardTransforms : public WEventCardUpdate { virtual Targetable * getTarget(int target); }; +//alterenergy event +struct WEventplayerEnergized : public WEvent { + WEventplayerEnergized(Player * player,int nb_count); + Player * player; + int nb_count; + using WEvent::getTarget; + virtual Targetable * getTarget(Player * player); +}; + std::ostream& operator<<(std::ostream&, const WEvent&); #endif diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 5fb08a1e2..9f1e66df8 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1024,7 +1024,14 @@ int AAAlterEnergy::resolve() { Player * pTarget = (Player*)_target; if(pTarget) + { pTarget->energyCount += energy; + if(energy > 0) + { + WEvent * e = NEW WEventplayerEnergized(pTarget, energy); + game->receiveEvent(e); + }//todo loses enegy event + } } return 0; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index e4715c33c..6db798db9 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -982,6 +982,14 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell attackingTrigger,attackedAloneTrigger,notBlockedTrigger,attackBlockedTrigger,blockingTrigger); } + + //energized player - controller of card + if (TargetChooser * tc = parseSimpleTC(s, "energizedof", card)) + return NEW TrplayerEnergized(observer, id, card, tc,once,true,false); + + //energized player - opponent of card controller + if (TargetChooser * tc = parseSimpleTC(s, "energizedfoeof", card)) + return NEW TrplayerEnergized(observer, id, card, tc,once,false,true); //drawn player - controller of card - dynamic version drawof(player) -> returns current controller even with exchange of card controller if (TargetChooser * tc = parseSimpleTC(s, "drawof", card)) diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index 9573a5631..0bf9b176d 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -240,6 +240,11 @@ WEventCombatStepChange::WEventCombatStepChange(CombatStep step) : WEvent(), step(step) { } + +WEventplayerEnergized::WEventplayerEnergized(Player * player, int nb_count) : + player(player), nb_count(nb_count) +{ +} ; Targetable * WEventDamage::getTarget(int target) @@ -408,6 +413,12 @@ Targetable * WEventCardTransforms::getTarget(int target) return NULL; } +Targetable * WEventplayerEnergized::getTarget(Player * player) +{ + if (player) return player; + return NULL; +} + std::ostream& WEvent::toString(std::ostream& out) const { return out << "EVENT";