From 9aa15766d455c6b9f5fec1bb003ca35a34cbb5fc Mon Sep 17 00:00:00 2001 From: Vittorio Alfieri Date: Tue, 7 Sep 2021 21:41:24 +0200 Subject: [PATCH] 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). --- CHANGELOG.md | 5 +- .../src/org/libsdl/app/SDLActivity.java | 12 +- .../mtg/bin/Res/missing_cards_by_sets/BOK.txt | 10 - .../mtg/bin/Res/missing_cards_by_sets/C17.txt | 7 - .../mtg/bin/Res/missing_cards_by_sets/FUT.txt | 9 - .../mtg/bin/Res/missing_cards_by_sets/JMP.txt | 37 -- .../mtg/bin/Res/missing_cards_by_sets/JOU.txt | 24 - .../mtg/bin/Res/missing_cards_by_sets/MB1.txt | 7 - .../mtg/bin/Res/missing_cards_by_sets/MH1.txt | 8 - .../mtg/bin/Res/missing_cards_by_sets/MMA.txt | 19 - .../mtg/bin/Res/missing_cards_by_sets/PZ2.txt | 7 - .../mtg/bin/Res/missing_cards_by_sets/SOI.txt | 10 - .../mtg/bin/Res/missing_cards_by_sets/STA.txt | 7 - .../bin/Res/sets/primitives/borderline.txt | 579 +++++++++++------- .../bin/Res/sets/primitives/unsupported.txt | 83 --- projects/mtg/include/AllAbilities.h | 17 +- projects/mtg/include/MTGDefinitions.h | 3 +- projects/mtg/src/CardDescriptor.cpp | 5 +- projects/mtg/src/MTGAbility.cpp | 74 +-- projects/mtg/src/MTGDefinitions.cpp | 3 +- projects/mtg/src/MTGRules.cpp | 10 +- 21 files changed, 424 insertions(+), 512 deletions(-) delete mode 100644 projects/mtg/bin/Res/missing_cards_by_sets/JMP.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index cd6b48def..08675f7b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,11 @@ ## [master] (https://github.com/WagicProject/wagic/tree/master) +### 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). ([Vitty85](https://github.com/Vitty85)) + ### 06/09/21 -- *Committed:* Fixed primitives, changed type of "isFlipped" card variable from bool to int and fixed a related bug on targeting cards with "isFlipped" attribute, improved "disturb" ability (now fi you counter a card casted with disturb it correctly goes to exile), added "decayed" ability, added two new zone alias "mycommandplay" and "opponentcommandplay" for targeting Battlefield and CommandZone at the same time. ([Vitty85](https://github.com/Vitty85)) +- *Committed:* Fixed primitives, changed type of "isFlipped" card variable from bool to int and fixed a related bug on targeting cards with "isFlipped" attribute, improved "disturb" ability (now fi you counter a card casted with disturb it correctly goes to exile), added "decayed" ability, added two new zone alias "mycommandplay" and "opponentcommandplay" for targeting Battlefield and CommandZone at the same time. https://github.com/WagicProject/wagic/commit/9dabf121d3719aa0d684e9d5d9732dc1b4a92b3d ([Vitty85](https://github.com/Vitty85)) ### 04/09/21 - *Committed:* Fixed bug that was not correctly showing the full Commander decks list in the deck choosing menu page, added a new gesture for Android to emulate back button pressure: now sliding from down to up for almost all screen size will trigger the back button in game (e.g. pause match in gameplay, going back from shop, and so on). https://github.com/WagicProject/wagic/commit/ccae9673e620b8f47aa66e9b9f25cbd79a715d2b ([Vitty85](https://github.com/Vitty85)) diff --git a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java index bbe08790b..d7fb72d06 100644 --- a/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java +++ b/projects/mtg/Android/src/org/libsdl/app/SDLActivity.java @@ -1811,7 +1811,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, // Touch events public boolean onTouch(View v, MotionEvent event) { - // Show Menu for devices without sidebar (e.g. Android 10) switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: @@ -1821,10 +1820,13 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, case MotionEvent.ACTION_POINTER_UP: y2 = event.getY(); float deltaY = y2 - y1; - if (deltaY > DELTA_Y) - parent.showOptionMenu(); // Emulate Android option menu button pressure. - else if (deltaY < -DELTA_Y) - SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_BACK ); // Emulate Android back button pressure. + if (deltaY > DELTA_Y) { + parent.showOptionMenu(); // Emulate Android "optionmenu" button pressure (for devices without sidebar, e.g. like Android 10). + return true; + } else if (deltaY < -DELTA_Y){ + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_BACK); // Emulate Android "back" button pressure (for devices without sidebar, e.g. like Android 10). + return true; + } break; } diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/BOK.txt b/projects/mtg/bin/Res/missing_cards_by_sets/BOK.txt index 74f9ac118..923bee6f4 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/BOK.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/BOK.txt @@ -91,16 +91,6 @@ type=Instant subtype=Arcane [/card] [card] -name=Kira, Great Glass-Spinner -abilities=flying -text=Flying -- Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability." -mana={1}{U}{U} -type=Legendary Creature -subtype=Spirit -power=2 -toughness=2 -[/card] -[card] name=Vital Surge text=You gain 3 life. -- Splice onto Arcane {1}{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={1}{G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt b/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt index 44768f152..d9524af7d 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/C17.txt @@ -56,13 +56,6 @@ mana={2}{W}{W} type=Sorcery [/card] [card] -name=Teferi's Protection -abilities=exiledeath -text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. -mana={2}{W} -type=Instant -[/card] -[card] name=Portal Mage abilities=flash auto=phasealter(remove,combatphases,controller) diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt b/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt index cd33f7e0c..e5925e919 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/FUT.txt @@ -92,15 +92,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Riftsweeper -text=When Riftsweeper enters the battlefield, choose target face-up exiled card. Its owner shuffles it into his or her library. -mana={1}{G} -type=Creature -subtype=Elf Shaman -power=2 -toughness=2 -[/card] -[card] name=Shapeshifter's Marrow text=At the beginning of each opponent's upkeep, that player reveals the top card of his or her library. If it's a creature card, the player puts the card into his or her graveyard and Shapeshifter's Marrow becomes a copy of that card. (If it does, it loses this ability.) mana={2}{U}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/JMP.txt b/projects/mtg/bin/Res/missing_cards_by_sets/JMP.txt deleted file mode 100644 index 4d7f5557d..000000000 --- a/projects/mtg/bin/Res/missing_cards_by_sets/JMP.txt +++ /dev/null @@ -1,37 +0,0 @@ -[card] -name=Face of Divinity -auto=teach(creature) 2/2 -text=Enchant creature -- Enchanted creature gets +2/+2. -- As long as another Aura is attached to enchanted creature, it has first strike and lifelink. -mana={2}{W} -type=Enchantment -subtype=Aura -[/card] -[card] -name=Kira, Great Glass-Spinner -abilities=flying -text=Flying -- Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability." -mana={1}{U}{U} -type=Legendary Creature -subtype=Spirit -power=2 -toughness=2 -[/card] -[card] -name=Sin Prodder -abilities=menace -text=Menace -- At the beginning of your upkeep, reveal the top card of your library. Any opponent may have you put that card into your graveyard. If a player does, Sin Prodder deals damage to that player equal to that card's converted mana cost. Otherwise, put that card into your hand. -mana={2}{R} -type=Creature -subtype=Devil -power=3 -toughness=2 -[/card] -[card] -name=Neyith of the Dire Hunt -text=Whenever one or more creatures you control fight or become blocked, draw a card. -- At the beginning of combat on your turn, you may pay {2}{R} or {G}. If you do, double target creature's power until end of turn. That creature must be blocked this combat if able. ( {R} or {G} can be paid with either {R} or {G}.) -mana={2}{G}{G} -type=Legendary Creature -subtype=Human Warrior -power=3 -toughness=3 -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/JOU.txt b/projects/mtg/bin/Res/missing_cards_by_sets/JOU.txt index b4b8d1563..fa647f7ec 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/JOU.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/JOU.txt @@ -1,13 +1,4 @@ [card] -name=Goldenhide Ox -text=Constellation — Whenever Goldenhide Ox or another enchantment enters the battlefield under your control, target creature must be blocked this turn if able. -mana={5}{G} -type=Enchantment Creature -subtype=Ox -power=5 -toughness=4 -[/card] -[card] name=Godsend text=Equipped creature gets +3/+3. -- Whenever equipped creature blocks or becomes blocked by one or more creatures, you may exile one of those creatures. -- Opponents can't cast cards with the same name as cards exiled with Godsend. -- Equip {3} mana={1}{W}{W} @@ -45,18 +36,3 @@ text=You control target player during that player's next turn. Exile Worst Fears mana={7}{B} type=Sorcery [/card] -[card] -name=Disciple of Deceit -text=Inspired — Whenever Disciple of Deceit becomes untapped, you may discard a nonland card. If you do, search your library for a card with the same converted mana cost as that card, reveal it, put it into your hand, then shuffle your library. -mana={U}{B} -type=Creature -subtype=Human Rogue -power=1 -toughness=3 -[/card] -[card] -name=Polymorphous Rush -text=Strive — Polymorphous Rush costs {1}{U} more to cast for each target beyond the first. -- Choose a creature on the battlefield. Any number of target creatures you control each become a copy of that creature until end of turn. -mana={2}{U} -type=Instant -[/card] diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt index a6e1044af..046795ce0 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MB1.txt @@ -53,13 +53,6 @@ mana={4} type=Artifact [/card] [card] -name=Teferi's Protection -abilities=exiledeath -text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. -mana={2}{W} -type=Instant -[/card] -[card] name=Carpet of Flowers text=At the beginning of each of your main phases, if you haven't added mana to your mana pool with this ability this turn, you may add up to X mana of any one color to your mana pool, where X is the number of Islands target opponent controls. mana={G} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt index 99995b67b..22530f44a 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MH1.txt @@ -34,14 +34,6 @@ power=3 toughness=3 [/card] [card] -name=Face of Divinity -auto=teach(creature) 2/2 -text=Enchant creature -- Enchanted creature gets +2/+2. -- As long as another Aura is attached to enchanted creature, it has first strike and lifelink. -mana={2}{W} -type=Enchantment -subtype=Aura -[/card] -[card] name=Mirrodin Besieged text=As Mirrodin Besieged enters the battlefield, choose Mirran or Phyrexian. -- • Mirran — Whenever you cast an artifact spell, create a 1/1 colorless Myr artifact creature token. -- • Phyrexian — At the beginning of your end step, draw a card, then discard a card. Then if there are fifteen or more artifact cards in your graveyard, target opponent loses the game. mana={2}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/MMA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/MMA.txt index 2e9821cc8..3331b924c 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/MMA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/MMA.txt @@ -9,25 +9,6 @@ power=4 toughness=4 [/card] [card] -name=Kira, Great Glass-Spinner -abilities=flying -text=Flying -- Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability." -mana={1}{U}{U} -type=Legendary Creature -subtype=Spirit -power=2 -toughness=2 -[/card] -[card] -name=Riftsweeper -text=When Riftsweeper enters the battlefield, choose target face-up exiled card. Its owner shuffles it into his or her library. -mana={1}{G} -type=Creature -subtype=Elf Shaman -power=2 -toughness=2 -[/card] -[card] name=Gifts Ungiven text=Search your library for four cards with different names and reveal them. Target opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle your library. mana={3}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt b/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt index 20f4bfd33..67afe2cf5 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/PZ2.txt @@ -39,13 +39,6 @@ power=3 toughness=4 [/card] [card] -name=Teferi's Protection -abilities=exiledeath -text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. -mana={2}{W} -type=Instant -[/card] -[card] name=Reality Scramble text=Put target permanent you own on the bottom of your library. Reveal cards from the top of your library until you reveal a card that shares a card type with that permanent. Put that card onto the battlefield and the rest on the bottom of your library in a random order. -- Retrace (You may cast this card from your graveyard by discarding a land card in addition to paying its other costs.) mana={2}{R}{R} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/SOI.txt b/projects/mtg/bin/Res/missing_cards_by_sets/SOI.txt index 04778d449..0ee710154 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/SOI.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/SOI.txt @@ -1,14 +1,4 @@ [card] -name=Sin Prodder -abilities=menace -text=Menace -- At the beginning of your upkeep, reveal the top card of your library. Any opponent may have you put that card into your graveyard. If a player does, Sin Prodder deals damage to that player equal to that card's converted mana cost. Otherwise, put that card into your hand. -mana={2}{R} -type=Creature -subtype=Devil -power=3 -toughness=2 -[/card] -[card] name=Epiphany at the Drownyard text=Reveal the top X plus one cards of your library and separate them into two piles. An opponent chooses one of those piles. Put that pile into your hand and the other into your graveyard. mana={X}{U} diff --git a/projects/mtg/bin/Res/missing_cards_by_sets/STA.txt b/projects/mtg/bin/Res/missing_cards_by_sets/STA.txt index d13a62bed..ac5724e75 100644 --- a/projects/mtg/bin/Res/missing_cards_by_sets/STA.txt +++ b/projects/mtg/bin/Res/missing_cards_by_sets/STA.txt @@ -1,11 +1,4 @@ [card] -name=Teferi's Protection -abilities=exiledeath -text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. -mana={2}{W} -type=Instant -[/card] -[card] name=Tainted Pact text=Exile the top card of your library. You may put that card into your hand unless it has the same name as another card exiled this way. Repeat this process until you put a card into your hand or you exile two cards with the same name, whichever comes first. mana={1}{B} diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 6dfb4c2cb..4fa86bed6 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -545,7 +545,8 @@ toughness=4 [/card] [card] name=Aerial Formation -kicker=multi{2}{U} +abilities=hasnokicker,hasstrive +kicker=multi{2}{U} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[1/1],newability[flying])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot @@ -565,8 +566,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot -text=Strive — Aerial Formation costs {2}{U} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+1 and gain flying until end of turn. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1],newability[flying])) ueot +text=Strive - Aerial Formation costs {2}{U} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+1 and gain flying until end of turn. mana={U} type=Instant [/card] @@ -940,7 +941,8 @@ type=Enchantment [/card] [card] name=Ajani's Presence -kicker=multi{2}{W} +abilities=hasnokicker,hasstrive +kicker=multi{2}{W} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot @@ -960,8 +962,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot -text=Strive — Ajani's Presence costs {2}{W} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+1 and gain indestructible until end of turn. (Damage and effects that say "destroy" don't destroy them.) +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1],newability[indestructible])) ueot +text=Strive - Ajani's Presence costs {2}{W} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+1 and gain indestructible until end of turn. (Damage and effects that say "destroy" don't destroy them.) mana={W} type=Instant [/card] @@ -6261,27 +6263,29 @@ type=Instant [/card] [card] name=Blinding Flare -auto=choice name(Don't strive) ability$!name(choose 1 creature) name(choose 1 creature) target(*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 1) ability$!name(choose 2 creatures) pay[[{R}]] name(choose 2 creatures) target(<2>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 2) ability$!name(choose 3 creatures) pay[[{R}{R}]] name(choose 3 creatures) target(<3>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 3) ability$!name(choose 4 creatures) pay[[{R}{R}{R}]] name(choose 4 creatures)target(<4>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 4) ability$!name(choose 5 creatures) pay[[{R}{R}{R}{R}]] name(choose 5 creatures) target(<5>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 5) ability$!name(choose 6 creatures) pay[[{R}{R}{R}{R}{R}]] name(choose 6 creatures) target(<6>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 6) ability$!name(choose 7 creatures) pay[[{R}{R}{R}{R}{R}{R}]] name(choose 7 creatures) target(<7>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 7) ability$!name(choose 8 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}]] name(choose 8 creatures) target(<8>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 8) ability$!name(choose 9 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 9 creatures) target(<9>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 9) ability$!name(choose 10 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 10 creatures) target(<10>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 10) ability$!name(choose 11 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 11 creatures) target(<11>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 11) ability$!name(choose 12 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 12 creatures) target(<12>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 12) ability$!name(choose 13 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 13 creatures) target(<13>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 13) ability$!name(choose 14 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 14 creatures)target(<14>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 14) ability$!name(choose 15 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 15 creatures) target(<15>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 15) ability$!name(choose 16 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 16 creatures) target(<16>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 16) ability$!name(choose 17 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 17 creatures) target(<17>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 17) ability$!name(choose 18 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 18 creatures) target(<18>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 18) ability$!name(choose 19 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 19 creatures) target(<19>*[creature]) cantblock ueot!$ controller -auto=choice name(Strive 19) ability$!name(choose 20 creatures) pay[[{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}{R}]] name(choose 20 creatures) target(<20>*[creature]) cantblock ueot!$ controller -text=Strive — Blinding Flare costs {R} more to cast for each target beyond the first. -- Any number of target creatures can't block this turn. +abilities=hasnokicker,hasstrive +kicker=multi{R} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[cantblock])) ueot +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[cantblock])) ueot +text=Strive - Blinding Flare costs {R} more to cast for each target beyond the first. -- Any number of target creatures can't block this turn. mana={R} type=Sorcery [/card] @@ -8657,8 +8661,9 @@ type=Sorcery [/card] [card] name=Call the Coppercoats +abilities=hasstrive auto=foreach(creature|opponentBattlefield) token(Soldier Call) -text=Strive — This spell costs {1}{W} more to cast for each target beyond the first. -- Choose any number of target opponents. Create X 1/1 white Human soldier creature tokens, where X is the number of creatures those opponents control. +text=Strive - This spell costs {1}{W} more to cast for each target beyond the first. -- Choose any number of target opponents. Create X 1/1 white Human soldier creature tokens, where X is the number of creatures those opponents control. mana={2}{W} type=Instant [/card] @@ -11706,7 +11711,8 @@ toughness=6 [/card] [card] name=Colossal Heroics -kicker=multi{1}{G} +abilities=hasnokicker,hasstrive +kicker=multi{1}{G} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[2/2],newability[untap])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot @@ -11726,8 +11732,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot -text=Strive — Colossal Heroics costs {1}{G} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+2 until end of turn. Untap those creatures. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/2],newability[untap])) ueot +text=Strive - Colossal Heroics costs {1}{G} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+2 until end of turn. Untap those creatures. mana={2}{G} type=Instant [/card] @@ -12329,27 +12335,29 @@ type=Instant [/card] [card] name=Consign to Dust -auto=choice name(Don't strive) ability$!name(choose 1 artifact or enchantment) name(choose 1 artifact or enchantment) target(*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 1) ability$!name(choose 2 artifacts or enchantments) pay[[{2}{G}]] name(choose 2 artifacts or enchantments) target(<2>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 2) ability$!name(choose 3 artifacts or enchantments) pay[[{4}{G}{G}]] name(choose 3 artifacts or enchantments) target(<3>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 3) ability$!name(choose 4 artifacts or enchantments) pay[[{6}{G}{G}{G}]] name(choose 4 artifacts or enchantments)target(<4>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 4) ability$!name(choose 5 artifacts or enchantments) pay[[{8}{G}{G}{G}{G}]] name(choose 5 artifacts or enchantments) target(<5>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 5) ability$!name(choose 6 artifacts or enchantments) pay[[{10}{G}{G}{G}{G}{G}]] name(choose 6 artifacts or enchantments) target(<6>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 6) ability$!name(choose 7 artifacts or enchantments) pay[[{12}{G}{G}{G}{G}{G}{G}]] name(choose 7 artifacts or enchantments) target(<7>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 7) ability$!name(choose 8 artifacts or enchantments) pay[[{14}{G}{G}{G}{G}{G}{G}{G}]] name(choose 8 artifacts or enchantments) target(<8>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 8) ability$!name(choose 9 artifacts or enchantments) pay[[{16}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 9 artifacts or enchantments) target(<9>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 9) ability$!name(choose 10 artifacts or enchantments) pay[[{18}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 10 artifacts or enchantments) target(<10>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 10) ability$!name(choose 11 artifacts or enchantments) pay[[{20}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 11 artifacts or enchantments) target(<11>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 11) ability$!name(choose 12 artifacts or enchantments) pay[[{22}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 12 artifacts or enchantments) target(<12>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 12) ability$!name(choose 13 artifacts or enchantments) pay[[{24}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 13 artifacts or enchantments) target(<13>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 13) ability$!name(choose 14 artifacts or enchantments) pay[[{26}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 14 artifacts or enchantments)target(<14>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 14) ability$!name(choose 15 artifacts or enchantments) pay[[{28}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 15 artifacts or enchantments) target(<15>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 15) ability$!name(choose 16 artifacts or enchantments) pay[[{30}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 16 artifacts or enchantments) target(<16>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 16) ability$!name(choose 17 artifacts or enchantments) pay[[{32}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 17 artifacts or enchantments) target(<17>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 17) ability$!name(choose 18 artifacts or enchantments) pay[[{34}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 18 artifacts or enchantments) target(<18>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 18) ability$!name(choose 19 artifacts or enchantments) pay[[{36}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 19 artifacts or enchantments) target(<19>*[artifact;enchantment]) destroy!$ controller -auto=choice name(Strive 19) ability$!name(choose 20 artifacts or enchantments) pay[[{38}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 20 artifacts or enchantments) target(<20>*[artifact;enchantment]) destroy!$ controller -text=Strive — Consign to Dust costs {2}{G} more to cast for each target beyond the first. -- Destroy any number of target artifacts and/or enchantments. +abilities=hasnokicker,hasstrive +kicker=multi{2}{G} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 artifact or enchantment) name(choose 1 artifact or enchantment) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~1 then name(choose 2 artifacts or enchantments) name(choose 2 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~2 then name(choose 3 artifacts or enchantments) name(choose 3 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~3 then name(choose 4 artifacts or enchantments) name(choose 4 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~4 then name(choose 5 artifacts or enchantments) name(choose 5 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~5 then name(choose 6 artifacts or enchantments) name(choose 6 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~6 then name(choose 7 artifacts or enchantments) name(choose 7 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~7 then name(choose 8 artifacts or enchantments) name(choose 8 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~8 then name(choose 9 artifacts or enchantments) name(choose 9 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~9 then name(choose 10 artifacts or enchantments) name(choose 10 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~10 then name(choose 11 artifacts or enchantments) name(choose 11 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~11 then name(choose 12 artifacts or enchantments) name(choose 12 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~12 then name(choose 13 artifacts or enchantments) name(choose 13 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~13 then name(choose 14 artifacts or enchantments) name(choose 14 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~14 then name(choose 15 artifacts or enchantments) name(choose 15 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~15 then name(choose 16 artifacts or enchantments) name(choose 16 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~16 then name(choose 17 artifacts or enchantments) name(choose 17 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~17 then name(choose 18 artifacts or enchantments) name(choose 18 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~equalto~18 then name(choose 19 artifacts or enchantments) name(choose 19 artifacts or enchantments) target(*[artifact;enchantment]) destroy +auto=if compare(kicked)~morethan~18 then name(choose 20 artifacts or enchantments) name(choose 20 artifacts or enchantments) target(*[artifact;enchantment]) destroy +text=Strive - Consign to Dust costs {2}{G} more to cast for each target beyond the first. -- Destroy any number of target artifacts and/or enchantments. mana={2}{G} type=Instant [/card] @@ -13323,7 +13331,8 @@ type=Instant [/card] [card] name=Cruel Feeding -kicker=multi{2}{B} +abilities=hasnokicker,hasstrive +kicker=multi{2}{B} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot @@ -13343,8 +13352,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot -text=Strive — Cruel Feeding costs {2}{B} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+0 and gain lifelink until end of turn. (Damage dealt by a creature with lifelink also causes its controller to gain that much life.) +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/0],newability[lifelink])) ueot +text=Strive - Cruel Feeding costs {2}{B} more to cast for each target beyond the first. -- Any number of target creatures each get +1/+0 and gain lifelink until end of turn. (Damage dealt by a creature with lifelink also causes its controller to gain that much life.) mana={B} type=Instant [/card] @@ -15799,7 +15808,8 @@ type=Instant [/card] [card] name=Desperate Stand -kicker=multi{R}{W} +abilities=hasnokicker,hasstrive +kicker=multi{R}{W} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot @@ -15819,8 +15829,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot -text=Strive — Desperate Stand costs {R}{W} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+0 and gain first strike and vigilance until end of turn. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/0],newability[first strike],newability[vigilance])) ueot +text=Strive - Desperate Stand costs {R}{W} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+0 and gain first strike and vigilance until end of turn. mana={R}{W} type=Sorcery [/card] @@ -16481,6 +16491,16 @@ mana={2}{B} type=Sorcery [/card] [card] +name=Disciple of Deceit +auto=@untapped(this):may name(Discard a card) target(*[-land]|myhand) reject and!( transforms((,newability[name(Search another card] target(*[manacost=manacost]|mylibrary) moveto(myhand) and!( shuffle )!])) oneshot )! +text=Inspired — Whenever Disciple of Deceit becomes untapped, you may discard a nonland card. If you do, search your library for a card with the same converted mana cost as that card, reveal it, put it into your hand, then shuffle your library. +mana={U}{B} +type=Creature +subtype=Human Rogue +power=1 +toughness=3 +[/card] +[card] name=Disciple of the Sun abilities=lifelink auto=name(Return permanent) target(*[-instant;-sorcery;manacost<=3]|myGraveyard) moveto(myHand) @@ -18894,7 +18914,7 @@ subtype=Lesson [card] name=Elemental Uprising target=land|mybattlefield -auto=transforms(Land Creature Elemental,4/4,haste) with(newability[@combat(attacking,blocking) source(this): all(creature|opponentbattlefield) mustblock ueot]) ueot +auto=transforms((Creature Elemental,setpower=4,settoughness=4,newability[haste],newability[@combat(attacking) source(this):all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) ueot text=Target land you control becomes a 4/4 Elemental creature with haste until end of turn. It’s still a land. It must be blocked this turn if able. mana={1}{G} type=Instant @@ -19400,7 +19420,7 @@ type=Instant [card] name=Emergent Growth target=creature -auto=transforms((,newability[5/5],newability[_ATTACKING_all(creature|opponentbattlefield) mustblock ueot])) ueot +auto=transforms((,newability[5/5],newability[_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) ueot text=Target creature gets +5/+5 until end of turn and must be blocked this turn if able. mana={3}{G} type=Sorcery @@ -21037,6 +21057,16 @@ type=Legendary Land subtype=Mountain [/card] [card] +name=Face of Divinity +target=creature +auto=teach(creature) 2/2 +auto=teach(creature) transforms((,newability[this(auras>=2) first strike],newability[this(auras>=2) lifelink])) +text=Enchant creature -- Enchanted creature gets +2/+2. -- As long as another Aura is attached to enchanted creature, it has first strike and lifelink. +mana={2}{W} +type=Enchantment +subtype=Aura +[/card] +[card] name=Faceless Agent abilities=changeling auto=name(Seek a creature) name(Seek a creature) moverandom(creature) from(mylibrary) to(myhand) @@ -26924,6 +26954,17 @@ mana={1}{G}{U} type=Sorcery [/card] [card] +name=Goldenhide Ox +auto=name(Creature must be blocked) target(creature) transforms((,newability[_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) ueot +auto=@movedto(enchantment|myBattlefield):name(Creature must be blocked) target(creature) transforms((,newability[_ATTACKING_all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) ueot +text=Constellation — Whenever Goldenhide Ox or another enchantment enters the battlefield under your control, target creature must be blocked this turn if able. +mana={5}{G} +type=Enchantment Creature +subtype=Ox +power=5 +toughness=4 +[/card] +[card] name=Goldmane Griffin abilities=flying,vigilance auto=moveto(myhand) target(Ajani^ Inspiring Leader|mylibrary) @@ -29041,28 +29082,29 @@ type=Instant [/card] [card] name=Harness by Force -kicker=multi{2}{R} -auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueoteot -auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],haste)) ueot -text=Strive — Harness by Force costs {2}{R} more to cast for each target beyond the first. -- Gain control of any number of target creatures until end of turn. Untap those creatures. They gain haste until end of turn. +abilities=hasnokicker,hasstrive +kicker=multi{2}{R} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[moveTo(opponentbattlefield)],newability[phaseaction[endofturn sourceinplay] moveTo(ownerbattlefield)],newability[untap],newability[haste])) ueot +text=Strive - Harness by Force costs {2}{R} more to cast for each target beyond the first. -- Gain control of any number of target creatures until end of turn. Untap those creatures. They gain haste until end of turn. mana={1}{R}{R} type=Sorcery [/card] @@ -30662,28 +30704,29 @@ type=Instant [/card] [card] name=Hour of Need -kicker=multi{1}{U} -auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) moveto(ownerexile) target(creature) and!(token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller)! -text=Strive — Hour of Need costs {1}{U} more to cast for each target beyond the first. -- Exile any number of target creatures. For each creature exiled this way, its controller puts a 4/4 blue Sphinx creature token with flying onto the battlefield. +abilities=hasnokicker,hasstrive +kicker=multi{1}{U} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) moveto(ownerexile) and!( token(Sphinx,Creature Sphinx,4/4,blue,flying) targetcontroller )! +text=Strive - Hour of Need costs {1}{U} more to cast for each target beyond the first. -- Exile any number of target creatures. For each creature exiled this way, its controller puts a 4/4 blue Sphinx creature token with flying onto the battlefield. mana={2}{U} type=Instant [/card] @@ -35326,9 +35369,9 @@ toughness=3 [/card] [card] name=Kinnan, Bonder Prodigy -auto=@tappedformana(*[-land]|myBattlefield):ability$! choice add{1} _ choice add{G} _ choice add{R} _ choice add{U} _ choice add{B} _ choice add{W} !$ controller -aicode=activate target(creature[-human;zpos<=5]|mylibrary) moveto(mybattlefield) -auto={5}{G}{U}:name(look) reveal:5 optionone name(Get non-Human) target(creature[-human]|reveal) moveto(mybattlefield) optiononeend optiontwo name(put on bottom) target(<5>*|reveal) bottomoflibrary optiontwoend revealend +aicode=activate transforms((,newability[if type(creature[-human;zpos<=5]|myLibrary)~morethan~0 then target(creature[-human;zpos<=5]|myLibrary) moveTo(myBattlefield) and!( all(other *[zpos<=5]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! else all(*[zpos<=5]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! ])) oneshot +auto={5}{G}{U}:name(look) reveal:5 optionone name(Get a non-Human)target(creature[-human]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put on bottom) target(*|reveal) bottomoflibrary and!( all(*|reveal) bottomoflibrary )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!( moveto(myBattlefield) )! afterrevealedend revealend +auto=lord(*[-land]|myBattlefield) transforms((,newability[@tappedformana(this|*):ability$!name(Add one mana) choice add{1} _ choice add{G} _ choice add{R} _ choice add{U} _ choice add{B} _ choice add{W} !$ controller])) text=Whenever you tap a nonland permanent for mana, add one mana of any type that permanent produced. -- {5}{G}{U}: Look at the top five cards of your library. You may put a non-Human creature card from among them onto the battlefield. Put the rest on the bottom of your library in a random order. mana={G}{U} type=Legendary Creature @@ -35371,31 +35414,45 @@ toughness=6 [/card] [card] name=Kiora's Dismissal -auto=choice name(Don't strive) ability$!name(return 1 enchantment) name(return 1 enchantment) target(*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 1) ability$!name(return 2 enchantments) pay[[{U}]] name(return 2 enchantments) target(<2>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 2) ability$!name(return 3 enchantments) pay[[{U}{U}]] name(return 3 enchantments) target(<3>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 3) ability$!name(return 4 enchantments) pay[[{U}{U}{U}]] name(return 4 enchantments)target(<4>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 4) ability$!name(return 5 enchantments) pay[[{U}{U}{U}{U}]] name(return 5 enchantments) target(<5>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 5) ability$!name(return 6 enchantments) pay[[{U}{U}{U}{U}{U}]] name(return 6 enchantments) target(<6>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 6) ability$!name(return 7 enchantments) pay[[{U}{U}{U}{U}{U}{U}]] name(return 7 enchantments) target(<7>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 7) ability$!name(return 8 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}]] name(return 8 enchantments) target(<8>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 8) ability$!name(return 9 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 9 enchantments) target(<9>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 9) ability$!name(return 10 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 10 enchantments) target(<10>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 10) ability$!name(return 11 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 11 enchantments) target(<11>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 11) ability$!name(return 12 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 12 enchantments) target(<12>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 12) ability$!name(return 13 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 13 enchantments) target(<13>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 13) ability$!name(return 14 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 14 enchantments)target(<14>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 14) ability$!name(return 15 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 15 enchantments) target(<15>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 15) ability$!name(return 16 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 16 enchantments) target(<16>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 16) ability$!name(return 17 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 17 enchantments) target(<17>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 17) ability$!name(return 18 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 18 enchantments) target(<18>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 18) ability$!name(return 19 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 19 enchantments) target(<19>*[enchantment]) moveto(ownerhand)!$ controller -auto=choice name(Strive 19) ability$!name(return 20 enchantments) pay[[{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}{U}]] name(return 20 enchantments) target(<20>*[enchantment]) moveto(ownerhand)!$ controller -text=Strive — Kiora's Dismissal costs {U} more to cast for each target beyond the first. -- Return any number of target enchantments to their owners' hands. +abilities=hasnokicker,hasstrive +kicker=multi{U} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(enchantment) moveto(ownerhand) +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(enchantment) moveto(ownerhand) +text=Strive - Kiora's Dismissal costs {U} more to cast for each target beyond the first. -- Return any number of target enchantments to their owners' hands. mana={U} type=Instant [/card] [card] +name=Kira, Great Glass-Spinner +abilities=flying +auto=lord(other creature|mybattlefield) transforms((,newability[@targeted(this) turnlimited:name(Counter spell) all(trigger[from]) fizzle])) +auto=@targeted(this) turnlimited:name(Counter spell) target(*|stack) fizzle +text=Flying -- Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability." +mana={1}{U}{U} +type=Legendary Creature +subtype=Spirit +power=2 +toughness=2 +[/card] +[card] name=Kitchen Imp abilities=madness,flying,haste autoexile=restriction{discarded} pay({B}) name(pay B to cast) activate name(pay B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard) @@ -36601,28 +36658,29 @@ toughness=3 [/card] [card] name=Launch the Fleet -kicker=multi{1} -auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[_ATTACKING_create(Soldier:Creature Soldier:1/1:white:battleready)])) ueot -text=Strive — Launch the Fleet costs {1} more to cast for each target beyond the first. -- Until end of turn, any number of target creatures each gain "Whenever this creature attacks, put a 1/1 white Soldier creature token onto the battlefield tapped and attacking." +abilities=hasnokicker,hasstrive +kicker=multi{1} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[_ATTACKING_token(Soldier^Creature Soldier^1/1^white^battleready)])) ueot +text=Strive - Launch the Fleet costs {1} more to cast for each target beyond the first. -- Until end of turn, any number of target creatures each gain "Whenever this creature attacks, put a 1/1 white Soldier creature token onto the battlefield tapped and attacking." mana={W} type=Sorcery [/card] @@ -42549,27 +42607,29 @@ subtype=Aura [/card] [card] name=Nature's Panoply -auto=choice name(Don't strive) ability$!name(choose 1 creature) name(choose 1 creature) target(*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 1) ability$!name(choose 2 creatures) pay[[{2}{G}]] name(choose 2 creatures) target(<2>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 2) ability$!name(choose 3 creatures) pay[[{4}{G}{G}]] name(choose 3 creatures) target(<3>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 3) ability$!name(choose 4 creatures) pay[[{6}{G}{G}{G}]] name(choose 4 creatures)target(<4>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 4) ability$!name(choose 5 creatures) pay[[{8}{G}{G}{G}{G}]] name(choose 5 creatures) target(<5>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 5) ability$!name(choose 6 creatures) pay[[{10}{G}{G}{G}{G}{G}]] name(choose 6 creatures) target(<6>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 6) ability$!name(choose 7 creatures) pay[[{12}{G}{G}{G}{G}{G}{G}]] name(choose 7 creatures) target(<7>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 7) ability$!name(choose 8 creatures) pay[[{14}{G}{G}{G}{G}{G}{G}{G}]] name(choose 8 creatures) target(<8>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 8) ability$!name(choose 9 creatures) pay[[{16}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 9 creatures) target(<9>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 9) ability$!name(choose 10 creatures) pay[[{18}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 10 creatures) target(<10>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 10) ability$!name(choose 11 creatures) pay[[{20}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 11 creatures) target(<11>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 11) ability$!name(choose 12 creatures) pay[[{22}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 12 creatures) target(<12>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 12) ability$!name(choose 13 creatures) pay[[{24}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 13 creatures) target(<13>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 13) ability$!name(choose 14 creatures) pay[[{26}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 14 creatures)target(<14>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 14) ability$!name(choose 15 creatures) pay[[{28}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 15 creatures) target(<15>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 15) ability$!name(choose 16 creatures) pay[[{30}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 16 creatures) target(<16>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 16) ability$!name(choose 17 creatures) pay[[{32}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 17 creatures) target(<17>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 17) ability$!name(choose 18 creatures) pay[[{34}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 18 creatures) target(<18>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 18) ability$!name(choose 19 creatures) pay[[{36}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 19 creatures) target(<19>*[creature]) counter(1/1)!$ controller -auto=choice name(Strive 19) ability$!name(choose 20 creatures) pay[[{38}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}{G}]] name(choose 20 creatures) target(<20>*[creature]) counter(1/1)!$ controller -text=Strive — Nature's Panoply costs {2}{G} more to cast for each target beyond the first. -- Choose any number of target creatures. Put a +1/+1 counter on each of them. +abilities=hasnokicker,hasstrive +kicker=multi{2}{G} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) counter(1/1) +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) counter(1/1) +text=Strive - Nature's Panoply costs {2}{G} more to cast for each target beyond the first. -- Choose any number of target creatures. Put a +1/+1 counter on each of them. mana={G} type=Instant [/card] @@ -43194,6 +43254,18 @@ mana={5}{U}{U} type=Instant [/card] [card] +name=Neyith of the Dire Hunt +auto=@combat(blocked) source(creature|mybattlefield) turnlimited:name(Draw a card) draw:1 controller +auto=@damaged(creature) from(creature[-attacking]|mybattlefield) turnlimited:may name(Draw a card) draw:1 controller +auto=@each my combatbegins:name(Pay and double creature's power) pay({2}{RG}) name(Pay and double creature's power) target(creature) transforms((,newability[p/0],newability[all(creature|opponentbattlefield) transforms((,newability[mustblock])) ueot])) ueot +text=Whenever one or more creatures you control fight or become blocked, draw a card. -- At the beginning of combat on your turn, you may pay {2}{R} or {G}. If you do, double target creature's power until end of turn. That creature must be blocked this combat if able. ( {R} or {G} can be paid with either {R} or {G}.) +mana={2}{G}{G} +type=Legendary Creature +subtype=Human Warrior +power=3 +toughness=3 +[/card] +[card] name=Nezahal, Primal Tide abilities=nofizzle,nomaxhand auto=@movedTo(*|opponentstack):draw:1 @@ -46555,27 +46627,29 @@ subtype=Aura [/card] [card] name=Phalanx Formation -auto=choice name(Don't strive) ability$!name(choose 1 creature) name(choose 1 creature) target(*[creature]) double strike ueot!$ controller -auto=choice name(Strive 1) ability$!name(choose 2 creatures) pay[[{1}{W}]] name(choose 2 creatures) target(<2>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 2) ability$!name(choose 3 creatures) pay[[{2}{W}{W}]] name(choose 3 creatures) target(<3>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 3) ability$!name(choose 4 creatures) pay[[{3}{W}{W}{W}]] name(choose 4 creatures)target(<4>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 4) ability$!name(choose 5 creatures) pay[[{4}{W}{W}{W}{W}]] name(choose 5 creatures) target(<5>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 5) ability$!name(choose 6 creatures) pay[[{5}{W}{W}{W}{W}{W}]] name(choose 6 creatures) target(<6>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 6) ability$!name(choose 7 creatures) pay[[{6}{W}{W}{W}{W}{W}{W}]] name(choose 7 creatures) target(<7>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 7) ability$!name(choose 8 creatures) pay[[{7}{W}{W}{W}{W}{W}{W}{W}]] name(choose 8 creatures) target(<8>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 8) ability$!name(choose 9 creatures) pay[[{8}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 9 creatures) target(<9>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 9) ability$!name(choose 10 creatures) pay[[{9}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 10 creatures) target(<10>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 10) ability$!name(choose 11 creatures) pay[[{10}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 11 creatures) target(<11>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 11) ability$!name(choose 12 creatures) pay[[{11}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 12 creatures) target(<12>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 12) ability$!name(choose 13 creatures) pay[[{12}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 13 creatures) target(<13>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 13) ability$!name(choose 14 creatures) pay[[{13}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 14 creatures)target(<14>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 14) ability$!name(choose 15 creatures) pay[[{14}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 15 creatures) target(<15>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 15) ability$!name(choose 16 creatures) pay[[{15}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 16 creatures) target(<16>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 16) ability$!name(choose 17 creatures) pay[[{16}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 17 creatures) target(<17>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 17) ability$!name(choose 18 creatures) pay[[{17}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 18 creatures) target(<18>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 18) ability$!name(choose 19 creatures) pay[[{18}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 19 creatures) target(<19>*[creature]) double strike ueot!$ controller -auto=choice name(Strive 19) ability$!name(choose 20 creatures) pay[[{19}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}{W}]] name(choose 20 creatures) target(<20>*[creature]) double strike ueot!$ controller -text=Strive — Phalanx Formation costs {1}{W} more to cast for each target beyond the first. -- Any number of target creatures each gain double strike until end of turn. (They deal both first-strike and regular combat damage.) +abilities=hasnokicker,hasstrive +kicker=multi{1}{W} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[double strike])) ueot +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[double strike])) ueot +text=Strive - Phalanx Formation costs {1}{W} more to cast for each target beyond the first. -- Any number of target creatures each gain double strike until end of turn. (They deal both first-strike and regular combat damage.) mana={2}{W} type=Instant [/card] @@ -47545,6 +47619,16 @@ mana={1}{U}{U} type=Instant [/card] [card] +name=Polymorphous Rush +abilities=hasnokicker,hasstrive +kicker=multi{1}{U} name(Strive) +autostack=name(Choose a creature to copy) target(creature) transforms((,newability[phaseaction[endofturn once] counter(0/0.-1.RushEffect)],newability[counter(0/0.1.RushEffect)])) oneshot +auto=name(Creatures become copy) name(Creatures become copy) target(creature) transforms((,newability[all(creature[counter{0/0.1.RushEffect}]|battlefield) copy and!( all(this) transforms((,newability[phaseaction[endofturn once] flip(myorigname) undocpy])) ueot )!])) ueot +text=Strive - Polymorphous Rush costs {1}{U} more to cast for each target beyond the first. -- Choose a creature on the battlefield. Any number of target creatures you control each become a copy of that creature until end of turn. +mana={2}{U} +type=Instant +[/card] +[card] name=Polyraptor auto=_ENRAGE_token(polyraptor) text=Enrage — Whenever Polyraptor is dealt damage, create a token that's a copy of Polyraptor. @@ -52089,6 +52173,16 @@ power=1 toughness=3 [/card] [card] +name=Riftsweeper +auto=name(Shuffle back exiled card) target(*|exile) moveto(ownerlibrary) and!( shuffle )! +text=When Riftsweeper enters the battlefield, choose target face-up exiled card. Its owner shuffles it into his or her library. +mana={1}{G} +type=Creature +subtype=Elf Shaman +power=2 +toughness=2 +[/card] +[card] name=Rigging Runner abilities=first strike auto=if raid then counter(1/1,1) @@ -53160,7 +53254,8 @@ type=Sorcery [/card] [card] name=Rouse the Mob -kicker=multi{2}{R} +abilities=hasnokicker,hasstrive +kicker=multi{2}{R} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[2/0],newability[trample])) ueot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot @@ -53180,8 +53275,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot -text=Strive — Rouse the Mob costs {2}{R} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+0 and gain trample until end of turn. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[2/0],newability[trample])) ueot +text=Strive - Rouse the Mob costs {2}{R} more to cast for each target beyond the first. -- Any number of target creatures each get +2/+0 and gain trample until end of turn. mana={R} type=Instant [/card] @@ -56336,28 +56431,29 @@ toughness=1 [/card] [card] name=Setessan Tactics -kicker=multi{G} -auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1 ueot],newability[{T}:target(other creature) dynamicability])) ueot -text=Strive — Setessan Tactics costs {G} more to cast for each target beyond the first. -- Until end of turn, any number of target creatures each get +1/+1 and gain "{T}: This creature fights another target creature." +abilities=hasnokicker,hasstrive +kicker=multi{G} name(Strive) +auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~3 then name(choose 4 creatures) name(choose 4 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~4 then name(choose 5 creatures) name(choose 5 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~5 then name(choose 6 creatures) name(choose 6 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~6 then name(choose 7 creatures) name(choose 7 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~7 then name(choose 8 creatures) name(choose 8 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~8 then name(choose 9 creatures) name(choose 9 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~9 then name(choose 10 creatures) name(choose 10 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~10 then name(choose 11 creatures) name(choose 11 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~11 then name(choose 12 creatures) name(choose 12 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~12 then name(choose 13 creatures) name(choose 13 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~13 then name(choose 14 creatures) name(choose 14 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~14 then name(choose 15 creatures) name(choose 15 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[1/1],newability[{T}:name(Fight another creature) target(other creature) dynamicability])) ueot +text=Strive - Setessan Tactics costs {G} more to cast for each target beyond the first. -- Until end of turn, any number of target creatures each get +1/+1 and gain "{T}: This creature fights another target creature." mana={1}{G} type=Instant [/card] @@ -57656,7 +57752,8 @@ toughness=2 [/card] [card] name=Silence the Believers -kicker=multi{2}{B} +abilities=hasnokicker,hasstrive +kicker=multi{2}{B} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever @@ -57676,8 +57773,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever -text=Strive — Silence the Believers costs {2}{B} more to cast for each target beyond the first. -- Exile any number of target creatures and all Auras attached to them. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[moveto(ownerexile) all(mychild)],newability[moveto(ownerexile)])) forever +text=Strive - Silence the Believers costs {2}{B} more to cast for each target beyond the first. -- Exile any number of target creatures and all Auras attached to them. mana={2}{B}{B} type=Instant [/card] @@ -58011,6 +58108,17 @@ power=0 toughness=1 [/card] [card] +name=Sin Prodder +abilities=menace +auto=@each my upkeep:name(Reveal top card) all(*[zpos=1]|mylibrary) moveto(opponenthand) and!( transforms((,newability[choice name(Put in opponent hand) moveto(opponenthand)],newability[choice name(put in opponent graveyard) moveto(opponentgraveyard) and!( damage:manacost controller)!])) oneshot )! +text=Menace -- At the beginning of your upkeep, reveal the top card of your library. Any opponent may have you put that card into your graveyard. If a player does, Sin Prodder deals damage to that player equal to that card's converted mana cost. Otherwise, put that card into your hand. +mana={2}{R} +type=Creature +subtype=Devil +power=3 +toughness=2 +[/card] +[card] name=Sindbad auto={T}:name(Draw and reveal) reveal:1 optionone if type(land|reveal)~lessthan~1 then moveto(mygraveyard) optiononeend optiontwo if type(land|reveal)~morethan~0 then name(move to Hand) target(<1>*|reveal) moveto(myHand) optiontwoend revealend text={T}: Draw a card and reveal it. If it isn't a land card, discard it. @@ -59573,7 +59681,8 @@ subtype=Aura [/card] [card] name=Solidarity of Heroes -kicker=multi{1}{G} +abilities=hasnokicker,hasstrive +kicker=multi{1}{G} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot @@ -59593,8 +59702,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot -text=Strive — Solidarity of Heroes costs {1}{G} more to cast for each target beyond the first. -- Choose any number of target creatures. Double the number of +1/+1 counters on each of them. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature) transforms((,newability[thisforeach(counter{1/1.1}) counter(1/1) all(this)])) oneshot +text=Strive - Solidarity of Heroes costs {1}{G} more to cast for each target beyond the first. -- Choose any number of target creatures. Double the number of +1/+1 counters on each of them. mana={1}{G} type=Instant [/card] @@ -64280,6 +64389,14 @@ mana={1}{W} type=Sorcery [/card] [card] +name=Tale's End +target=*[legendary]|stack +auto=fizzle +text=Counter target activated ability, triggered ability, or legendary spell. +mana={1}{U} +type=Instant +[/card] +[card] name=Tales of the Ancestors abilities=foretell autohand={2}:name(Pay 2 and exile face-down) name(Pay 2 and exile face-down) doforetell myturnonly @@ -64767,6 +64884,15 @@ mana={2}{U}{U} type=Legendary Enchantment [/card] [card] +name=Teferi's Protection +abilities=exiledeath +auto=all(*|myBattlefield) phaseout +auto=token(Teferi's Protection,Emblem,0/0,indestructible,shroud,cantchangelife,controllershroud,notrigger) and!( transforms((,newability[@each my untap:sacrifice])) forever )! +text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. +mana={2}{W} +type=Instant +[/card] +[card] name=Teferi's Protege auto={1}{U}{T}:draw:1 controller && transforms((,newability[target(*|myhand) reject])) oneshot text={1}{U}, {T}: Draw a card, then discard a card. @@ -68633,7 +68759,8 @@ toughness=3 [/card] [card] name=Twinflame -kicker=multi{2}{R} +abilities=hasnokicker,hasstrive +kicker=multi{2}{R} name(Strive) auto=if compare(kicked)~equalto~0 then name(choose 1 creature) name(choose 1 creature) target(creature|myBattlefield) clone with(unearth,haste) auto=if compare(kicked)~equalto~1 then name(choose 2 creatures) name(choose 2 creatures) target(creature|myBattlefield) clone with(unearth,haste) auto=if compare(kicked)~equalto~2 then name(choose 3 creatures) name(choose 3 creatures) target(creature|myBattlefield) clone with(unearth,haste) @@ -68653,8 +68780,8 @@ auto=if compare(kicked)~equalto~15 then name(choose 16 creatures) name(choose 16 auto=if compare(kicked)~equalto~16 then name(choose 17 creatures) name(choose 17 creatures) target(creature|myBattlefield) clone with(unearth,haste) auto=if compare(kicked)~equalto~17 then name(choose 18 creatures) name(choose 18 creatures) target(creature|myBattlefield) clone with(unearth,haste) auto=if compare(kicked)~equalto~18 then name(choose 19 creatures) name(choose 19 creatures) target(creature|myBattlefield) clone with(unearth,haste) -auto=if compare(kicked)~equalto~19 then name(choose 20 creatures) name(choose 20 creatures) target(creature|myBattlefield) clone with(unearth,haste) -text=Strive — Twinflame costs {2}{R} more to cast for each target beyond the first. -- Choose any number of target creatures you control. For each of them, put a token that's a copy of that creature onto the battlefield. Those tokens have haste. Exile them at the beginning of the next end step. +auto=if compare(kicked)~morethan~18 then name(choose 20 creatures) name(choose 20 creatures) target(creature|myBattlefield) clone with(unearth,haste) +text=Strive - Twinflame costs {2}{R} more to cast for each target beyond the first. -- Choose any number of target creatures you control. For each of them, put a token that's a copy of that creature onto the battlefield. Those tokens have haste. Exile them at the beginning of the next end step. mana={1}{R} type=Sorcery [/card] diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 3ec92fb0f..6eb110b60 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -2483,15 +2483,6 @@ mana={U} type=Instant [/card] [card] -name=Disciple of Deceit -text=Inspired — Whenever Disciple of Deceit becomes untapped, you may discard a nonland card. If you do, search your library for a card with the same converted mana cost as that card, reveal it, put it into your hand, then shuffle your library. -mana={U}{B} -type=Creature -subtype=Human Rogue -power=1 -toughness=3 -[/card] -[card] name=Discontinuity text=As long as it's your turn, this spell costs {2}{U}{U} less to cast. -- End the turn. (Exile all spells and abilities from the stack, including this card. The player whose turn it is discards down to their maximum hand size. Damage wears off, and "this turn" and "until end of turn" effects end.) mana={3}{U}{U}{U} @@ -3151,14 +3142,6 @@ mana={2}{B} type=Instant [/card] [card] -name=Face of Divinity -auto=teach(creature) 2/2 -text=Enchant creature -- Enchanted creature gets +2/+2. -- As long as another Aura is attached to enchanted creature, it has first strike and lifelink. -mana={2}{W} -type=Enchantment -subtype=Aura -[/card] -[card] name=Face to Face text=You and target opponent play a best two-out-of-three Rock, Paper, Scissors match. If you win, Face to Face deals 5 damage to that opponent. mana={1}{R} @@ -4092,15 +4075,6 @@ type=Legendary Artifact subtype=Equipment [/card] [card] -name=Goldenhide Ox -text=Constellation — Whenever Goldenhide Ox or another enchantment enters the battlefield under your control, target creature must be blocked this turn if able. -mana={5}{G} -type=Enchantment Creature -subtype=Ox -power=5 -toughness=4 -[/card] -[card] name=Golgothian Sylex text={1}, {T}: Each nontoken permanent from the Antiquities expansion is sacrificed by its controller. mana={4} @@ -5405,16 +5379,6 @@ mana={5} type=Legendary Artifact [/card] [card] -name=Kira, Great Glass-Spinner -abilities=flying -text=Flying -- Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability." -mana={1}{U}{U} -type=Legendary Creature -subtype=Spirit -power=2 -toughness=2 -[/card] -[card] name=Kithkin Armor text=Enchant creature -- Enchanted creature can't be blocked by creatures with power 3 or greater. -- Sacrifice Kithkin Armor: The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage. mana={W} @@ -7114,15 +7078,6 @@ type=Artifact subtype=Contraption [/card] [card] -name=Neyith of the Dire Hunt -text=Whenever one or more creatures you control fight or become blocked, draw a card. -- At the beginning of combat on your turn, you may pay {2}{R} or {G}. If you do, double target creature's power until end of turn. That creature must be blocked this combat if able. ( {R} or {G} can be paid with either {R} or {G}.) -mana={2}{G}{G} -type=Legendary Creature -subtype=Human Warrior -power=3 -toughness=3 -[/card] -[card] name=Ninja text=You may activate Ninja's augment ability any time you could cast an instant. -- Whenever this creature deals combat damage to a player, -- Augment {2}{B} ({2}{B}, Reveal this card from your hand: Combine it with target host. Augment only as—oh, nevermind.) type=Creature @@ -7968,12 +7923,6 @@ mana={W} type=Instant [/card] [card] -name=Polymorphous Rush -text=Strive — Polymorphous Rush costs {1}{U} more to cast for each target beyond the first. -- Choose a creature on the battlefield. Any number of target creatures you control each become a copy of that creature until end of turn. -mana={2}{U} -type=Instant -[/card] -[card] name=Pools of Becoming text=At the beginning of your end step, put the cards in your hand on the bottom of your library in any order, then draw that many cards. -- Whenever you roll {C}, reveal the top three cards of your planar deck. Each of the revealed cards' {C} abilities triggers. Then put the revealed cards on the bottom of your planar deck in any order. type=Plane @@ -8632,15 +8581,6 @@ mana={R} type=Enchantment [/card] [card] -name=Riftsweeper -text=When Riftsweeper enters the battlefield, choose target face-up exiled card. Its owner shuffles it into his or her library. -mana={1}{G} -type=Creature -subtype=Elf Shaman -power=2 -toughness=2 -[/card] -[card] name=Righteous Aura text={W}, Pay 2 life: The next time a source of your choice would deal damage to you this turn, prevent that damage. mana={1}{W} @@ -9418,16 +9358,6 @@ power=2 toughness=2 [/card] [card] -name=Sin Prodder -abilities=menace -text=Menace -- At the beginning of your upkeep, reveal the top card of your library. Any opponent may have you put that card into your graveyard. If a player does, Sin Prodder deals damage to that player equal to that card's converted mana cost. Otherwise, put that card into your hand. -mana={2}{R} -type=Creature -subtype=Devil -power=3 -toughness=2 -[/card] -[card] name=Singe-Mind Ogre text=When Singe-Mind Ogre enters the battlefield, target player reveals a card at random from his or her hand, then loses life equal to that card's converted mana cost. mana={2}{B}{R} @@ -10546,12 +10476,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Tale's End -text=Counter target activated ability, triggered ability, or legendary spell. -mana={1}{U} -type=Instant -[/card] -[card] name=Talent of the Telepath text=Target opponent reveals the top seven cards of his or her library. You may cast an instant or sorcery card from among them without paying its mana cost. Then that player puts the rest into his or her graveyard. -- Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, you may cast up to two revealed instant and/or sorcery cards instead of one. mana={2}{U}{U} @@ -10609,13 +10533,6 @@ power=2 toughness=1 [/card] [card] -name=Teferi's Protection -abilities=exiledeath -text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection. -mana={2}{W} -type=Instant -[/card] -[card] name=Teferi's Response text=Counter target spell or ability an opponent controls that targets a land you control. If a permanent's ability is countered this way, destroy that permanent. -- Draw two cards. mana={1}{U} diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index c7cfa3b2c..2b6c8c769 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1105,7 +1105,9 @@ class TrVampired: public Trigger { public: TargetChooser * fromTc; - TrVampired(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, bool once = false) : + bool limitOnceATurn; + int triggeredTurn; + TrVampired(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source, once, tc), fromTc(fromTc) { } @@ -1115,7 +1117,8 @@ public: WEventVampire * vamp = dynamic_cast(event); if (!vamp) return 0; - + if (limitOnceATurn && triggeredTurn == game->turn) + return 0; if(fromTc && !fromTc->canTarget(vamp->source)) return 0; tc->setAllZones(); @@ -1123,8 +1126,8 @@ public: //setting allzones, as we don't care since we know the preexisting condiations cover the zones. if(!tc->canTarget(vamp->victem)) return 0; + triggeredTurn = game->turn; return 1; - } ~TrVampired() @@ -1144,7 +1147,9 @@ class TrTargeted: public Trigger public: TargetChooser * fromTc; int type; - TrTargeted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0, bool once = false) : + bool limitOnceATurn; + int triggeredTurn; + TrTargeted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, TargetChooser * fromTc = NULL, int type = 0, bool once = false, bool limitOnceATurn = false) : Trigger(observer, id, source, once, tc), fromTc(fromTc), type(type) { } @@ -1153,9 +1158,11 @@ public: { WEventTarget * e = dynamic_cast (event); if (!e) return 0; + if (limitOnceATurn && triggeredTurn == game->turn) + return 0; if (!tc->canTarget(e->card)) return 0; if (fromTc && !fromTc->canTarget(e->source)) return 0; - + triggeredTurn = game->turn; return 1; } diff --git a/projects/mtg/include/MTGDefinitions.h b/projects/mtg/include/MTGDefinitions.h index 53ae26f58..b303cd125 100644 --- a/projects/mtg/include/MTGDefinitions.h +++ b/projects/mtg/include/MTGDefinitions.h @@ -327,7 +327,8 @@ class Constants DAYBOUND = 200, NIGHTBOUND = 201, DECAYED = 202, - NB_BASIC_ABILITIES = 203, + HASSTRIVE = 203, + NB_BASIC_ABILITIES = 204, RARITY_S = 'S', //Special Rarity RARITY_M = 'M', //Mythics diff --git a/projects/mtg/src/CardDescriptor.cpp b/projects/mtg/src/CardDescriptor.cpp index 364d3e473..e3395724f 100644 --- a/projects/mtg/src/CardDescriptor.cpp +++ b/projects/mtg/src/CardDescriptor.cpp @@ -171,7 +171,7 @@ MTGCardInstance * CardDescriptor::match_or(MTGCardInstance * card) // Quantified restrictions are always AND-ed: if (foretoldComparisonMode && !valueInRange(foretoldComparisonMode, card->foretellTurn, foretellTurn)) return NULL; - if (kickedComparisonMode && (!valueInRange(kickedComparisonMode, card->kicked, kicked) || card->has(Constants::HASREPLICATE))) + if (kickedComparisonMode && (!valueInRange(kickedComparisonMode, card->kicked, kicked) || card->has(Constants::HASREPLICATE) || card->has(Constants::HASSTRIVE))) //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). return NULL; if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power)) return NULL; @@ -219,7 +219,7 @@ MTGCardInstance * CardDescriptor::match_and(MTGCardInstance * card) if (foretoldComparisonMode && !valueInRange(foretoldComparisonMode, card->foretellTurn, foretellTurn)) match = NULL; - if (kickedComparisonMode && (!valueInRange(kickedComparisonMode, card->kicked, kicked) || card->has(Constants::HASREPLICATE))) + if (kickedComparisonMode && (!valueInRange(kickedComparisonMode, card->kicked, kicked) || card->has(Constants::HASREPLICATE) || card->has(Constants::HASSTRIVE))) //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). match = NULL; if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power)) match = NULL; @@ -237,7 +237,6 @@ MTGCardInstance * CardDescriptor::match_and(MTGCardInstance * card) MTGCardInstance * CardDescriptor::match(MTGCardInstance * card) { - MTGCardInstance * match = card; if (mode == CD_AND) { diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 9953ee3b5..9cb7cbed3 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1150,31 +1150,31 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell //Card unTapped if (TargetChooser *tc = parseSimpleTC(s,"untapped", card)) - return NEW TrCardTapped(observer, id, card, tc, false,once); + return NEW TrCardTapped(observer, id, card, tc, false, once); //Card Tapped if (TargetChooser *tc = parseSimpleTC(s,"tapped", card)) - return NEW TrCardTapped(observer, id, card, tc, true,once); + return NEW TrCardTapped(observer, id, card, tc, true, once); //Card Tapped for mana if (TargetChooser *tc = parseSimpleTC(s,"tappedformana", card)) - return NEW TrCardTappedformana(observer, id, card, tc, true,once); + return NEW TrCardTappedformana(observer, id, card, tc, true, once); //Card Transforms if (TargetChooser *tc = parseSimpleTC(s,"transformed", card)) - return NEW TrCardTransformed(observer, id, card, tc,once); + return NEW TrCardTransformed(observer, id, card, tc, once); //Card Faces Up if (TargetChooser *tc = parseSimpleTC(s,"facedup", card)) - return NEW TrCardFaceUp(observer, id, card, tc,once); + return NEW TrCardFaceUp(observer, id, card, tc, once); //Card Phases In if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card)) - return NEW TrCardPhasesIn(observer, id, card, tc,once); + return NEW TrCardPhasesIn(observer, id, card, tc, once); //Card Exerted if (TargetChooser *tc = parseSimpleTC(s,"exerted", card)) - return NEW TrCardExerted(observer, id, card, tc,once); + return NEW TrCardExerted(observer, id, card, tc, once); //CombatTrigger //Card card attacked and is blocked @@ -1210,8 +1210,8 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrCombatTrigger(observer, id, card, tc, fromTc,once,limitOnceATurn,sourceUntapped,opponentPoisoned, - attackingTrigger,attackedAloneTrigger,notBlockedTrigger,attackBlockedTrigger,blockingTrigger); + return NEW TrCombatTrigger(observer, id, card, tc, fromTc, once, limitOnceATurn, sourceUntapped, opponentPoisoned, + attackingTrigger, attackedAloneTrigger, notBlockedTrigger, attackBlockedTrigger, blockingTrigger); } //energized player - controller of card @@ -1349,7 +1349,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell //Card is sacrificed if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card)) - return NEW TrCardSacrificed(observer, id, card, tc ,once); + return NEW TrCardSacrificed(observer, id, card, tc, once); //Card is Discarded if (TargetChooser * tc = parseSimpleTC(s, "discarded", card)) @@ -1357,69 +1357,69 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell //Card is cycled if (TargetChooser * tc = parseSimpleTC(s, "cycled", card)) - return NEW TrCardDiscarded(observer, id, card, tc,once,true); + return NEW TrCardDiscarded(observer, id, card, tc, once, true); //Card Damaging non combat current controller if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamageof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 2,false,false,once,true,false); + return NEW TrDamaged(observer, id, card, tc, fromTc, 2, false, false, once, true, false); } //Card Damaging non combat current opponent if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamagefoeof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 2,false,false,once,false,true); + return NEW TrDamaged(observer, id, card, tc, fromTc, 2, false, false, once, false, true); } //Card Damaging non combat static if (TargetChooser * tc = parseSimpleTC(s, "noncombatdamaged", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 2,once); + return NEW TrDamaged(observer, id, card, tc, fromTc, 2, once); } //Card Damaging combat current controller if (TargetChooser * tc = parseSimpleTC(s, "combatdamageof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once,true,false); + return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once, true, false); } //Card Damaging combat current opponent if (TargetChooser * tc = parseSimpleTC(s, "combatdamagefoeof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once,false,true); + return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once, false, true); } //Card Damaging combat static if (TargetChooser * tc = parseSimpleTC(s, "combatdamaged", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 1,sourceUntapped,limitOnceATurn,once); + return NEW TrDamaged(observer, id, card, tc, fromTc, 1, sourceUntapped, limitOnceATurn, once); } //Card Damaging current controller if (TargetChooser * tc = parseSimpleTC(s, "damageof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once,true,false); + return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once, true, false); } //Card Damaging current opponent if (TargetChooser * tc = parseSimpleTC(s, "damagefoeof", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once,false,true); + return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once, false, true); } //Card Damaging static if (TargetChooser * tc = parseSimpleTC(s, "damaged", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrDamaged(observer, id, card, tc, fromTc, 0,sourceUntapped,limitOnceATurn,once); + return NEW TrDamaged(observer, id, card, tc, fromTc, 0, sourceUntapped, limitOnceATurn, once); } //Lifed current controller @@ -1428,9 +1428,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,true,false,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, true, false, limitOnceATurn, exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,true,false,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, true, false, limitOnceATurn); } //Lifed current opponent @@ -1439,9 +1439,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,true,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped,once, false, true, limitOnceATurn, exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,true,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped,once, false, true, limitOnceATurn); } //Lifed static @@ -1450,9 +1450,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,false,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, false, false, limitOnceATurn, exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 0,sourceUntapped,once,false,false,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 0, sourceUntapped, once, false, false, limitOnceATurn); } //Life Loss current player @@ -1461,9 +1461,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,true,false,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, true, false, limitOnceATurn, exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,true,false,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, true, false, limitOnceATurn); } //Life Loss current opponent @@ -1472,9 +1472,9 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,true,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, true, limitOnceATurn,exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,true,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, true, limitOnceATurn); } //Life Loss static @@ -1483,23 +1483,23 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell TargetChooser *fromTc = parseSimpleTC(s, "from", card); TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a life gain/loss card exception in order to avoid life gain loop (eg. Angels of Vitality) if(exception) - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,false,limitOnceATurn,exception->source); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, false, limitOnceATurn, exception->source); else - return NEW TrLifeGained(observer, id, card, tc, fromTc, 1,sourceUntapped,once,false,false,limitOnceATurn); + return NEW TrLifeGained(observer, id, card, tc, fromTc, 1, sourceUntapped, once, false, false, limitOnceATurn); } //Card Damaged and killed by a creature this turn if (TargetChooser * tc = parseSimpleTC(s, "vampired", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrVampired(observer, id, card, tc, fromTc,once); + return NEW TrVampired(observer, id, card, tc, fromTc, once, limitOnceATurn); } //when card becomes the target of a spell or ability if (TargetChooser * tc = parseSimpleTC(s, "targeted", card)) { TargetChooser *fromTc = parseSimpleTC(s, "from", card); - return NEW TrTargeted(observer, id, card, tc, fromTc, 0,once); + return NEW TrTargeted(observer, id, card, tc, fromTc, 0, once, limitOnceATurn); } if (s.find("counteradded(") != string::npos) @@ -1569,7 +1569,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell found = s.find(Constants::MTGPhaseCodeNames[i]); if (found != string::npos) { - return NEW TriggerNextPhase(observer, id, card, target, i, who,sourceUntapped,once); + return NEW TriggerNextPhase(observer, id, card, target, i, who, sourceUntapped, once); } } } @@ -1583,7 +1583,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell found = s.find(Constants::MTGPhaseCodeNames[i]); if (found != string::npos) { - return NEW TriggerAtPhase(observer, id, card, target, i, who,sourceUntapped,sourceTap,lifelost,lifeamount,once); + return NEW TriggerAtPhase(observer, id, card, target, i, who, sourceUntapped, sourceTap, lifelost, lifeamount, once); } } } @@ -1592,7 +1592,7 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell found = s.find("rebounded"); if (found != string::npos) { - return NEW TriggerRebound(observer, id, card, target, 2, 1,sourceUntapped,once); + return NEW TriggerRebound(observer, id, card, target, 2, 1, sourceUntapped, once); } return NULL; diff --git a/projects/mtg/src/MTGDefinitions.cpp b/projects/mtg/src/MTGDefinitions.cpp index 5778096ac..9c3d43d96 100644 --- a/projects/mtg/src/MTGDefinitions.cpp +++ b/projects/mtg/src/MTGDefinitions.cpp @@ -233,7 +233,8 @@ const char* Constants::MTGBasicAbilities[] = { "hasdisturb", //Retrace cost is a disturb cost (e.g. "Beloved Beggar") "daybound", //Card has daybound (e.g. "Brutal Cathar") "nightbound", //Card has nightbound (e.g. "Moonrage Brute") - "decayed" //Card has decayd. + "decayed", //Card has decayed. + "hasstrive" //Kicker cost is a strive cost (e.g. "Aerial Formation") }; map Constants::MTGBasicAbilitiesMap; diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 439800118..3171cea4b 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -526,7 +526,7 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card) while(previousManaPool->canAfford(withKickerCost,card->has(Constants::ANYTYPEOFMANA))) { withKickerCost->add(withKickerCost->getKicker()); - if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE]) card->kicked += 1; //Some kicker costs are not a real kicker (e.g. Fuse cost) or they are a replicate cost (eg. "Vacuumelt"). + if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE] || card->basicAbilities[Constants::HASSTRIVE]) card->kicked += 1; //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). } for(int i = 0;i < card->kicked;i++) player->getManaPool()->pay(card->getManaCost()->getKicker()); @@ -537,7 +537,7 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card) { player->getManaPool()->pay(card->getManaCost()->getKicker()); payResult = ManaCost::MANA_PAID_WITH_KICKER; - if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost) or they are a replicate cost (eg. "Vacuumelt"). + if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE] || card->basicAbilities[Constants::HASSTRIVE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). card->alternateCostPaid[ManaCost::MANA_PAID_WITH_KICKER] = 1; } delete withKickerCost; @@ -681,7 +681,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card) { if (!game->targetListIsSet(card)) { - if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost) or they are a replicate cost (eg. "Vacuumelt"). + if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE] || card->basicAbilities[Constants::HASSTRIVE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). return 0; } } @@ -704,7 +704,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card) while(previousManaPool->canAfford(withKickerCost,card->has(Constants::ANYTYPEOFMANA))) { withKickerCost->add(withKickerCost->getKicker()); - if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE]) card->kicked += 1; //Some kicker costs are not a real kicker (e.g. Fuse cost) or they are a replicate cost (eg. "Vacuumelt"). + if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE] || card->basicAbilities[Constants::HASSTRIVE]) card->kicked += 1; //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). } for(int i = 0;i < card->kicked;i++) player->getManaPool()->pay(card->getManaCost()->getKicker()); @@ -715,7 +715,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card) { player->getManaPool()->pay(card->getManaCost()->getKicker()); payResult = ManaCost::MANA_PAID_WITH_KICKER; - if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost) or they are a replicate cost (eg. "Vacuumelt"). + if(!card->basicAbilities[Constants::HASNOKICKER] || card->basicAbilities[Constants::HASREPLICATE] || card->basicAbilities[Constants::HASSTRIVE]) card->kicked = 1; //Some kicker costs are not a real kicker (e.g. Fuse cost, Replicate cost, Strive cost). card->alternateCostPaid[ManaCost::MANA_PAID_WITH_KICKER] = 1; } delete withKickerCost;