diff --git a/CHANGELOG.md b/CHANGELOG.md index 634a0a9ab..133d47fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) +### 13/09/21 +- *Committed:* Fixed AFR, STA, STX and J21 sets, fixed "_PROLIFERATE_" macro and fixed primitives with "proliferate" ability, fixed all primitives with "mutate" ability, improved "proliferate" and "duplicatecounters" keywords, added a new target "permanent" to target togheter a player and permanents on battlefield (e.g. cards with "proliferate"). ([Vitty85](https://github.com/Vitty85)) + ### 12/09/21 -- *Committed:* Added/Fixed primitives, updated the "missing_cards_by_sets" folder, added a new option "keepname" to keep the original name after the copy (e.g. Olag, Ludevic's Hubris), implemented a fix to avoid triggering of oneshot abilities when "flip" ability is used to return from a copy, fixed an issue with colors and "transforms" keyword, implemented a fix to avoid crashes when the card paying extracost has also a cost alteration (e.g. combo with "Pirate's Pillage" and "Ruby Medallion"), added a new keyword "totmanaspent" to return the real amount of mana spent to cast a card (e.g. Memory Deluge), added new keywords "pnumofidentitycols" and "onumofidentitycols" to return the total amount of commander identity colors for controller or opponent (e.g. War Room), improved "totcnt" keyword, added new keywords "totalcololorsinplay" and "oppototalcololorsinplay" to return the total amount of colors on controller or opponent battlefield (e.g. Moonveil Regent), added new keywords "pcoven" and "ocoven" to return if a player controls three or more creatures with different powers (e.g. Augur of Autumn). ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Added/Fixed primitives, updated the "missing_cards_by_sets" folder, added a new option "keepname" to keep the original name after the copy (e.g. Olag, Ludevic's Hubris), implemented a fix to avoid triggering of oneshot abilities when "flip" ability is used to return from a copy, fixed an issue with colors and "transforms" keyword, implemented a fix to avoid crashes when the card paying extracost has also a cost alteration (e.g. combo with "Pirate's Pillage" and "Ruby Medallion"), added a new keyword "totmanaspent" to return the real amount of mana spent to cast a card (e.g. Memory Deluge), added new keywords "pnumofidentitycols" and "onumofidentitycols" to return the total amount of commander identity colors for controller or opponent (e.g. War Room), improved "totcnt" keyword, added new keywords "totalcololorsinplay" and "oppototalcololorsinplay" to return the total amount of colors on controller or opponent battlefield (e.g. Moonveil Regent), added new keywords "pcoven" and "ocoven" to return if a player controls three or more creatures with different powers (e.g. Augur of Autumn). https://github.com/WagicProject/wagic/commit/04a6a4bfe2a4ae6fd2541723e3a338343320d851 ([Vitty85](https://github.com/Vitty85)) ### 07/09/21 - *Committed:* Added/fixed primitives, updated the "missing_cards_by_sets" folder, added new ability "hasstrive" to implement Strive cost with multikicker and refactored all cards with Strive cost (now they use a special version of multikicker but they don't count as kicked spell), improved "targeted" and "vampired" trigger to allow the "turnlimited" option, improved Android gesture to emulate "option menu" button pressure (slide down) and emulate "back" button pressure (slide up). https://github.com/WagicProject/wagic/commit/9aa15766d455c6b9f5fec1bb003ca35a34cbb5fc ([Vitty85](https://github.com/Vitty85)) diff --git a/projects/mtg/bin/Res/sets/AFR/_cards.dat b/projects/mtg/bin/Res/sets/AFR/_cards.dat index c84510b2f..b4fe38971 100644 --- a/projects/mtg/bin/Res/sets/AFR/_cards.dat +++ b/projects/mtg/bin/Res/sets/AFR/_cards.dat @@ -1,7 +1,7 @@ [meta] author=Wagic Team name=Adventures in the Forgotten Realms -orderindex=EXP-ZZI.AFR +orderindex=EXP-ZZJ.AFR year=2021-07-23 total=313 [/meta] diff --git a/projects/mtg/bin/Res/sets/J21/_cards.dat b/projects/mtg/bin/Res/sets/J21/_cards.dat index 3223bc8b0..3bb83c754 100644 --- a/projects/mtg/bin/Res/sets/J21/_cards.dat +++ b/projects/mtg/bin/Res/sets/J21/_cards.dat @@ -1,7 +1,7 @@ [meta] author=Wagic Team name=Jumpstart: Historic Horizons -orderindex=ONL-E.J21 +orderindex=REP-K.J21 year=2021-08-26 total=446 [/meta] diff --git a/projects/mtg/bin/Res/sets/STA/_cards.dat b/projects/mtg/bin/Res/sets/STA/_cards.dat index 0fcc27cf3..eeb9c3ea4 100644 --- a/projects/mtg/bin/Res/sets/STA/_cards.dat +++ b/projects/mtg/bin/Res/sets/STA/_cards.dat @@ -1,7 +1,7 @@ [meta] author=Wagic Team name=Strixhaven Mystical Archive -orderindex=EXP-K.STA +orderindex=EXP-J.STA year=2021-04-23 total=63 [/meta] diff --git a/projects/mtg/bin/Res/sets/STX/_cards.dat b/projects/mtg/bin/Res/sets/STX/_cards.dat index cb8093235..3f06124d5 100644 --- a/projects/mtg/bin/Res/sets/STX/_cards.dat +++ b/projects/mtg/bin/Res/sets/STX/_cards.dat @@ -1,7 +1,7 @@ [meta] author=Wagic Team name=Strixhaven: School of Mages -orderindex=REP-J.STX +orderindex=EXP-ZZI.STX year=2021-04-23 total=340 [/meta] diff --git a/projects/mtg/bin/Res/sets/primitives/_macros.txt b/projects/mtg/bin/Res/sets/primitives/_macros.txt index 6a8c9dbf1..d585f2d5d 100644 --- a/projects/mtg/bin/Res/sets/primitives/_macros.txt +++ b/projects/mtg/bin/Res/sets/primitives/_macros.txt @@ -94,11 +94,7 @@ $AUTO_DEFINE _CLASH_ Put here a code if compare the casting cost based on Errati #AUTO_DEFINE _CONSPIRE_ @movedTo(this|myStak):may {T(creature|myBattlefield)}{T(creature|myBattlefield)} castcard(copied noevent) target(*|myStack) # Proliferate -#AUTO_DEFINE _PROLIFERATE_ name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) duplicatecounters(single) - -# Proliferate, still need to target players since the old code doesn't work (*[artifact;creature;...;players]) just let you target creature and player -#AUTO_DEFINE _OLDPROLIFERATE_ name(Proliferate) notAtarget(*[artifact;creature;enchantment;land;planeswalker;player]) propagate -#AUTO_DEFINE _OLDOLDPROLIFERATE_ name(proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) proliferate +#AUTO_DEFINE _PROLIFERATE_ name(Proliferate) notatarget(player^permanent) proliferate # Scavenge #AUTO_DEFINE _SCAVENGE_($cost) name(Scavenge) autograveyard={$cost}{E}:counter(1/1,$c) target(creature) asSorcery diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 6378696c1..ba6a5e1b3 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -1972,8 +1972,7 @@ toughness=2 [card] name=Animation Module auto=@counteradded(1/1) from(*|mybattlefield):name(pay 1 for 1/1 Servo) pay[[{1}]] name(pay 1 for 1/1 Servo) token(Servo,Artifact Creature Servo,1/1) -auto={3}{T}:name(Add counter to a permanent) name(Add counter to a permanent) target(*[counter{any}]|battlefield) duplicatecounters(single) -auto={3}{T}:name(Add counter to a player) name(Add counter to a player) target(player) duplicatecounters(single) +auto={3}{T}:name(Add a counter) name(Add a counter) target(player,permanent) duplicatecounters(single) text=Whenever one or more +1/+1 counters are placed on a permanent you control, you may pay {1}. If you do, create a 1/1 colorless Servo artifact creature token. -- {3}, {T}: Choose a counter on target permanent or player. Give that permanent or player another counter of that kind. mana={1} type=Artifact @@ -2729,6 +2728,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={5}{U} name(Mutate) auto=transforms((,newability[@mutated(this):name(Tap X creatures) thisforeach(mutations) may target(creature) freeze])) @@ -3743,6 +3743,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={5}{G} name(Mutate) aicode=activate transforms((,newability[target(*[zpos=findfirsttypepermanent]|mylibrary) moveto(myexile) and!( moveto(myBattlefield) and!( all(*[zpos<=findfirsttypepermanent]|mylibrary) moveto(myexile) )! )!])) oneshot @@ -7200,6 +7201,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{BG}{BG} name(Mutate) auto=transforms((,newability[@mutated(this):moveto(myhand) target(*|mygraveyard)])) @@ -8071,6 +8073,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{UB}{G}{G} name(Mutate) auto=if paid(alternative) then name(Mutate Over) this(mutations<1) name(Mutate Over) choice name(Mutate Over) mutateover target(other creature[-human]|mybattlefield) @@ -9561,6 +9564,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{B} name(Mutate) auto=transforms((,newability[@mutated(this):ability$!name(discard) target(*|myhand) reject!$ opponent])) @@ -10660,6 +10664,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={4}{B} name(Mutate) auto=transforms((,newability[@mutated(this):ability$!sacrifice name(opponent sacrifices creature) notatarget(creature|mybattlefield)!$ opponent])) @@ -11366,6 +11371,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{R} name(Mutate) auto=transforms((,newability[@mutated(this):may reject notatarget(*|myhand) and!( draw:1 controller )!])) @@ -13558,6 +13564,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{W}{W} name(Mutate) auto=transforms((,newability[@mutated(this):token(Cat Cub)*2])) @@ -16441,6 +16448,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{B}{B} name(Mutate) auto=transforms((,newability[@mutated(this):target(*[creature;planeswalker]|opponentBattlefield) destroy])) @@ -17833,6 +17841,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{U} name(Mutate) auto=transforms((,newability[@mutated(this):draw:1 controller])) @@ -20446,6 +20455,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{R} name(Mutate) auto=transforms((,newability[@mutated(this):token(Feather Eve)])) @@ -24938,6 +24948,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={1}{G}{G} name(Mutate) auto=transforms((,newability[@mutated(this):target(*[artifact;enchantment]|opponentBattlefield) destroy])) @@ -26142,6 +26153,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{G} name(Mutate) auto=transforms((,newability[@mutated(this):counter(1/1) && counter(1/1)])) @@ -31100,6 +31112,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{W} name(Mutate) auto=transforms((,newability[@mutated(this):name(All creatures X/X ueot) thisforeach(mutations) all(other creature|myBattlefield) 1/1 ueot])) @@ -31576,6 +31589,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{RG}{U}{U} name(Mutate) auto=transforms((,newability[@mutated(this):ability$!name(Reveal) reveal:1 revealzone(mylibrary) revealuntil(*[-land;-instant;-sorcery]|mylibrary) optionone name(May move non land permanent on battlefield) target(*[-land;-instant;-sorcery]|myreveal) moveto(mybattlefield) optiononeend optiontwo name(Move revealed cards to exile) all(*|myreveal) moveto(myexile) optiontwoend afterrevealed name(Move last exiled non land permanent to hand) moveto(myhand) target(*[fresh;-land;-instant;-sorcery]|myexile) afterrevealedend revealend!$ controller])) @@ -32684,6 +32698,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{B} name(Mutate) auto=transforms((,newability[@mutated(this):name(Life and damage) thisforeach(mutations) life:1 controller && life:-1 opponent])) @@ -38303,6 +38318,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={UR}{UR} name(Mutate) auto=transforms((,newability[@mutated(this):moveto(myhand) target(*[instant;sorcery]|mygraveyard)])) @@ -39149,6 +39165,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip auto=transforms((,newability[@mutated(this):life:4 controller])) auto=if paid(alternative) then name(Mutate Over) this(mutations<1) name(Mutate Over) choice name(Mutate Over) mutateover target(other creature[-human]|mybattlefield) @@ -40791,6 +40808,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{G} name(Mutate) auto=transforms((,newability[@mutated(this):name(Search basic land) target(land[basic]|mylibrary) moveto(myBattlefield) and!( tap(noevent) )!])) @@ -40947,6 +40965,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={4}{B} name(Mutate) auto=transforms((,newability[@mutated(this):ability$!name(Reveal) reveal:1 revealzone(opponentlibrary) optionone name(Exile opponent top card?) target(*|myreveal) moveto(opponentexile) optiononeend optiontwo name(Play exiled card) target(<1>*|myreveal) activate castcard(normal) optiontwoend revealend!$ controller])) @@ -42781,6 +42800,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{WB}{WB} name(Mutate) auto=transforms((,newability[@mutated(this):target(creature[manacost<=3]|mygraveyard) moveTo(myBattlefield)])) @@ -43088,6 +43108,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={4}{GW}{B}{B} name(Mutate) auto=transforms((,newability[@mutated(this):target(creature[manacost<=10]|mygraveyard) moveTo(myBattlefield)])) @@ -45570,6 +45591,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={1}{B}{G}{U} name(Mutate) auto=transforms((,newability[@combatdamaged(player) from(this):moveto(myhand) target(creature[mutate]|mygraveyard)])) @@ -46142,6 +46164,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={G}{U} name(Mutate) auto=ifnot paid(alternative) then transforms((,newability[becomes(,,blue,green)])) forever all(this) @@ -47383,7 +47406,7 @@ toughness=3 [/card] [card] name=Planewide Celebration -auto=thisforeach(variable{4}) ability$!name(Choose one) choice name(Create citizen) token(Citizen,Creature Citizen,2/2,white,blue,black,red,green) _ choice name(Return permanent) target(*[-instant;-sorcery]|mygraveyard) moveto(ownerhand) _ choice name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) duplicatecounters(single) _choice name(Gain life) life:4 controller!$ controller +auto=thisforeach(variable{4}) ability$!name(Choose one) choice name(Create citizen) token(Citizen,Creature Citizen,2/2,white,blue,black,red,green) _ choice name(Return permanent) target(*[-instant;-sorcery]|mygraveyard) moveto(ownerhand) _ choice name(Proliferate) notatarget(player,permanent) proliferate _choice name(Gain life) life:4 controller!$ controller text=Choose four. You may choose the same mode more than once. -- • Create a 2/2 Citizen creature token that's all colors. -- • Return target permanent card from your graveyard to your hand. -- • Proliferate. -- • You gain 4 life. mana={5}{G}{G} type=Sorcery @@ -47569,8 +47592,8 @@ type=Sorcery [/card] [card] name=Pollenbright Druid -auto=choice counter(1/1) target(creature) -auto=choice name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) duplicatecounters(single) +auto=choice name(Put 1/1 counter) counter(1/1) target(creature) +auto=choice name(Proliferate) notatarget(player,permanent) proliferate text=When Pollenbright Druid enters the battlefield, choose one — -- • Put a +1/+1 counter on target creature. -- • Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) mana={1}{G} type=Creature @@ -47723,6 +47746,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{R} name(Mutate) auto=transforms((,newability[name(damage target) {T}:name(damage target) thisforeach(mutations) damage:1 target(*)])) @@ -47843,6 +47867,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{U} name(Mutate) auto=transforms((,newability[@mutated(this):may target(creature|opponentbattlefield) moveTo(opponenthand)])) @@ -51077,6 +51102,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={1}{RW}{RW} name(Mutate) auto=transforms((,newability[@mutated(this):all(other creature|myBattlefield) 2/1 ueot])) @@ -51753,9 +51779,9 @@ type=Instant [/card] [card] name=Return to Nature -auto=destroy target(artifact) -auto=destroy target(enchantment) -auto=moveto(exile) target(*|graveyard) +auto=if type(artifact|battlefield)~morethan~0 then choice name(Destroy artifact) name(Destroy artifact) destroy target(artifact) +auto=if type(artifact|enchantment)~morethan~0 then choice name(Destroy enchantment) name(Destroy enchantment) destroy target(enchantment) +auto=if type(*|graveyard)~morethan~0 then choice name(Exile a card) name(Exile a card) moveto(exile) target(*|graveyard) text=Choose one — -- • Destroy target artifact. -- • Destroy target enchantment. -- • Exile target card from a graveyard. mana={1}{G} type=Instant @@ -52842,7 +52868,7 @@ type=Sorcery name=Roalesk, Apex Hybrid abilities=flying,trample auto=counter(1/1,2) target(other creature|myBattlefield) -auto=_DIES_name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) transforms((,newability[duplicatecounters(single)],newability[duplicatecounters(single)])) oneshot +auto=_DIES_name(Proliferate) notatarget(player,permanent) proliferate && proliferate text=Flying, trample -- When Roalesk, Apex Hybrid enters the battlefield, put two +1/+1 counters on another target creature you control. -- When Roalesk dies, proliferate, then proliferate again. (Choose any number of permanents and/or players, then give each another counter of each kind already there. Then do it again.) mana={2}{G}{G}{U} type=Legendary Creature @@ -54960,6 +54986,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{G} name(Mutate) auto=transforms((,newability[@mutated(this):name(Destroy and create token) ability$!name(Choose one) choice name(Controller) target(*[-creature]|myBattlefield) destroy && token(Beast Saw) controller _ choice name(opponent) target(*[-creature]|opponentBattlefield) destroy && token(Beast Saw) opponent!$ controller])) @@ -55651,6 +55678,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={1}{U} name(Mutate) auto=transforms((,newability[@combatdamaged(player) from(this):draw:1 controller])) @@ -59421,6 +59449,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{BR}{W}{W} name(Mutate) auto=transforms((,newability[@mutated(this):life:4 controller],newability[@mutated(this):damage:4 target(*[creature;planeswalker]|opponentBattlefield)])) @@ -60295,6 +60324,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={5}{U} name(Mutate) auto=transforms((,newability[@mutated(this):target(artifact[-creature]|opponentbattlefield) moveTo(myBattlefield)])) @@ -68460,6 +68490,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={3}{GU}{GU} name(Mutate) auto=transforms((,newability[@mutated(this):token(Beast Tru)])) @@ -69064,9 +69095,9 @@ type=Instant name=Unbounded Potential other={3}{W} name(Entwine) auto=ifnot paid(alternative) then if type(creature|battlefield)~morethan~0 then choice name(Put 1/1 counter) name(Put 1/1 counter) name(Put 1/1 counter) target(creature|battlefield) counter(1/1) -auto=ifnot paid(alternative) then choice name(Proliferate) name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) duplicatecounters(single) +auto=ifnot paid(alternative) then choice name(Proliferate) _PROLIFERATE_ auto=if paid(alternative) then if type(creature|battlefield)~morethan~0 then name(Put 1/1 counter) name(Put 1/1 counter) name(Put 1/1 counter) target(creature|battlefield) counter(1/1) -auto=if paid(alternative) then ability$!name(Proliferate) name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) duplicatecounters(single)!$ controller +auto=if paid(alternative) then ability$!name(Proliferate) _PROLIFERATE_ text=Choose one — -- • Put a +1/+1 counter on each of up to two target creatures. -- • Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) -- Entwine {3}{W} (Choose both if you pay the entwine cost.) mana={1}{W} type=Instant @@ -69804,6 +69835,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={1}{WU}{R}{R} name(Mutate) auto=transforms((,newability[@mutated(this):may castcard(normal) target(*[-creature;manacost<=3]|mygraveyard)])) @@ -71860,6 +71892,7 @@ auto=@movedTo(mytgt|hand) from(battlefield):all(this) moveTo(myHand) auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) +auto=@movedTo(mytgt|commandzone) from(battlefield):all(this) moveTo(myCommandzone) auto={9999}:equip other={2}{W} name(Mutate) auto=transforms((,newability[@mutated(this):counter(1/1)])) @@ -72155,9 +72188,10 @@ auto=counter(0/0,1,Lore) auto=@each my firstmain:counter(0/0,1,Lore) auto=ability$!name(Choose one) choice name(Don't put anything) donothing _ choice name(Put from hand) target(*[zombie;planeswalker]|myhand) moveTo(myBattlefield) _ choice name(Put from graveyard) target(*[zombie;planeswalker]|myGraveyard) moveTo(myBattlefield)!$ controller auto=ability$!name(Choose one) choice name(Don't put anything) donothing _ choice name(Put from hand) target(*[zombie;planeswalker]|myhand) moveTo(myBattlefield) _ choice name(Put from graveyard) target(*[zombie;planeswalker]|myGraveyard) moveTo(myBattlefield)!$ opponent -auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.2.Lore}=) target(*[creature;planeswalker]|myBattlefield) transforms((,newability[sacrifice],newability[ability$!name(Sacrifice creature or planeswalker) name(Sacrifice creature or planeswalker) notatarget(*[creature;planeswalker]|myBattlefield) sacrifice!$ opponent])) oneshot -auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.3.Lore}) target(*[Bolas]|battlefield) moveTo(exile) and!( transforms((,newability[notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) transforms((,newability[duplicatecounters(single)],newability[duplicatecounters(single)],newability[duplicatecounters(single)])) oneshot])) oneshot -auto=@counteradded(0/0,1,Lore) from(this):this(counter{0/0.3.Lore}) sacrifice(this) +auto=@counteradded(0/0,1,Lore) from(this) restriction{compare(hascntlore)~equalto~2}:may name(Sacrifice creatures and planeswalkers) target(*[creature;planeswalker]|myBattlefield) transforms((,newability[sacrifice],newability[ability$!name(Sacrifice creature or planeswalker) name(Sacrifice creature or planeswalker) notatarget(*[creature;planeswalker]|myBattlefield) sacrifice!$ opponent])) oneshot +auto=@counteradded(0/0,1,Lore) from(this) restriction{compare(hascntlore)~equalto~3}:may name(Exile a bolas) target(*[Bolas]|battlefield) moveTo(exile) +auto=@counteradded(0/0,1,Lore) from(this) restriction{compare(hascntlore)~equalto~3}:name(Proliferate 3 times) notatarget(player,permanent) proliferate && proliferate && proliferate +auto=@counteradded(0/0,1,Lore) from(this) restriction{compare(hascntlore)~equalto~3}:name(Sacrifice) sacrifice text=(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) -- I — Each player may put a planeswalker or Zombie card from War of the Spark from their hand or graveyard onto the battlefield. -- II — Sacrifice any number of creatures and/or planeswalkers. Each opponent sacrifices that many creatures and/or planeswalkers. -- III — Exile up to one target Bolas. Proliferate three times. mana={3}{B} type=Enchantment diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index a3a3f822e..8644de6d8 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -22160,7 +22160,7 @@ type=Artifact [card] name=Contagion Engine auto=target(player) ability$!name(target player) counter(-1/-1,1) all(creature|mybattlefield)!$ targetedplayer -auto={4}{T}:name(Proliferate) notatarget(*[artifact;creature;enchantment;land;planeswalker;player]) transforms((,newability[duplicatecounters(single)],newability[duplicatecounters(single)])) oneshot +auto={4}{T}:name(Proliferate) notatarget(player,permanent) proliferate && proliferate text=When Contagion Engine enters the battlefield, put a -1/-1 counter on each creature target player controls. -- {4},{T}: Proliferate, then proliferate again. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there. Then do it again.) mana={6} type=Artifact diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 62684b601..e33583af1 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -2866,7 +2866,7 @@ int AADuplicateCounters::resolve() a->oneShot = true; pcounters.push_back(a); } - else if(pTarget && pTarget->energyCount) + if(pTarget && pTarget->energyCount) { MTGAbility * a = NULL; if(single) @@ -2876,7 +2876,7 @@ int AADuplicateCounters::resolve() a->oneShot = true; pcounters.push_back(a); } - else if(pTarget && pTarget->experienceCount) + if(pTarget && pTarget->experienceCount) { MTGAbility * a = NULL; if(single) @@ -2886,7 +2886,7 @@ int AADuplicateCounters::resolve() a->oneShot = true; pcounters.push_back(a); } - else if (cTarget && cTarget->counters) + if (cTarget && cTarget->counters) { Counters * counters = cTarget->counters; for(size_t i = 0; i < counters->counters.size(); ++i) @@ -2954,25 +2954,25 @@ int AAProliferate::resolve() Player * pTarget = dynamic_cast(target); MTGCardInstance * cTarget = dynamic_cast(target); - if(pTarget && pTarget->poisonCount && pTarget != source->controller()) + if(pTarget && pTarget->poisonCount) { MTGAbility * a = NEW AAAlterPoison(game, game->mLayers->actionLayer()->getMaxId(), source, target, 1, NULL); a->oneShot = true; pcounters.push_back(a); } - else if(pTarget && pTarget->energyCount && pTarget == source->controller()) + if(pTarget && pTarget->energyCount) { MTGAbility * a = NEW AAAlterEnergy(game, game->mLayers->actionLayer()->getMaxId(), source, target, 1, NULL); a->oneShot = true; pcounters.push_back(a); } - else if(pTarget && pTarget->experienceCount && pTarget == source->controller()) + if(pTarget && pTarget->experienceCount) { MTGAbility * a = NEW AAAlterExperience(game, game->mLayers->actionLayer()->getMaxId(), source, target, 1, NULL); a->oneShot = true; pcounters.push_back(a); } - else if (cTarget && cTarget->counters) + if (cTarget && cTarget->counters) { Counters * counters = cTarget->counters; for(size_t i = 0; i < counters->counters.size(); ++i) diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 3393e1250..1ccf00837 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -148,6 +148,8 @@ TargetChooser * TargetChooserFactory::createTargetChooser(string s, MTGCardInsta if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other, false, "creature,planeswalker"); //Any Damageable target (player, creature, planeswalker) 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) + 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) found = s.find("creature"); if (found != string::npos) return NEW DamageableTargetChooser(observer, card, maxtargets, other); //2 Damageable target (player, creature) found = s.find("planeswalker"); @@ -1466,16 +1468,25 @@ bool CardTargetChooser::equals(TargetChooser * tc) TypeTargetChooser::TypeTargetChooser(GameObserver *observer, const char * _type, MTGCardInstance * card, int _maxtargets, bool other,bool targetMin) : TargetZoneChooser(observer, card, _maxtargets, other,targetMin) { + nbtypes = 0; if(!strcmp(_type,"creature,planeswalker")){ int id = MTGAllCards::findType("creature"); - nbtypes = 0; addType(id); id = MTGAllCards::findType("planeswalker"); addType(id); - } - else { + } else if(!strcmp(_type,"permanent")){ + int id = MTGAllCards::findType("creature"); + addType(id); + id = MTGAllCards::findType("planeswalker"); + addType(id); + id = MTGAllCards::findType("land"); + addType(id); + id = MTGAllCards::findType("artifact"); + addType(id); + id = MTGAllCards::findType("enchantment"); + addType(id); + } else { int id = MTGAllCards::findType(_type); - nbtypes = 0; addType(id); } int default_zones[] = { MTGGameZone::MY_BATTLEFIELD, MTGGameZone::OPPONENT_BATTLEFIELD };