Added/fixed primitives, refactored and improved almost all transforming human cards (included all the Werewolves), improved "flip ability and "doubleside" ability adding a new "backside" option, fixed a bug on "doubleside" ability for planeswalkers, added "backside=" key to CardPrimitive in order to specify the other side of double-faced cards, added "hasbackside" option to target chooser in order to find cards which have a back side, added "dualfaced" that return 1 if a card has a backside card, fixed loyalty counter ability on planeswalker flip (is was not resolving correctly), changed type of damageToController, damageToOpponent, damageToCreature, wasDealtDamage, combatdamageToOpponent from bool to int in order to retrieve those values if needed, added "totaldmg" keyword that returns the total amount of damage dealt by a creature in the current turn, added new restriction "coven in order to check if a player controls three or more creatures with different powers, added new ability "hasdisturb" when the Retrace cost of a card is a disturb cost (e.g. "Beloved Beggar").
This commit is contained in:
@@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
||||||
|
|
||||||
|
### 04/09/21
|
||||||
|
- *Committed:* Added/fixed primitives, refactored and improved almost all transforming human cards (included all the Werewolves), improved "flip ability and "doubleside" ability adding a new "backside" option, fixed a bug on "doubleside" ability for planeswalkers, added "backside=" key to CardPrimitive in order to specify the other side of double-faced cards, added "hasbackside" option to target chooser in order to find cards which have a back side, added "dualfaced" that return 1 if a card has a backside card, fixed loyalty counter ability on planeswalker flip (is was not resolving correctly), changed type of damageToController, damageToOpponent, damageToCreature, wasDealtDamage, combatdamageToOpponent from bool to int in order to retrieve those values if needed, added "totaldmg" keyword that returns the total amount of damage dealt by a creature in the current turn, added new restriction "coven in order to check if a player controls three or more creatures with different powers, added new ability "hasdisturb" when the Retrace cost of a card is a disturb cost (e.g. "Beloved Beggar"). ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
### 03/09/21
|
### 03/09/21
|
||||||
- *Committed:* Fixed primitives, fixed some possible crashes on Commander Format. ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Fixed primitives, fixed some possible crashes on Commander Format. https://github.com/WagicProject/wagic/commit/236f677f2a08d538191de5c16970340dcd39c5f0 ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
### 02/09/21
|
### 02/09/21
|
||||||
- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, fixed several crash on Commander Format, fixed a possible crash using "and!()!" with "imprint", added a new macros "_REBOUND_" and "_GOAD_" related to rebound and goad abilities and refactored all cards using them, implemented a new keywords "haunt", "hasprey", "preyname" and "isprey" related the haunting ability and improved all cards using it, Added "commander" and "\*" to HINT castpriority for AI decks in order to allow the user to give a cast priority to commanders. https://github.com/WagicProject/wagic/commit/001cea95bd501ca47b6510037af2725508f321d5 ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, fixed several crash on Commander Format, fixed a possible crash using "and!()!" with "imprint", added a new macros "_REBOUND_" and "_GOAD_" related to rebound and goad abilities and refactored all cards using them, implemented a new keywords "haunt", "hasprey", "preyname" and "isprey" related the haunting ability and improved all cards using it, Added "commander" and "\*" to HINT castpriority for AI decks in order to allow the user to give a cast priority to commanders. https://github.com/WagicProject/wagic/commit/001cea95bd501ca47b6510037af2725508f321d5 ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ power=0
|
|||||||
toughness=3
|
toughness=3
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Waxing Moon
|
|
||||||
text=Transform up to one target Werewolf you control. Creatures you control gain trample until end of turn.
|
|
||||||
mana={1}{G}
|
|
||||||
type=Instant
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
name=Mirrorwing Dragon
|
name=Mirrorwing Dragon
|
||||||
abilities=flying
|
abilities=flying
|
||||||
text=Flying -- Whenever a player casts an instant or sorcery spell that targets only Mirrorwing Dragon, that player copies that spell for each other creature he or she controls that the spell could target. Each copy targets a different one of those creatures.
|
text=Flying -- Whenever a player casts an instant or sorcery spell that targets only Mirrorwing Dragon, that player copies that spell for each other creature he or she controls that the spell could target. Each copy targets a different one of those creatures.
|
||||||
|
|||||||
@@ -97,6 +97,15 @@ mana={2}
|
|||||||
type=Artifact
|
type=Artifact
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Exiled Doomsayer
|
||||||
|
text=All morph costs cost {2} more. (This doesn't affect the cost to cast creature spells face down.)
|
||||||
|
mana={1}{W}
|
||||||
|
type=Creature
|
||||||
|
subtype=Human Cleric
|
||||||
|
power=1
|
||||||
|
toughness=2
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Grip of Chaos
|
name=Grip of Chaos
|
||||||
text=Whenever a spell or ability is put onto the stack, if it has a single target, reselect its target at random. (Select from among all legal targets.)
|
text=Whenever a spell or ability is put onto the stack, if it has a single target, reselect its target at random. (Select from among all legal targets.)
|
||||||
mana={4}{R}{R}
|
mana={4}{R}{R}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
grade=borderline
|
grade=borderline
|
||||||
#Bordeline Primitives Pack for Wagic the Homebrew.
|
#Bordeline Primitives Pack for Wagic the Homebrew.
|
||||||
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
||||||
#I sorted this programatically - Vitty85 07-08-2021
|
#I sorted this programatically - Vitty85 04-09-2021
|
||||||
[card]
|
[card]
|
||||||
name=+2 Mace
|
name=+2 Mace
|
||||||
auto={3}:equip
|
auto={3}:equip
|
||||||
@@ -5081,11 +5081,12 @@ subtype=Equipment
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Bearer of Overwhelming Truths
|
name=Bearer of Overwhelming Truths
|
||||||
|
backside=Daring Sleuth
|
||||||
abilities=prowess
|
abilities=prowess
|
||||||
auto=@movedTo(*[-creature]|mystack):1/1 ueot
|
auto=@movedTo(*[-creature]|mystack):1/1 ueot
|
||||||
auto=@combatdamagefoeof(player) from(this):name(Create clue) token(Clue) controller
|
auto=@combatdamagefoeof(player) from(this):name(Create clue) token(Clue) controller
|
||||||
auto=@combatdamageof(player) from(this):name(Create clue) token(Clue) controller
|
auto=@combatdamageof(player) from(this):name(Create clue) token(Clue) controller
|
||||||
text=Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.) -- Whenever Bearer of Overwhelming Truths deals combat damage to a player, investigate. (Create a colorless Clue artifact token with “{2}, Sacrifice this artifact: Draw a card.”)
|
text=Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.) -- Whenever Bearer of Overwhelming Truths deals combat damage to a player, investigate. (Create a colorless Clue artifact token with “{2}, Sacrifice this artifact: Draw a card.”) // Daring Sleuth
|
||||||
type=Creature
|
type=Creature
|
||||||
subtype=Human Wizard
|
subtype=Human Wizard
|
||||||
power=3
|
power=3
|
||||||
@@ -10091,10 +10092,12 @@ type=Instant
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Chandra, Fire of Kaladesh
|
name=Chandra, Fire of Kaladesh
|
||||||
auto=@movedTo(*[red]|mystack):untap all(this)
|
backside=Chandra, Roaring Flame
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Shaman) moveto(ownerBattlefield) && flip(Chandra, Roaring Flame)
|
restriction=compare(isflipped)~equalto~0
|
||||||
auto={T}:damage:1 target(player) limit^moveto(exile) and!(moveto(mybattlefield) and!(counter(0/0,4,Loyalty) && flip(Chandra, Roaring Flame) )! )!^3
|
anyzone={0}:doubleside(backside)
|
||||||
text=Whenever you cast a red spell, untap Chandra, Fire of Kaladesh. -- {T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control.
|
auto=@movedTo(*[red]|mystack) restriction{compare(isflipped)~equalto~0}:untap
|
||||||
|
auto={T}:name(Deal 1 damage) target(player) damage:1 && if compare(totaldmg)~morethan~2 then all(this) moveto(exile) and!( moveto(ownerbattlefield) and!( flip(backside) )! )!
|
||||||
|
text=Whenever you cast a red spell, untap Chandra, Fire of Kaladesh. -- {T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control. // Chandra, Roaring Flame
|
||||||
mana={1}{R}{R}
|
mana={1}{R}{R}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Human Shaman
|
subtype=Human Shaman
|
||||||
@@ -14291,9 +14294,11 @@ toughness=1
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Daring Sleuth
|
name=Daring Sleuth
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Rogue) flip(Bearer of Overwhelming Truths)
|
backside=Bearer of Overwhelming Truths
|
||||||
auto=@sacrificed(Clue|mybattlefield):flip(Bearer of Overwhelming Truths)
|
restriction=compare(isflipped)~equalto~0
|
||||||
text=When you sacrifice a Clue, transform Daring Sleuth.
|
anyzone={0}:doubleside(backside)
|
||||||
|
auto=@sacrificed(Clue|mybattlefield):flip(backside)
|
||||||
|
text=When you sacrifice a Clue, transform Daring Sleuth. // Bearer of Overwhelming Truths
|
||||||
mana={1}{U}
|
mana={1}{U}
|
||||||
type=Creature
|
type=Creature
|
||||||
subtype=Human Rogue
|
subtype=Human Rogue
|
||||||
@@ -20634,16 +20639,6 @@ power=3
|
|||||||
toughness=3
|
toughness=3
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Exiled Doomsayer
|
|
||||||
#It's not possible to alter the morph cost ATM.
|
|
||||||
text=All morph costs cost {2} more. (This doesn't affect the cost to cast creature spells face down.)
|
|
||||||
mana={1}{W}
|
|
||||||
type=Creature
|
|
||||||
subtype=Human Cleric
|
|
||||||
power=1
|
|
||||||
toughness=2
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
name=Exotic Orchard
|
name=Exotic Orchard
|
||||||
auto=this(variable{olandg}>0) {t}:out{g}
|
auto=this(variable{olandg}>0) {t}:out{g}
|
||||||
auto=this(variable{olandu}>0) {t}:out{u}
|
auto=this(variable{olandu}>0) {t}:out{u}
|
||||||
@@ -30086,10 +30081,11 @@ type=Instant
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Hinterland Hermit
|
name=Hinterland Hermit
|
||||||
auto=if cantargetcard(*[fresh]|*) then if compare(isflipped)~equalto~0 then if type(Vildin-Pack Alpha|mybattlefield)~morethan~0 then may name(Transform Human Werewolf) name(Transform Human Werewolf) name(Transform Human Werewolf) flip(Hinterland Scourge)
|
backside=Hinterland Scourge
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Werewolf) flip(Hinterland Scourge)
|
restriction=compare(isflipped)~equalto~0
|
||||||
auto=@each upkeep restriction{lastturn(*|stack)~lessthan~1}:name(Transform Human Werewolf) flip(Hinterland Scourge)
|
anyzone={0}:doubleside(backside)
|
||||||
text=At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit.
|
auto=@each upkeep restriction{lastturn(*|stack)~lessthan~1}:name(Transform Human Werewolf) flip(backside)
|
||||||
|
text=At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit. // Hinterland Scourge
|
||||||
mana={1}{R}
|
mana={1}{R}
|
||||||
type=Creature
|
type=Creature
|
||||||
subtype=Human Werewolf
|
subtype=Human Werewolf
|
||||||
@@ -30101,7 +30097,7 @@ name=Hinterland Scourge
|
|||||||
auto=@each upkeep restriction{lastturn(*|mystack)~morethan~1,lastturn(*|opponentstack)~lessthan~2}:name(Transform Werewolf) flip(Hinterland Hermit)
|
auto=@each upkeep restriction{lastturn(*|mystack)~morethan~1,lastturn(*|opponentstack)~lessthan~2}:name(Transform Werewolf) flip(Hinterland Hermit)
|
||||||
auto=@each upkeep restriction{lastturn(*|opponentstack)~morethan~1}:name(Transform Werewolf) flip(Hinterland Hermit)
|
auto=@each upkeep restriction{lastturn(*|opponentstack)~morethan~1}:name(Transform Werewolf) flip(Hinterland Hermit)
|
||||||
auto=_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot
|
auto=_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot
|
||||||
text=Hinterland Scourge must be blocked if able. -- At the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge.
|
text=Hinterland Scourge must be blocked if able. -- At the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge. // Hinterland Hermit
|
||||||
type=Creature
|
type=Creature
|
||||||
subtype=Werewolf
|
subtype=Werewolf
|
||||||
color=red
|
color=red
|
||||||
@@ -33510,10 +33506,11 @@ type=Sorcery
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Jace, Vryn's Prodigy
|
name=Jace, Vryn's Prodigy
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Wizard) flip(Jace, Telepath Unbound)
|
backside=Jace, Telepath Unbound
|
||||||
auto={T}:draw:1 controller && ability$!name(Discard a card) reject notatarget(*|myhand)!$ controller restriction{type(*|mygraveyard)~lessthan~4}
|
restriction=compare(isflipped)~equalto~0
|
||||||
auto={T}:draw:1 controller && ability$!name(Discard a card) reject notatarget(*|myhand)!$ controller && moveto(exile) and!( moveto(mybattlefield) and!( haste && counter(0/0,5,Loyalty) && flip(Jace^ Telepath Unbound) )! )! restriction{type(*|mygraveyard)~morethan~3}
|
anyzone={0}:doubleside(backside)
|
||||||
text={T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn's Prodigy, then return him to the battlefield transformed under his owner's control.
|
auto={T}:name(Draw and discard) draw:1 controller && transforms((,newability[name(Discard a card) target(*|myhand) reject and!( if type(*|mygraveyard)~morethan~4 then all(this) moveto(exile) and!( moveto(ownerbattlefield) and!( flip(backside) )! )! )!])) forever
|
||||||
|
text={T}: Draw a card, then discard a card. If there are five or more cards in your graveyard, exile Jace, Vryn's Prodigy, then return him to the battlefield transformed under his owner's control. // Jace, Telepath Unbound
|
||||||
mana={1}{U}
|
mana={1}{U}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Human Wizard
|
subtype=Human Wizard
|
||||||
@@ -36348,10 +36345,12 @@ type=Artifact
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Kytheon, Hero of Akros
|
name=Kytheon, Hero of Akros
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Soldier) moveto(ownerBattlefield) && flip(Gideon, Battle-Forged)
|
backside=Gideon, Battle-Forged
|
||||||
auto=_BATTALION_moveto(exile) and!( moveto(mybattlefield) and!(counter(0/0,3,Loyalty) && flip(Gideon, Battle-Forged)
|
restriction=compare(isflipped)~equalto~0
|
||||||
auto={2}{W}:all(this) indestructible ueot
|
anyzone={0}:doubleside(backside)
|
||||||
text=At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control. -- {2}{W}: Kytheon gains indestructible until end of turn.
|
auto=_BATTALION_moveto(exile) and!( moveto(ownerbattlefield) and!( flip(backside) )! )!
|
||||||
|
auto={2}{W}:name(Gains indestructible) transforms((,newability[indestructible])) ueot
|
||||||
|
text=At end of combat, if Kytheon, Hero of Akros and at least two other creatures attacked this combat, exile Kytheon, then return him to the battlefield transformed under his owner's control. -- {2}{W}: Kytheon gains indestructible until end of turn. // Gideon, Battle-Forged
|
||||||
mana={W}
|
mana={W}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Human Soldier
|
subtype=Human Soldier
|
||||||
@@ -37644,9 +37643,11 @@ type=Instant
|
|||||||
[card]
|
[card]
|
||||||
name=Liliana, Heretical Healer
|
name=Liliana, Heretical Healer
|
||||||
abilities=lifelink
|
abilities=lifelink
|
||||||
auto=@movedto(Moonmist|stack):name(Transform Human Cleric) flip(Liliana, Defiant Necromancer)
|
backside=Liliana, Defiant Necromancer
|
||||||
auto=@movedTo(other creature[-token]|graveyard) from(myBattlefield):name(Liliana, Defiant Necromancer) moveto(exile) and!( moveto(mybattlefield) and!( transforms((,newability[counter(0/0.3.Loyalty)],newability[flip(Liliana^ Defiant Necromancer)],newability[name(Create Zombie) token(Zombie Lil)])) oneshot )! )!
|
restriction=compare(isflipped)~equalto~0
|
||||||
text=Lifelink -- Whenever another nontoken creature you control dies, exile Liliana, Heretical Healer, then return her to the battlefield transformed under her owner's control. If you do, put a 2/2 black Zombie creature token onto the battlefield.
|
anyzone={0}:doubleside(backside)
|
||||||
|
auto=@movedTo(other creature[-token]|graveyard) from(myBattlefield):name(Liliana, Defiant Necromancer) moveto(exile) and!( moveto(ownerbattlefield) and!( transforms((,newability[flip(backside)],newability[name(Create Zombie) token(Zombie Lil)])) oneshot )! )!
|
||||||
|
text=Lifelink -- Whenever another nontoken creature you control dies, exile Liliana, Heretical Healer, then return her to the battlefield transformed under her owner's control. If you do, put a 2/2 black Zombie creature token onto the battlefield. // Liliana, Defiant Necromancer
|
||||||
mana={1}{B}{B}
|
mana={1}{B}{B}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Human Cleric
|
subtype=Human Cleric
|
||||||
@@ -38904,7 +38905,7 @@ toughness=4
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Magda, Brazen Outlaw
|
name=Magda, Brazen Outlaw
|
||||||
auto=lord(dwarf|mybattlefield) 1/0
|
auto=lord(other dwarf|mybattlefield) 1/0
|
||||||
auto=@tapped(dwarf|mybattlefield):token(Treasure Sur)
|
auto=@tapped(dwarf|mybattlefield):token(Treasure Sur)
|
||||||
auto={S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}:name(Search dragon or artifact) target(*[dragon;artifact]|mylibrary) moveto(myBattlefield) and!( shuffle )!
|
auto={S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}{S(*[treasure]|mybattlefield)}:name(Search dragon or artifact) target(*[dragon;artifact]|mylibrary) moveto(myBattlefield) and!( shuffle )!
|
||||||
text=Other Dwarves you control get +1/+0. -- Whenever a Dwarf you control becomes tapped, create a Treasure token. -- Sacrifice five Treasures: Search your library for an artifact or Dragon card, put that card onto the battlefield, then shuffle your library.
|
text=Other Dwarves you control get +1/+0. -- Whenever a Dwarf you control becomes tapped, create a Treasure token. -- Sacrifice five Treasures: Search your library for an artifact or Dragon card, put that card onto the battlefield, then shuffle your library.
|
||||||
@@ -40751,12 +40752,12 @@ toughness=4
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Mila, Crafty Companion
|
name=Mila, Crafty Companion
|
||||||
|
backside=Lukka, Wayward Bonder
|
||||||
other={4}{R}{R} name(Lukka, Wayward Bonder)
|
other={4}{R}{R} name(Lukka, Wayward Bonder)
|
||||||
otherrestriction=can play planeswalker,compare(isflipped)~equalto~1
|
otherrestriction=can play planeswalker,compare(isflipped)~equalto~1
|
||||||
restriction=compare(isflipped)~equalto~0
|
restriction=compare(isflipped)~equalto~0
|
||||||
anyzone={0}:doubleside(Lukka, Wayward Bonder)
|
anyzone={0}:doubleside(backside)
|
||||||
autostack=if paid(alternative) then name(Lukka, Wayward Bonder) name(Lukka, Wayward Bonder) flip(Lukka, Wayward Bonder) forcetype(Legendary Planeswalker)
|
autostack=if paid(alternative) then name(Lukka, Wayward Bonder) name(Lukka, Wayward Bonder) flip(backside) forcetype(Legendary Planeswalker)
|
||||||
auto=if paid(alternative) then counter(0/0,5,Loyalty)
|
|
||||||
auto=@each blockers restriction{compare(isflipped)~equalto~0,type(creature[attacking]|opponentbattlefield)~morethan~0}:may name(Opponent attacked planeswalker) all(*[planeswalker]|mybattlefield) counter(0/0,1,Loyalty)
|
auto=@each blockers restriction{compare(isflipped)~equalto~0,type(creature[attacking]|opponentbattlefield)~morethan~0}:may name(Opponent attacked planeswalker) all(*[planeswalker]|mybattlefield) counter(0/0,1,Loyalty)
|
||||||
auto=@targeted(*|mybattlefield) from(*|opponentzones) restriction{compare(isflipped)~equalto~0}:may name(Draw a card) draw:1 controller
|
auto=@targeted(*|mybattlefield) from(*|opponentzones) restriction{compare(isflipped)~equalto~0}:may name(Draw a card) draw:1 controller
|
||||||
text=Whenever an opponent attacks one or more planeswalkers you control, put a loyalty counter on each planeswalker you control. -- Whenever a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. // {4}{R}{R} Lukka, Wayward Bonder
|
text=Whenever an opponent attacks one or more planeswalkers you control, put a loyalty counter on each planeswalker you control. -- Whenever a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. // {4}{R}{R} Lukka, Wayward Bonder
|
||||||
@@ -41677,6 +41678,7 @@ toughness=5
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Moonmist
|
name=Moonmist
|
||||||
|
auto=all(human[hasbackside]|battlefield) transforms((,newability[flip(backside)])) forever
|
||||||
auto=preventAllCombatDamage from(creature[-wolf;-werewolf]|battlefield) ueot
|
auto=preventAllCombatDamage from(creature[-wolf;-werewolf]|battlefield) ueot
|
||||||
text=Transform all Humans. Prevent all combat damage that would be dealt this turn by creatures other than Werewolves and Wolves. (Only double-faced cards can be transformed.)
|
text=Transform all Humans. Prevent all combat damage that would be dealt this turn by creatures other than Werewolves and Wolves. (Only double-faced cards can be transformed.)
|
||||||
mana={1}{G}
|
mana={1}{G}
|
||||||
@@ -41685,8 +41687,8 @@ type=Instant
|
|||||||
[card]
|
[card]
|
||||||
name=Moraug, Fury of Akoum
|
name=Moraug, Fury of Akoum
|
||||||
auto=@combat(attacking) source(creature|myBattlefield):all(trigger[to]) 1/0 ueot
|
auto=@combat(attacking) source(creature|myBattlefield):all(trigger[to]) 1/0 ueot
|
||||||
auto=_LANDFALL_if compare(currentphase)~equalto~4 then nextphasealter(add,combatphaseswithmain,controller,after<this>) else if compare(currentphase)~equalto~10 then nextphasealter(add,combatphaseswithmain,controller,after<this>) else
|
auto=_LANDFALL_if compare(currentphase)~equalto~4 then nextphasealter(add,combatphases,controller,after<this>) else if compare(currentphase)~equalto~10 then nextphasealter(add,combatphases,controller,after<this>) else
|
||||||
auto=_LANDFALL_all(creature|mybattlefield) transforms((,newability[@each my combatends turnlimited:phaseaction[combatbegins once sourceinplay] untap])) ueot
|
auto=_LANDFALL_if compare(currentphase)~equalto~4 then all(creature|mybattlefield) transforms((,newability[phaseaction[combatbegins next once sourceinplay] untap])) ueot else if compare(currentphase)~equalto~10 then all(creature|mybattlefield) transforms((,newability[phaseaction[combatbegins once sourceinplay] untap])) ueot
|
||||||
text=Each creature you control gets +1/+0 for each time it has attacked this turn. -- Landfall — Whenever a land enters the battlefield under your control, if it's your main phase, there's an additional combat phase after this phase. At the beginning of that combat, untap all creatures you control.
|
text=Each creature you control gets +1/+0 for each time it has attacked this turn. -- Landfall — Whenever a land enters the battlefield under your control, if it's your main phase, there's an additional combat phase after this phase. At the beginning of that combat, untap all creatures you control.
|
||||||
mana={4}{R}{R}
|
mana={4}{R}{R}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
@@ -43227,9 +43229,12 @@ toughness=2
|
|||||||
[card]
|
[card]
|
||||||
name=Nicol Bolas, the Ravager
|
name=Nicol Bolas, the Ravager
|
||||||
abilities=flying
|
abilities=flying
|
||||||
auto=ability$!name(discard) reject notatarget(*|myhand)!$ opponent
|
backside=Nicol Bolas, the Arisen
|
||||||
auto={4}{U}{B}{R}:moveto(exile) and!(moveto(mybattlefield) and!(counter(0/0,7,Loyalty) && flip(Nicol Bolas, the Arisen))! )! asSorcery
|
restriction=compare(isflipped)~equalto~0
|
||||||
text=Flying -- When Nicol Bolas, the Ravager enters the battlefield, each opponent discards a card. -- {4}{U}{B}{R}: Exile Nicol Bolas, the Ravager, then return him to the battlefield transformed under his owner's control. Activate this ability only any time you could cast a sorcery.
|
anyzone={0}:doubleside(backside)
|
||||||
|
auto=ability$!name(Discard a card) name(Discard a card) reject notatarget(*|myhand)!$ opponent
|
||||||
|
auto={4}{U}{B}{R}:name(Exile and transform) moveto(exile) and!(moveto(ownerbattlefield) and!( flip(backside) )! )! asSorcery
|
||||||
|
text=Flying -- When Nicol Bolas, the Ravager enters the battlefield, each opponent discards a card. -- {4}{U}{B}{R}: Exile Nicol Bolas, the Ravager, then return him to the battlefield transformed under his owner's control. Activate this ability only any time you could cast a sorcery. // Nicol Bolas, the Arisen
|
||||||
mana={1}{U}{B}{R}
|
mana={1}{U}{B}{R}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Elder Dragon
|
subtype=Elder Dragon
|
||||||
@@ -43667,10 +43672,12 @@ subtype=Aura
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Nissa, Vastwood Seer
|
name=Nissa, Vastwood Seer
|
||||||
aicode=activate target(forest[basic]|mylibrary) moveto(myhand)
|
backside=Nissa, Sage Animist
|
||||||
auto=name(search card) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>forest[basic]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend
|
restriction=compare(isflipped)~equalto~0
|
||||||
auto=@movedto(land|mybattlefield) restriction{type(land|mybattlefield)~morethan~6}:all(this) moveto(exile) and!( moveto(mybattlefield) and!(counter(0/0,3,Loyalty) && flip(Nissa, Sage Animist) )! )!
|
anyzone={0}:doubleside(backside)
|
||||||
text=When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library. -- Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control.
|
auto=may name(Search basic forest) target(forest[basic]|mylibrary) moveto(myhand) and!( shuffle )!
|
||||||
|
auto=@movedto(land|mybattlefield) restriction{type(land|mybattlefield)~morethan~6}:name(Exile and transforms) moveto(exile) and!( moveto(mybattlefield) and!( flip(backside) )! )!
|
||||||
|
text=When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, reveal it, put it into your hand, then shuffle your library. -- Whenever a land enters the battlefield under your control, if you control seven or more lands, exile Nissa, then return her to the battlefield transformed under her owner's control. // Nissa, Sage Animist
|
||||||
mana={2}{G}
|
mana={2}{G}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Elf Scout
|
subtype=Elf Scout
|
||||||
@@ -47950,9 +47957,10 @@ type=Instant
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Price of Betrayal
|
name=Price of Betrayal
|
||||||
target=artifact,creature,planeswalker
|
auto=if type(artifact|battlefield)~morethan~0 then choice name(Remove 5 counters from an artifact) name(Remove 5 counters from an artifact) target(artifact) removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1)
|
||||||
auto=counter(1/1,-5)
|
auto=if type(creature|battlefield)~morethan~0 then choice name(Remove 5 counters from a creature) name(Remove 5 counters from a creature) target(creature) removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1)
|
||||||
auto=counter(0/0,-5,loyalty)
|
auto=if type(planeswalker|battlefield)~morethan~0 then choice name(Remove 5 counters from a planeswalker) name(Remove 5 counters from a planeswalker) target(planeswalker) removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1)
|
||||||
|
auto=choice name(Remove 5 counters from opponent) target(opponent) removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1)
|
||||||
text=Remove up to five counters from target artifact, creature, planeswalker, or opponent.
|
text=Remove up to five counters from target artifact, creature, planeswalker, or opponent.
|
||||||
mana={B}
|
mana={B}
|
||||||
type=Sorcery
|
type=Sorcery
|
||||||
@@ -60226,8 +60234,8 @@ type=Artifact
|
|||||||
[card]
|
[card]
|
||||||
name=Spark Double
|
name=Spark Double
|
||||||
auto=choice name(Don't copy anything) donothing
|
auto=choice name(Don't copy anything) donothing
|
||||||
auto=choice name(Copy creature) target(creature|mybattlefield) copy and!( transforms((-legendary)) forever and!(counter(1/1))! )!
|
auto=choice name(Copy creature) target(creature|mybattlefield) copy options(nolegend) and!( counter(1/1) )!
|
||||||
auto=choice name(Copy planeswalker) target(planeswalker|mybattlefield) copy and!( transforms((-legendary)) forever and!(counter(0/0,1,Loyalty))! )!
|
auto=choice name(Copy planeswalker) target(planeswalker|mybattlefield) copy options(nolegend) and!( counter(0/0,1,Loyalty) )!
|
||||||
text=You may have Spark Double enter the battlefield as a copy of a creature or planeswalker you control, except it enters with an additional +1/+1 counter on it if it's a creature, it enters with an additional loyalty counter on it if it's a planeswalker, and it isn't legendary if that permanent is legendary.
|
text=You may have Spark Double enter the battlefield as a copy of a creature or planeswalker you control, except it enters with an additional +1/+1 counter on it if it's a creature, it enters with an additional loyalty counter on it if it's a planeswalker, and it isn't legendary if that permanent is legendary.
|
||||||
mana={3}{U}
|
mana={3}{U}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -69750,14 +69758,14 @@ toughness=1
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Valki, God of Lies
|
name=Valki, God of Lies
|
||||||
|
backside=Tibalt, Cosmic Impostor
|
||||||
other={5}{B}{R} name(Tibalt, Cosmic Impostor)
|
other={5}{B}{R} name(Tibalt, Cosmic Impostor)
|
||||||
otherrestriction=can play planeswalker,compare(isflipped)~equalto~1
|
otherrestriction=can play planeswalker,compare(isflipped)~equalto~1
|
||||||
restriction=compare(isflipped)~equalto~0
|
restriction=compare(isflipped)~equalto~0
|
||||||
anyzone={0}:doubleside(Tibalt, Cosmic Impostor)
|
anyzone={0}:doubleside(backside)
|
||||||
autostack=if paid(alternative) then flip(Tibalt, Cosmic Impostor) forcetype(Legendary Planeswalker)
|
autostack=if paid(alternative) then flip(backside) forcetype(Legendary Planeswalker)
|
||||||
auto=ifnot paid(alternative) then if type(creature|opponenthand)~morethan~0 then name(Reveal hand and exile creature) name(Reveal hand and exile creature) name(Reveal hand and exile creature) target(creature|opponenthand) imprint
|
auto=ifnot paid(alternative) then if type(creature|opponenthand)~morethan~0 then name(Reveal hand and exile creature) name(Reveal hand and exile creature) name(Reveal hand and exile creature) target(creature|opponenthand) imprint
|
||||||
auto=ifnot paid(alternative) then if type(creature|opponenthand)~equalto~0 then name(Reveal hand) name(Reveal hand) name(Reveal hand) target(*|opponenthand) moveto(opponenthand)
|
auto=ifnot paid(alternative) then if type(creature|opponenthand)~equalto~0 then name(Reveal hand) name(Reveal hand) name(Reveal hand) target(*|opponenthand) moveto(opponenthand)
|
||||||
auto=if paid(alternative) then counter(0/0,5,Loyalty)
|
|
||||||
auto=this(variable{hasevict}>0) this(variable{iscopied}<1) transforms((,newability[@movedto(this|nonbattlezone) from(battlefield):name(Put back exiled creature) target(creature[evictname]|opponentexile) moveTo(opponenthand)]))
|
auto=this(variable{hasevict}>0) this(variable{iscopied}<1) transforms((,newability[@movedto(this|nonbattlezone) from(battlefield):name(Put back exiled creature) target(creature[evictname]|opponentexile) moveTo(opponenthand)]))
|
||||||
auto=this(variable{hasevict}>0) this(variable{evictmc}=0) this(variable{iscopied}<1) {0}:name(Becomes copy of exiled creature) copy target(creature[evictname]|opponentexile)
|
auto=this(variable{hasevict}>0) this(variable{evictmc}=0) this(variable{iscopied}<1) {0}:name(Becomes copy of exiled creature) copy target(creature[evictname]|opponentexile)
|
||||||
auto=this(variable{hasevict}>0) this(variable{evictmc}=1) this(variable{iscopied}<1) {1}:name(Becomes copy of exiled creature) copy target(creature[evictname]|opponentexile)
|
auto=this(variable{hasevict}>0) this(variable{evictmc}=1) this(variable{iscopied}<1) {1}:name(Becomes copy of exiled creature) copy target(creature[evictname]|opponentexile)
|
||||||
@@ -72411,6 +72419,14 @@ mana={G}
|
|||||||
type=Instant
|
type=Instant
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Waxing Moon
|
||||||
|
auto=may name(Transform a werewolf) target(werewolf[hasbackside]|mybattlefield) transforms((,newability[flip(backside)])) forever
|
||||||
|
auto=all(creature|mybattlefield) transforms((,newability[trample])) ueot
|
||||||
|
text=Transform up to one target Werewolf you control. Creatures you control gain trample until end of turn.
|
||||||
|
mana={1}{G}
|
||||||
|
type=Instant
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Wayward Guide-Beast
|
name=Wayward Guide-Beast
|
||||||
abilities=trample,haste
|
abilities=trample,haste
|
||||||
auto=@combatdamaged(player) from(this):moveTo(ownerHand) target(land|myBattlefield)
|
auto=@combatdamaged(player) from(this):moveTo(ownerHand) target(land|myBattlefield)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
grade=borderline
|
grade=borderline
|
||||||
#Planeswalkers Primitives Pack for Wagic the Homebrew.
|
#Planeswalkers Primitives Pack for Wagic the Homebrew.
|
||||||
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
||||||
#We sorted this in alphabetical order - Luruz & Vitty85 07-08-2021
|
#We sorted this in alphabetical order - Luruz & Vitty85 04-09-2021
|
||||||
[card]
|
[card]
|
||||||
name=Abian, Luvion Usurper
|
name=Abian, Luvion Usurper
|
||||||
auto=counter(0/0,5,loyalty)
|
auto=counter(0/0,5,loyalty)
|
||||||
@@ -557,11 +557,12 @@ subtype=Chandra
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Chandra, Roaring Flame
|
name=Chandra, Roaring Flame
|
||||||
auto=counter(0/0.4.loyalty)
|
backside=Chandra, Fire of Kaladesh
|
||||||
|
auto=counter(0/0,4,loyalty)
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: Deals 2 damage to player or planeswalker) damage:2 target(player,planeswalker)
|
auto={C(0/0,1,Loyalty)}:name(+1: Deals 2 damage to player or planeswalker) damage:2 target(player,planeswalker)
|
||||||
auto={C(0/0,-2,Loyalty)}:name(-2: Deals 2 damage to creature) damage:2 target(creature)
|
auto={C(0/0,-2,Loyalty)}:name(-2: Deals 2 damage to creature) damage:2 target(creature)
|
||||||
auto={C(0/0,-7,Loyalty)}:name(-7: Deals 6 damage with Emblem) damage:6 opponent && emblem transforms((,newability[@each opponent upkeep:damage:3 opponent])) forever dontremove
|
auto={C(0/0,-7,Loyalty)}:name(-7: Deals 6 damage with Emblem) emblem transforms((newability[damage:6 opponent],newability[@each opponent upkeep:damage:3 opponent])) forever dontremove
|
||||||
text=+1: Chandra, Roaring Flame deals 2 damage to target player or planeswalker. -- −2: Chandra, Roaring Flame deals 2 damage to target creature. -- −7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with “At the beginning of your upkeep, this emblem deals 3 damage to you.”
|
text=+1: Chandra, Roaring Flame deals 2 damage to target player or planeswalker. -- −2: Chandra, Roaring Flame deals 2 damage to target creature. -- −7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." // Chandra, Fire of Kaladesh
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Chandra
|
subtype=Chandra
|
||||||
color=red
|
color=red
|
||||||
@@ -904,22 +905,23 @@ subtype=Garruk
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Garruk Relentless
|
name=Garruk Relentless
|
||||||
|
backside=Garruk, the Veil-Cursed
|
||||||
auto=counter(0/0,3,loyalty)
|
auto=counter(0/0,3,loyalty)
|
||||||
auto=this(counter{0/0.1.loyalty}<3) flip(Garruk, the Veil-Cursed)
|
auto=this(counter{0/0.1.loyalty}<3) flip(backside)
|
||||||
auto={0}:name(+0: Garruk fights target creature) target(creature) dynamicability<!mytgt powerstrike tosrc!> damage:3
|
auto={0}:name(+0: Garruk fights a creature) target(creature) dynamicability<!powerstrike eachother!> && damage:3
|
||||||
auto={0}:name(+0: Create a 2/2 Wolf) token(Wolf,Creature Wolf,2/2,green)
|
auto={0}:name(+0: Create a 2/2 Wolf) token(Wolf,Creature Wolf,2/2,green)
|
||||||
text=When Garruk Relentless has two or fewer loyalty counters on him, transform him. -- 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him. -- 0: Put a 2/2 green Wolf creature token onto the battlefield.
|
text=When Garruk Relentless has two or fewer loyalty counters on him, transform him. -- 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him. -- 0: Put a 2/2 green Wolf creature token onto the battlefield. // Garruk, the Veil-Cursed
|
||||||
mana={3}{G}
|
mana={3}{G}
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Garruk
|
subtype=Garruk
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Garruk, the Veil-Cursed
|
name=Garruk, the Veil-Cursed
|
||||||
aicode=activate target(creature|mylibrary) moveto(myhand)
|
backside=Garruk Relentless
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: Create a 1/1 Wolf) token(Wolf,Creature Wolf,1/1,black,deathtouch)
|
auto={C(0/0,1,Loyalty)}:name(+1: Create a 1/1 Wolf) token(Wolf,Creature Wolf,1/1,black,deathtouch)
|
||||||
auto={C(0/0,-1,Loyalty)}{S(creature|myBattlefield)}:name(-1: Search creature) Reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>creature|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend
|
auto={C(0/0,-1,Loyalty)}{S(creature|myBattlefield)}:name(-1: Search creature) target(creature|mylibrary) moveto(myhand) and!( shuffle )!
|
||||||
auto={C(0/0,-3,Loyalty)}:name(-3: Creatures gets +X/+X and trample) all(creature|mybattlefield) trample ueot && all(creature|mybattlefield) foreach(creature|mygraveyard) 1/1 ueot
|
auto={C(0/0,-3,Loyalty)}:name(-3: Creatures gets +X/+X and trample) all(creature|mybattlefield) transforms((,newability[trample],newability[type:creature:mygraveyard/type:creature:mygraveyard])) ueot
|
||||||
text=+1: Put a 1/1 black Wolf creature token with deathtouch onto the battlefield. -- -1: Sacrifice a creature. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle your library. -- -3: Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard.
|
text=+1: Put a 1/1 black Wolf creature token with deathtouch onto the battlefield. -- -1: Sacrifice a creature. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle your library. -- -3: Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard. // Garruk Relentless
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Garruk
|
subtype=Garruk
|
||||||
color=black,green
|
color=black,green
|
||||||
@@ -1052,11 +1054,12 @@ subtype=Gideon
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Gideon, Battle-Forged
|
name=Gideon, Battle-Forged
|
||||||
|
backside=Kytheon, Hero of Akros
|
||||||
auto=counter(0/0,3,loyalty)
|
auto=counter(0/0,3,loyalty)
|
||||||
auto={C(0/0,2,Loyalty)}:name(+2: Target creature attacks Gideon) target(creature|opponentbattlefield) mustattack uynt
|
auto={C(0/0,2,Loyalty)}:name(+2: Target creature attacks Gideon) target(creature|opponentbattlefield) mustattack uynt
|
||||||
auto={C(0/0,-1,Loyalty)}:name(+1: Target creature is indestructible and untap it) untap target(creature) && indestructible uynt
|
auto={C(0/0,-1,Loyalty)}:name(+1: Target creature is indestructible and untap it) target(creature) transforms((,newability[untap],newability[indestructible])) uynt
|
||||||
auto={C(0/0,0,Loyalty)}:name(+0: Transforms Gideon into a 4/4 Human Indestructible) transforms((Human Soldier Creature Planeswalker,setpower=4,settoughness=4,indestructible)) ueot && transforms((,newability[preventAllDamage to(this)])) ueot
|
auto={C(0/0,0,Loyalty)}:name(+0: Transforms Gideon into a 4/4 Human Indestructible) transforms((Human Soldier Creature,setpower=4,settoughness=4,newability[indestructible],newability[preventAllDamage to(this)])) ueot
|
||||||
text=+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller’s next turn if able. -- +1: Until your next turn, target creature gains indestructible. Untap that creature. -- 0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that’s still a planeswalker. Prevent all damage that would be dealt to him this turn.
|
text=+2: Up to one target creature an opponent controls attacks Gideon, Battle-Forged during its controller’s next turn if able. -- +1: Until your next turn, target creature gains indestructible. Untap that creature. -- 0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that’s still a planeswalker. Prevent all damage that would be dealt to him this turn. // Kytheon, Hero of Akros
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Gideon
|
subtype=Gideon
|
||||||
color=white
|
color=white
|
||||||
@@ -1307,12 +1310,13 @@ subtype=Jace
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Jace, Telepath Unbound
|
name=Jace, Telepath Unbound
|
||||||
|
backside=Jace, Vryn's Prodigy
|
||||||
auto=counter(0/0,5,loyalty)
|
auto=counter(0/0,5,loyalty)
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: don't target any creature) donothing
|
auto={C(0/0,1,Loyalty)}:name(+1: don't target any creature) donothing
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: target creature gets -2/0) target(creature) -2/0 uynt
|
auto={C(0/0,1,Loyalty)}:name(+1: target creature gets -2/0) target(creature) -2/0 uynt
|
||||||
auto={C(0/0,-3,Loyalty)}:name(-3: choose an instant or sorcery you may from graveyard) target(*[instant;sorcery]|mygraveyard) transforms((,newability[canplayfromgraveyard],newability[gainedexiledeath])) ueot
|
auto={C(0/0,-3,Loyalty)}:name(-3: choose an instant or sorcery you may from graveyard) target(*[instant;sorcery]|mygraveyard) transforms((,newability[canplayfromgraveyard],newability[gainedexiledeath])) ueot
|
||||||
auto={C(0/0,-9,Loyalty)}:name(-9: emblem mills opponent cards) emblem transforms((,newability[@movedTo(*|mystack):deplete:5 opponent])) forever dontremove
|
auto={C(0/0,-9,Loyalty)}:name(-9: emblem mills opponent cards) emblem transforms((,newability[@movedTo(*|mystack):deplete:5 opponent])) forever dontremove
|
||||||
text=+1: Up to one target creature gets -2/-0 until your next turn. -- -3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead. -- -9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard."
|
text=+1: Up to one target creature gets -2/-0 until your next turn. -- -3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead. -- -9: You get an emblem with "Whenever you cast a spell, target opponent puts the top five cards of his or her library into his or her graveyard." // Jace, Vryn's Prodigy
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Jace
|
subtype=Jace
|
||||||
color=blue
|
color=blue
|
||||||
@@ -1657,6 +1661,7 @@ subtype=Liliana
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Liliana, Defiant Necromancer
|
name=Liliana, Defiant Necromancer
|
||||||
|
backside=Liliana, Heretical Healer
|
||||||
auto=counter(0/0,3,Loyalty)
|
auto=counter(0/0,3,Loyalty)
|
||||||
auto={C(0/0,2,Loyalty)}:name(+2: Each player discards a card) transforms((,newability[ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ controller],newability[ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ opponent])) oneshot
|
auto={C(0/0,2,Loyalty)}:name(+2: Each player discards a card) transforms((,newability[ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ controller],newability[ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ opponent])) oneshot
|
||||||
auto={C(0/0,0,Loyalty)}:name(-0: Reanimate non-legendary creature with manacost 0) moveto(mybattlefield) target(creature[-legendary;manacost=0]|mygraveyard)
|
auto={C(0/0,0,Loyalty)}:name(-0: Reanimate non-legendary creature with manacost 0) moveto(mybattlefield) target(creature[-legendary;manacost=0]|mygraveyard)
|
||||||
@@ -1805,6 +1810,7 @@ subtype=Lukka
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Lukka, Wayward Bonder
|
name=Lukka, Wayward Bonder
|
||||||
|
backside=Mila, Crafty Companion
|
||||||
auto=counter(0/0,5,loyalty)
|
auto=counter(0/0,5,loyalty)
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: Don't discard any card) donothing
|
auto={C(0/0,1,Loyalty)}:name(+1: Don't discard any card) donothing
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: Discard and draw) target(*|myhand) transforms((,newability[reject],newability[if cantargetcard(*[creature]|*) then draw:2 else draw:1])) oneshot
|
auto={C(0/0,1,Loyalty)}:name(+1: Discard and draw) target(*|myhand) transforms((,newability[reject],newability[if cantargetcard(*[creature]|*) then draw:2 else draw:1])) oneshot
|
||||||
@@ -1820,7 +1826,7 @@ name=Mordenkainen
|
|||||||
auto=counter(0/0,5,Loyalty)
|
auto=counter(0/0,5,Loyalty)
|
||||||
auto={C(0/0,2,Loyalty)}:name(+2: Draw 2 cards) draw:2 && transforms((,newability[name(Put on bottom) target(*|myhand) bottomoflibrary])) forever
|
auto={C(0/0,2,Loyalty)}:name(+2: Draw 2 cards) draw:2 && transforms((,newability[name(Put on bottom) target(*|myhand) bottomoflibrary])) forever
|
||||||
auto={C(0/0,-2,Loyalty)}:name(-2: Create Dog Illusion) token(Dog Mor)
|
auto={C(0/0,-2,Loyalty)}:name(-2: Create Dog Illusion) token(Dog Mor)
|
||||||
auto={C(0/0,-10,Loyalty)}:name(-10: Exchange hand and library) token(Mordenkainen Emblem,Emblem,0/0,shroud,indestructible) and!( transforms((,newability[nomaxhand],newability[all(*|myhand) moveto(myreveal) and!( all(*|mylibrary) moveto(myhand) and!( all(*|myreveal) moveto(mylibrary) and!( shuffle )! )! )!])) forever
|
auto={C(0/0,-10,Loyalty)}:name(-10: Exchange hand and library) token(Mordenkainen Emblem,Emblem,0/0,shroud,indestructible,notrigger) and!( transforms((,newability[nomaxhand],newability[all(*|myhand) moveto(myreveal) and!( all(*|mylibrary) moveto(myhand) and!( all(*|myreveal) moveto(mylibrary) and!( shuffle )! )! )!])) forever
|
||||||
text=+2: Draw two cards, then put a card from your hand on the bottom of your library. -- -2: Create a blue Dog Illusion creature token with "This creature’s power and toughness are each equal to twice the number of cards in your hand." -- -10: Exchange your hand and library, then shuffle. You get an emblem with "You have no maximum hand size."
|
text=+2: Draw two cards, then put a card from your hand on the bottom of your library. -- -2: Create a blue Dog Illusion creature token with "This creature’s power and toughness are each equal to twice the number of cards in your hand." -- -10: Exchange your hand and library, then shuffle. You get an emblem with "You have no maximum hand size."
|
||||||
mana={4}{U}{U}
|
mana={4}{U}{U}
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
@@ -2000,13 +2006,14 @@ subtype=Bolas
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Nicol Bolas, the Arisen
|
name=Nicol Bolas, the Arisen
|
||||||
|
backside=Nicol Bolas, the Ravager
|
||||||
auto=counter(0/0,7,Loyalty)
|
auto=counter(0/0,7,Loyalty)
|
||||||
auto={C(0/0,2,Loyalty)}:name(+2: Draw two cards) draw:2 controller
|
auto={C(0/0,2,Loyalty)}:name(+2: Draw two cards) draw:2 controller
|
||||||
auto={C(0/0,-3,Loyalty)}:name(-3: Deals 10 damage to creature or planeswalker) damage:10 target(creature,planeswalker)
|
auto={C(0/0,-3,Loyalty)}:name(-3: Deals 10 damage to creature or planeswalker) damage:10 target(creature,planeswalker)
|
||||||
auto={C(0/0,-4,Loyalty)}:name(-4: Reanimate a creature or planeswalker) target(*[creature;planeswalker]|graveyard) moveto(myBattlefield)
|
auto={C(0/0,-4,Loyalty)}:name(-4: Reanimate a creature or planeswalker) target(*[creature;planeswalker]|graveyard) moveto(myBattlefield)
|
||||||
auto={C(0/0,-12,Loyalty)}:name(-12: Exile opponent library except one) moveTo(opponentexile) all(*[zpos<=type:*:opponentlibraryminus1minusend]|opponentlibrary)
|
auto={C(0/0,-12,Loyalty)}:name(-12: Exile opponent library except one) moveTo(opponentexile) all(*[zpos<=type:*:opponentlibraryminus1minusend]|opponentlibrary)
|
||||||
auto={C(0/0,-12,Loyalty)}:name(-12: Exile your library except one) moveTo(myexile) all(*[zpos<=type:*:mylibraryminus1minusend]|mylibrary)
|
auto={C(0/0,-12,Loyalty)}:name(-12: Exile your library except one) moveTo(myexile) all(*[zpos<=type:*:mylibraryminus1minusend]|mylibrary)
|
||||||
text=+2: Draw two cards. -- -3: Nicol Bolas, the Arisen deals 10 damage to target creature or planeswalker. -- -4: Put target creature or planeswalker card from a graveyard onto the battlefield under your control. -- -12: Exile all but the bottom card of target player's library.
|
text=+2: Draw two cards. -- -3: Nicol Bolas, the Arisen deals 10 damage to target creature or planeswalker. -- -4: Put target creature or planeswalker card from a graveyard onto the battlefield under your control. -- -12: Exile all but the bottom card of target player's library. // Nicol Bolas, the Ravager
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Bolas
|
subtype=Bolas
|
||||||
color=blue,black,red
|
color=blue,black,red
|
||||||
@@ -2087,12 +2094,13 @@ subtype=Nissa
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Nissa, Sage Animist
|
name=Nissa, Sage Animist
|
||||||
|
backside=Nissa, Vastwood Seer
|
||||||
auto=counter(0/0,3,loyalty)
|
auto=counter(0/0,3,loyalty)
|
||||||
aicode=activate transforms((,newability[if type(land[zpos=1]|mylibrary)~morethan~0 then target(land[zpos=1]|mylibrary) moveto(ownerbattlefield) else target(*[zpos=1]|mylibrary) moveto(ownerhand)])) ueot
|
aicode=activate transforms((,newability[if type(land[zpos=1]|mylibrary)~morethan~0 then target(land[zpos=1]|mylibrary) moveto(ownerbattlefield) else target(*[zpos=1]|mylibrary) moveto(ownerhand)])) ueot
|
||||||
auto={C(0/0,1,Loyalty)}:name(+1: Reveal the top and put land on battlefield) reveal:1 optionone target(<1>land|reveal) moveto(ownerbattlefield) optiononeend optiontwo target(<1>*|reveal) moveto(ownerhand) optiontwoend revealend
|
auto={C(0/0,1,Loyalty)}:name(+1: Reveal the top and put land on battlefield) reveal:1 optionone target(<1>land|reveal) moveto(ownerbattlefield) optiononeend optiontwo target(<1>*|reveal) moveto(ownerhand) optiontwoend revealend
|
||||||
auto={C(0/0,-2,Loyalty)}:name(-2: Create a Legendary 4/4 Elemental named Ashaya) create(Ashaya, the Awoken World:Legendary Creature Elemental:4/4:green)
|
auto={C(0/0,-2,Loyalty)}:name(-2: Create a Legendary 4/4 Elemental named Ashaya) create(Ashaya, the Awoken World:Legendary Creature Elemental:4/4:green)
|
||||||
auto={C(0/0,-7,Loyalty)}:name(-7: Untap up to six land an becomes 6/6) target(<upto:6>land) transforms((Creature Elemental,newability[untap],setpower=6,settoughness=6)) forever
|
auto={C(0/0,-7,Loyalty)}:name(-7: Untap up to six land an becomes 6/6) target(<upto:6>land) transforms((Creature Elemental,newability[untap],setpower=6,settoughness=6)) forever
|
||||||
text=+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. -- -2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield. -- -7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands.
|
text=+1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. -- -2: Put a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World onto the battlefield. -- -7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands. // Nissa, Vastwood Seer
|
||||||
type=Legendary Planeswalker
|
type=Legendary Planeswalker
|
||||||
subtype=Nissa
|
subtype=Nissa
|
||||||
color=green
|
color=green
|
||||||
@@ -2844,8 +2852,9 @@ type=Legendary Planeswalker
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Tibalt, Cosmic Impostor
|
name=Tibalt, Cosmic Impostor
|
||||||
|
backside=Valki, God of Lies
|
||||||
auto=counter(0/0,5,Loyalty)
|
auto=counter(0/0,5,Loyalty)
|
||||||
auto=token(Tibalt Emblem,Emblem,0/0,shroud,indestructible,notrigger,nomovetrigger) and!( transforms((,newability[lord(*[counter{0/0.1.TibaltExiled}]|myexile) canplayfromexile],newability[lord(*[counter{0/0.1.TibaltExiled}]|myexile) anytypeofmana],newability[{0}:name(Cast from opponent exile) target(*[counter{0/0.1.TibaltExiled}]|opponentexile) moveto(myexile) and!( transforms((,newability[counter(0/0.1.TibaltExiled)],newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)],newability[phaseaction[untap once checkex] counter(0/0.1.TibaltExiled)])) ueot )!])) forever )!
|
auto=token(Tibalt Emblem,Emblem,0/0,shroud,indestructible,notrigger) and!( transforms((,newability[lord(*[counter{0/0.1.TibaltExiled}]|myexile) canplayfromexile],newability[lord(*[counter{0/0.1.TibaltExiled}]|myexile) anytypeofmana],newability[{0}:name(Cast from opponent exile) target(*[counter{0/0.1.TibaltExiled}]|opponentexile) moveto(myexile) and!( transforms((,newability[counter(0/0.1.TibaltExiled)],newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)],newability[phaseaction[untap once checkex] counter(0/0.1.TibaltExiled)])) ueot )!])) forever )!
|
||||||
auto={C(0/0,2,Loyalty)}:name(+2: Exile the top card) all(*[zpos=1]|library) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
auto={C(0/0,2,Loyalty)}:name(+2: Exile the top card) all(*[zpos=1]|library) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
||||||
auto={C(0/0,-3,Loyalty)}:name(-3: Exile target artifact or creature) target(*[artifact;creature]|battlefield) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
auto={C(0/0,-3,Loyalty)}:name(-3: Exile target artifact or creature) target(*[artifact;creature]|battlefield) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
||||||
auto={C(0/0,-8,Loyalty)}:name(-8: Exile all cards from all graveyards) all(*|graveyard) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
auto={C(0/0,-8,Loyalty)}:name(-8: Exile all cards from all graveyards) all(*|graveyard) moveto(ownerexile) and!( counter(0/0,1,TibaltExiled) )!
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ grade=unsupported
|
|||||||
#The cards in this file are not implemented/incomplete yet.
|
#The cards in this file are not implemented/incomplete yet.
|
||||||
#Updated Card lists not in primitives (Borderline, Crappy, Unsupported and Missing Cards up to Aether Revolt) as of 3/14/2017
|
#Updated Card lists not in primitives (Borderline, Crappy, Unsupported and Missing Cards up to Aether Revolt) as of 3/14/2017
|
||||||
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card
|
||||||
#I sorted this programatically - Vitty85 07-08-2021
|
#I sorted this programatically - Vitty85 04-09-2021
|
||||||
[card]
|
[card]
|
||||||
name="Ach! Hans, Run!"
|
name="Ach! Hans, Run!"
|
||||||
text=At the beginning of your upkeep, you may say "Ach Hans, run It's the . . ." and name a creature card. If you do, search your library for the named card, put it into play, then shuffle your library. That creature has haste. Remove it from the game at end of turn.
|
text=At the beginning of your upkeep, you may say "Ach Hans, run It's the . . ." and name a creature card. If you do, search your library for the named card, put it into play, then shuffle your library. That creature has haste. Remove it from the game at end of turn.
|
||||||
@@ -3100,6 +3100,15 @@ mana={2}{B}{B}
|
|||||||
type=Sorcery
|
type=Sorcery
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
|
name=Exiled Doomsayer
|
||||||
|
text=All morph costs cost {2} more. (This doesn't affect the cost to cast creature spells face down.)
|
||||||
|
mana={1}{W}
|
||||||
|
type=Creature
|
||||||
|
subtype=Human Cleric
|
||||||
|
power=1
|
||||||
|
toughness=2
|
||||||
|
[/card]
|
||||||
|
[card]
|
||||||
name=Experiment Kraj
|
name=Experiment Kraj
|
||||||
text=Experiment Kraj has all activated abilities of each other creature with a +1/+1 counter on it. -- {T}: Put a +1/+1 counter on target creature.
|
text=Experiment Kraj has all activated abilities of each other creature with a +1/+1 counter on it. -- {T}: Put a +1/+1 counter on target creature.
|
||||||
mana={2}{G}{G}{U}{U}
|
mana={2}{G}{G}{U}{U}
|
||||||
@@ -11822,12 +11831,6 @@ text={T}: Add {1}{1} . Spend this mana only to cast spells with watermarks.
|
|||||||
type=Land
|
type=Land
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Waxing Moon
|
|
||||||
text=Transform up to one target Werewolf you control. Creatures you control gain trample until end of turn.
|
|
||||||
mana={1}{G}
|
|
||||||
type=Instant
|
|
||||||
[/card]
|
|
||||||
[card]
|
|
||||||
name=Wear Away
|
name=Wear Away
|
||||||
text=Destroy target artifact or enchantment. -- Splice onto Arcane {3}{G} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)
|
text=Destroy target artifact or enchantment. -- Splice onto Arcane {3}{G} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.)
|
||||||
mana={G}{G}
|
mana={G}{G}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class CardDescriptor: public MTGCardInstance
|
|||||||
int zposition;
|
int zposition;
|
||||||
int hasKickerCost;
|
int hasKickerCost;
|
||||||
int hasFlashbackCost;
|
int hasFlashbackCost;
|
||||||
|
int hasBackSide;
|
||||||
int hasXCost;
|
int hasXCost;
|
||||||
int anyCounter;
|
int anyCounter;
|
||||||
int init();
|
int init();
|
||||||
@@ -54,6 +55,7 @@ class CardDescriptor: public MTGCardInstance
|
|||||||
void unsecureSetKicked(int i);
|
void unsecureSetKicked(int i);
|
||||||
void unsecureSetHasKickerCost(int i);
|
void unsecureSetHasKickerCost(int i);
|
||||||
void unsecureSetHasFlashbackCost(int i);
|
void unsecureSetHasFlashbackCost(int i);
|
||||||
|
void unsecureSetHasBackSide(int i);
|
||||||
void unsecureSetTapped(int i);
|
void unsecureSetTapped(int i);
|
||||||
void unsecuresetfresh(int k);
|
void unsecuresetfresh(int k);
|
||||||
void unsecuresetrecent(int j);
|
void unsecuresetrecent(int j);
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public:
|
|||||||
string text;
|
string text;
|
||||||
string name;
|
string name;
|
||||||
string nameOrig;
|
string nameOrig;
|
||||||
|
string backSide;
|
||||||
int init();
|
int init();
|
||||||
|
|
||||||
uint8_t colors;
|
uint8_t colors;
|
||||||
|
|||||||
@@ -66,11 +66,11 @@ public:
|
|||||||
int damageInflictedAsCommander;
|
int damageInflictedAsCommander;
|
||||||
int numofcastfromcommandzone;
|
int numofcastfromcommandzone;
|
||||||
int auras;
|
int auras;
|
||||||
bool wasDealtDamage;
|
int wasDealtDamage;
|
||||||
bool combatdamageToOpponent;
|
int combatdamageToOpponent;
|
||||||
bool damageToOpponent;
|
int damageToOpponent;
|
||||||
bool damageToController;
|
int damageToController;
|
||||||
bool damageToCreature;
|
int damageToCreature;
|
||||||
bool isProvoked;
|
bool isProvoked;
|
||||||
MTGCardInstance * ProvokeTarget;
|
MTGCardInstance * ProvokeTarget;
|
||||||
MTGCardInstance * Provoker;
|
MTGCardInstance * Provoker;
|
||||||
|
|||||||
@@ -323,7 +323,8 @@ class Constants
|
|||||||
SHOWCONTROLLERHAND = 196,
|
SHOWCONTROLLERHAND = 196,
|
||||||
HASREPLICATE = 197,
|
HASREPLICATE = 197,
|
||||||
ISPREY = 198,
|
ISPREY = 198,
|
||||||
NB_BASIC_ABILITIES = 199,
|
HASDISTURB = 199,
|
||||||
|
NB_BASIC_ABILITIES = 200,
|
||||||
|
|
||||||
RARITY_S = 'S', //Special Rarity
|
RARITY_S = 'S', //Special Rarity
|
||||||
RARITY_M = 'M', //Mythics
|
RARITY_M = 'M', //Mythics
|
||||||
|
|||||||
@@ -4609,12 +4609,15 @@ int AATurnSide::resolve()
|
|||||||
if(_target->controller()->isAI() && _target->isFlipped) _target->isFlipped = false; // If it's AI calling back we just have to reset isFLipped flag and then return.
|
if(_target->controller()->isAI() && _target->isFlipped) _target->isFlipped = false; // If it's AI calling back we just have to reset isFLipped flag and then return.
|
||||||
if(!_target->isFlipped && _SideName == "") return 0; // No need to turn front if card has not been flipped before.
|
if(!_target->isFlipped && _SideName == "") return 0; // No need to turn front if card has not been flipped before.
|
||||||
if(!_target->isFlipped){
|
if(!_target->isFlipped){
|
||||||
|
if(_SideName == "backside" && _target->backSide != "")
|
||||||
|
_SideName = _target->backSide; // Added to allow to turn a card on its backside.
|
||||||
fcard = MTGCollection()->getCardByName(_SideName);
|
fcard = MTGCollection()->getCardByName(_SideName);
|
||||||
if(!fcard) return 0;
|
if(!fcard) return 0;
|
||||||
sideCard = NEW MTGCardInstance(fcard, _target->controller()->game);
|
sideCard = NEW MTGCardInstance(fcard, _target->controller()->game);
|
||||||
_target->nameOrig = _target->name;
|
_target->nameOrig = _target->name;
|
||||||
_target->name = sideCard->name;
|
_target->name = sideCard->name;
|
||||||
_target->setName(sideCard->name);
|
_target->setName(sideCard->name);
|
||||||
|
_target->backSide = sideCard->backSide;
|
||||||
if(!sideCard) return 0;
|
if(!sideCard) return 0;
|
||||||
if(sideCard->getManaCost()){
|
if(sideCard->getManaCost()){
|
||||||
if(_target->getManaCost()->getAlternative()){
|
if(_target->getManaCost()->getAlternative()){
|
||||||
@@ -4625,6 +4628,10 @@ int AATurnSide::resolve()
|
|||||||
sideCard->getManaCost()->setMorph(NEW ManaCost());
|
sideCard->getManaCost()->setMorph(NEW ManaCost());
|
||||||
sideCard->getManaCost()->getMorph()->copy(_target->getManaCost()->getMorph()); // Keep orignal morph cost to cast the original card with morph.
|
sideCard->getManaCost()->getMorph()->copy(_target->getManaCost()->getMorph()); // Keep orignal morph cost to cast the original card with morph.
|
||||||
}
|
}
|
||||||
|
if(_target->getManaCost()->getRetrace()){
|
||||||
|
sideCard->getManaCost()->setRetrace(NEW ManaCost());
|
||||||
|
sideCard->getManaCost()->getRetrace()->copy(_target->getManaCost()->getRetrace()); // Keep orignal retrace cost to cast the original card with retrace (e.g. cards with disturb cost).
|
||||||
|
}
|
||||||
_target->getManaCost()->copy(sideCard->getManaCost()); // Show the other side cost mana symbols.
|
_target->getManaCost()->copy(sideCard->getManaCost()); // Show the other side cost mana symbols.
|
||||||
if(_target->numofcastfromcommandzone > 0){ //In case you turn side of a previuosly casted commander
|
if(_target->numofcastfromcommandzone > 0){ //In case you turn side of a previuosly casted commander
|
||||||
_target->getManaCost()->add(Constants::MTG_COLOR_ARTIFACT,2*_target->numofcastfromcommandzone);
|
_target->getManaCost()->add(Constants::MTG_COLOR_ARTIFACT,2*_target->numofcastfromcommandzone);
|
||||||
@@ -4733,9 +4740,11 @@ int AAFlip::resolve()
|
|||||||
if(flipStats.size())
|
if(flipStats.size())
|
||||||
{
|
{
|
||||||
if(flipStats == "myorigname" && _target->nameOrig != "")
|
if(flipStats == "myorigname" && _target->nameOrig != "")
|
||||||
flipStats = _target->nameOrig; // Added to undo the copy effect at end of turn for a generic card (es. Shapeshifter transformations).
|
flipStats = _target->nameOrig; // Added to undo the copy effect at end of turn for a generic card (e.g. Shapeshifter transformations).
|
||||||
else if(flipStats == "chosenname" && _target->chooseaname != "")
|
else if(flipStats == "chosenname" && _target->chooseaname != "")
|
||||||
flipStats = _target->chooseaname; // Added to allow the transformation of a card in a choosen name.
|
flipStats = _target->chooseaname; // Added to allow the transformation of a card in a choosen name.
|
||||||
|
else if(flipStats == "backside" && _target->backSide != "")
|
||||||
|
flipStats = _target->backSide; // Added to allow the transformation of a card in its backside (e.g. Werewolves transformations).
|
||||||
MTGCard * fcard = MTGCollection()->getCardByName(flipStats);
|
MTGCard * fcard = MTGCollection()->getCardByName(flipStats);
|
||||||
if(!fcard) return 0;
|
if(!fcard) return 0;
|
||||||
MTGCardInstance * myFlip = NEW MTGCardInstance(fcard, _target->controller()->game);
|
MTGCardInstance * myFlip = NEW MTGCardInstance(fcard, _target->controller()->game);
|
||||||
@@ -4747,6 +4756,7 @@ int AAFlip::resolve()
|
|||||||
_target->nameOrig = nameOrig; // Saves the orignal card name before to flip the card.
|
_target->nameOrig = nameOrig; // Saves the orignal card name before to flip the card.
|
||||||
_target->name = myFlip->name;
|
_target->name = myFlip->name;
|
||||||
_target->setName(myFlip->name);
|
_target->setName(myFlip->name);
|
||||||
|
_target->backSide = myFlip->backSide;
|
||||||
if(!isflipcard)//transform card
|
if(!isflipcard)//transform card
|
||||||
{
|
{
|
||||||
_target->getManaCost()->resetCosts();
|
_target->getManaCost()->resetCosts();
|
||||||
@@ -4812,7 +4822,13 @@ int AAFlip::resolve()
|
|||||||
{
|
{
|
||||||
if (a->oneShot)
|
if (a->oneShot)
|
||||||
{
|
{
|
||||||
a->resolve();
|
if(_target->hasType(Subtypes::TYPE_PLANESWALKER)){ // Fix to don't let planeswalker die on flip (since the counter ability is not resolving correctly during flip).
|
||||||
|
AACounter * tmp = dynamic_cast<AACounter *>(a);
|
||||||
|
if(tmp && tmp->counterstring.find("loyalty") != string::npos){
|
||||||
|
for (int j = 0; j < tmp->nb; j++)
|
||||||
|
_target->counters->addCounter("loyalty", 0, 0, true);
|
||||||
|
} else a->resolve();
|
||||||
|
} else a->resolve();
|
||||||
SAFE_DELETE(a);
|
SAFE_DELETE(a);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -4820,9 +4836,7 @@ int AAFlip::resolve()
|
|||||||
a->addToGame();
|
a->addToGame();
|
||||||
MayAbility * dontAdd = dynamic_cast<MayAbility*>(a);
|
MayAbility * dontAdd = dynamic_cast<MayAbility*>(a);
|
||||||
if(!dontAdd)
|
if(!dontAdd)
|
||||||
{
|
|
||||||
_target->cardsAbilities.push_back(a);
|
_target->cardsAbilities.push_back(a);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ CardDescriptor::CardDescriptor()
|
|||||||
zposition = -1;
|
zposition = -1;
|
||||||
hasKickerCost = 0;
|
hasKickerCost = 0;
|
||||||
hasFlashbackCost = 0;
|
hasFlashbackCost = 0;
|
||||||
|
hasBackSide = 0;
|
||||||
hasXCost = 0;
|
hasXCost = 0;
|
||||||
compareName ="";
|
compareName ="";
|
||||||
nameComparisonMode = COMPARISON_NONE;
|
nameComparisonMode = COMPARISON_NONE;
|
||||||
@@ -72,6 +73,11 @@ void CardDescriptor::unsecureSetHasFlashbackCost(int k)
|
|||||||
hasFlashbackCost = k;
|
hasFlashbackCost = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CardDescriptor::unsecureSetHasBackSide(int k)
|
||||||
|
{
|
||||||
|
hasBackSide = k;
|
||||||
|
}
|
||||||
|
|
||||||
void CardDescriptor::unsecureSetTapped(int i)
|
void CardDescriptor::unsecureSetTapped(int i)
|
||||||
{
|
{
|
||||||
tapped = i;
|
tapped = i;
|
||||||
@@ -277,6 +283,11 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card)
|
|||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((hasBackSide == -1 && card->backSide != "") || (hasBackSide == 1 && card->backSide == ""))
|
||||||
|
{
|
||||||
|
match = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if ((hasXCost == -1 && card->getManaCost()->hasX()) || (hasXCost == 1 && !card->getManaCost()->hasX()))
|
if ((hasXCost == -1 && card->getManaCost()->hasX()) || (hasXCost == 1 && !card->getManaCost()->hasX()))
|
||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
@@ -400,13 +411,13 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card)
|
|||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
if ((CDdamaged == -1 && card->wasDealtDamage) || (CDdamaged == 1 && !card->wasDealtDamage))
|
if ((CDdamaged == -1 && card->wasDealtDamage > 0) || (CDdamaged == 1 && card->wasDealtDamage == 0))
|
||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((CDdamager == -1 && (card->damageToOpponent || card->damageToController || card->damageToCreature))
|
if ((CDdamager == -1 && (card->damageToOpponent > 0 || card->damageToController > 0 || card->damageToCreature > 0))
|
||||||
|| (CDdamager == 1 && !(card->damageToOpponent || card->damageToController || card->damageToCreature)))
|
|| (CDdamager == 1 && !(card->damageToOpponent > 0 || card->damageToController > 0 || card->damageToCreature > 0)))
|
||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
@@ -414,17 +425,17 @@ MTGCardInstance * CardDescriptor::match(MTGCardInstance * card)
|
|||||||
if(CDopponentDamaged == -1 || CDopponentDamaged == 1 || CDcontrollerDamaged == -1 || CDcontrollerDamaged == 1)
|
if(CDopponentDamaged == -1 || CDopponentDamaged == 1 || CDcontrollerDamaged == -1 || CDcontrollerDamaged == 1)
|
||||||
{
|
{
|
||||||
Player * p = card->controller();
|
Player * p = card->controller();
|
||||||
if ((CDopponentDamaged == -1 && card->damageToOpponent && card->controller() == p)
|
if ((CDopponentDamaged == -1 && card->damageToOpponent > 0 && card->controller() == p)
|
||||||
|| (CDopponentDamaged == 1 && !card->damageToOpponent && card->controller() == p)
|
|| (CDopponentDamaged == 1 && card->damageToOpponent == 0 && card->controller() == p)
|
||||||
|| (CDopponentDamaged == -1 && card->damageToController && card->controller() == p->opponent())
|
|| (CDopponentDamaged == -1 && card->damageToController > 0 && card->controller() == p->opponent())
|
||||||
|| (CDopponentDamaged == 1 && !card->damageToController && card->controller() == p->opponent()))
|
|| (CDopponentDamaged == 1 && card->damageToController == 0 && card->controller() == p->opponent()))
|
||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
if ((CDcontrollerDamaged == -1 && card->damageToController && card->controller() == p)
|
if ((CDcontrollerDamaged == -1 && card->damageToController > 0 && card->controller() == p)
|
||||||
|| (CDcontrollerDamaged == 1 && !card->damageToController && card->controller() == p)
|
|| (CDcontrollerDamaged == 1 && card->damageToController == 0 && card->controller() == p)
|
||||||
|| (CDcontrollerDamaged == -1 && card->damageToOpponent && card->controller() == p->opponent())
|
|| (CDcontrollerDamaged == -1 && card->damageToOpponent > 0 && card->controller() == p->opponent())
|
||||||
|| (CDcontrollerDamaged == 1 && !card->damageToOpponent && card->controller() == p->opponent()))
|
|| (CDcontrollerDamaged == 1 && card->damageToOpponent == 0 && card->controller() == p->opponent()))
|
||||||
{
|
{
|
||||||
match = NULL;
|
match = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -444,11 +444,11 @@ void CardGui::Render()
|
|||||||
renderer->DrawRect(actX - (13 * actZ), actY + ymody + 4 * actZ, 25.5f * actZ, 14 * actZ,
|
renderer->DrawRect(actX - (13 * actZ), actY + ymody + 4 * actZ, 25.5f * actZ, 14 * actZ,
|
||||||
ARGB(((static_cast<unsigned char>(actA))),20,20,20));
|
ARGB(((static_cast<unsigned char>(actA))),20,20,20));
|
||||||
//damaged or buffed or powered down
|
//damaged or buffed or powered down
|
||||||
if(card->wasDealtDamage && card->life <= 2)
|
if(card->wasDealtDamage > 0 && card->life <= 2)
|
||||||
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,0,0));//red critical and damaged
|
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,0,0));//red critical and damaged
|
||||||
else if(!card->wasDealtDamage && card->pbonus < 0)
|
else if(card->wasDealtDamage == 0 && card->pbonus < 0)
|
||||||
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),216,191,216));//thistle powered down
|
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),216,191,216));//thistle powered down
|
||||||
else if(!card->wasDealtDamage && card->pbonus >= 3)
|
else if(card->wasDealtDamage == 0 && card->pbonus >= 3)
|
||||||
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,255,0));//yellow buff
|
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),255,255,0));//yellow buff
|
||||||
else if(card->hasType("legendary") && card->hasType("eldrazi") && !card->has(Constants::CHANGELING))
|
else if(card->hasType("legendary") && card->hasType("eldrazi") && !card->has(Constants::CHANGELING))
|
||||||
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),238,130,238));//violet legendary eldrazi
|
mFont->SetColor(ARGB(static_cast<unsigned char>(actA),238,130,238));//violet legendary eldrazi
|
||||||
@@ -1532,6 +1532,18 @@ bool CardGui::FilterCard(MTGCard * _card,string filter)
|
|||||||
cd.unsecureSetHasFlashbackCost(1);
|
cd.unsecureSetHasFlashbackCost(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Has backside
|
||||||
|
else if (attribute.find("hasbackside") != string::npos)
|
||||||
|
{
|
||||||
|
if (minus)
|
||||||
|
{
|
||||||
|
cd.unsecureSetHasBackSide(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd.unsecureSetHasBackSide(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
//Token
|
//Token
|
||||||
else if (attribute.find("token") != string::npos)
|
else if (attribute.find("token") != string::npos)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -255,18 +255,18 @@ int Damage::resolve()
|
|||||||
target->nonCombatDamage += damage;
|
target->nonCombatDamage += damage;
|
||||||
}
|
}
|
||||||
if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (((MTGCardInstance*)target)->basicAbilities[Constants::UNDAMAGEABLE] == 0)){
|
if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (((MTGCardInstance*)target)->basicAbilities[Constants::UNDAMAGEABLE] == 0)){
|
||||||
((MTGCardInstance*)target)->wasDealtDamage = true;
|
((MTGCardInstance*)target)->wasDealtDamage += damage;
|
||||||
((MTGCardInstance*)source)->damageToCreature = true;
|
((MTGCardInstance*)source)->damageToCreature += damage;
|
||||||
}
|
}
|
||||||
if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)
|
if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)
|
||||||
{
|
{
|
||||||
if(target == source->controller())
|
if(target == source->controller())
|
||||||
{
|
{
|
||||||
((MTGCardInstance*)source)->damageToController = true;
|
((MTGCardInstance*)source)->damageToController += damage;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
((MTGCardInstance*)source)->damageToOpponent = true;
|
((MTGCardInstance*)source)->damageToOpponent += damage;
|
||||||
if(((MTGCardInstance*)source)->basicAbilities[Constants::ISCOMMANDER])
|
if(((MTGCardInstance*)source)->basicAbilities[Constants::ISCOMMANDER])
|
||||||
((MTGCardInstance*)source)->damageInflictedAsCommander += damage;
|
((MTGCardInstance*)source)->damageInflictedAsCommander += damage;
|
||||||
}
|
}
|
||||||
@@ -274,7 +274,7 @@ int Damage::resolve()
|
|||||||
if ( typeOfDamage == 1 && target == source->controller()->opponent() )//add vector prowledtypes.
|
if ( typeOfDamage == 1 && target == source->controller()->opponent() )//add vector prowledtypes.
|
||||||
{
|
{
|
||||||
source->controller()->dealsdamagebycombat = 1; // for restriction check
|
source->controller()->dealsdamagebycombat = 1; // for restriction check
|
||||||
((MTGCardInstance*)source)->combatdamageToOpponent = true; //check
|
((MTGCardInstance*)source)->combatdamageToOpponent += damage; //check
|
||||||
vector<string> values = MTGAllCards::getCreatureValuesById();//getting a weird crash here. rarely.
|
vector<string> values = MTGAllCards::getCreatureValuesById();//getting a weird crash here. rarely.
|
||||||
for (size_t i = 0; i < values.size(); ++i)
|
for (size_t i = 0; i < values.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1026,12 +1026,12 @@ void GameObserver::gameStateBasedEffects()
|
|||||||
c->flanked -= 1;
|
c->flanked -= 1;
|
||||||
}
|
}
|
||||||
c->fresh = 0;
|
c->fresh = 0;
|
||||||
if(c->wasDealtDamage && c->isInPlay(this))
|
if(c->wasDealtDamage > 0 && c->isInPlay(this))
|
||||||
c->wasDealtDamage = false;
|
c->wasDealtDamage = 0;
|
||||||
c->damageToController = false;
|
c->damageToController = 0;
|
||||||
c->damageToOpponent = false;
|
c->damageToOpponent = 0;
|
||||||
c->combatdamageToOpponent = false;
|
c->combatdamageToOpponent = 0;
|
||||||
c->damageToCreature = false;
|
c->damageToCreature = 0;
|
||||||
c->isAttacking = NULL;
|
c->isAttacking = NULL;
|
||||||
c->isProvoked = false;
|
c->isProvoked = false;
|
||||||
c->ProvokeTarget = NULL;
|
c->ProvokeTarget = NULL;
|
||||||
|
|||||||
@@ -693,7 +693,7 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
|||||||
check = restriction[i].find("didcombatdamagetofoe");
|
check = restriction[i].find("didcombatdamagetofoe");
|
||||||
if(check != string::npos)
|
if(check != string::npos)
|
||||||
{
|
{
|
||||||
if(!card->combatdamageToOpponent)
|
if(card->combatdamageToOpponent == 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -825,6 +825,28 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
|||||||
if(!found)
|
if(!found)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
check = restriction[i].find("coven"); //Player controls three or more creatures with different powers
|
||||||
|
if(check != string::npos)
|
||||||
|
{
|
||||||
|
if(player != observer->currentPlayer)
|
||||||
|
return 0;
|
||||||
|
bool found = false;
|
||||||
|
for(unsigned int i = 0; i < observer->currentPlayer->game->inPlay->cards.size() && !found; i++){
|
||||||
|
if(observer->currentPlayer->game->inPlay->cards[i]->hasType(Subtypes::TYPE_CREATURE)){
|
||||||
|
for(unsigned int j = i+1; j < observer->currentPlayer->game->inPlay->cards.size() && !found; j++){
|
||||||
|
if(observer->currentPlayer->game->inPlay->cards[j]->hasType(Subtypes::TYPE_CREATURE) && observer->currentPlayer->game->inPlay->cards[j]->power != observer->currentPlayer->game->inPlay->cards[i]->power){
|
||||||
|
for(unsigned int k = j+1; k < observer->currentPlayer->game->inPlay->cards.size() && !found; k++){
|
||||||
|
if(observer->currentPlayer->game->inPlay->cards[k]->hasType(Subtypes::TYPE_CREATURE) && (observer->currentPlayer->game->inPlay->cards[k]->power != observer->currentPlayer->game->inPlay->cards[i]->power && observer->currentPlayer->game->inPlay->cards[k]->power != observer->currentPlayer->game->inPlay->cards[j]->power)){
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
check = restriction[i].find("can play");
|
check = restriction[i].find("can play");
|
||||||
if(check != string::npos)
|
if(check != string::npos)
|
||||||
{
|
{
|
||||||
@@ -6531,15 +6553,17 @@ int ActivatedAbility::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
|
|||||||
return 0;
|
return 0;
|
||||||
}*/
|
}*/
|
||||||
// Improved the check to avoid the multiple triggers in case of abilities gained from other cards (e.g. Kasmina, Enigma Sage)
|
// Improved the check to avoid the multiple triggers in case of abilities gained from other cards (e.g. Kasmina, Enigma Sage)
|
||||||
for(unsigned int k = 0;k < card->getObserver()->mLayers->actionLayer()->mObjects.size();++k)
|
bool turnSide = false;
|
||||||
|
for(unsigned int k = 0; k < card->getObserver()->mLayers->actionLayer()->mObjects.size(); ++k)
|
||||||
{
|
{
|
||||||
ActivatedAbility * check = dynamic_cast<ActivatedAbility*>(card->getObserver()->mLayers->actionLayer()->mObjects[k]);
|
ActivatedAbility * check = dynamic_cast<ActivatedAbility*>(card->getObserver()->mLayers->actionLayer()->mObjects[k]);
|
||||||
if(check && check->source == card && check->counters)
|
turnSide = card->isFlipped && !card->isInPlay(card->getObserver());
|
||||||
|
if(!turnSide && check && check->source == card && check->counters)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (player != game->currentPlayer)
|
if (player != game->currentPlayer)
|
||||||
return 0;
|
return 0;
|
||||||
if (cPhase != MTG_PHASE_FIRSTMAIN && cPhase != MTG_PHASE_SECONDMAIN)
|
if (!turnSide && (cPhase != MTG_PHASE_FIRSTMAIN && cPhase != MTG_PHASE_SECONDMAIN))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (source->has(Constants::NOACTIVATED) || (source->mutation && source->parentCards.size() > 0)) // Mutated Over/Under card doesn't have to react to click anymore
|
if (source->has(Constants::NOACTIVATED) || (source->mutation && source->parentCards.size() > 0)) // Mutated Over/Under card doesn't have to react to click anymore
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to
|
|||||||
myconvertedcost = getManaCost()->getConvertedCost();
|
myconvertedcost = getManaCost()->getConvertedCost();
|
||||||
revealedLast = NULL;
|
revealedLast = NULL;
|
||||||
MadnessPlay = false;
|
MadnessPlay = false;
|
||||||
|
backSide = card->data->backSide;
|
||||||
}
|
}
|
||||||
|
|
||||||
MTGCardInstance * MTGCardInstance::createSnapShot()
|
MTGCardInstance * MTGCardInstance::createSnapShot()
|
||||||
@@ -140,7 +141,7 @@ void MTGCardInstance::copy(MTGCardInstance * card, bool nolegend)
|
|||||||
|
|
||||||
setText(data->text); //The text is retrieved from the data anyways
|
setText(data->text); //The text is retrieved from the data anyways
|
||||||
setName(data->name);
|
setName(data->name);
|
||||||
|
backSide = data->backSide;
|
||||||
power = data->power;//layer 7a
|
power = data->power;//layer 7a
|
||||||
toughness = data->toughness;//layer 7a
|
toughness = data->toughness;//layer 7a
|
||||||
power += pbonus;//layer 7b
|
power += pbonus;//layer 7b
|
||||||
@@ -242,14 +243,14 @@ void MTGCardInstance::initMTGCI()
|
|||||||
damageInflictedAsCommander = 0;
|
damageInflictedAsCommander = 0;
|
||||||
numofcastfromcommandzone = 0;
|
numofcastfromcommandzone = 0;
|
||||||
auras = 0;
|
auras = 0;
|
||||||
combatdamageToOpponent = false;
|
combatdamageToOpponent = 0;
|
||||||
damageToOpponent = false;
|
damageToOpponent = 0;
|
||||||
damageToController = false;
|
damageToController = 0;
|
||||||
damageToCreature = false;
|
damageToCreature = 0;
|
||||||
isProvoked = false;
|
isProvoked = false;
|
||||||
ProvokeTarget = NULL;
|
ProvokeTarget = NULL;
|
||||||
Provoker = NULL;
|
Provoker = NULL;
|
||||||
wasDealtDamage = false;
|
wasDealtDamage = 0;
|
||||||
isDualWielding = false;
|
isDualWielding = false;
|
||||||
suspended = false;
|
suspended = false;
|
||||||
isBestowed = false;
|
isBestowed = false;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ int MTGAllCards::processConfLine(string &s, MTGCard *card, CardPrimitive * primi
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b': //buyback/Bestow
|
case 'b': //buyback/Bestow/backside
|
||||||
if (!primitive) primitive = NEW CardPrimitive();
|
if (!primitive) primitive = NEW CardPrimitive();
|
||||||
if (key[1] == 'e' && key[2] == 's')
|
if (key[1] == 'e' && key[2] == 's')
|
||||||
{ //bestow
|
{ //bestow
|
||||||
@@ -125,6 +125,12 @@ int MTGAllCards::processConfLine(string &s, MTGCard *card, CardPrimitive * primi
|
|||||||
cost->setBestow(ManaCost::parseManaCost(value));
|
cost->setBestow(ManaCost::parseManaCost(value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
if (key[1] == 'a' && key[2] == 'c')
|
||||||
|
{ //backside
|
||||||
|
if (!primitive) primitive = NEW CardPrimitive();
|
||||||
|
primitive->backSide = val;
|
||||||
|
}
|
||||||
else//buyback
|
else//buyback
|
||||||
if (ManaCost * cost = primitive->getManaCost())
|
if (ManaCost * cost = primitive->getManaCost())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -228,8 +228,9 @@ const char* Constants::MTGBasicAbilities[] = {
|
|||||||
"wascommander", //It was the current commander (e.g. after it flipped or morphed)
|
"wascommander", //It was the current commander (e.g. after it flipped or morphed)
|
||||||
"showopponenthand", //opponent plays with his hand revealed.
|
"showopponenthand", //opponent plays with his hand revealed.
|
||||||
"showcontrollerhand", //controller plays with his hand revealed.
|
"showcontrollerhand", //controller plays with his hand revealed.
|
||||||
"hasreplicate", //Kicker cost is a replicate cost (eg. "Vacuumelt")
|
"hasreplicate", //Kicker cost is a replicate cost (e.g. "Vacuumelt")
|
||||||
"isprey" //Creature has been haunted by some other card.
|
"isprey", //Creature has been haunted by some other card.
|
||||||
|
"hasdisturb" //Retrace cost is a disturb cost (e.g. "Beloved Beggar")
|
||||||
};
|
};
|
||||||
|
|
||||||
map<string,int> Constants::MTGBasicAbilitiesMap;
|
map<string,int> Constants::MTGBasicAbilitiesMap;
|
||||||
|
|||||||
@@ -583,6 +583,18 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta
|
|||||||
cd->unsecureSetHasFlashbackCost(1);
|
cd->unsecureSetHasFlashbackCost(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Has backside
|
||||||
|
else if (attribute.find("hasbackside") != string::npos)
|
||||||
|
{
|
||||||
|
if (minus)
|
||||||
|
{
|
||||||
|
cd->unsecureSetHasBackSide(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd->unsecureSetHasBackSide(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
//Token
|
//Token
|
||||||
else if (attribute.find("token") != string::npos)
|
else if (attribute.find("token") != string::npos)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -669,7 +669,7 @@ ThisDamaged::ThisDamaged(int wasDealtDamage)
|
|||||||
int ThisDamaged::match(MTGCardInstance * card)
|
int ThisDamaged::match(MTGCardInstance * card)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if(card->wasDealtDamage)
|
if(card->wasDealtDamage > 0)
|
||||||
result = 1;
|
result = 1;
|
||||||
return matchValue(result);
|
return matchValue(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1315,9 +1315,14 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
|||||||
{
|
{
|
||||||
intValue = (s == "plastshlturn")?card->controller()->lastShuffleTurn:card->controller()->opponent()->lastShuffleTurn;
|
intValue = (s == "plastshlturn")?card->controller()->lastShuffleTurn:card->controller()->opponent()->lastShuffleTurn;
|
||||||
}
|
}
|
||||||
else if (s == "hasprey")
|
else if (s == "hasprey" || s == "dualfaced" || s == "totaldmg")
|
||||||
{
|
{
|
||||||
intValue = (card->hauntedCard)?1:0;
|
if (s == "hasprey")
|
||||||
|
intValue = (card->hauntedCard)?1:0;
|
||||||
|
else if (s == "dualfaced")
|
||||||
|
intValue = (card->backSide != "")?1:0;
|
||||||
|
else if (s == "totaldmg")
|
||||||
|
intValue = (card->damageToController + card->damageToCreature + card->damageToOpponent);
|
||||||
}
|
}
|
||||||
else if(!intValue)//found nothing, try parsing a atoi
|
else if(!intValue)//found nothing, try parsing a atoi
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user