Implemented "Battle" type from MOM set (they are like planeswalkers), added some new primitives from MOM set, fixed some primitives targeting any target.
This commit is contained in:
@@ -4684,6 +4684,17 @@ power=2
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Attentive Skywarden
|
||||
abilities=flying
|
||||
auto=combatdamaged(player) from(this):may name(Transform incubator) target(incubator|mybattlefield) transforms((,newability[name(Becomes creature) becomes(Creature^Phyrexian) forever])) forever
|
||||
text=Flying -- Whenever Attentive Skywarden deals combat damage to a player or battle, transform up to one target Incubator token you control.
|
||||
mana={2}{W}
|
||||
type=Creature
|
||||
subtype=Phyrexian Kor
|
||||
power=2
|
||||
toughness=2
|
||||
[/card]
|
||||
[card]
|
||||
name=Atzal, Cave of Eternity
|
||||
auto={T}:Add{W}
|
||||
auto={T}:Add{U}
|
||||
@@ -6948,6 +6959,13 @@ power=4
|
||||
toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Belenon War Anthem
|
||||
auto=lord(creature|myBattlefield) 1/1
|
||||
text=Creatures you control get +1/+1.
|
||||
color=white
|
||||
type=Enchantment
|
||||
[/card]
|
||||
[card]
|
||||
name=Belfry Spirit
|
||||
abilities=flying
|
||||
auto=name(Create Bats) token(Bat,Creature Bat,1/1,black,flying)*2
|
||||
@@ -8020,7 +8038,7 @@ name=Blazing Torch
|
||||
auto={1}:equip
|
||||
auto=teach(creature) cantbeblockedby(creature[Zombie])
|
||||
auto=teach(creature) cantbeblockedby(creature[Vampire])
|
||||
auto=teach(creature) {T}{S(Blazing Torch)}:damage:2 target(player,creature)
|
||||
auto=teach(creature) {T}{S(Blazing Torch)}:damage:2 target(player,creature,planeswalker)
|
||||
text=Equipped creature can't be blocked by Vampires or Zombies. -- Equipped creature has "{T}, Sacrifice Blazing Torch: Blazing Torch deals 2 damage to target creature or player." -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.)
|
||||
mana={1}
|
||||
type=Artifact
|
||||
@@ -18858,6 +18876,16 @@ mana={2}{W}
|
||||
type=Sorcery
|
||||
[/card]
|
||||
[card]
|
||||
name=Cut Short
|
||||
other={convoke} name(Convoke)
|
||||
auto=if compare(restriction{opponentturnonly}~morethan~0) then if type(planeswalker|opponentbattlefield)~morethan~0 then choice name(Destroy activated planeswalker) name(Destroy activated planeswalker) name(Destroy activated planeswalker) target(planeswalker|opponentbattlefield) destroy
|
||||
auto=if compare(restriction{myturnonly}~morethan~0) then if type(planeswalker|mybattlefield)~morethan~0 then choice name(Destroy activated planeswalker) name(Destroy activated planeswalker) name(Destroy activated planeswalker) target(planeswalker|mybattlefield) destroy
|
||||
auto=if type(creature[tapped]|battlefield)~morethan~0 then choice name(Destroy tapped creature) name(Destroy tapped creature) target(creature[tapped]|battlefield) destroy
|
||||
text=Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.) -- Destroy target planeswalker that was activated this turn or tapped creature.
|
||||
mana={2}{W}
|
||||
type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Cutthroat Centurion
|
||||
auto={S(other artifact,creature|mybattlefield)}:2/2 ueot limit:1
|
||||
text=Sacrifice another artifact or creature: Cutthroat Centurion gets +2/+2 until end of turn. Activate only once each turn.
|
||||
@@ -25378,6 +25406,22 @@ power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Elesh Norn
|
||||
abilities=vigilance
|
||||
backside=The Argent Etchings
|
||||
restriction=compare(isflipped)~equalto~0
|
||||
anyzone={0}:doubleside(backside)
|
||||
auto=@damaged(*|mybattlefield) from(*|opponentzones):name(pay or lifeloss) ability$!name(pay or lifeloss) pay[[{1}]] name(pay 1 mana) donothing?life:-2!$ opponent
|
||||
auto=@damageof(player) from(*|opponentzones):name(pay or lifeloss) ability$!name(pay or lifeloss) pay[[{1}]] name(pay 1 mana) donothing?life:-2!$ opponent
|
||||
auto={2}{W}{S(other creature|mybattlefield)}{S(other creature|mybattlefield)}{S(other creature|mybattlefield)}:name(Exile and transform) moveto(myexile) and!( flip(backside) forcetype(Enchantment Saga) )! asSorcery
|
||||
text=Vigilance -- Whenever a source an opponent controls deals damage to you or a permanent you control, that source's controller loses 2 life unless they pay {1}. -- {2}{W}, Sacrifice three other creatures: Exile Elesh Norn, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.
|
||||
mana={2}{W}{W}
|
||||
type=Legendary Creature
|
||||
subtype=Phyrexian Praetor
|
||||
power=3
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Elfhame Druid
|
||||
auto={T}:add{G}
|
||||
auto=this(variable{type:*[haskicker]:myrestrictedcastingzone}>0) {T}:add{G}{G}
|
||||
@@ -26240,6 +26284,16 @@ power=3
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Enduring Bondwarden
|
||||
auto=name(Put counter on creature) target(creature|battlefield) transforms((,newability[counter(1/1)],newability[_DIES_this(counter{1/1}>=1) name(Move 1/1 counters) target(creature|myBattlefield) counter(1/1.hasnct11)])) forever
|
||||
text=Backup 1 (When this creature enters the battlefield, put a +1/+1 counter on target creature. If that's another creature, it gains the following ability until end of turn.) -- When this creature dies, put its counters on target creature you control.
|
||||
mana={W}
|
||||
type=Creature
|
||||
subtype=Human Scout
|
||||
power=0
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Enduring Renewal
|
||||
auto=replacedraw if type(creature[zpos=1]|mylibrary)~morethan~0 then moveto(ownergraveyard) all(*[zpos=1]|mylibrary) else draw:1 controller
|
||||
auto=@movedTo(creature|mygraveyard) from(battlefield):all(trigger[to]) moveTo(myhand)
|
||||
@@ -37411,6 +37465,25 @@ power=1
|
||||
toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Guildpact Paragon
|
||||
aicode=activate transforms((,newability[if type(*[multicolor&zpos<=6]|mylibrary)~morethan~0 then target(*[multicolor&zpos<=6]|mylibrary) moveTo(myHand) and!( all(other *[zpos<=6]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! else all(*[zpos<=6]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! ])) oneshot
|
||||
auto=@movedTo(*[black&red&-green&-blue&-white]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[black&green&-red&-blue&-white]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[black&white&-green&-blue&-red]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[black&blue&-green&-red&-white]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[blue&red&-green&-black&-white]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[blue&green&-black&-red&-white]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[blue&white&-green&-red&-black]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[white&red&-green&-blue&-black]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[white&green&-red&-blue&-black]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
auto=@movedTo(*[green&red&-white&-blue&-black]|mystack):name(look top 6 cards) reveal:6 optionone name(Get multicolored card) target(<upto:1>*[multicolor]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend revealend
|
||||
text=Whenever you cast a spell that's exactly two colors, look at the top six cards of your library. You may reveal a card that's exactly two colors from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
|
||||
type=Artifact Creature
|
||||
subtype=Construct
|
||||
power=5
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Guildsworn Prowler
|
||||
abilities=deathtouch
|
||||
auto=_DIES_may name(Draw a card) draw:1 controller
|
||||
@@ -42612,6 +42685,16 @@ type=Enchantment
|
||||
subtype=Aura
|
||||
[/card]
|
||||
[card]
|
||||
name=Infected Defector
|
||||
auto=_DIES_name(Incubate 3) name(Incubate 3) token(Incubator^Artifact^0/0) and!( transforms((,newability[_DIES_:all(Brimaz^ Blight of Oreskos|mybattlefield) name(Phyrexian died) counter(0/0.1.BrimazEffect) notrg],newability[counter(1/1.3)],newability[{2}:name(Becomes creature) becomes(Creature^Phyrexian) forever])) forever )!
|
||||
text=When Infected Defector dies, incubate 3. (Create an Incubator token with three +1/+1 counters on it and "{2}: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.)
|
||||
mana={4}{W}
|
||||
type=Creature
|
||||
subtype=Phyrexian Knight
|
||||
power=4
|
||||
toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Infectious Bite
|
||||
target=creature|mybattlefield
|
||||
auto=transforms((,newability[target(creature|opponentbattlefield) dynamicability<!powerstrike!>])) forever
|
||||
@@ -43640,6 +43723,32 @@ power=4
|
||||
toughness=5
|
||||
[/card]
|
||||
[card]
|
||||
name=Invasion of Belenon
|
||||
backside=Belenon War Anthem
|
||||
restriction=compare(isflipped)~equalto~0
|
||||
anyzone={0}:doubleside(backside)
|
||||
auto=name(Create knight) token(Knight,Creature Knight,2/2,white,blue,vigilance)
|
||||
auto=moveto(opponentbattlefield) and!( counter(0/0,3,Defense) )!
|
||||
auto=@counterremoved(0/0,1,Defense) from(this) restriction{compare(hascntdefense)~equalto~0}:name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Enchantment) )! asSorcery
|
||||
text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Belenon enters the battlefield, create a 2/2 white and blue Knight creature token with vigilance.
|
||||
mana={2}{W}
|
||||
type=Battle
|
||||
subtype=Siege
|
||||
[/card]
|
||||
[card]
|
||||
name=Invasion of Ravnica
|
||||
backside=Guildpact Paragon
|
||||
restriction=compare(isflipped)~equalto~0
|
||||
anyzone={0}:doubleside(backside)
|
||||
auto=name(Exile opponent permanent) target(*[multicolor]|opponentbattlefield) moveto(exile)
|
||||
auto=moveto(opponentbattlefield) and!( counter(0/0,4,Defense) )!
|
||||
auto=@counterremoved(0/0,1,Defense) from(this) restriction{compare(hascntdefense)~equalto~0}:name(Exile and transforms) name(Exile and transforms) moveto(ownerexile) and!( flip(backside) forcetype(Artifact Creature Construct) )! asSorcery
|
||||
text=(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.) -- When Invasion of Ravnica enters the battlefield, exile target nonland permanent an opponent controls that isn't exactly two colors.
|
||||
mana={5}
|
||||
type=Battle
|
||||
subtype=Siege
|
||||
[/card]
|
||||
[card]
|
||||
name=Invasion of the Giants
|
||||
auto=counter(0/0,1,Lore)
|
||||
auto=@each my firstmain:counter(0/0,1,Lore)
|
||||
@@ -47312,8 +47421,8 @@ auto=if type(creature|mygraveyard)~morethan~0 then if type(artifact|battlefield)
|
||||
auto=if type(creature|mygraveyard)~morethan~0 then choice name(Return creature and deals damage) name(Return creature and deals damage) target(creature|mygraveyard) moveto(myhand) && ability$!name(Deals 2 damage) name(Deals 2 damage) damage:2 target(player,creature)!$ controller
|
||||
auto=if type(artifact|battlefield)~morethan~0 then choice name(Destroy artifact and opponent discards) name(Destroy artifact and opponent discards) target(artifact) destroy && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ opponent
|
||||
auto=if type(artifact|battlefield)~morethan~0 then choice name(Destroy artifact and you discard) name(Destroy artifact and you discard) target(artifact) destroy && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ controller
|
||||
auto=choice name(Deals damage and opponent discards) damage:2 target(player,creature) && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ opponent
|
||||
auto=choice name(Deals damage and you discard) damage:2 target(player,creature) && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ controller
|
||||
auto=choice name(Deals damage and opponent discards) damage:2 target(player,creature,planeswalker) && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ opponent
|
||||
auto=choice name(Deals damage and you discard) damage:2 target(player,creature,planeswalker) && ability$!name(Discard a card) name(Discard a card) notatarget(*|myhand) reject!$ controller
|
||||
auto=if type(artifact|battlefield)~morethan~0 then choice name(Destroy artifact and deals damage) name(Destroy artifact and deals damage) target(artifact) destroy && ability$!name(Deals 2 damage) name(Deals 2 damage) damage:2 target(player,creature)!$ controller
|
||||
text=Choose two -- Return target creature card from your graveyard to your hand. -- Target player discards a card. -- Destroy target artifact. -- Kolaghan's Command deals 2 damage to target creature or player.
|
||||
mana={1}{B}{R}
|
||||
@@ -57760,7 +57869,7 @@ toughness=3
|
||||
[/card]
|
||||
[card]
|
||||
name=Ninja's Kunai
|
||||
auto=teach(creature) {1}{T}{S(Ninja's Kunai)}:damage:3 target(player,creature)
|
||||
auto=teach(creature) {1}{T}{S(Ninja's Kunai)}:damage:3 target(player,creature,planeswalker)
|
||||
auto={1}:equip
|
||||
text=Equipped creature has "{1}, {T}, Sacrifice Ninja's Kunai: Ninja's Kunai deals 3 damage to any target." -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.)
|
||||
mana={1}
|
||||
@@ -63050,8 +63159,8 @@ type=Sorcery
|
||||
name=Pollen Remedy
|
||||
abilities=hasotherkicker
|
||||
other={W}{S(land|myBattlefield)} name(Pay kicker)
|
||||
auto=if paid(alternative) then thisforeach(variable{6}) ability$!name(Prevent 1 damage) name(Prevent 1 damage) target(player,creature) prevent:1!$ controller
|
||||
auto=ifnot paid(alternative) then thisforeach(variable{3}) ability$!name(Prevent 1 damage) name(Prevent 1 damage) target(player,creature) prevent:1!$ controller
|
||||
auto=if paid(alternative) then thisforeach(variable{6}) ability$!name(Prevent 1 damage) name(Prevent 1 damage) target(player,creature,planeswalker) prevent:1!$ controller
|
||||
auto=ifnot paid(alternative) then thisforeach(variable{3}) ability$!name(Prevent 1 damage) name(Prevent 1 damage) target(player,creature,planeswalker) prevent:1!$ controller
|
||||
text=Kicker - Sacrifice a land. (You may sacrifice a land in addition to any other costs as you cast this spell.) -- Prevent the next 3 damage that would be dealt this turn to any number of targets, divided as you choose. If this spell was kicked, prevent the next 6 damage this way instead.
|
||||
mana={W}
|
||||
type=Instant
|
||||
@@ -71778,7 +71887,7 @@ toughness=4
|
||||
[/card]
|
||||
[card]
|
||||
name=Sanctum Guardian
|
||||
auto={S}:name(Prevent all damage) target(player,creature) prevent:20
|
||||
auto={S}:name(Prevent all damage) target(player,creature,planeswalker) prevent:20
|
||||
text=Sacrifice Sanctum Guardian: The next time a source of your choice would deal damage to target creature or player this turn, prevent that damage.
|
||||
mana={1}{W}{W}
|
||||
type=Creature
|
||||
@@ -80533,7 +80642,7 @@ toughness=0
|
||||
[card]
|
||||
name=Spitfire Bastion
|
||||
auto={T}:Add{R}
|
||||
auto={2}{R}{T}:damage:3 target(creature,player,planeswalker)
|
||||
auto={2}{R}{T}:damage:3 target(player,creature,planeswalker)
|
||||
text=(Transforms from Vance's Blasting Cannons.) -- {T}: Add {R} to your mana pool. -- {2}{R}, {T}: Spitfire Bastion deals 3 damage to any target.
|
||||
type=Legendary Land
|
||||
[/card]
|
||||
@@ -86176,6 +86285,19 @@ type=Enchantment
|
||||
subtype=Saga
|
||||
[/card]
|
||||
[card]
|
||||
name=The Argent Etchings
|
||||
auto=counter(0/0,1,Lore)
|
||||
auto=@each my firstmain:counter(0/0,1,Lore)
|
||||
auto=name(Incubate 2 five times) token(Incubator^Artifact^0/0)*5 and!( transforms((,newability[_DIES_:all(Brimaz^ Blight of Oreskos|mybattlefield) name(Phyrexian died) counter(0/0.1.BrimazEffect) notrg],newability[counter(1/1.2)],newability[{2}:name(Becomes creature) becomes(Creature^Phyrexian) forever],newability[name(Becomes creature) becomes(Creature^Phyrexian) forever])) forever )!
|
||||
auto=name(Transform all incubators) all(incubator[-creature]|mybattlefield) transforms((,newability[name(Becomes creature) becomes(Creature^Phyrexian) forever])) forever
|
||||
auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.2.Lore}=) name(Creatures gain 1/1) all(creature|mybattlefield) transforms((,newability[1/1],newability[double strike])) ueot
|
||||
auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.3.Lore}) name(Destroy all prermanents) all(other *[-land;-phyrexian;-artifact) destroy
|
||||
auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.3.Lore}) name(Exile and return) moveto(myexile) and!( moveto(mybattlefield) )!
|
||||
text=(As this Saga enters and after your draw step, add a lore counter.) -- I — Incubate 2 five times, then transform all Incubator tokens you control. -- II — Creatures you control get +1/+1 and gain double strike until end of turn. -- III — Destroy all other permanents except for artifacts, lands, and Phyrexians. Exile The Argent Etchings, then return it to the battlefield (front face up).
|
||||
type=Enchantment
|
||||
subtype=Saga
|
||||
[/card]
|
||||
[card]
|
||||
name=The Atropal
|
||||
abilities=deathtouch
|
||||
text=Deathtouch
|
||||
@@ -90519,7 +90641,7 @@ toughness=3
|
||||
[card]
|
||||
name=Tyrant of Kher Ridges
|
||||
abilities=flying
|
||||
auto=damage:4 target(creature,player,planeswalker)
|
||||
auto=damage:4 target(player,creature,planeswalker)
|
||||
auto={R}:1/0 ueot
|
||||
text=Flying -- When Tyrant of Kher Ridges enters the battlefield, it deals 4 damage to any target. -- {R}: Tyrant of Kher Ridges gets +1/+0 until end of turn.
|
||||
mana={4}{R}{R}
|
||||
|
||||
@@ -2427,7 +2427,7 @@ toughness=1
|
||||
[card]
|
||||
name=Alabaster Potion
|
||||
auto=choice life:X target(player)
|
||||
auto=choice prevent:X target(creature,player,planeswalker)
|
||||
auto=choice prevent:X target(player,creature,planeswalker)
|
||||
text=Choose one -- Target player gains X life. -- Prevent the next X damage that would be dealt to any target this turn.
|
||||
mana={X}{W}{W}
|
||||
type=Instant
|
||||
@@ -27892,7 +27892,7 @@ type=Instant
|
||||
[/card]
|
||||
[card]
|
||||
name=Defender en-Vec
|
||||
auto={C(0/0,-1,Fade)}:name(Prevent 2 damage) prevent:2 target(player,creature)
|
||||
auto={C(0/0,-1,Fade)}:name(Prevent 2 damage) prevent:2 target(player,creature,planeswalker)
|
||||
auto=fading:4
|
||||
text=Fading 4 (This creature enters the battlefield with four fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) -- Remove a fade counter from Defender en-Vec: Prevent the next 2 damage that would be dealt to target creature or player this turn.
|
||||
mana={3}{W}
|
||||
@@ -47429,7 +47429,7 @@ toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Goblin Artillery
|
||||
auto={T}:damage:2 target(player,creature) && damage:3 controller
|
||||
auto={T}:damage:2 target(player,creature,planeswalker) && damage:3 controller
|
||||
text={T}: Goblin Artillery deals 2 damage to target creature or player and 3 damage to you.
|
||||
mana={1}{R}{R}
|
||||
type=Creature
|
||||
@@ -95158,7 +95158,7 @@ subtype=Arcane
|
||||
[card]
|
||||
name=Riddle of Lightning
|
||||
aicode=activate transforms((,newability[all(*[zpos=1]|mylibrary) transforms((,newability[name(Damage creature or player) target(player^creature) damage:manacost])) oneshot])) oneshot
|
||||
auto=scry:3 scrycore delayed target(player,creature) damage:revealedmana scrycoreend scryend
|
||||
auto=scry:3 scrycore delayed target(player,creature,planeswalker) damage:revealedmana scrycoreend scryend
|
||||
text=Choose target creature or player. Scry 3, then reveal the top card of your library. Riddle of Lightning deals damage equal to that card's mana value to that creature or player. (To scry 3, look at the top three cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
|
||||
mana={3}{R}{R}
|
||||
type=Instant
|
||||
@@ -104427,7 +104427,7 @@ toughness=1
|
||||
[/card]
|
||||
[card]
|
||||
name=Shock
|
||||
target=creature,player
|
||||
target=player,permanent
|
||||
auto=Damage:2
|
||||
text=Shock deals 2 damage to target creature or player.
|
||||
mana={R}
|
||||
|
||||
@@ -3101,7 +3101,7 @@ subtype=Ugin
|
||||
[card]
|
||||
name=Ugin, the Spirit Dragon
|
||||
auto=counter(0/0,7,loyalty)
|
||||
auto={C(0/0,2,Loyalty)}:name(+2: Deals 3 damage to target creature or player) damage:3 target(player,creature)
|
||||
auto={C(0/0,2,Loyalty)}:name(+2: Deals 3 damage to target creature or player) damage:3 target(player,creature,planeswalker)
|
||||
auto={C(0/0,-0,Loyalty)}:name(-0: Exile each permanent with mana cost 0) moveto(exile) all(*[white;blue;black;red;green;manacost<=0])
|
||||
auto={C(0/0,-1,Loyalty)}:name(-1: Exile each permanent with mana cost 1) moveto(exile) all(*[white;blue;black;red;green;manacost<=1])
|
||||
auto={C(0/0,-2,Loyalty)}:name(-2: Exile each permanent with mana cost 2) moveto(exile) all(*[white;blue;black;red;green;manacost<=2])
|
||||
|
||||
@@ -34,7 +34,8 @@ public:
|
||||
TYPE_EMBLEM = 19,
|
||||
TYPE_CONSPIRACY = 20,
|
||||
TYPE_BACKGROUND = 21,
|
||||
LAST_TYPE = TYPE_BACKGROUND,
|
||||
TYPE_BATTLE = 22,
|
||||
LAST_TYPE = TYPE_BATTLE,
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
@@ -723,7 +723,7 @@ int OrderedAIAction::getEfficiency()
|
||||
|
||||
if (ability->source)
|
||||
{
|
||||
if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER) || ability->source->hasType(Subtypes::TYPE_BATTLE))
|
||||
efficiency += 40;
|
||||
else if(ability->source->hasType(Subtypes::TYPE_LAND))
|
||||
{ // probably a shockland, don't pay life if hand is empty
|
||||
@@ -2814,6 +2814,9 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
|
||||
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
|
||||
continue;
|
||||
|
||||
if (card->hasType(Subtypes::TYPE_BATTLE) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_BATTLE,card->types[1]))
|
||||
continue;
|
||||
|
||||
if(hints && hints->HintSaysItsForCombo(observer,card))
|
||||
{
|
||||
if(hints->canWeCombo(observer,card,this))
|
||||
@@ -2982,6 +2985,9 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
|
||||
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
|
||||
continue;
|
||||
|
||||
if (card->hasType(Subtypes::TYPE_BATTLE) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_BATTLE,card->types[1]))
|
||||
continue;
|
||||
|
||||
if(hints && hints->HintSaysItsForCombo(observer,card))
|
||||
{
|
||||
if(hints->canWeCombo(observer,card,this))
|
||||
@@ -3748,7 +3754,7 @@ int AIPlayerBaka::computeActions()
|
||||
else
|
||||
{
|
||||
//look for the most expensive creature we can afford. If not found, try enchantment, then artifact, etc...
|
||||
const char* types[] = {"planeswalker","creature", "enchantment", "artifact", "sorcery", "instant"};
|
||||
const char* types[] = {"planeswalker","creature", "enchantment", "artifact", "sorcery", "instant", "battle"};
|
||||
int count = 0;
|
||||
while (!nextCardToPlay && count < 6)
|
||||
{
|
||||
|
||||
@@ -1545,7 +1545,7 @@ AADamager::AADamager(GameObserver* observer, int _id, MTGCardInstance * _source,
|
||||
if (_target)
|
||||
{
|
||||
WParsedInt damage(d, NULL, (MTGCardInstance *)source);
|
||||
if(_target == game->opponent() && game->opponent()->inPlay()->hasType("planeswalker") && !redirected)
|
||||
if(_target == game->opponent() && (game->opponent()->inPlay()->hasType("planeswalker") || game->opponent()->inPlay()->hasType("battle")) && !redirected)
|
||||
{
|
||||
vector<MTGAbility*>selection;
|
||||
MTGCardInstance * check = NULL;
|
||||
@@ -1557,7 +1557,7 @@ AADamager::AADamager(GameObserver* observer, int _id, MTGCardInstance * _source,
|
||||
for(int i = 0; i < checkWalkers;++i)
|
||||
{
|
||||
check = ((Player*)_target)->game->battlefield->cards[i];
|
||||
if(check->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if(check->hasType(Subtypes::TYPE_PLANESWALKER) || check->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
this->redirected = true;
|
||||
MTGAbility * setWalker = this->clone();
|
||||
@@ -1591,7 +1591,7 @@ AADamager::AADamager(GameObserver* observer, int _id, MTGCardInstance * _source,
|
||||
const string AADamager::getMenuText()
|
||||
{
|
||||
MTGCardInstance * _target = dynamic_cast<MTGCardInstance*>(target);
|
||||
if(_target && _target->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if(_target && _target->hasType(Subtypes::TYPE_PLANESWALKER) || _target && _target->hasType(Subtypes::TYPE_BATTLE))
|
||||
return _target->name.c_str();
|
||||
if(redirected)
|
||||
{
|
||||
@@ -10015,7 +10015,7 @@ int AACastCard::resolveSpell()
|
||||
}
|
||||
}
|
||||
|
||||
if (putinplay && (copy->hasType(Subtypes::TYPE_ARTIFACT) || copy->hasType(Subtypes::TYPE_CREATURE) || copy->hasType(Subtypes::TYPE_ENCHANTMENT) || copy->hasType(Subtypes::TYPE_PLANESWALKER)))
|
||||
if (putinplay && (copy->hasType(Subtypes::TYPE_ARTIFACT) || copy->hasType(Subtypes::TYPE_CREATURE) || copy->hasType(Subtypes::TYPE_ENCHANTMENT) || copy->hasType(Subtypes::TYPE_PLANESWALKER) || copy->hasType(Subtypes::TYPE_BATTLE)))
|
||||
spell->resolve(); // Fixed a crash when using and!()! with namedcard permanents.
|
||||
|
||||
if(andAbility)
|
||||
@@ -10041,7 +10041,7 @@ int AACastCard::resolveSpell()
|
||||
MTGCardInstance * copy = NULL;
|
||||
if ((normal || asNormalMadness)||(!_target->hasType(Subtypes::TYPE_INSTANT) && !_target->hasType(Subtypes::TYPE_SORCERY)))
|
||||
{
|
||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)||_target->hasType(Subtypes::TYPE_BATTLE)))
|
||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->reveal, noEvent); // Fixed a problem with previous zone of card, it cannot be directly battlefield.
|
||||
else
|
||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
||||
@@ -10051,7 +10051,7 @@ int AACastCard::resolveSpell()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)))
|
||||
if (putinplay && (_target->hasType(Subtypes::TYPE_ARTIFACT)||_target->hasType(Subtypes::TYPE_CREATURE)||_target->hasType(Subtypes::TYPE_ENCHANTMENT)||_target->hasType(Subtypes::TYPE_PLANESWALKER)||_target->hasType(Subtypes::TYPE_BATTLE)))
|
||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->reveal, noEvent); // Fixed a problem with previous zone of card, it cannot be directly battlefield.
|
||||
else
|
||||
copy = _target->controller()->game->putInZone(_target, _target->currentZone, source->controller()->game->stack, noEvent);
|
||||
|
||||
@@ -75,7 +75,7 @@ int Damage::resolve()
|
||||
|
||||
//-------------------------------------------------
|
||||
//Ajani Steadfast ---
|
||||
if(target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && ((MTGCardInstance*)target)->hasType("planeswalker") && ((MTGCardInstance*)target)->controller()->forcefield)
|
||||
if(target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (((MTGCardInstance*)target)->hasType("planeswalker") || ((MTGCardInstance*)target)->hasType("battle")) && ((MTGCardInstance*)target)->controller()->forcefield)
|
||||
damage = 1;
|
||||
if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE)
|
||||
{
|
||||
@@ -310,6 +310,19 @@ int Damage::resolve()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && ((MTGCardInstance*)target)->hasType(Subtypes::TYPE_BATTLE)){ // Fix life calculation for battle damage.
|
||||
if (((MTGCardInstance*)target)->counters){
|
||||
Counters * counters = ((MTGCardInstance*)target)->counters;
|
||||
for(size_t i = 0; i < counters->counters.size(); ++i){
|
||||
Counter * counter = counters->counters[i];
|
||||
if(counter->name == "defense"){
|
||||
target->life = counter->nb - target->damageCount;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Send (Damage/Replaced effect) event to listeners
|
||||
observer->receiveEvent(e);
|
||||
return a;
|
||||
|
||||
@@ -857,6 +857,8 @@ void GameObserver::gameStateBasedEffects()
|
||||
found++;
|
||||
if(stypes.find("planeswalker") != string::npos && card->target->hasType("planeswalker"))
|
||||
found++;
|
||||
if(stypes.find("battle") != string::npos && card->target->hasType("battle"))
|
||||
found++;
|
||||
}
|
||||
|
||||
if((!found || protectionfromQ) && !card->isBestowed)
|
||||
|
||||
@@ -196,7 +196,7 @@ GuiPlay::~GuiPlay()
|
||||
|
||||
bool isSpell(CardView* c)
|
||||
{
|
||||
return c->card->isSpell() && !c->card->isCreature() && !c->card->hasType(Subtypes::TYPE_PLANESWALKER);
|
||||
return c->card->isSpell() && !c->card->isCreature() && !c->card->hasType(Subtypes::TYPE_PLANESWALKER) && !c->card->hasType(Subtypes::TYPE_BATTLE);
|
||||
}
|
||||
void GuiPlay::Replace()
|
||||
{
|
||||
@@ -208,7 +208,7 @@ void GuiPlay::Replace()
|
||||
for (iterator it = cards.begin(); it != end_spells; ++it)
|
||||
if (!(*it)->card->target)
|
||||
{
|
||||
if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) && !(*it)->card->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
|
||||
++selfSpellsN;
|
||||
@@ -229,7 +229,7 @@ void GuiPlay::Replace()
|
||||
else
|
||||
++opponentCreaturesN;
|
||||
}
|
||||
else if ((*it)->card->isLand() || (*it)->card->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
else if ((*it)->card->isLand() || (*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) || (*it)->card->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
|
||||
++selfLandsN;
|
||||
@@ -244,7 +244,7 @@ void GuiPlay::Replace()
|
||||
for (iterator it = cards.begin(); it != end_spells; ++it)
|
||||
if (!(*it)->card->target)
|
||||
{
|
||||
if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) && !(*it)->card->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
|
||||
selfSpells.Enstack(*it);
|
||||
@@ -287,7 +287,7 @@ void GuiPlay::Replace()
|
||||
//rerun the iter reattaching planes walkers to the back of the lands.
|
||||
for (iterator it = end_spells; it != cards.end(); ++it)
|
||||
{
|
||||
if ((*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) && !(*it)->card->isCreature())
|
||||
if (((*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) || (*it)->card->hasType(Subtypes::TYPE_BATTLE)) && !(*it)->card->isCreature())
|
||||
{
|
||||
if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
|
||||
selfLands.Enstack(*it);
|
||||
@@ -310,7 +310,7 @@ void GuiPlay::Render()
|
||||
if(dtarget && dtarget->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE)
|
||||
{
|
||||
MTGCardInstance * ctarget = ((MTGCardInstance *)(*it)->card->isAttacking);
|
||||
if(ctarget->hasType(Subtypes::TYPE_PLANESWALKER) && observer->isInPlay(ctarget) && observer->getCurrentGamePhase() < MTG_PHASE_COMBATEND)
|
||||
if((ctarget->hasType(Subtypes::TYPE_PLANESWALKER) || ctarget->hasType(Subtypes::TYPE_BATTLE)) && observer->isInPlay(ctarget) && observer->getCurrentGamePhase() < MTG_PHASE_COMBATEND)
|
||||
{
|
||||
JRenderer::GetInstance()->DrawLine((*it)->actX,(*it)->actY,ctarget->view->actX,ctarget->view->actY,0.5f,ARGB(128 - wave, 255, 40, 40));
|
||||
}
|
||||
@@ -331,7 +331,7 @@ void GuiPlay::Render()
|
||||
else
|
||||
opponentCreatures.Render(*it, cards.begin(), end_spells);
|
||||
}
|
||||
else if(!(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
else if(!(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER) && !(*it)->card->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
if (!(*it)->card->target)
|
||||
{
|
||||
|
||||
@@ -521,6 +521,7 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
if (grave->hasType("land")) checkTypesAmount++;
|
||||
if (grave->hasType("artifact")) checkTypesAmount++;
|
||||
if (grave->hasType("planeswalker")) checkTypesAmount++;
|
||||
if (grave->hasType("battle")) checkTypesAmount++;
|
||||
if (grave->hasType("tribal")) checkTypesAmount++;
|
||||
if (checkTypesAmount < 4)
|
||||
return 0;
|
||||
@@ -540,6 +541,7 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
|
||||
if (grave->hasType("land")) checkTypesAmount++;
|
||||
if (grave->hasType("artifact")) checkTypesAmount++;
|
||||
if (grave->hasType("planeswalker")) checkTypesAmount++;
|
||||
if (grave->hasType("battle")) checkTypesAmount++;
|
||||
if (grave->hasType("tribal")) checkTypesAmount++;
|
||||
if (checkTypesAmount > 3)
|
||||
return 0;
|
||||
|
||||
@@ -2055,7 +2055,7 @@ int MTGAttackRule::receiveEvent(WEvent *e)
|
||||
if(dtarget->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE)
|
||||
{
|
||||
MTGCardInstance * ctarget = ((MTGCardInstance *)card->isAttacking);
|
||||
if(ctarget->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if(ctarget->hasType(Subtypes::TYPE_PLANESWALKER) || ctarget->hasType(Subtypes::TYPE_BATTLE))
|
||||
card->toggleAttacker();//if a card has cantpwattack, then you cant
|
||||
}
|
||||
}
|
||||
@@ -2112,14 +2112,14 @@ int MTGPlaneswalkerAttackRule::isReactingToClick(MTGCardInstance * card, ManaCos
|
||||
{
|
||||
if (currentPhase == MTG_PHASE_COMBATATTACKERS && card->controller() == game->currentPlayer && card->controller() == game->currentlyActing())//on my turn and when I am the acting player.
|
||||
{
|
||||
if(!card->controller()->opponent()->game->inPlay->hasType("planeswalker"))
|
||||
if(!card->controller()->opponent()->game->inPlay->hasType("planeswalker") && !card->controller()->opponent()->game->inPlay->hasType("battle"))
|
||||
return 0;
|
||||
if(card->isPhased)
|
||||
return 0;
|
||||
if ((card->isAttacker()) || (card->canAttack(true) && card->attackPlaneswalkerCost < 1))
|
||||
{
|
||||
if(!card->isAttacker())
|
||||
attackpwmenu = "Attack Planeswalker";
|
||||
attackpwmenu = "Attack Planeswalker or Battle";
|
||||
else
|
||||
attackpwmenu = "Remove Attacker";
|
||||
|
||||
@@ -2158,7 +2158,7 @@ int MTGPlaneswalkerAttackRule::reactToClick(MTGCardInstance * card)
|
||||
for(int i = 0; i < checkWalkers;++i)
|
||||
{
|
||||
check = card->controller()->opponent()->game->battlefield->cards[i];
|
||||
if(check->hasType(Subtypes::TYPE_PLANESWALKER))
|
||||
if(check->hasType(Subtypes::TYPE_PLANESWALKER) || check->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
MTGAbility * setPw = NEW AAPlaneswalkerAttacked(game, game->mLayers->actionLayer()->getMaxId(), card,check);
|
||||
MTGAbility * setWalker = setPw->clone();
|
||||
@@ -2168,7 +2168,6 @@ int MTGPlaneswalkerAttackRule::reactToClick(MTGCardInstance * card)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(selection.size())
|
||||
{
|
||||
MTGAbility * a1 = NEW MenuAbility(game, this->GetId(), card, card,false,selection);
|
||||
@@ -3969,6 +3968,15 @@ int MTGPlaneswalkerDamage::receiveEvent(WEvent * event)
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if (d->damage > 0 && card && card->hasType(Subtypes::TYPE_BATTLE))
|
||||
{
|
||||
int howMany = d->damage;
|
||||
for(int k = 0; k < howMany; k++)
|
||||
{
|
||||
card->counters->removeCounter("defense", 0, 0);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (WEventCounters * removel = dynamic_cast<WEventCounters*>(event))
|
||||
{
|
||||
@@ -3978,7 +3986,6 @@ int MTGPlaneswalkerDamage::receiveEvent(WEvent * event)
|
||||
removel->targetCard->toGrave(true);
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ Subtypes::Subtypes()
|
||||
find("Dungeon");
|
||||
find("Emblem");
|
||||
find("Conspiracy");
|
||||
find("Backgorund");
|
||||
find("Battle");
|
||||
}
|
||||
|
||||
int Subtypes::find(string value, bool forceAdd)
|
||||
@@ -97,7 +99,12 @@ bool Subtypes::isType(unsigned int type)
|
||||
type == TYPE_TRIBAL ||
|
||||
type == TYPE_PLANE ||
|
||||
type == TYPE_SCHEME ||
|
||||
type == TYPE_VANGUARD
|
||||
type == TYPE_VANGUARD ||
|
||||
type == TYPE_DUNGEON ||
|
||||
type == TYPE_EMBLEM ||
|
||||
type == TYPE_CONSPIRACY ||
|
||||
type == TYPE_BACKGROUND ||
|
||||
type == TYPE_BATTLE
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -141,19 +141,21 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta
|
||||
several = s.find("<anyamount>");
|
||||
if (several != string::npos) maxtargets = TargetChooser::UNLITMITED_TARGETS;
|
||||
found = s.find("creature,planeswalker");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker)
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker, battle)
|
||||
found = s.find("planeswalker,creature");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker)
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker, battle)
|
||||
found = s.find("creature^planeswalker");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker)
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker, battle)
|
||||
found = s.find("planeswalker^creature");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker)
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker, battle)
|
||||
found = s.find("permanent");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "permanent"); //Any player or permanet (player, creature, planeswalker, artifact, land, enchantment)
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "permanent"); //Any player or permanent (player, creature, planeswalker, artifact, land, enchantment, battle)
|
||||
found = s.find("creature");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other); //2 Damageable target (player, creature)
|
||||
found = s.find("planeswalker");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "planeswalker"); //2 Damageable target (player, planeswalker)
|
||||
found = s.find("battle");
|
||||
if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "battle"); //2 Damageable target (player, battle)
|
||||
return NEW PlayerTargetChooser(observer, card, maxtargets); //Any player
|
||||
}
|
||||
|
||||
@@ -967,6 +969,7 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta
|
||||
cd->removeType("legendary");
|
||||
cd->removeType("creature");
|
||||
cd->removeType("planeswalker");
|
||||
cd->removeType("battle");
|
||||
cd->removeType("tribal");
|
||||
if (!cd->types.size()){
|
||||
int i = rand() % 10000 + 1;
|
||||
@@ -1527,6 +1530,8 @@ TypeTargetChooser::TypeTargetChooser(GameObserver *observer, const char * _type,
|
||||
addType(id);
|
||||
id = MTGAllCards::findType("planeswalker");
|
||||
addType(id);
|
||||
id = MTGAllCards::findType("battle");
|
||||
addType(id);
|
||||
} else if(!strcmp(_type,"permanent")){
|
||||
int id = MTGAllCards::findType("creature");
|
||||
addType(id);
|
||||
@@ -1538,6 +1543,8 @@ TypeTargetChooser::TypeTargetChooser(GameObserver *observer, const char * _type,
|
||||
addType(id);
|
||||
id = MTGAllCards::findType("enchantment");
|
||||
addType(id);
|
||||
id = MTGAllCards::findType("battle");
|
||||
addType(id);
|
||||
} else {
|
||||
int id = MTGAllCards::findType(_type);
|
||||
addType(id);
|
||||
|
||||
@@ -2112,6 +2112,9 @@ void WGuiFilterItem::updateValue()
|
||||
mParent->addArg("Sorcery", "t:Sorcery;");
|
||||
mParent->addArg("Tribal", "t:Tribal;");
|
||||
mParent->addArg("Planeswalker", "t:Planeswalker;");
|
||||
mParent->addArg("Battle", "t:Battle;");
|
||||
mParent->addArg("Dungeon", "t:Dungeon;");
|
||||
mParent->addArg("Conspiracy", "t:Conspiracy;");
|
||||
|
||||
}
|
||||
else if (filterType == FILTER_SUBTYPE)
|
||||
|
||||
@@ -1184,6 +1184,8 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card)
|
||||
intValue++;
|
||||
if(card->hasType(Subtypes::TYPE_ARTIFACT))
|
||||
intValue++;
|
||||
if(card->hasType(Subtypes::TYPE_BATTLE))
|
||||
intValue++;
|
||||
}
|
||||
}
|
||||
else if (s == "pcycledcount" || s == "ocycledcount") //return how may cards have been cycled this turn from a specific player.
|
||||
@@ -1258,6 +1260,8 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
||||
cc = 1;
|
||||
if(cardHasTypeinZone("artifact",checkZone))
|
||||
ac = 1;
|
||||
if(cardHasTypeinZone("battle",checkZone))
|
||||
ac = 1;
|
||||
}
|
||||
} else {
|
||||
MTGGameZone * checkZone = (s.find("oppbattlefieldcardtypes")!=string::npos)?card->getObserver()->opponent()->game->inPlay:card->controller()->game->inPlay;
|
||||
@@ -1277,6 +1281,8 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
||||
cc = 1;
|
||||
if(cardHasTypeinZone("artifact",checkZone))
|
||||
ac = 1;
|
||||
if(cardHasTypeinZone("battle",checkZone))
|
||||
ac = 1;
|
||||
}
|
||||
intValue = pc+tc+sc+lc+ic+ec+cc+ac;
|
||||
}
|
||||
@@ -1303,6 +1309,8 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
||||
cc = 1;
|
||||
if(cardHasTypeinZone("artifact",checkZone))
|
||||
ac = 1;
|
||||
if(cardHasTypeinZone("battle",checkZone))
|
||||
ac = 1;
|
||||
}
|
||||
} else {
|
||||
MTGGameZone * checkZone = (s.find("oppgravecardtypes")!=string::npos)?card->getObserver()->opponent()->game->graveyard:card->controller()->game->graveyard;
|
||||
@@ -1322,6 +1330,8 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
||||
cc = 1;
|
||||
if(cardHasTypeinZone("artifact",checkZone))
|
||||
ac = 1;
|
||||
if(cardHasTypeinZone("battle",checkZone))
|
||||
ac = 1;
|
||||
}
|
||||
intValue = pc+tc+sc+lc+ic+ec+cc+ac;
|
||||
}
|
||||
@@ -1334,6 +1344,7 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
|
||||
(s.find("totcntart") != string::npos && card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_ARTIFACT)) ||
|
||||
(s.find("totcntenc") != string::npos && card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_ENCHANTMENT)) ||
|
||||
(s.find("totcntlan") != string::npos && card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_LAND)) ||
|
||||
(s.find("totcntbat") != string::npos && card->controller()->game->inPlay->cards[j]->hasType(Subtypes::TYPE_BATTLE)) ||
|
||||
s.find("totcntall") != string::npos){
|
||||
if (card->controller()->game->inPlay->cards[j]->counters){
|
||||
Counters * counters = card->controller()->game->inPlay->cards[j]->counters;
|
||||
|
||||
Reference in New Issue
Block a user