From 984aac51f4240508ef8796729e48746fdc637aee Mon Sep 17 00:00:00 2001 From: Vittorio Alfieri Date: Fri, 15 Oct 2021 13:36:31 +0200 Subject: [PATCH] Fixed all primitives with damage modifier, improved "damaged" trigger for Planeswalkers. --- CHANGELOG.md | 5 +- .../bin/Res/sets/primitives/borderline.txt | 172 ++++++++---------- .../bin/Res/sets/primitives/planeswalkers.txt | 6 +- projects/mtg/src/MTGRules.cpp | 7 +- 4 files changed, 84 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ffd918c9..f2b6568a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) +### 15/10/21 +- *Committed:* Fixed all primitives with damage modifier, improved "damaged" trigger for Planeswalkers. ([Vitty85](https://github.com/Vitty85)) + ### 14/10/21 -- *Committed:* Fixed primitives, improved Aftermath casting rule: now the casted card becomes instant or sorcery in the stack according to the casted half, fixed a bug with the previous zone of cards casted using the "putinplay" option of "castcard" keyword. ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Fixed primitives, improved Aftermath casting rule: now the casted card becomes instant or sorcery in the stack according to the casted half, fixed a bug with the previous zone of cards casted using the "putinplay" option of "castcard" keyword. https://github.com/WagicProject/wagic/commit/eb35e3589bae52d9fa35f1bcefbede9763f13289 ([Vitty85](https://github.com/Vitty85)) ### 13/10/21 - *Committed:* Fixed primitives, added new ability "hasaftermath" to implement Aftermath cost with Flashback and refactored all cards with Aftermath cost (now they use a special version of Flashback but they don't count as flashback spell), added a new ability "spellmover" to implement all cards that have to target a spell on stack to move to some other zone (they are not real counters so they don't care about "nofizzle" or "nofizzlealternative" abilites of their target), fixed all primitives with "spellmover" ability, added a new keyword "storedname" to target card with a specifc previously stored name, improved "fizzleto" ability in order to allow to move the fizzled card on second place from the top or to exile and imprint the target name. https://github.com/WagicProject/wagic/commit/9c2eee7d7e74f0f494339b10f4f1c3279076bd50 ([Vitty85](https://github.com/Vitty85)) diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index b72f91bf4..a6a23357a 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -1955,15 +1955,15 @@ type=Sorcery [/card] [card] name=Angrath's Marauders -auto=@damaged(creature) from(*[instant;sorcery]|mystack,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(creature[-Angrath's Marauders]|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(creature[Angrath's Marauders]|mybattlefield,myGraveyard):thisforeach(variable{thatmuch}) all(trigger[to]) transform((,newability[0/-1])) oneshot -auto=@damaged(player) from(*[instant;sorcery]|mystack,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(creature[-Angrath's Marauders]|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|myBattlefield) from(*[-Angrath's Marauders]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|opponentBattlefield) from(*[-Angrath's Marauders]|*):damage:thatmuch all(trigger[to]) +auto=@combatdamaged(creature|opponentBattlefield) from(this):damage:thatmuch all(trigger[to]) +auto=@damageof(player) from(*[-Angrath's Marauders]|myzones):damage:thatmuch controller +auto=@damagefoeof(player) from(*[-Angrath's Marauders]|*):damage:thatmuch opponent auto=@combatdamagefoeof(player) from(this):damage:thatmuch all(trigger[to]) -auto=@counterremoved(duplicateAll) from(planeswalker|opponentBattlefield) restriction{myTurnOnly}:donothing +auto=@damaged(planeswalker|myBattlefield) from(*[-Angrath's Marauders]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(planeswalker|opponentBattlefield) from(*[-Angrath's Marauders]|*):damage:thatmuch all(trigger[to]) +auto=@combatdamaged(planeswalker|opponentBattlefield) from(this):damage:thatmuch all(trigger[to]) text=If a source you control would deal damage to a permanent or player, it deals double that damage to that permanent or player instead. mana={5}{R}{R} type=Creature @@ -2143,16 +2143,12 @@ type=Enchantment [/card] [card] name=Anthem of Rakdos -auto=@damaged(creature) from(*[instant;sorcery]|mystack,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(creature[-Angrath's Marauders]|mybattlefield,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(creature[Angrath's Marauders]|mybattlefield,myGraveyard) restriction{type(*|myhand)~lessthan~1}:thisforeach(variable{thatmuch}) all(trigger[to]) transform((,newability[0/-1])) oneshot -auto=@damaged(player) from(*[instant;sorcery]|mystack,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(creature[-Angrath's Marauders]|mybattlefield,myGraveyard) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@combatdamagefoeof(player) from(this) restriction{type(*|myhand)~lessthan~1}:damage:thatmuch all(trigger[to]) -auto=@counterremoved(duplicateAll) from(planeswalker|opponentBattlefield) restriction{restriction{type(*|myhand)~lessthan~1},myTurnOnly}:donothing -auto=lord(creature[attacking]|myBattlefield) 2/0 ueot && damage:1 controller +auto=@damaged(creature|myBattlefield) from(*[-Anthem of Rakdos]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|opponentBattlefield) from(*[-Anthem of Rakdos]|*):damage:thatmuch all(trigger[to]) +auto=@damageof(player) from(*[-Anthem of Rakdos]|myzones):damage:thatmuch controller +auto=@damagefoeof(player) from(*[-Anthem of Rakdos]|*):damage:thatmuch opponent +auto=@combat(attacking) source(creature|myBattlefield):name(Attacking creature gets 2/0) all(trigger[to]) transforms((,newability[2/0])) ueot +auto=@combat(attacking) source(creature|myBattlefield):name(Deal 1 damage) damage:1 controller text=Whenever a creature you control attacks, it gets +2/+0 until end of turn and Anthem of Rakdos deals 1 damage to you. -- Hellbent - As long as you have no cards in hand, if a source you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. mana={2}{B}{R}{R} type=Enchantment @@ -9122,9 +9118,12 @@ toughness=3 [/card] [card] name=Calamity Bearer -auto=@damaged(creature) from(*[giant]|myzones):all(trigger[to]) damage:thatmuch -auto=@damagefoeof(player) from(*[giant]|myzones):damage:thatmuch opponent +auto=@damaged(creature|myBattlefield) from(*[giant]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|opponentBattlefield) from(*[giant]|*):damage:thatmuch all(trigger[to]) auto=@damageof(player) from(*[giant]|myzones):damage:thatmuch controller +auto=@damagefoeof(player) from(*[giant]|*):damage:thatmuch opponent +auto=@damaged(planeswalker|myBattlefield) from(*[giant]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(planeswalker|opponentBattlefield) from(*[giant]|*):damage:thatmuch all(trigger[to]) text=If a Giant source you control would deal damage to a permanent or player, it deals double that damage to that permanent or player instead. mana={2}{R}{R} type=Creature @@ -14654,9 +14653,7 @@ toughness=3 [card] name=Curse of Bloodletting target=opponent -auto=@damaged(targetedplayer) from(*[instant;sorcery]|*):damage:thatmuch opponent -auto=@damaged(targetedplayer) from(*[creature;artifact;land;planeswalker]|*):damage:thatmuch opponent -auto=@damaged(targetedplayer) from(enchantment[-Curse of Bloodletting]|*):damage:thatmuch opponent +auto=@damaged(targetedplayer) from(*[-Curse of Bloodletting]|*):damage:thatmuch opponent text=Enchant player -- If a source would deal damage to enchanted player, it deals double that damage to that player instead. mana={3}{R}{R} type=Enchantment @@ -17307,14 +17304,9 @@ toughness=3 [card] name=Dictate of the Twin Gods abilities=flash -auto=@damaged(creature) from(*[instant;sorcery]|Stack,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(*[creature;artifact;land;planeswalker]|battlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(enchantment[-Dictate of the Twin Gods]|battlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[instant;sorcery]|Stack,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[creature;artifact;land;planeswalker]|battlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(enchantment[-Dictate of the Twin Gods]|battlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@counterremoved(duplicateAll) from(planeswalker|opponentBattlefield) restriction{myTurnOnly}:donothing -auto=@counterremoved(duplicateAll) from(planeswalker|myBattlefield) restriction{opponentTurnOnly}:donothing +auto=@damaged(creature) from(*[-Dictate of the Twin Gods]|*):damage:thatmuch all(trigger[to]) +auto=@damaged(player) from(*[-Dictate of the Twin Gods]|*):damage:thatmuch all(trigger[to]) +auto=@damaged(planeswalker) from(*[-Dictate of the Twin Gods]|*):damage:thatmuch all(trigger[to]) text=Flash -- If a source would deal damage to a permanent or player, it deals double that damage to that permanent or player instead. mana={3}{R}{R} type=Enchantment @@ -20695,15 +20687,10 @@ toughness=3 [card] name=Embermaw Hellion abilities=trample -auto=@damaged(*|battlefield) from(*[instant;sorcery;red]|mystack,myGraveyard):all(trigger[to]) transforms((,newability[damage:1])) oneshot -auto=@damaged(*|battlefield) from(*[enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):all(trigger[to]) transforms((,newability[damage:1])) oneshot -auto=@damaged(*|battlefield) from(other creature[red]|mybattlefield,myGraveyard):all(trigger[to]) transforms((,newability[damage:1])) oneshot -auto=@damagefoeof(player) from(*[instant;sorcery;red]|mystack,myGraveyard):ability$!name(Damage opponent) damage:1 opponent!$ controller -auto=@damagefoeof(player) from(*[enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):ability$!name(Damage opponent) damage:1 opponent!$ controller -auto=@damagefoeof(player) from(other creature[red]|mybattlefield,myGraveyard):ability$!name(Damage opponent) damage:1 opponent!$ controller -auto=@damageof(player) from(*[instant;sorcery;red]|mystack,myGraveyard):ability$!name(Damage controller) damage:1 controller!$ controller -auto=@damageof(player) from(*[enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):ability$!name(Damage controller) damage:1 controller!$ controller -auto=@damageof(player) from(other creature[red]|mybattlefield,myGraveyard):ability$!name(Damage controller) damage:1 controller!$ controller +auto=@damaged(*|mybattlefield) from(other *[red]|myzones):all(trigger[to]) damage:1 +auto=@damaged(*|opponentbattlefield) from(other *[red]|*):all(trigger[to]) damage:1 +auto=@damageof(player) from(other *[red]|myzones):damage:1 controller +auto=@damagefoeof(player) from(other *[red]|*):damage:1 opponent text=Trample (This creature can deal excess combat damage to defending player or planeswalker while attacking.) -- If another red source you control would deal damage to a permanent or player, it deals that much damage plus 1 to that permanent or player instead. mana={3}{R}{R} type=Creature @@ -23677,10 +23664,8 @@ toughness=3 [card] name=Fiendish Duo abilities=First strike -auto=@damagefoeof(player) from(*[instant;sorcery]|stack,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damagefoeof(player) from(*[enchantment;artifact;land;planeswalker]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damagefoeof(player) from(creature[-Fiendish Duo]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) -auto=@combatdamagefoeof(player) from(this):damage:thatmuch all(trigger[to]) +auto=@damagefoeof(player) from(*[-Fiendish Duo]|myzones):damage:thatmuch opponent +auto=@combatdamagefoeof(player) from(this):damage:thatmuch opponent text=First strike -- If a source would deal damage to an opponent, it deals double that damage to that player instead. mana={4}{R}{R} type=Creature @@ -24052,8 +24037,12 @@ type=Instant [/card] [card] name=Fire Servant -auto=@damaged(creature) from(*[instant;sorcery;red]|myStack,mygraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[instant;sorcery;red]|myStack,mygraveyard):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|myBattlefield) from(*[instant;sorcery;red]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(creature|opponentBattlefield) from(*[instant;sorcery;red]|*):damage:thatmuch all(trigger[to]) +auto=@damageof(player) from(*[instant;sorcery;red]|myzones):damage:thatmuch controller +auto=@damagefoeof(player) from(*[instant;sorcery;red]|*):damage:thatmuch opponent +auto=@damaged(planeswalker|myBattlefield) from(*[instant;sorcery;red]|myzones):damage:thatmuch all(trigger[to]) +auto=@damaged(planeswalker|opponentBattlefield) from(*[instant;sorcery;red]|*):damage:thatmuch all(trigger[to]) text=If a red instant or sorcery spell you control would deal damage, it deals double that damage instead. mana={3}{R}{R} type=Creature @@ -25947,12 +25936,8 @@ type=Enchantment [/card] [card] name=Furnace of Rath -auto=@damaged(creature) from(*[instant;sorcery]|stack,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(*[creature;artifact;land;planeswalker]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(creature) from(enchantment[-Furnace of Rath]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[instant;sorcery]|stack,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(*[creature;artifact;land;planeswalker]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(enchantment[-Furnace of Rath]|battlefield,Graveyard):damage:thatmuch all(trigger[to]) +auto=@damaged(creature) from(*[-Furnace of Rath]|*):damage:thatmuch all(trigger[to]) +auto=@damaged(player) from(*[-Furnace of Rath]|*):damage:thatmuch all(trigger[to]) text=If a source would deal damage to a creature or player, it deals double that damage to that creature or player instead. mana={1}{R}{R}{R} type=Enchantment @@ -28287,11 +28272,7 @@ type=Sorcery [card] name=Goblin Goliath auto=token(Goblin,Creature Goblin,1/1,red) -auto={3}{R}{T}:lord(*|mybattlefield) transforms((DoubleActive)) ueot -auto=@damagefoeof(player) from(*[instant;sorcery]|mystack,myGraveyard) restriction{type(*[DoubleActive]|mybattlefield)~morethan~0}:damage:thatmuch all(trigger[to]) -auto=@damagefoeof(player) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,myGraveyard) restriction{type(*[DoubleActive]|mybattlefield)~morethan~0}:damage:thatmuch all(trigger[to]) -auto=@damagefoeof(player) from(creature[-Goblin Goliath]|mybattlefield,myGraveyard) restriction{type(*[DoubleActive]|mybattlefield)~morethan~0}:damage:thatmuch all(trigger[to]) -auto=@combatdamagefoeof(player) from(this) restriction{type(*[DoubleActive]|mybattlefield)~morethan~0}:damage:thatmuch all(trigger[to]) +auto={3}{R}{T}:name(Double damage) transforms((,newability[@damagefoeof(player) from(*[-Goblin Goliath]|*):damage:thatmuch opponent],newability[@combatdamagefoeof(player) from(this):damage:thatmuch opponent])) ueot text=When Goblin Goliath enters the battlefield, create a number of 1/1 red Goblin creature tokens equal to the number of opponents you have. -- {3}{R}, {T}: If a source you control would deal damage to an opponent this turn, it deals double that damage to that player instead. mana={4}{R}{R} type=Creature @@ -28769,13 +28750,10 @@ type=Artifact Land [card] name=Goldnight Castigator abilities=flying,haste -auto=@damaged(this) from(*[instant;sorcery]|stack,graveyard):damage:thatmuch all(this) -auto=@damaged(this) from(*[enchantment;artifact;land;planeswalker]|battlefield,graveyard):damage:thatmuch all(this) -auto=@damaged(this) from(creature[-Goldnight Castigator]|battlefield,graveyard):damage:thatmuch all(this) -auto=@combatdamaged(this) from(creature[Goldnight Castigator]|battlefield,graveyard):damage:thatmuch all(this) -auto=@damageof(player) from(*[instant;sorcery]|mystack,graveyard):damage:thatmuch all(trigger[to]) -auto=@damageof(player) from(*[enchantment;artifact;land;planeswalker]|mybattlefield,graveyard):damage:thatmuch all(trigger[to]) -auto=@damageof(player) from(creature[-Goldnight Castigator]|mybattlefield,graveyard):damage:thatmuch all(trigger[to]) +auto=@damaged(this) from(*[-Goldnight Castigator]|*):damage:thatmuch all(this) +auto=@combatdamaged(this) from(creature[Goldnight Castigator]|opponentBattlefield):damage:thatmuch all(this) +auto=@damageof(player) from(*[-Goldnight Castigator]|*):damage:thatmuch all(trigger[to]) +auto=@combatdamageof(player) from(creature[Goldnight Castigator]|opponentBattlefield):damage:thatmuch controller text=Flying, haste -- If a source would deal damage to you, it deals double that damage to you instead. -- If a source would deal damage to Goldnight Castigator, it deals double that damage to Goldnight Castigator instead. mana={2}{R}{R} type=Creature @@ -29234,8 +29212,8 @@ toughness=1 [/card] [card] name=Gratuitous Violence -auto=@damaged(creature) from(creature|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) -auto=@damaged(player) from(creature|mybattlefield,myGraveyard):damage:thatmuch all(trigger[to]) +auto=@damaged(creature) from(creature|mybattlefield):damage:thatmuch all(trigger[to]) +auto=@damaged(player) from(creature|mybattlefield):damage:thatmuch all(trigger[to]) text=If a creature you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. mana={2}{R}{R}{R} type=Enchantment @@ -34739,6 +34717,7 @@ auto={2}:equip auto=@combatdamageof(player) from(mytgt):damage:thatmuch controller auto=@combatdamagefoeof(player) from(mytgt):damage:thatmuch opponent auto=@combatdamaged(creature) from(mytgt):all(trigger[to]) damage:thatmuch +auto=@combatdamaged(planeswalker) from(mytgt):all(trigger[to]) damage:thatmuch auto=teach(creature) transforms((,newability[@combatdamaged(this):damage:thatmuch all(this)])) text=If equipped creature would deal combat damage, it deals double that damage instead. -- If another creature would deal combat damage to equipped creature, it deals double that damage to equipped creature instead. -- Equip {2} mana={2} @@ -34996,17 +34975,8 @@ name=Insult // Injury abilities=hasaftermath otherrestriction=type(creature|battlefield)~morethan~0 flashback={2}{R} name(Injury) -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(creature) from(*[creature;artifact;enchantment;land;planeswalker]|mybattlefield):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(creature) from(*[creature;artifact;enchantment;land;planeswalker]|mygraveyard):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(creature) from(*[instant;sorcery]|myStack):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(creature) from(*[instant;sorcery]|mygraveyard):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(player) from(*[instant;sorcery]|myStack):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(player) from(*[instant;sorcery]|mygraveyard):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(player) from(*[creature;artifact;enchantment;land;planeswalker]|mybattlefield):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@damaged(player) from(*[creature;artifact;enchantment;land;planeswalker]|mygraveyard):damage:thatmuch all(trigger[to])])) ueot -auto=ifnot paid(flashback) then emblem transforms((,newability[@counterremoved(duplicateAll) from(planeswalker|opponentBattlefield) restriction{myTurnOnly}:donothing])) ueot -auto=if paid(flashback) then choice name(Damage opponent and target creature) name(Damage opponent and target creature) damage:2 opponent && damage:2 target(creature) -auto=if paid(flashback) then choice name(Damage yourself and target creature) name(Damage yourself and target creature) damage:2 controller && damage:2 target(creature) +auto=ifnot paid(flashback) then token(Insult Emblem,Emblem,0/0,shroud,indestructible,notrigger,unearth) and!( transforms((,newability[@damaged(planeswalker|opponentBattlefield) from(*[-Insult Emblem]|*):damage:thatmuch all(trigger[to])],newability[@damaged(creature|opponentBattlefield) from(*[-Insult Emblem]|*):damage:thatmuch all(trigger[to])],newability[@damagefoeof(player) from(*[-Insult Emblem]|*):damage:thatmuch opponent],newability[@damaged(planeswalker|myBattlefield) from(*[-Insult Emblem]|myzones):damage:thatmuch all(trigger[to])],newability[@damaged(creature|myBattlefield) from(*[-Insult Emblem]|myzones):damage:thatmuch all(trigger[to])],newability[@damageof(player) from(*[-Insult Emblem]|myzones):damage:thatmuch controller])) ueot )! +auto=if paid(flashback) then choice name(Damage creature) name(Damage creature) damage:2 target(creature|battlefield) && ability$!name(Damage player) name(Damage player) damage:2 target(player)!$ controller text=Damage can't be prevented this turn. If a source you control would deal damage this turn, it deals double that damage instead. -- Aftermath (Cast this spell only from your graveyard. Then exile it.) Injury deals 2 damage to target creature and 2 damage to target player. mana={2}{R} type=Sorcery @@ -52277,12 +52247,18 @@ type=Enchantment [/card] [card] name=Pyromancer's Gauntlet -auto=@damaged(*|opponentBattlefield) from(instant[red]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damaged(*|opponentBattlefield) from(sorcery[red]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damaged(*|opponentBattlefield) from(planeswalker[red]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damagefoeof(player) from(instant[red]|myzones):name(Damage opponent) damage:2 opponent -auto=@damagefoeof(player) from(sorcery[red]|myzones):name(Damage opponent) damage:2 opponent -auto=@damagefoeof(player) from(planeswalker[red]|myzones):name(Damage opponent) damage:2 opponent +auto=@damaged(*|myBattlefield) from(instant[red]|myzones):all(trigger[to]) damage:2 +auto=@damaged(*|myBattlefield) from(sorcery[red]|myzones):all(trigger[to]) damage:2 +auto=@damaged(*|myBattlefield) from(planeswalker[red]|myzones):all(trigger[to]) damage:2 +auto=@damaged(*|opponentBattlefield) from(instant[red]|*):all(trigger[to]) damage:2 +auto=@damaged(*|opponentBattlefield) from(sorcery[red]|*):all(trigger[to]) damage:2 +auto=@damaged(*|opponentBattlefield) from(planeswalker[red]|*):all(trigger[to]) damage:2 +auto=@damageof(player) from(instant[red]|myzones):damage:2 opponent +auto=@damageof(player) from(sorcery[red]|myzones):damage:2 opponent +auto=@damageof(player) from(planeswalker[red]|myzones):damage:2 opponent +auto=@damagefoeof(player) from(instant[red]|*):damage:2 opponent +auto=@damagefoeof(player) from(sorcery[red]|*):damage:2 opponent +auto=@damagefoeof(player) from(planeswalker[red]|*):damage:2 opponent text=If a red instant or sorcery spell you control or a red planeswalker you control would deal damage to a permanent or player, it deals that much damage plus 2 to that permanent or player instead. mana={5} type=Artifact @@ -52296,8 +52272,10 @@ type=Legendary Artifact [/card] [card] name=Pyromancer's Swath -auto=@damaged(*|opponentBattlefield) from(*[instant;sorcery]|myzones):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damagefoeof(player) from(*[instant;sorcery]|myzones):name(Damage opponent) damage:2 opponent +auto=@damaged(creature|myBattlefield) from(*[instant;sorcery]|myzones):all(trigger[to]) damage:2 +auto=@damaged(creature|opponentBattlefield) from(*[instant;sorcery]|*):all(trigger[to]) damage:2 +auto=@damageof(player) from(*[instant;sorcery]|myzones):damage:2 opponent +auto=@damagefoeof(player) from(*[instant;sorcery]|*):damage:2 opponent auto=@each endofturn:name(Discard hand) all(*|myhand) reject text=If an instant or sorcery source you control would deal damage to a creature or player, it deals that much damage plus 2 to that creature or player instead. -- At the beginning of each end step, discard your hand. mana={2}{R} @@ -52614,11 +52592,8 @@ type=Sorcery [/card] [card] name=Quest for Pure Flame -auto=@damagefoeof(player) from(*[instant;sorcery]|stack,Graveyard):name(Put Quest counter) counter(0/0.1.quest) -auto=@damagefoeof(player) from(*[enchantment;artifact;land;planeswalker]|battlefield,Graveyard):name(Put Quest counter) counter(0/0.1.quest) -auto=@damagefoeof(player) from(creature[-Fiendish Duo]|battlefield,Graveyard):name(Put Quest counter) counter(0/0.1.quest) -auto=@combatdamagefoeof(player) from(this):damage:name(Put Quest counter) counter(0/0.1.quest) -auto={S} restriction{compare(hascntquest)~morethan~3}:name(Sacrifice and double damage) emblem transforms((,newability[@damagefoeof(player) from(*[instant;sorcery]|myzones):damage:thatmuch all(trigger[to])],newability[@damagefoeof(player) from(*[creature;artifact;land;planeswalker]|myzones):damage:thatmuch all(trigger[to])],newability[@damagefoeof(player) from(enchantment[-Quest for Pure Flame]|myzones):damage:thatmuch all(trigger[to])])) ueot dontremove +auto=@damagefoeof(player):may name(Put Quest counter) counter(0/0,1,Quest) +auto={S} restriction{compare(hascntquest)~morethan~3}:name(Sacrifice and double damage) emblem transforms((,newability[@damaged(creature|myBattlefield) from(*[-Quest for Pure Flame]|myzones):damage:thatmuch all(trigger[to])],newability[@damaged(creature|opponentBattlefield) from(*[-Quest for Pure Flame]|*):damage:thatmuch all(trigger[to])],newability[@damageof(player) from(*[-Quest for Pure Flame]|myzones):damage:thatmuch controller],newability[@damagefoeof(player) from(*[-Quest for Pure Flame]|*):damage:thatmuch opponent],newability[@damaged(planeswalker|myBattlefield) from(*[-Quest for Pure Flame]|myzones):damage:thatmuch all(trigger[to])],newability[@damaged(planeswalker|opponentBattlefield) from(*[-Quest for Pure Flame]|*):damage:thatmuch all(trigger[to])])) ueot dontremove text=Whenever a source you control deals damage to an opponent, you may put a quest counter on Quest for Pure Flame. -- Remove four quest counters from Quest for Pure Flame and sacrifice it: If any source you control would deal damage to a creature or player this turn, it deals double that damage to that creature or player instead. mana={R} type=Enchantment @@ -54555,7 +54530,7 @@ abilities=flying,haste auto=preventalldamage to(controller) from(*|stack) auto=preventalldamage to(*|mybattlefield) from(*|stack) auto=@damaged(*|opponentbattlefield) from(*|stack):all(trigger[to]) damage:1 -auto=@damagefoeof(player) from(*|stack):ability$!name(Damage opponent) name(Damage opponent) damage:1 opponent!$ controller +auto=@damagefoeof(player) from(*|stack):damage:1 opponent text=Flying, haste -- If a spell would deal damage to you or another permanent you control, prevent that damage. -- If a spell would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 1 instead. type=Legendary Creature subtype=Human Knight @@ -69971,10 +69946,10 @@ auto=@each my firstmain:counter(0/0,1,Lore) auto=all(*|myhand) reject auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.2.Lore}=) draw:2 controller auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.3.Lore}=) moveto(myhand) target(*[land;creature]|mygraveyard) -auto=@damaged(creature|opponentBattlefield) from(*[instant;sorcery;red]|mystack,myGraveyard):this(counter{0/0.3.Lore}=) all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damaged(creature|opponentBattlefield) from(*[creature;enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):this(counter{0/0.3.Lore}=) all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damagefoeof(player) from(*[instant;sorcery;red]|mystack,myGraveyard):this(counter{0/0.3.Lore}=) ability$!name(Damage opponent) damage:2 opponent!$ controller -auto=@damagefoeof(player) from(*[creature;enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):this(counter{0/0.3.Lore}=) ability$!name(Damage opponent) damage:2 opponent!$ controller +auto=@damaged(creature|opponentBattlefield) from(*[-The Flame of Keld;red]|*) restriction{compare(hascntlore)~equalto~3}:all(trigger[to]) damage:2 +auto=@damaged(creature|myBattlefield) from(*[-The Flame of Keld;red]|myzones) restriction{compare(hascntlore)~equalto~3}:all(trigger[to]) damage:2 +auto=@damageof(player) from(*[-The Flame of Keld;red]|myzones) restriction{compare(hascntlore)~equalto~3}:damage:2 controller +auto=@damagefoeof(player) from(*[-The Flame of Keld;red]|*) restriction{compare(hascntlore)~equalto~3}:damage:2 opponent auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.4.Lore}) sacrifice(this) text=(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) -- I - Discard your hand. -- II - Draw two cards. -- III - If a red source you control would deal damage to a permanent or player this turn, it deals that much damage plus 2 to that permanent or player instead. mana={1}{R} @@ -71767,10 +71742,9 @@ toughness=4 [/card] [card] name=Torbran, Thane of Red Fell -auto=@damaged(creature|opponentBattlefield) from(*[instant;sorcery;red]|mystack,myGraveyard):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damaged(creature|opponentBattlefield) from(*[creature;enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):all(trigger[to]) transforms((,newability[damage:2])) oneshot -auto=@damagefoeof(player) from(*[instant;sorcery;red]|mystack,myGraveyard):ability$!name(Damage opponent) damage:2 opponent!$ controller -auto=@damagefoeof(player) from(*[creature;enchantment;artifact;land;planeswalker;red]|mybattlefield,myGraveyard):ability$!name(Damage opponent) damage:2 opponent!$ controller +auto=@damaged(*|opponentBattlefield) from(*[-Torbran^ Thane of Red Fell;red]|*):all(trigger[to]) damage:2 +auto=@combatdamaged(creature|opponentBattlefield) from(this):all(trigger[to]) damage:2 +auto=@damagefoeof(player) from(*[-Torbran^ Thane of Red Fell;red]|*):damage:2 opponent text=If a red source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 2 instead. mana={1}{R}{R}{R} type=Legendary Creature diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index c3d7a07ad..3331e702a 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -1420,8 +1420,10 @@ subtype=Jaya [card] name=Jaya, Venerated Firemage auto=counter(0/0,5,Loyalty) -auto=@damaged(*|opponentBattlefield) from(*[red]|myBattlefield,myStack,myGraveyard,mySideboard):all(trigger) damage:1 -auto=@damaged(opponent) from(*[red]|myBattlefield,myStack,myGraveyard,mySideboard):damage:1 opponent +auto=@damaged(*|opponentBattlefield) from(other *[red]|*):all(trigger[to]) damage:1 +auto=@damaged(*|mybattlefield) from(other *[red]|myzones):all(trigger[to]) damage:1 +auto=@damageof(player) from(other *[red]|myzones):damage:1 controller +auto=@damagefoeof(player) from(other *[red]|*):damage:1 opponent auto={C(0/0,-2,Loyalty)}:name(-2: Deals 2 damage to any target) damage:2 target(player,creature,planeswalker) text=If another red source you control would deal damage to a permanent or player, it deals that much damage plus 1 to that permanent or player instead. -- −2: Jaya, Venerated Firemage deals 2 damage to any target. mana={2}{R}{R}{R} diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 3171cea4b..2ad46b7f7 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -3963,18 +3963,17 @@ int MTGPlaneswalkerDamage::receiveEvent(WEvent * event) if (d->damage > 0 && card && card->hasType(Subtypes::TYPE_PLANESWALKER)) { int howMany = d->damage; - for(int k = 0;k < howMany;k++) + for(int k = 0; k < howMany; k++) { - card->counters->removeCounter("loyalty",0,0); + card->counters->removeCounter("loyalty", 0, 0); } - d->damage = 0; return 1; } } if (WEventCounters * removel = dynamic_cast(event)) { if(removel->removed && removel->targetCard && removel->targetCard->hasType(Subtypes::TYPE_PLANESWALKER)) - if(!removel->targetCard->counters->hasCounter("loyalty",0,0)) + if(!removel->targetCard->counters->hasCounter("loyalty", 0, 0)) { removel->targetCard->toGrave(true); return 1;