added "energized" event

energizedof(player):do something
energizedfoeof(player):do something
also some fixes in the primitives
This commit is contained in:
Anthony Calosa
2017-01-23 11:41:19 +08:00
parent 6fe57be115
commit 7f6e96459c
6 changed files with 81 additions and 18 deletions

View File

@@ -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

View File

@@ -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<WEventplayerEnergized *> (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
{

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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))

View File

@@ -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";