TrLifeGained changes

@lifed/lifeloss(who) -> static version
@lifeof/lifelostof(player) -> current controller of the card
@lifefoeof/lifelostfoeof(player) -> current opponent of the card
This commit is contained in:
Anthony Calosa
2015-10-21 12:25:08 +08:00
parent 21eea225af
commit 3b0cd389e5
3 changed files with 57 additions and 23 deletions

View File

@@ -1189,7 +1189,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Ageless Entity name=Ageless Entity
auto=@lifed(controller):all(trigger[to]) dynamicability<!myself thatmuchcountersoneone tosrc!> auto=@lifeof(player):all(trigger[to]) dynamicability<!myself thatmuchcountersoneone tosrc!>
text=Whenever you gain life, put that many +1/+1 counters on Ageless Entity. text=Whenever you gain life, put that many +1/+1 counters on Ageless Entity.
mana={3}{G}{G} mana={3}{G}{G}
type=Creature type=Creature
@@ -1531,7 +1531,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Ajani's Pridemate name=Ajani's Pridemate
auto=@lifed(controller):may counter(1/1,1) auto=@lifeof(player):may counter(1/1,1)
text=Whenever you gain life, you may put a +1/+1 counter on Ajani's Pridemate. text=Whenever you gain life, you may put a +1/+1 counter on Ajani's Pridemate.
mana={1}{W} mana={1}{W}
type=Creature type=Creature
@@ -4247,7 +4247,7 @@ toughness=5
[card] [card]
name=Archangel of Thune name=Archangel of Thune
abilities=flying,lifelink abilities=flying,lifelink
auto=@lifed(controller):all(creature|mybattlefield) counter(1/1,1) auto=@lifeof(player):all(creature|mybattlefield) counter(1/1,1)
text=Flying. -- Lifelink. -- Whenever you gain life, put a +1/+1 counter on each creature you control. text=Flying. -- Lifelink. -- Whenever you gain life, put a +1/+1 counter on each creature you control.
mana={3}{W}{W} mana={3}{W}{W}
type=Creature type=Creature
@@ -19564,7 +19564,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Cradle of Vitality name=Cradle of Vitality
auto=@lifed(controller):pay({1}{W}) counter(1/1,thatmuch) target(creature) auto=@lifeof(player):pay({1}{W}) counter(1/1,thatmuch) target(creature)
text=Whenever you gain life, you may pay {1}{W}. If you do, put a +1/+1 counter on target creature for each 1 life you gained. text=Whenever you gain life, you may pay {1}{W}. If you do, put a +1/+1 counter on target creature for each 1 life you gained.
mana={3}{W} mana={3}{W}
type=Enchantment type=Enchantment
@@ -23118,7 +23118,7 @@ subtype=Aura
[/card] [/card]
[card] [card]
name=Debt to the Deathless name=Debt to the Deathless
auto=@lifeloss(opponent):life:thatmuch controller auto=@lifelostfoeof(player):life:thatmuch controller
auto=life:-twiceX opponent auto=life:-twiceX opponent
text=Each opponent loses two times X life. You gain life equal to the life lost this way. text=Each opponent loses two times X life. You gain life equal to the life lost this way.
mana={X}{W}{W}{B}{B} mana={X}{W}{W}{B}{B}
@@ -27105,7 +27105,7 @@ toughness=2
[card] [card]
name=Drogskol Reaver name=Drogskol Reaver
abilities=flying,double strike,lifelink abilities=flying,double strike,lifelink
auto=@lifed(controller):draw:1 controller auto=@lifeof(player):draw:1 controller
text=Flying, doublestrike, lifelink -- Whenever you gain life, draw a card. text=Flying, doublestrike, lifelink -- Whenever you gain life, draw a card.
mana={5}{W}{U} mana={5}{W}{U}
type=Creature type=Creature
@@ -31831,7 +31831,7 @@ type=Instant
[/card] [/card]
[card] [card]
name=Exquisite Blood name=Exquisite Blood
auto=@lifeloss(opponent):life:thatmuch controller auto=@lifelostfoeof(player):life:thatmuch controller
text=Whenever an opponent loses life, you gain that much life. text=Whenever an opponent loses life, you gain that much life.
mana={4}{B} mana={4}{B}
type=Enchantment type=Enchantment
@@ -32502,7 +32502,7 @@ toughness=2
#emblem ueot removes the effect, the ability acts an observer #emblem ueot removes the effect, the ability acts an observer
[card] [card]
name=False Cure name=False Cure
auto=emblem transforms((,newability[@lifed(opponent):life:-twicethatmuch opponent],newability[@lifed(controller):life:-twicethatmuch controller])) ueot auto=emblem transforms((,newability[@lifefoeof(player):life:-twicethatmuch opponent],newability[@lifeof(player):life:-twicethatmuch controller])) ueot
text=Until end of turn, whenever a player gains life, that player loses 2 life for each 1 life he or she gained. text=Until end of turn, whenever a player gains life, that player loses 2 life for each 1 life he or she gained.
mana={B}{B} mana={B}{B}
type=Instant type=Instant
@@ -52009,7 +52009,7 @@ toughness=3
[card] [card]
name=Kavu Predator name=Kavu Predator
abilities=trample abilities=trample
auto=@lifed(opponent):all(trigger[to]) dynamicability<!myfoe thatmuchcountersoneone tosrc!> auto=@lifefoeof(player):all(trigger[to]) dynamicability<!myfoe thatmuchcountersoneone tosrc!>
text=Trample -- Whenever an opponent gains life, put that many +1/+1 counters on Kavu Predator. text=Trample -- Whenever an opponent gains life, put that many +1/+1 counters on Kavu Predator.
mana={1}{G} mana={1}{G}
type=Creature type=Creature
@@ -56111,7 +56111,7 @@ toughness=2
[card] [card]
name=Lich's Tomb name=Lich's Tomb
abilities=cantlifelose abilities=cantlifelose
auto=@lifeloss(controller):ability$!sacrifice notatarget(<storedthatmuch>*|mybattlefield)!$ controller auto=@lifelostof(player):ability$!sacrifice notatarget(<storedthatmuch>*|mybattlefield)!$ controller
text=You don't lose the game for having 0 or less life. -- Whenever you lose life, sacrifice a permanent for each 1 life you lost. (Damage causes loss of life.) text=You don't lose the game for having 0 or less life. -- Whenever you lose life, sacrifice a permanent for each 1 life you lost. (Damage causes loss of life.)
mana={4} mana={4}
type=Artifact type=Artifact
@@ -62319,7 +62319,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Mindcrank name=Mindcrank
auto=@lifeloss(opponent):deplete:thatmuch opponent auto=@lifelostfoeof(player):deplete:thatmuch opponent
text=Whenever an opponent loses life, that player puts that many cards from the top of his or her library into his or her graveyard. (Damage dealt by sources without infect causes loss of life.) text=Whenever an opponent loses life, that player puts that many cards from the top of his or her library into his or her graveyard. (Damage dealt by sources without infect causes loss of life.)
mana={2} mana={2}
type=Artifact type=Artifact
@@ -75488,7 +75488,7 @@ type=Instant
name=Punishing Fire name=Punishing Fire
target=creature,player target=creature,player
auto=damage:2 auto=damage:2
autograveyard=@lifed(opponent):pay({R}) moveto(ownerhand) autograveyard=@lifefoeof(player):pay({R}) moveto(ownerhand)
text=Punishing Fire deals 2 damage to target creature or player. -- Whenever an opponent gains life, you may pay {R}. If you do, return Punishing Fire from your graveyard to your hand. text=Punishing Fire deals 2 damage to target creature or player. -- Whenever an opponent gains life, you may pay {R}. If you do, return Punishing Fire from your graveyard to your hand.
mana={1}{R} mana={1}{R}
type=Instant type=Instant
@@ -83325,7 +83325,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Sanguine Bond name=Sanguine Bond
auto=@lifed(controller):dynamicability<!myself thatmuchlifeloss srcopponent!> auto=@lifeof(player):dynamicability<!myself thatmuchlifeloss srcopponent!>
text=Whenever you gain life, target opponent loses that much life. text=Whenever you gain life, target opponent loses that much life.
mana={3}{B}{B} mana={3}{B}{B}
type=Enchantment type=Enchantment
@@ -85406,7 +85406,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Searing Meditation name=Searing Meditation
auto=@lifed(controller):pay({2}) target(creature,player) damage:2 auto=@lifeof(player):pay({2}) target(creature,player) damage:2
text=Whenever you gain life, you may pay {2}. If you do, Searing Meditation deals 2 damage to target creature or player. text=Whenever you gain life, you may pay {2}. If you do, Searing Meditation deals 2 damage to target creature or player.
mana={1}{R}{W} mana={1}{R}{W}
type=Enchantment type=Enchantment
@@ -97584,7 +97584,7 @@ toughness=5
[card] [card]
name=Sunbond name=Sunbond
target=creature target=creature
auto=teach(creature) transforms((,newability[@lifed(controller):dynamicability<!myself thatmuchcountersoneone tosrc!>])) auto=teach(creature) transforms((,newability[@lifeof(player):dynamicability<!myself thatmuchcountersoneone tosrc!>]))
text=Enchant creature -- Enchanted creature has "Whenever you gain life, put that many +1/+1 counters on this creature." text=Enchant creature -- Enchanted creature has "Whenever you gain life, put that many +1/+1 counters on this creature."
mana={3}{W} mana={3}{W}
type=Enchantment type=Enchantment
@@ -104153,7 +104153,7 @@ name=Transcendence
abilities=cantlifelose abilities=cantlifelose
auto=this(controllerlife > 19)while winGame opponent auto=this(controllerlife > 19)while winGame opponent
auto=@damaged(controller):life:twicethatmuch controller auto=@damaged(controller):life:twicethatmuch controller
auto=@lifeloss(controller):life:twicethatmuch controller auto=@lifelostof(player):life:twicethatmuch controller
text=You don't lose the game for having 0 or less life. -- When you have 20 or more life, you lose the game. -- Whenever you lose life, you gain 2 life for each 1 life you lost. (Damage dealt to you causes you to lose life.) text=You don't lose the game for having 0 or less life. -- When you have 20 or more life, you lose the game. -- Whenever you lose life, you gain 2 life for each 1 life you lost. (Damage dealt to you causes you to lose life.)
mana={3}{W}{W}{W} mana={3}{W}{W}{W}
type=Enchantment type=Enchantment
@@ -109620,7 +109620,7 @@ type=Sorcery
[card] [card]
name=Vizkopa Guildmage name=Vizkopa Guildmage
auto={1}{W}{B}:target(creature) lifelink ueot auto={1}{W}{B}:target(creature) lifelink ueot
auto={1}{W}{B}:name(lifeleech) emblem transforms((,newability[@lifed(controller):life:-thatmuch opponent])) ueot auto={1}{W}{B}:name(lifeleech) emblem transforms((,newability[@lifeof(player):life:-thatmuch opponent])) ueot
text={1}{W}{B}: Target creature gains lifelink until end of turn. -- {1}{W}{B}: Whenever you gain life this turn, each opponent loses that much life. text={1}{W}{B}: Target creature gains lifelink until end of turn. -- {1}{W}{B}: Whenever you gain life this turn, each opponent loses that much life.
mana={W}{B} mana={W}{B}
type=Creature type=Creature
@@ -110922,7 +110922,7 @@ toughness=5
[card] [card]
name=Wall of Limbs name=Wall of Limbs
abilities=defender abilities=defender
auto=@lifed(controller):counter(1/1,1) auto=@lifeof(player):counter(1/1,1)
auto={5}{B}{B}{S}:name(Lose Life) target(player) life:-storedpower auto={5}{B}{B}{S}:name(Lose Life) target(player) life:-storedpower
text=Defender (This creature can't attack.) -- Whenever you gain life, put a +1/+1 counter on Wall of Limbs. -- {5}{B}{B}, Sacrifice Wall of Limbs: Target player loses X life, where X is Wall of Limbs's power. text=Defender (This creature can't attack.) -- Whenever you gain life, put a +1/+1 counter on Wall of Limbs. -- {5}{B}{B}, Sacrifice Wall of Limbs: Target player loses X life, where X is Wall of Limbs's power.
mana={2}{B} mana={2}{B}

View File

@@ -1342,9 +1342,9 @@ class TrLifeGained: public Trigger
public: public:
TargetChooser * fromTc; TargetChooser * fromTc;
int type;//this allows damagenoncombat and combatdamage to share this trigger int type;//this allows damagenoncombat and combatdamage to share this trigger
bool sourceUntapped; bool sourceUntapped, thiscontroller, thisopponent;
TrLifeGained(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false,bool once = false) : TrLifeGained(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0,bool sourceUntapped = false,bool once = false, bool thiscontroller = false, bool thisopponent = false) :
Trigger(observer, id, source, once , tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped) Trigger(observer, id, source, once , tc), fromTc(fromTc), type(type) , sourceUntapped(sourceUntapped) , thiscontroller(thiscontroller) , thisopponent(thisopponent)
{ {
} }
@@ -1358,6 +1358,12 @@ public:
if (fromTc && !fromTc->canTarget(e->player)) return 0; if (fromTc && !fromTc->canTarget(e->player)) return 0;
if (type == 1 && (e->amount > 0)) return 0; if (type == 1 && (e->amount > 0)) return 0;
if (type == 0 && (e->amount < 0)) return 0; if (type == 0 && (e->amount < 0)) return 0;
if(thiscontroller)
if(e->player != source->controller())
return 0;
if(thisopponent)
if(e->player == source->controller())
return 0;
e->player->thatmuch = abs(e->amount); e->player->thatmuch = abs(e->amount);
this->source->thatmuch = abs(e->amount); this->source->thatmuch = abs(e->amount);

View File

@@ -871,14 +871,42 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once); return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once);
} }
//Lifed //Lifed current controller
if (TargetChooser * tc = parseSimpleTC(s, "lifeof", card))
{
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,true,false);
}
//Lifed current opponent
if (TargetChooser * tc = parseSimpleTC(s, "lifefoeof", card))
{
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,true);
}
//Lifed static
if (TargetChooser * tc = parseSimpleTC(s, "lifed", card)) if (TargetChooser * tc = parseSimpleTC(s, "lifed", card))
{ {
TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *fromTc = parseSimpleTC(s, "from", card);
return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once); return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once);
} }
//Life Loss //Life Loss current player
if (TargetChooser * tc = parseSimpleTC(s, "lifelostof", card))
{
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
return NEW TrLifeGained(observer, id, card, tc, fromTc,1,sourceUntapped,once,true,false);
}
//Life Loss current opponent
if (TargetChooser * tc = parseSimpleTC(s, "lifelostfoeof", card))
{
TargetChooser *fromTc = parseSimpleTC(s, "from", card);
return NEW TrLifeGained(observer, id, card, tc, fromTc,1,sourceUntapped,once,false,true);
}
//Life Loss static
if (TargetChooser * tc = parseSimpleTC(s, "lifeloss", card)) if (TargetChooser * tc = parseSimpleTC(s, "lifeloss", card))
{ {
TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *fromTc = parseSimpleTC(s, "from", card);