52 Commits

Author SHA1 Message Date
Eduardo
8b620627d9 Major Corrections to WAR and removing crashing cards
Cards that check the colors of mana that lands on the opponent battlefield crashes the game, hard to reproduce but happens often enought that I decided to remove them.

Minor fixes in set and Major fixes in WAR primitives
2019-05-01 17:19:01 -05:00
Eduardo
d943778309 Double face cards should be marked as tokens 2019-05-01 17:09:27 -05:00
Eduardo
06cb835a5b Teaching AI proliferate and shocklands
Some minor changes, corrections to XLN and C17, changing name of game mode from horde to tribal wars
2019-05-01 17:00:48 -05:00
Eduardo
f1a529576e Preparing for a release, bug fixes and adjustments to game modes
Updating macros and new cards marked as borderline
2019-04-25 18:03:41 -05:00
Eduardo MG
1af3cff419 Uploading sets since Amonkhet until War of the spark
These are graded as borderline, each set has it's individual txt file, not integrated to the main mtg.txt to make them easier to manage, with the appropiate tools and more testing the files can be integrated. 

Includes standard sets(expansions) and supplemental products(masters sets, commander) since Amonkhet.
2019-04-25 17:53:49 -05:00
Eduardo
5db6b807ba Set limited game mode, AI changes, primitives and _cards.dat corrections
New set limited ,where you get a deck two random sets.

Still playing with the AI values and hueristics.

Cards fixes. Masters Edition should be named ME1 and the Mythic Edition is MED, the cards multiverse ids are still the same so the decks and references should not change.
2019-04-20 15:51:52 -05:00
Eduardo MG
1c6b0bdfd5 New game modes
Rules for several new game modes and rules

horde, get a random tribe and summon a creature from your deck each turn
paradise, lands tap for all mana
false god, exchange permanents at upkeep
morinfen, lose 1 life for every permanent you control at upkeep, starts at 50 life
2019-04-20 12:25:58 -05:00
Eduardo
3dfcc65fa6 Bug fix for the biggest crash and fixes to the primitives
I figured a while ago that the cause of the crash was a rendering issue, not an engine issue, since you could copy spells in the stack if you didn't targeted them. The crash was most likely in ActionStack, just had to follow the trace. It doesn't affect anithing else, that line was trying to render something in the stack that's a permanent but it always had bad ptrs.
2019-04-17 20:28:43 -05:00
Eduardo
c3937ce517 Fixing primitives and mayor bugs report
Game crashes when AI plays a card with cost {X} and that targets a player, this cards can be coded around that restriction and still work as per the rules.

The BIGGEST BUG the game has now is that crashes occur when a PERMANENT TARGETS A SPELL IN THE STACK, sometimes the AI can make this cards work (WTH!?) but never the player.

Effects like mirari and similar could be coded so that you don't target the spell but trigger and copy the source of the trigger, look at the code of mirari for this to be more clear.

This effect used to work for many many years I remember  Glen Elendra Archmage being one of my favorite cards back in the day. This bug has been present since god knows when, as early as october 2016: https://wololo.net/forum/viewtopic.php?f=4&t=66296&start=150#p98160

Also freaking Lemures caused the AI to just keep repeating the effect so I put a limit on activations on them.
2019-04-14 21:56:20 -05:00
Eduardo
ab1fbaa806 New game modes, bug fixes in primitives, improving AI, new planeswalkers type rule
New rules based on vanguard, 3 new random game modes, one is tribal and one uses any card in the game.

Several corrections and bugs fixes. Cards with x in their cost and that can target any player used to crash the game.

Teaching AI new things and changing values of efficiency.

You can have multiple "Jace" planeswalkers, you can't have two of the exact same name (no two Jace, the mind sculptor).
2019-04-14 19:57:01 -05:00
Eduardo
6eca5bea2f Last March Update
Some bug fixing to the primitives, the fetchlands are so buggy that I restored to a simple version

Some minor UI improvements
2019-03-31 20:53:13 -06:00
Rolzad73
e4d73d95ec - removing debug info after travis build fix 2019-03-27 22:50:10 -04:00
Rolzad73
363383df6d - try to fix travis build travis script debug pt 7 (groovy, Java 8 incompatibility) 2019-03-27 22:15:48 -04:00
Rolzad73
0d05804376 - try to fix travis build travis script debug pt 6 (ant error log too long) 2019-03-27 22:04:11 -04:00
Rolzad73
cdd36a404b - try to fix travis build travis script debug pt 5 2019-03-27 21:42:37 -04:00
Rolzad73
64c509980c - fix bad commit travis.yml 2019-03-27 21:39:38 -04:00
Rolzad73
46ba018201 - try to fix travis build travis script debug pt 4 2019-03-27 21:37:38 -04:00
Rolzad73
0cb931e6e2 - try to fix travis build travis script debug pt 3 2019-03-27 21:25:26 -04:00
Rolzad73
58af6f73d9 - try to fix travis build travis script debug pt 2 2019-03-27 21:12:46 -04:00
Rolzad73
e81f1299cb - try to fix travis build travis script debug 2019-03-27 21:03:40 -04:00
Rolzad73
9b5f9684b0 - try to fix travis build android dependancies pt 3 2019-03-27 20:48:21 -04:00
Rolzad73
d934c0948c - try to fix travis build android dependancies pt 2 2019-03-27 20:45:05 -04:00
Rolzad73
917a3a88df - try to fix travis build android dependancies 2019-03-27 20:38:51 -04:00
Rolzad73
dc5b8a8c52 - try to fix travis build 2019-03-27 15:50:08 -04:00
Eduardo MG
d2b44e652b Uploading a couple of years of sets
RNA Guild Kit		Set Code: GK2
Ravnica Allegiance	Set Code: RNA
Ultimate Box Topper Set Code: PUMA
Ultimate Masters	Set Code: UMA
GRN Guild Kit		Set Code: GK1
Guilds of Ravnica	Set Code: GRN
Commander 2018	Set Code: C18
Core Set 2019		Set Code: M19
Signature 
Spellbook: Jace	Set Code: SS1
Battlebond 		Set Code: BBD
Commander Anthology 
Volume II			Set Code: CM2
Dominaria		Set Code: DOM
Duel Decks: Elves 	
vs. Inventors		Set Code: DDU
Masters 25 		Set Code: A25
Rivals of Ixalan	Set Code: RIX
Unstable			Set Code: UST
Explorers of Ixalan   Set Code: E02
From the Vault: 
Transform		Set Code: V17
Iconic Masters		Set Code: IMA
Duel Decks: Merfolk
vs. Goblins		Set Code: DDT
Ixalan			Set Code: XLN
Commander 2017	Set Code: C17
Hour of Devastation Set Code: HOU
Archenemy: Nicol 
Bolas			Set Code: E01
Commander Anthology	Set Code: CMA
Amonkhet			Set Code: AKH
Amonkhet 
Invocations			Set Code: MP2
Duel Decks: Mind 
vs. Might			        Set Code: DDS
Modern Masters 2017	Set Code: MM3
2019-03-26 20:35:45 -06:00
Eduardo
1ce3b469e7 Update primitives
Added the supertype Legendary to Planeswalkers.

When you pay life the code should be {L:1}  not just {L} or else the cards ave very buggy.

Several bug fixes, card corrections and typos.
2019-03-26 16:50:34 -06:00
Anthony Calosa
07e6d90c98 Merge pull request #975 from kevlahnota/master
Some fixes
2017-08-06 13:33:07 +08:00
Anthony Calosa
85231cda01 Fix Nissa's Chosen
Code seems workaround, it needs hardcoded...
2017-08-05 22:09:49 +08:00
Anthony Calosa
8549b7b1b4 Interrupt targetted abilities
This should have an option...
2017-08-05 18:52:27 +08:00
Anthony Calosa
9f58ef9916 small fixes for primitives 2017-08-05 18:16:47 +08:00
Anthony Calosa
c734ee9fd1 Add exert Indicator
"*" signifies exert
2017-08-05 18:16:24 +08:00
Anthony Calosa
77d87902d9 Add restriction for exert
hasexerted and notexerted
2017-08-05 18:15:44 +08:00
Anthony Calosa
b5c8656ac9 Fix Blink 2017-08-05 18:15:13 +08:00
Anthony Calosa
28f6b73da6 Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-08-03 20:03:26 +08:00
Anthony Calosa
521b505543 Merge pull request #974 from kevlahnota/master
Fix morbid
2017-08-03 19:54:35 +08:00
Anthony Calosa
c5a3310103 quick Fix for zerodead 2017-08-03 18:32:16 +08:00
Anthony Calosa
0c053c713a fix morbid
also added zerodead restriction - returns true if you dont have any
creature that died this turn
2017-08-03 18:27:45 +08:00
Anthony Calosa
bc06f93aae Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-08-03 15:52:56 +08:00
Anthony Calosa
8e919aeeb1 Merge pull request #973 from kevlahnota/master
Support for AKH/HOU Mechanics
2017-08-03 10:36:15 +08:00
Anthony Calosa
6bd09e42e0 Add support for Amonkhet Mechanics
and fix some cards.
Added exerted trigger, event and add removemc keyword inside transforms
ability so we can soft code Embalm and Eternalize...
2017-08-03 09:49:37 +08:00
Anthony Calosa
1f670b9919 Merge pull request #12 from WagicProject/master
Update unsuported cards, set a condition for showing poison counters …
2017-08-03 09:16:30 +08:00
punkeduard
c805a58fb0 Update unsuported cards, set a condition for showing poison counters and energy counter, added tribal al card type check, show the amount o 2017-08-02 18:42:52 -05:00
Anthony Calosa
34517004df Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-05-09 12:38:59 +08:00
Anthony Calosa
b0506bcd96 Merge pull request #968 from kevlahnota/master
readded fixes by punkeduard
2017-05-09 12:29:16 +08:00
Anthony Calosa
7a3a6c04a6 readded fixes by punkeduard 2017-05-09 12:28:07 +08:00
Anthony Calosa
54e4b08e1f Merge pull request #11 from WagicProject/master
test pull
2017-05-09 12:25:45 +08:00
Anthony Calosa
67c22c5186 Merge remote-tracking branch 'refs/remotes/WagicProject/master' 2017-05-09 12:09:12 +08:00
punkeduard
87aba86fa8 Revert "Fixing bugs in the primitives"
This reverts commit 665f8ce755.
2017-05-08 22:17:27 -05:00
Rolzad73
28ea300f42 - fix forward declaration 2017-05-08 19:39:32 -04:00
Rolzad73
858c26b46a Merge pull request #966 from WagicProject/key_bind_changes
Key bind changes
2017-05-08 19:03:03 -04:00
Rolzad73
70a6c7149c - semi cleanup 2017-05-08 19:01:41 -04:00
Rolzad73
b4a34216c8 - updated Qt keybinding translation 2017-05-08 18:58:47 -04:00
89 changed files with 48648 additions and 5757 deletions

View File

@@ -18,7 +18,7 @@ before_install:
export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk" &&
export PSPSDK="$PSPDEV/psp/sdk" &&
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin" &&
wget -O sdk.lzma http://superb-sea2.dl.sourceforge.net/project/minpspw/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma;
wget -O sdk.lzma http://downloads.sourceforge.net/project/minpspw/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma;
fi
# Building for Qt here
- if [ "$BUILD_Qt" == "YES" ]; then
@@ -31,7 +31,9 @@ before_install:
# Building for Android here
- if [ "$BUILD_ANDROID" == "YES" ]; then
export ANDROID="android-sdk-linux/tools/android" &&
if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq --force-yes libgd2-xpm ia32-libs ia32-libs-multiarch jq; fi &&
if [ `uname -m` = x86_64 ]; then
sudo dpkg --add-architecture i386 && sudo apt-get update &&
sudo apt-get install -qq --force-yes libgd2-xpm-dev libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jq; fi &&
wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2 -nv &&
wget http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz -nv;
fi
@@ -52,7 +54,6 @@ install:
env:
global:
- JAVA_HOME=/usr/lib/jvm/java-7-oracle # Force set JVM version to comply with Travis Ant version (1.8.2)
- secure: "EBzr1+qjQsOhn0s+tcFmXR1jP9B0xiOSXuXbRXWZ1OEHNvp8+A5/pS84LYVFlaZqmxr5dApxvPtwhgLIUbQ3EPXm8LpC3KgSD4dS+9/QMbxhe5TK4oczgFRGcDTMJQZsCzhOh7hp3tbcbJg5Gp+VT7aFjFQSHDGwhzSJXsXwh/8="
- secure: "X5dTQfofqAutnXxmu11Ep2MQ5QYnMN8m0AITRtwymhEF2UclcOudI1+skPtuhAGbWQnSO+lhunV3cvMfw2/Ml3k/VDz6VdFSKFrzAu7ja1VLJfcxr7chi0s8q30pVBb66tGydjIBac3B+RQyqgmZQW1frbRrhC/kPFQ6wPWOJdQ="
- secure: "T97NUPnxCpVZ/c5HH0zfo0FO3DPSRMSmze58ubW5EUTZOjAMtEt+OFdsrNZvUTCugUj2M1agtonZbAbczpaAL+lgZcHDgXgWMkfO0pMnsWX1yyCNqMuE/iTMpJr/xsLQeyWlftWjJLsseQU45abZsd1XVmda/G+ZhrDLF1y55SA="

View File

@@ -96,7 +96,8 @@ hgeParticleSystem::hgeParticleSystem(hgeParticleSystemInfo *psi)
{
//hge=hgeCreate(HGE_VERSION);
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
if (psi)
memcpy(&info, psi, sizeof(hgeParticleSystemInfo));
vecLocation.x=vecPrevLocation.x=0.0f;
vecLocation.y=vecPrevLocation.y=0.0f;

View File

@@ -1,3 +0,0 @@
maxGrade=0: Borderline (99% OK)
keybindings_sdl=13:2,27:2,32:10,97:7,98:5,100:6,101:15,102:16,105:11,106:12,107:13,108:10,113:14,115:9,119:8,1073741903:6,1073741904:7,1073741905:9,1073741906:8,1073741912:2,1073741952:14,1073741953:13,1073742048:3,1073742052:3,1073742094:2
aidecks=10

View File

@@ -1,4 +1,4 @@
name=Blitzkrieg
name=Mode Blitzkrieg
unlock=prx_geirkztilb
[INIT]
mode=mtg

View File

@@ -34,4 +34,58 @@ unlock_text=Blitzkrieg Mode Unlocked
teaser=Like to play fast? Unlock Blitzkrieg Mode :)
trophyroom_text=Won with more than 18 lands.
unlock_condition=type(land|myBattlefield)~morethan~18
[/award]
[/award]
[award]
name=Paradise
id=prx_paradise
unlock_img=
unlock_text=Birds of Paradise Mode Unlocked
teaser=Utopia! Bring me down to the Paradise City.
Lands you control have "{T}: Add one mana of any color."
trophyroom_text=Won with Birds of Paradise on the battlefield.
unlock_condition=type(Birds of Paradise|mybattlefield)~morethan~0
[/award]
[award]
name=Morinfen Mode
id=prx_morinfen
unlock_img=
unlock_text=Morinfen Mode Unlocked
teaser="I looked into its eyes, and its soul was so empty I saw no reflection, no light there." — Crovax
At the beginning of your upkeep, you lose 1 life for each permanent you control.
trophyroom_text=Won with less than 5 life.
unlock_condition=this(controllerlife<=6)
[/award]
[award]
name=Horde
id=prx_horde
unlock_img=
unlock_text=Tribal Horde Mode Unlocked
teaser="From shards and splinters I call forth my living horde." -Molimo, maro-sorcerer
trophyroom_text=Won with more than 25 life.
unlock_condition=this(controllerlife>=26)
[/award]
[award]
name=False God
id=prx_karona
unlock_img=
unlock_text=False God Mode Unlocked
teaser=At the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
trophyroom_text=Devotion to red more than 7.
unlock_condition=this(variable{type:manar}>7)
[/award]
[award]
name=Titania Mode
id=prx_titania
unlock_img=
unlock_text=Titania Mode Unlocked
teaser=Voice of the Argoth forest, defender of its creatures, and enforcer of its laws, Titania is literally an aspect of the forest itself.
You may play an additional land on each of your turns.
trophyroom_text=Devotion to green more than 7.
unlock_condition=this(variable{type:manag}>7)
[/award]

View File

@@ -0,0 +1,15 @@
include mtg.txt
name=False God
unlock=prx_karona
[INIT]
mode=mtg
[PLAYERS]
life:28
auto=shuffle
auto=draw:6
auto=@each myupkeep:auto=moverandom(*) from(opponentBattlefield) to(myBattlefield)
auto=@each myupkeep:auto=moverandom(*) from(myBattlefield) to(opponentBattlefield)
auto=maxPlay(land)+1

View File

@@ -0,0 +1,13 @@
include mtg.txt
name=Tribal Wars
unlock=prx_horde
[INIT]
mode=horde
[PLAYERS]
life:20
auto=shuffle
auto=draw:7
auto=@each my upkeep:if type(creature[manacost<=2]|mylibrary)~lessthan~1 then moverandom(creature[manacost<=4]) from(library) to(battlefield)
auto=@each my upkeep:moverandom(creature[manacost<=2]) from(library) to(battlefield)

View File

@@ -0,0 +1,12 @@
include mtg.txt
name=Morifen
unlock=prx_morinfen
[INIT]
mode=mtg
[PLAYERS]
life:50
auto=shuffle
auto=draw:7
auto=@each myupkeep:foreach(*|mybattlefield) life:-1

View File

@@ -0,0 +1,20 @@
include mtg.txt
name=Paradise
unlock=prx_paradise
[INIT]
mode=mtg
[PLAYERS]
life:17
auto=shuffle
auto=draw:7
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{W}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{U}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{B}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{G}

View File

@@ -0,0 +1,9 @@
include mtg.txt
name=Random 3 Colors
unlock=prx_rnddeck
[INIT]
mode=random3
[PLAYERS]
auto=shuffle
auto=draw:7

View File

@@ -0,0 +1,16 @@
include mtg.txt
name=Random 5 Colors
unlock=prx_rnddeck
[INIT]
mode=random5
[PLAYERS]
life:20
auto=shuffle
auto=draw:7
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{W}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{U}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{R}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{B}
auto=lord(*[-noactivatedability;-nomanaability;-notapability;land]|MyBattlefield) {T}:Add{G}

View File

@@ -0,0 +1,11 @@
include mtg.txt
name=Set Limited
unlock=prx_rnddeck
[INIT]
mode=set_limited
[PLAYERS]
life:20
auto=shuffle
auto=draw:7

View File

@@ -0,0 +1,17 @@
include mtg.txt
name=Titania
unlock=prx_titania
[INIT]
mode=mtg
[PLAYERS]
life:15
auto=shuffle
auto=draw:9
auto=maxPlay(land)+1
#auto=@each myupkeep:auto=moverandom(*) from(myBattlefield) to #(opponentBattlefield)
#auto=@each myupkeep:auto=moverandom(*) from(opponentBattlefield) #to(myBattlefield)
#auto=@each myupkeep:draw:1
#auto=@each myupkeep:life:-1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,331 @@
[meta]
author=Wagic Team
name=Duel Decks: Mind vs. Might
year=2017-03-31
total=65
[/meta]
[card]
primitive=Jhoira of the Ghitu
id=426573
rarity=M
[/card]
[card]
primitive=Beacon of Tomorrows
id=426574
rarity=R
[/card]
[card]
primitive=Deep-Sea Kraken
id=426575
rarity=R
[/card]
[card]
primitive=Mind's Desire
id=426576
rarity=R
[/card]
[card]
primitive=Peer Through Depths
id=426577
rarity=C
[/card]
[card]
primitive=Quicken
id=426578
rarity=R
[/card]
[card]
primitive=Reach Through Mists
id=426579
rarity=C
[/card]
[card]
primitive=Sage-Eye Avengers
id=426580
rarity=R
[/card]
[card]
primitive=Sift Through Sands
id=426581
rarity=C
[/card]
[card]
primitive=Snap
id=426582
rarity=C
[/card]
[card]
primitive=Talrand, Sky Summoner
id=426583
rarity=R
[/card]
[card]
primitive=Temporal Fissure
id=426584
rarity=C
[/card]
[card]
primitive=The Unspeakable
id=426585
rarity=R
[/card]
[card]
primitive=Desperate Ritual
id=426586
rarity=U
[/card]
[card]
primitive=Empty the Warrens
id=426587
rarity=C
[/card]
[card]
primitive=Grapeshot
id=426588
rarity=C
[/card]
[card]
primitive=Rift Bolt
id=426589
rarity=C
[/card]
[card]
primitive=Shivan Meteor
id=426590
rarity=U
[/card]
[card]
primitive=Volcanic Vision
id=426591
rarity=R
[/card]
[card]
primitive=Young Pyromancer
id=426592
rarity=U
[/card]
[card]
primitive=Firemind's Foresight
id=426593
rarity=R
[/card]
[card]
primitive=Goblin Electromancer
id=426594
rarity=C
[/card]
[card]
primitive=Jori En, Ruin Diver
id=426595
rarity=R
[/card]
[card]
primitive=Nivix Cyclops
id=426596
rarity=C
[/card]
[card]
primitive=Spellheart Chimera
id=426597
rarity=U
[/card]
[card]
primitive=Nucklavee
id=426598
rarity=U
[/card]
[card]
primitive=Swiftwater Cliffs
id=426599
rarity=C
[/card]
[card]
primitive=Island
id=426600
rarity=L
[/card]
[card]
primitive=Island
id=426601
rarity=L
[/card]
[card]
primitive=Island
id=426602
rarity=L
[/card]
[card]
primitive=Mountain
id=426603
rarity=L
[/card]
[card]
primitive=Mountain
id=426604
rarity=L
[/card]
[card]
primitive=Mountain
id=426605
rarity=L
[/card]
[card]
primitive=Lovisa Coldeyes
id=426606
rarity=M
[/card]
[card]
primitive=Beacon of Destruction
id=426607
rarity=R
[/card]
[card]
primitive=Boldwyr Intimidator
id=426608
rarity=U
[/card]
[card]
primitive=Firebolt
id=426609
rarity=C
[/card]
[card]
primitive=Gorehorn Minotaurs
id=426610
rarity=C
[/card]
[card]
primitive=Kamahl, Pit Fighter
id=426611
rarity=R
[/card]
[card]
primitive=Kruin Striker
id=426612
rarity=C
[/card]
[card]
primitive=Zo-Zu the Punisher
id=426613
rarity=R
[/card]
[card]
primitive=Ambassador Oak
id=426614
rarity=C
[/card]
[card]
primitive=Beast Attack
id=426615
rarity=U
[/card]
[card]
primitive=Call of the Herd
id=426616
rarity=R
[/card]
[card]
primitive=Cloudcrown Oak
id=426617
rarity=C
[/card]
[card]
primitive=Harmonize
id=426618
rarity=U
[/card]
[card]
primitive=Increasing Savagery
id=426619
rarity=R
[/card]
[card]
primitive=Rampant Growth
id=426620
rarity=C
[/card]
[card]
primitive=Roar of the Wurm
id=426621
rarity=U
[/card]
[card]
primitive=Skarrgan Pit-Skulk
id=426622
rarity=C
[/card]
[card]
primitive=Sylvan Might
id=426623
rarity=C
[/card]
[card]
primitive=Talara's Battalion
id=426624
rarity=R
[/card]
[card]
primitive=Radha, Heir to Keld
id=426625
rarity=R
[/card]
[card]
primitive=Relentless Hunter
id=426626
rarity=U
[/card]
[card]
primitive=Burning-Tree Emissary
id=426627
rarity=U
[/card]
[card]
primitive=Guttural Response
id=426628
rarity=U
[/card]
[card]
primitive=Rubblebelt Raiders
id=426629
rarity=R
[/card]
[card]
primitive=Coat of Arms
id=426630
rarity=R
[/card]
[card]
primitive=Rugged Highlands
id=426631
rarity=C
[/card]
[card]
primitive=Mountain
id=426632
rarity=L
[/card]
[card]
primitive=Mountain
id=426633
rarity=L
[/card]
[card]
primitive=Mountain
id=426634
rarity=L
[/card]
[card]
primitive=Forest
id=426635
rarity=L
[/card]
[card]
primitive=Forest
id=426636
rarity=L
[/card]
[card]
primitive=Forest
id=426637
rarity=L
[/card]

View File

@@ -0,0 +1,321 @@
[meta]
author=Wagic Team
name=Duel Decks: Merfolk vs. Goblins
year=2017-10-24
total=63
[/meta]
[card]
primitive=Master of Waves
id=438441
rarity=M
[/card]
[card]
primitive=Aquitect's Will
id=438442
rarity=C
[/card]
[card]
primitive=Claustrophobia
id=438443
rarity=C
[/card]
[card]
primitive=Concentrate
id=438444
rarity=U
[/card]
[card]
primitive=Engulf the Shore
id=438445
rarity=R
[/card]
[card]
primitive=Essence Scatter
id=438446
rarity=C
[/card]
[card]
primitive=Harbinger of the Tides
id=438447
rarity=R
[/card]
[card]
primitive=Inkfathom Divers
id=438448
rarity=C
[/card]
[card]
primitive=Master of the Pearl Trident
id=438449
rarity=R
[/card]
[card]
primitive=Merfolk Looter
id=438450
rarity=U
[/card]
[card]
primitive=Merfolk Sovereign
id=438451
rarity=R
[/card]
[card]
primitive=Merfolk Wayfinder
id=438452
rarity=U
[/card]
[card]
primitive=Merrow Reejerey
id=438453
rarity=U
[/card]
[card]
primitive=Mind Spring
id=438454
rarity=R
[/card]
[card]
primitive=Misdirection
id=438455
rarity=R
[/card]
[card]
primitive=Rootwater Hunter
id=438456
rarity=U
[/card]
[card]
primitive=Scroll Thief
id=438457
rarity=C
[/card]
[card]
primitive=Streambed Aquitects
id=438458
rarity=C
[/card]
[card]
primitive=Tidal Courier
id=438459
rarity=U
[/card]
[card]
primitive=Tidal Warrior
id=438460
rarity=C
[/card]
[card]
primitive=Tidal Wave
id=438461
rarity=C
[/card]
[card]
primitive=Tidebinder Mage
id=438462
rarity=R
[/card]
[card]
primitive=Triton Tactics
id=438463
rarity=U
[/card]
[card]
primitive=Wake Thrasher
id=438464
rarity=R
[/card]
[card]
primitive=Cold-Eyed Selkie
id=438465
rarity=R
[/card]
[card]
primitive=Blighted Cataract
id=438466
rarity=U
[/card]
[card]
primitive=Lonely Sandbar
id=438467
rarity=C
[/card]
[card]
primitive=Island
id=438468
rarity=L
[/card]
[card]
primitive=Island
id=438469
rarity=L
[/card]
[card]
primitive=Island
id=438470
rarity=L
[/card]
[card]
primitive=Island
id=438471
rarity=L
[/card]
[card]
primitive=Warren Instigator
id=438472
rarity=M
[/card]
[card]
primitive=Battle Squadron
id=438473
rarity=U
[/card]
[card]
primitive=Boggart Brute
id=438474
rarity=C
[/card]
[card]
primitive=Brute Strength
id=438475
rarity=C
[/card]
[card]
primitive=Cleaver Riot
id=438476
rarity=U
[/card]
[card]
primitive=Ember Hauler
id=438477
rarity=U
[/card]
[card]
primitive=Foundry Street Denizen
id=438478
rarity=C
[/card]
[card]
primitive=Gempalm Incinerator
id=438479
rarity=U
[/card]
[card]
primitive=Ghostfire
id=438480
rarity=C
[/card]
[card]
primitive=Goblin Chieftain
id=438481
rarity=R
[/card]
[card]
primitive=Goblin Diplomats
id=438482
rarity=R
[/card]
[card]
primitive=Goblin Glory Chaser
id=438483
rarity=U
[/card]
[card]
primitive=Goblin Goon
id=438484
rarity=R
[/card]
[card]
primitive=Goblin Grenade
id=438485
rarity=U
[/card]
[card]
primitive=Goblin Rabblemaster
id=438486
rarity=R
[/card]
[card]
primitive=Goblin Razerunners
id=438487
rarity=R
[/card]
[card]
primitive=Goblin Ringleader
id=438488
rarity=U
[/card]
[card]
primitive=Goblin Tunneler
id=438489
rarity=C
[/card]
[card]
primitive=Goblin Wardriver
id=438490
rarity=U
[/card]
[card]
primitive=Hordeling Outburst
id=438491
rarity=U
[/card]
[card]
primitive=Krenko, Mob Boss
id=438492
rarity=R
[/card]
[card]
primitive=Krenko's Command
id=438493
rarity=C
[/card]
[card]
primitive=Relentless Assault
id=438494
rarity=R
[/card]
[card]
primitive=Tarfire
id=438495
rarity=C
[/card]
[card]
primitive=Brittle Effigy
id=438496
rarity=R
[/card]
[card]
primitive=Goblin Charbelcher
id=438497
rarity=R
[/card]
[card]
primitive=Blighted Gorge
id=438498
rarity=U
[/card]
[card]
primitive=Forgotten Cave
id=438499
rarity=C
[/card]
[card]
primitive=Mountain
id=438500
rarity=L
[/card]
[card]
primitive=Mountain
id=438501
rarity=L
[/card]
[card]
primitive=Mountain
id=438502
rarity=L
[/card]
[card]
primitive=Mountain
id=438503
rarity=L
[/card]

View File

@@ -0,0 +1,386 @@
[meta]
author=Wagic Team
name=Duel Decks: Elves vs. Inventors
year=2018-04-06
total=76
[/meta]
[card]
primitive=Ezuri, Renegade Leader
id=442737
rarity=M
[/card]
[card]
primitive=Dwynen, Gilt-Leaf Daen
id=442738
rarity=R
[/card]
[card]
primitive=Dwynen's Elite
id=442739
rarity=U
[/card]
[card]
primitive=Elvish Aberration
id=442740
rarity=C
[/card]
[card]
primitive=Elvish Archdruid
id=442741
rarity=R
[/card]
[card]
primitive=Elvish Branchbender
id=442742
rarity=C
[/card]
[card]
primitive=Elvish Mystic
id=442743
rarity=C
[/card]
[card]
primitive=Elvish Vanguard
id=442744
rarity=C
[/card]
[card]
primitive=Ezuri's Archers
id=442745
rarity=C
[/card]
[card]
primitive=Fierce Empath
id=442746
rarity=C
[/card]
[card]
primitive=Gladehart Cavalry
id=442747
rarity=R
[/card]
[card]
primitive=Ivy Lane Denizen
id=442748
rarity=C
[/card]
[card]
primitive=Jagged-Scar Archers
id=442749
rarity=U
[/card]
[card]
primitive=Krosan Tusker
id=442750
rarity=C
[/card]
[card]
primitive=Kujar Seedsculptor
id=442751
rarity=C
[/card]
[card]
primitive=Lead the Stampede
id=442752
rarity=C
[/card]
[card]
primitive=Leaf Gilder
id=442753
rarity=C
[/card]
[card]
primitive=Llanowar Empath
id=442754
rarity=C
[/card]
[card]
primitive=Naturalize
id=442755
rarity=C
[/card]
[card]
primitive=Nature's Way
id=442756
rarity=U
[/card]
[card]
primitive=Nissa's Judgment
id=442757
rarity=U
[/card]
[card]
primitive=Regal Force
id=442758
rarity=R
[/card]
[card]
primitive=Sylvan Advocate
id=442759
rarity=R
[/card]
[card]
primitive=Talara's Battalion
id=442760
rarity=R
[/card]
[card]
primitive=Viridian Shaman
id=442761
rarity=U
[/card]
[card]
primitive=Wildheart Invoker
id=442762
rarity=C
[/card]
[card]
primitive=Yeva, Nature's Herald
id=442763
rarity=R
[/card]
[card]
primitive=Oran-Rief, the Vastwood
id=442764
rarity=R
[/card]
[card]
primitive=Tranquil Thicket
id=442765
rarity=C
[/card]
[card]
primitive=Treetop Village
id=442766
rarity=U
[/card]
[card]
primitive=Forest
id=442767
rarity=L
[/card]
[card]
primitive=Forest
id=442768
rarity=L
[/card]
[card]
primitive=Forest
id=442769
rarity=L
[/card]
[card]
primitive=Forest
id=442770
rarity=L
[/card]
[card]
primitive=Goblin Welder
id=442771
rarity=M
[/card]
[card]
primitive=Artificer's Epiphany
id=442772
rarity=C
[/card]
[card]
primitive=Etherium Sculptor
id=442773
rarity=C
[/card]
[card]
primitive=Faerie Mechanist
id=442774
rarity=C
[/card]
[card]
primitive=Riddlesmith
id=442775
rarity=U
[/card]
[card]
primitive=Treasure Mage
id=442776
rarity=U
[/card]
[card]
primitive=Trinket Mage
id=442777
rarity=C
[/card]
[card]
primitive=Trophy Mage
id=442778
rarity=U
[/card]
[card]
primitive=Whirler Rogue
id=442779
rarity=U
[/card]
[card]
primitive=Barrage Ogre
id=442780
rarity=U
[/card]
[card]
primitive=Galvanic Blast
id=442781
rarity=C
[/card]
[card]
primitive=Ghirapur Gearcrafter
id=442782
rarity=C
[/card]
[card]
primitive=Pia and Kiran Nalaar
id=442783
rarity=R
[/card]
[card]
primitive=Shrapnel Blast
id=442784
rarity=U
[/card]
[card]
primitive=Welding Sparks
id=442785
rarity=C
[/card]
[card]
primitive=Maverick Thopterist
id=442786
rarity=U
[/card]
[card]
primitive=Reclusive Artificer
id=442787
rarity=U
[/card]
[card]
primitive=Darksteel Plate
id=442788
rarity=R
[/card]
[card]
primitive=Filigree Familiar
id=442789
rarity=U
[/card]
[card]
primitive=Ichor Wellspring
id=442790
rarity=C
[/card]
[card]
primitive=Inventor's Goggles
id=442791
rarity=C
[/card]
[card]
primitive=Mycosynth Wellspring
id=442792
rarity=C
[/card]
[card]
primitive=Myr Battlesphere
id=442793
rarity=R
[/card]
[card]
primitive=Myr Sire
id=442794
rarity=C
[/card]
[card]
primitive=Neurok Replica
id=442795
rarity=C
[/card]
[card]
primitive=Pyrite Spellbomb
id=442796
rarity=C
[/card]
[card]
primitive=Scuttling Doom Engine
id=442797
rarity=R
[/card]
[card]
primitive=Solemn Simulacrum
id=442798
rarity=R
[/card]
[card]
primitive=Thopter Assembly
id=442799
rarity=R
[/card]
[card]
primitive=Voyager Staff
id=442800
rarity=U
[/card]
[card]
primitive=Darksteel Citadel
id=442801
rarity=U
[/card]
[card]
primitive=Foundry of the Consuls
id=442802
rarity=U
[/card]
[card]
primitive=Great Furnace
id=442803
rarity=C
[/card]
[card]
primitive=Phyrexia's Core
id=442804
rarity=U
[/card]
[card]
primitive=Seat of the Synod
id=442805
rarity=C
[/card]
[card]
primitive=Shivan Reef
id=442806
rarity=R
[/card]
[card]
primitive=Swiftwater Cliffs
id=442807
rarity=C
[/card]
[card]
primitive=Temple of Epiphany
id=442808
rarity=R
[/card]
[card]
primitive=Island
id=442809
rarity=L
[/card]
[card]
primitive=Island
id=442810
rarity=L
[/card]
[card]
primitive=Mountain
id=442811
rarity=L
[/card]
[card]
primitive=Mountain
id=442812
rarity=L
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,536 @@
[meta]
author=Wagic Team
name=Archenemy: Nicol Bolas
year=2017-06-16
total=106
[/meta]
[card]
primitive=Aegis Angel
id=430540
rarity=R
[/card]
[card]
primitive=Aerial Responder
id=430541
rarity=U
[/card]
[card]
primitive=Anointer of Champions
id=430542
rarity=U
[/card]
[card]
primitive=Doomed Traveler
id=430543
rarity=C
[/card]
[card]
primitive=Excoriate
id=430544
rarity=C
[/card]
[card]
primitive=Expedition Raptor
id=430545
rarity=C
[/card]
[card]
primitive=Fencing Ace
id=430546
rarity=U
[/card]
[card]
primitive=Fiendslayer Paladin
id=430547
rarity=R
[/card]
[card]
primitive=Flickerwisp
id=430548
rarity=U
[/card]
[card]
primitive=Gideon Jura
id=430549
rarity=M
[/card]
[card]
primitive=Gideon's Lawkeeper
id=430550
rarity=C
[/card]
[card]
primitive=Grand Abolisher
id=430551
rarity=R
[/card]
[card]
primitive=Grasp of the Hieromancer
id=430552
rarity=C
[/card]
[card]
primitive=Lightwielder Paladin
id=430553
rarity=R
[/card]
[card]
primitive=Mentor of the Meek
id=430554
rarity=R
[/card]
[card]
primitive=Moment of Heroism
id=430555
rarity=C
[/card]
[card]
primitive=Odric, Master Tactician
id=430556
rarity=R
[/card]
[card]
primitive=Precinct Captain
id=430557
rarity=R
[/card]
[card]
primitive=Relief Captain
id=430558
rarity=U
[/card]
[card]
primitive=Shoulder to Shoulder
id=430559
rarity=C
[/card]
[card]
primitive=Sun Titan
id=430560
rarity=M
[/card]
[card]
primitive=Youthful Knight
id=430561
rarity=C
[/card]
[card]
primitive=Compulsive Research
id=430562
rarity=C
[/card]
[card]
primitive=Icefall Regent
id=430563
rarity=R
[/card]
[card]
primitive=Ior Ruin Expedition
id=430564
rarity=C
[/card]
[card]
primitive=Prognostic Sphinx
id=430565
rarity=R
[/card]
[card]
primitive=Reckless Scholar
id=430566
rarity=U
[/card]
[card]
primitive=Sphinx of Jwar Isle
id=430567
rarity=R
[/card]
[card]
primitive=Vision Skeins
id=430568
rarity=C
[/card]
[card]
primitive=Windrider Eel
id=430569
rarity=C
[/card]
[card]
primitive=Archfiend of Depravity
id=430570
rarity=R
[/card]
[card]
primitive=Deathbringer Regent
id=430571
rarity=R
[/card]
[card]
primitive=Doom Blade
id=430572
rarity=U
[/card]
[card]
primitive=Harvester of Souls
id=430573
rarity=R
[/card]
[card]
primitive=Nightscape Familiar
id=430574
rarity=C
[/card]
[card]
primitive=Overseer of the Damned
id=430575
rarity=R
[/card]
[card]
primitive=Reckless Spite
id=430576
rarity=U
[/card]
[card]
primitive=Vampire Nighthawk
id=430577
rarity=U
[/card]
[card]
primitive=Avatar of Fury
id=430578
rarity=R
[/card]
[card]
primitive=Battle-Rattle Shaman
id=430579
rarity=C
[/card]
[card]
primitive=Blood Ogre
id=430580
rarity=C
[/card]
[card]
primitive=Chandra, Pyromaster
id=430581
rarity=M
[/card]
[card]
primitive=Chandra's Outrage
id=430582
rarity=C
[/card]
[card]
primitive=Chandra's Phoenix
id=430583
rarity=R
[/card]
[card]
primitive=Coordinated Assault
id=430584
rarity=U
[/card]
[card]
primitive=Dualcaster Mage
id=430585
rarity=R
[/card]
[card]
primitive=Fiery Fall
id=430586
rarity=C
[/card]
[card]
primitive=Flametongue Kavu
id=430587
rarity=U
[/card]
[card]
primitive=Gorehorn Minotaurs
id=430588
rarity=C
[/card]
[card]
primitive=Grim Lavamancer
id=430589
rarity=R
[/card]
[card]
primitive=Guttersnipe
id=430590
rarity=U
[/card]
[card]
primitive=Hammerhand
id=430591
rarity=C
[/card]
[card]
primitive=Inferno Titan
id=430592
rarity=M
[/card]
[card]
primitive=Lightning Bolt
id=430593
rarity=U
[/card]
[card]
primitive=Obsidian Fireheart
id=430594
rarity=M
[/card]
[card]
primitive=Searing Spear
id=430595
rarity=C
[/card]
[card]
primitive=Skarrgan Firebird
id=430596
rarity=U
[/card]
[card]
primitive=Stormblood Berserker
id=430597
rarity=U
[/card]
[card]
primitive=Sudden Demise
id=430598
rarity=R
[/card]
[card]
primitive=Torchling
id=430599
rarity=R
[/card]
[card]
primitive=Volcanic Geyser
id=430600
rarity=U
[/card]
[card]
primitive=Cultivate
id=430601
rarity=C
[/card]
[card]
primitive=Explore
id=430602
rarity=C
[/card]
[card]
primitive=Fertilid
id=430603
rarity=C
[/card]
[card]
primitive=Forgotten Ancient
id=430604
rarity=R
[/card]
[card]
primitive=Hunter's Prowess
id=430605
rarity=R
[/card]
[card]
primitive=Khalni Heart Expedition
id=430606
rarity=C
[/card]
[card]
primitive=Nissa, Worldwaker
id=430607
rarity=M
[/card]
[card]
primitive=Oran-Rief Hydra
id=430608
rarity=R
[/card]
[card]
primitive=Press the Advantage
id=430609
rarity=U
[/card]
[card]
primitive=Rampaging Baloths
id=430610
rarity=M
[/card]
[card]
primitive=Retreat to Kazandu
id=430611
rarity=U
[/card]
[card]
primitive=Scute Mob
id=430612
rarity=R
[/card]
[card]
primitive=Sylvan Bounty
id=430613
rarity=C
[/card]
[card]
primitive=Thragtusk
id=430614
rarity=R
[/card]
[card]
primitive=Turntimber Basilisk
id=430615
rarity=U
[/card]
[card]
primitive=Vastwood Zendikon
id=430616
rarity=C
[/card]
[card]
primitive=Vines of the Recluse
id=430617
rarity=C
[/card]
[card]
primitive=Woodborn Behemoth
id=430618
rarity=U
[/card]
[card]
primitive=Baleful Strix
id=430619
rarity=U
[/card]
[card]
primitive=Blood Tyrant
id=430620
rarity=R
[/card]
[card]
primitive=Cruel Ultimatum
id=430621
rarity=R
[/card]
[card]
primitive=Dreadbore
id=430622
rarity=R
[/card]
[card]
primitive=Extract from Darkness
id=430623
rarity=U
[/card]
[card]
primitive=Nicol Bolas, Planeswalker
id=430624
rarity=M
[/card]
[card]
primitive=Slave of Bolas
id=430625
rarity=U
[/card]
[card]
primitive=Soul Ransom
id=430626
rarity=U
[/card]
[card]
primitive=Obelisk of Grixis
id=430627
rarity=C
[/card]
[card]
primitive=Sword of the Animist
id=430628
rarity=R
[/card]
[card]
primitive=Talisman of Dominance
id=430629
rarity=U
[/card]
[card]
primitive=Talisman of Indulgence
id=430630
rarity=U
[/card]
[card]
primitive=Crumbling Necropolis
id=430631
rarity=U
[/card]
[card]
primitive=Dragonskull Summit
id=430632
rarity=R
[/card]
[card]
primitive=Drowned Catacomb
id=430633
rarity=R
[/card]
[card]
primitive=Grixis Panorama
id=430634
rarity=C
[/card]
[card]
primitive=Smoldering Spires
id=430635
rarity=C
[/card]
[card]
primitive=Plains
id=430636
rarity=L
[/card]
[card]
primitive=Island
id=430637
rarity=L
[/card]
[card]
primitive=Swamp
id=430638
rarity=L
[/card]
[card]
primitive=Mountain
id=430639
rarity=L
[/card]
[card]
primitive=Forest
id=430640
rarity=L
[/card]
[card]
primitive=Plains
id=430641
rarity=L
[/card]
[card]
primitive=Island
id=430642
rarity=L
[/card]
[card]
primitive=Swamp
id=430643
rarity=L
[/card]
[card]
primitive=Mountain
id=430644
rarity=L
[/card]
[card]
primitive=Forest
id=430645
rarity=L
[/card]

View File

@@ -0,0 +1,241 @@
[meta]
author=Wagic Team
name=Explorers of Ixalan
year=2017-11-24
total=48
[/meta]
[card]
primitive=Beacon of Immortality
id=439343
rarity=R
[/card]
[card]
primitive=Day of Judgment
id=439344
rarity=R
[/card]
[card]
primitive=Path to Exile
id=439345
rarity=U
[/card]
[card]
primitive=Shielded by Faith
id=439346
rarity=R
[/card]
[card]
primitive=Veteran's Reflexes
id=439347
rarity=C
[/card]
[card]
primitive=Vow of Duty
id=439348
rarity=U
[/card]
[card]
primitive=Aether Gale
id=439349
rarity=R
[/card]
[card]
primitive=Blatant Thievery
id=439350
rarity=R
[/card]
[card]
primitive=Concentrate
id=439351
rarity=U
[/card]
[card]
primitive=Merfolk Sovereign
id=439352
rarity=R
[/card]
[card]
primitive=Threads of Disloyalty
id=439353
rarity=R
[/card]
[card]
primitive=Time Warp
id=439354
rarity=M
[/card]
[card]
primitive=Unsummon
id=439355
rarity=C
[/card]
[card]
primitive=Vow of Flight
id=439356
rarity=U
[/card]
[card]
primitive=Bloodbond Vampire
id=439357
rarity=U
[/card]
[card]
primitive=Child of Night
id=439358
rarity=C
[/card]
[card]
primitive=Coat with Venom
id=439359
rarity=C
[/card]
[card]
primitive=Doom Blade
id=439360
rarity=U
[/card]
[card]
primitive=Innocent Blood
id=439361
rarity=C
[/card]
[card]
primitive=Necropolis Regent
id=439362
rarity=M
[/card]
[card]
primitive=Urge to Feed
id=439363
rarity=U
[/card]
[card]
primitive=Vampire Interloper
id=439364
rarity=C
[/card]
[card]
primitive=Vampire Nighthawk
id=439365
rarity=U
[/card]
[card]
primitive=Vampire Noble
id=439366
rarity=C
[/card]
[card]
primitive=Aggravated Assault
id=439367
rarity=R
[/card]
[card]
primitive=Disaster Radius
id=439368
rarity=R
[/card]
[card]
primitive=Mass Mutiny
id=439369
rarity=R
[/card]
[card]
primitive=Rush of Adrenaline
id=439370
rarity=C
[/card]
[card]
primitive=Shared Animosity
id=439371
rarity=R
[/card]
[card]
primitive=Vow of Lightning
id=439372
rarity=U
[/card]
[card]
primitive=Borderland Ranger
id=439373
rarity=C
[/card]
[card]
primitive=Giant Growth
id=439374
rarity=C
[/card]
[card]
primitive=Hunter's Prowess
id=439375
rarity=R
[/card]
[card]
primitive=Prey Upon
id=439376
rarity=C
[/card]
[card]
primitive=Rancor
id=439377
rarity=U
[/card]
[card]
primitive=Soul of the Harvest
id=439378
rarity=R
[/card]
[card]
primitive=Vow of Wildness
id=439379
rarity=U
[/card]
[card]
primitive=Jungle Barrier
id=439380
rarity=U
[/card]
[card]
primitive=Lightning Helix
id=439381
rarity=U
[/card]
[card]
primitive=Mortify
id=439382
rarity=U
[/card]
[card]
primitive=Zealous Persecution
id=439383
rarity=U
[/card]
[card]
primitive=Adaptive Automaton
id=439384
rarity=R
[/card]
[card]
primitive=Prismatic Lens
id=439385
rarity=U
[/card]
[card]
primitive=Quicksilver Amulet
id=439386
rarity=R
[/card]
[card]
primitive=Crumbling Necropolis
id=439387
rarity=U
[/card]
[card]
primitive=Jungle Shrine
id=439388
rarity=U
[/card]
[card]
primitive=Tainted Field
id=439389
rarity=U
[/card]

View File

@@ -0,0 +1,646 @@
[meta]
author=Wagic Team
name=GRN Guild Kit
year=2018-11-02
total=127
[/meta]
[card]
primitive=Etrata, the Silencer
id=455904
rarity=R
[/card]
[card]
primitive=Stolen Identity
id=455905
rarity=R
[/card]
[card]
primitive=Syncopate
id=455906
rarity=U
[/card]
[card]
primitive=Telling Time
id=455907
rarity=U
[/card]
[card]
primitive=Last Gasp
id=455908
rarity=C
[/card]
[card]
primitive=Netherborn Phalanx
id=455909
rarity=U
[/card]
[card]
primitive=Ribbons of Night
id=455910
rarity=U
[/card]
[card]
primitive=Call of the Nightwing
id=455911
rarity=U
[/card]
[card]
primitive=Circu, Dimir Lobotomist
id=455912
rarity=R
[/card]
[card]
primitive=Consuming Aberration
id=455913
rarity=R
[/card]
[card]
primitive=Dimir Charm
id=455914
rarity=U
[/card]
[card]
primitive=Dimir Doppelganger
id=455915
rarity=R
[/card]
[card]
primitive=Dimir Guildmage
id=455916
rarity=U
[/card]
[card]
primitive=Dinrova Horror
id=455917
rarity=U
[/card]
[card]
primitive=Glimpse the Unthinkable
id=455918
rarity=R
[/card]
[card]
primitive=Lazav, Dimir Mastermind
id=455919
rarity=M
[/card]
[card]
primitive=Mirko Vosk, Mind Drinker
id=455920
rarity=R
[/card]
[card]
primitive=Moroii
id=455921
rarity=U
[/card]
[card]
primitive=Nightveil Specter
id=455922
rarity=R
[/card]
[card]
primitive=Szadek, Lord of Secrets
id=455923
rarity=R
[/card]
[card]
primitive=Warped Physique
id=455924
rarity=U
[/card]
[card]
primitive=Dimir Signet
id=455925
rarity=C
[/card]
[card]
primitive=Dimir Aqueduct
id=455926
rarity=C
[/card]
[card]
primitive=Island
id=455927
rarity=L
[/card]
[card]
primitive=Swamp
id=455928
rarity=L
[/card]
[card]
primitive=Niv-Mizzet, the Firemind
id=456216
rarity=R
[/card]
[card]
primitive=Thunderheads
id=456217
rarity=U
[/card]
[card]
primitive=Char
id=456218
rarity=R
[/card]
[card]
primitive=Electrickery
id=456219
rarity=C
[/card]
[card]
primitive=Goblin Rally
id=456220
rarity=U
[/card]
[card]
primitive=Guttersnipe
id=456221
rarity=U
[/card]
[card]
primitive=Mizzium Mortars
id=456222
rarity=R
[/card]
[card]
primitive=Pyromatics
id=456223
rarity=C
[/card]
[card]
primitive=Shattering Spree
id=456224
rarity=U
[/card]
[card]
primitive=Cerebral Vortex
id=456225
rarity=R
[/card]
[card]
primitive=Djinn Illuminatus
id=456226
rarity=R
[/card]
[card]
primitive=Electrolyze
id=456227
rarity=U
[/card]
[card]
primitive=Gelectrode
id=456228
rarity=U
[/card]
[card]
primitive=Hypersonic Dragon
id=456229
rarity=R
[/card]
[card]
primitive=Invoke the Firemind
id=456230
rarity=R
[/card]
[card]
primitive=Izzet Charm
id=456231
rarity=U
[/card]
[card]
primitive=Nivix Guildmage
id=456232
rarity=U
[/card]
[card]
primitive=Stitch in Time
id=456233
rarity=R
[/card]
[card]
primitive=Tibor and Lumia
id=456234
rarity=R
[/card]
[card]
primitive=Burn
id=456235
rarity=U
[/card]
[card]
primitive=Turn
id=456235
rarity=U
[/card]
[card]
primitive=Izzet Signet
id=456236
rarity=C
[/card]
[card]
primitive=Izzet Boilerworks
id=456237
rarity=C
[/card]
[card]
primitive=Island
id=456238
rarity=L
[/card]
[card]
primitive=Mountain
id=456239
rarity=L
[/card]
[card]
primitive=Izoni, Thousand-Eyed
id=456054
rarity=R
[/card]
[card]
primitive=Darkblast
id=456055
rarity=U
[/card]
[card]
primitive=Slum Reaper
id=456056
rarity=U
[/card]
[card]
primitive=Stinkweed Imp
id=456057
rarity=C
[/card]
[card]
primitive=Vigor Mortis
id=456058
rarity=U
[/card]
[card]
primitive=Deadbridge Goliath
id=456059
rarity=R
[/card]
[card]
primitive=Elves of Deep Shadow
id=456060
rarity=C
[/card]
[card]
primitive=Abrupt Decay
id=456061
rarity=R
[/card]
[card]
primitive=Deadbridge Chant
id=456062
rarity=M
[/card]
[card]
primitive=Deathrite Shaman
id=456063
rarity=R
[/card]
[card]
primitive=Drown in Filth
id=456064
rarity=C
[/card]
[card]
primitive=Gaze of Granite
id=456065
rarity=R
[/card]
[card]
primitive=Golgari Charm
id=456066
rarity=U
[/card]
[card]
primitive=Grave-Shell Scarab
id=456067
rarity=R
[/card]
[card]
primitive=Grisly Salvage
id=456068
rarity=C
[/card]
[card]
primitive=Jarad, Golgari Lich Lord
id=456069
rarity=M
[/card]
[card]
primitive=Korozda Guildmage
id=456070
rarity=U
[/card]
[card]
primitive=Lotleth Troll
id=456071
rarity=R
[/card]
[card]
primitive=Putrefy
id=456072
rarity=U
[/card]
[card]
primitive=Savra, Queen of the Golgari
id=456073
rarity=R
[/card]
[card]
primitive=Shambling Shell
id=456074
rarity=C
[/card]
[card]
primitive=Sisters of Stone Death
id=456075
rarity=R
[/card]
[card]
primitive=Treasured Find
id=456076
rarity=U
[/card]
[card]
primitive=Golgari Signet
id=456077
rarity=C
[/card]
[card]
primitive=Golgari Rot Farm
id=456078
rarity=C
[/card]
[card]
primitive=Swamp
id=456079
rarity=L
[/card]
[card]
primitive=Forest
id=456080
rarity=L
[/card]
[card]
primitive=Aurelia, the Warleader
id=455754
rarity=M
[/card]
[card]
primitive=Boros Elite
id=455755
rarity=U
[/card]
[card]
primitive=Daring Skyjek
id=455756
rarity=C
[/card]
[card]
primitive=Bomber Corps
id=455757
rarity=C
[/card]
[card]
primitive=Frenzied Goblin
id=455758
rarity=U
[/card]
[card]
primitive=Legion Loyalist
id=455759
rarity=R
[/card]
[card]
primitive=Agrus Kos, Wojek Veteran
id=455760
rarity=R
[/card]
[card]
primitive=Boros Charm
id=455761
rarity=U
[/card]
[card]
primitive=Boros Reckoner
id=455762
rarity=R
[/card]
[card]
primitive=Boros Swiftblade
id=455763
rarity=U
[/card]
[card]
primitive=Brightflame
id=455764
rarity=R
[/card]
[card]
primitive=Firemane Angel
id=455765
rarity=R
[/card]
[card]
primitive=Firemane Avenger
id=455766
rarity=R
[/card]
[card]
primitive=Lightning Helix
id=455767
rarity=U
[/card]
[card]
primitive=Martial Glory
id=455768
rarity=C
[/card]
[card]
primitive=Master Warcraft
id=455769
rarity=R
[/card]
[card]
primitive=Razia, Boros Archangel
id=455770
rarity=R
[/card]
[card]
primitive=Spark Trooper
id=455771
rarity=R
[/card]
[card]
primitive=Sunhome Guildmage
id=455772
rarity=U
[/card]
[card]
primitive=Boros Keyrune
id=455773
rarity=U
[/card]
[card]
primitive=Boros Signet
id=455774
rarity=C
[/card]
[card]
primitive=Boros Garrison
id=455775
rarity=C
[/card]
[card]
primitive=Sunhome, Fortress of the Legion
id=455776
rarity=U
[/card]
[card]
primitive=Plains
id=455777
rarity=L
[/card]
[card]
primitive=Mountain
id=455778
rarity=L
[/card]
[card]
primitive=Trostani, Selesnya's Voice
id=456360
rarity=M
[/card]
[card]
primitive=Devouring Light
id=456361
rarity=U
[/card]
[card]
primitive=Hour of Reckoning
id=456362
rarity=R
[/card]
[card]
primitive=Gather Courage
id=456363
rarity=C
[/card]
[card]
primitive=Scatter the Seeds
id=456364
rarity=C
[/card]
[card]
primitive=Advent of the Wurm
id=456365
rarity=R
[/card]
[card]
primitive=Armada Wurm
id=456366
rarity=M
[/card]
[card]
primitive=Call of the Conclave
id=456367
rarity=U
[/card]
[card]
primitive=Centaur Healer
id=456368
rarity=C
[/card]
[card]
primitive=Dryad Militant
id=456369
rarity=U
[/card]
[card]
primitive=Glare of Subdual
id=456370
rarity=R
[/card]
[card]
primitive=Growing Ranks
id=456371
rarity=R
[/card]
[card]
primitive=Loxodon Hierarch
id=456372
rarity=R
[/card]
[card]
primitive=Pollenbright Wings
id=456373
rarity=U
[/card]
[card]
primitive=Privileged Position
id=456374
rarity=R
[/card]
[card]
primitive=Selesnya Charm
id=456375
rarity=U
[/card]
[card]
primitive=Selesnya Evangel
id=456376
rarity=C
[/card]
[card]
primitive=Selesnya Guildmage
id=456377
rarity=U
[/card]
[card]
primitive=Sundering Growth
id=456378
rarity=C
[/card]
[card]
primitive=Tolsimir Wolfblood
id=456379
rarity=R
[/card]
[card]
primitive=Watchwolf
id=456380
rarity=U
[/card]
[card]
primitive=Selesnya Signet
id=456381
rarity=C
[/card]
[card]
primitive=Grove of the Guardian
id=456382
rarity=R
[/card]
[card]
primitive=Selesnya Sanctuary
id=456383
rarity=C
[/card]
[card]
primitive=Plains
id=456384
rarity=L
[/card]
[card]
primitive=Forest
id=456385
rarity=L
[/card]

View File

@@ -0,0 +1,671 @@
[meta]
author=Wagic Team
name=RNA Guild Kit
year=2019-02-15
total=133
[/meta]
[card]
primitive=Isperia, Supreme Judge
id=460130
rarity=M
[/card]
[card]
primitive=Azorius Herald
id=460131
rarity=U
[/card]
[card]
primitive=Azorius Justiciar
id=460132
rarity=U
[/card]
[card]
primitive=Stoic Ephemera
id=460133
rarity=U
[/card]
[card]
primitive=Court Hussar
id=460134
rarity=U
[/card]
[card]
primitive=Hover Barrier
id=460135
rarity=U
[/card]
[card]
primitive=Archon of the Triumvirate
id=460136
rarity=R
[/card]
[card]
primitive=Azorius Charm
id=460137
rarity=U
[/card]
[card]
primitive=Azorius Guildmage
id=460138
rarity=U
[/card]
[card]
primitive=Detention Sphere
id=460139
rarity=R
[/card]
[card]
primitive=Dovescape
id=460140
rarity=R
[/card]
[card]
primitive=Dramatic Rescue
id=460141
rarity=C
[/card]
[card]
primitive=Isperia the Inscrutable
id=460142
rarity=R
[/card]
[card]
primitive=Judge's Familiar
id=460143
rarity=U
[/card]
[card]
primitive=Lavinia of the Tenth
id=460144
rarity=R
[/card]
[card]
primitive=Lyev Skyknight
id=460145
rarity=U
[/card]
[card]
primitive=Pride of the Clouds
id=460146
rarity=R
[/card]
[card]
primitive=Render Silent
id=460147
rarity=R
[/card]
[card]
primitive=Sky Hussar
id=460148
rarity=U
[/card]
[card]
primitive=Skymark Roc
id=460149
rarity=U
[/card]
[card]
primitive=Sphinx's Revelation
id=460150
rarity=M
[/card]
[card]
primitive=Windreaver
id=460151
rarity=R
[/card]
[card]
primitive=Azorius Keyrune
id=460152
rarity=U
[/card]
[card]
primitive=Azorius Signet
id=460153
rarity=U
[/card]
[card]
primitive=Azorius Chancery
id=460154
rarity=U
[/card]
[card]
primitive=Plains
id=460155
rarity=L
[/card]
[card]
primitive=Island
id=460156
rarity=L
[/card]
[card]
primitive=Teysa, Orzhov Scion
id=460454
rarity=R
[/card]
[card]
primitive=Belfry Spirit
id=460455
rarity=U
[/card]
[card]
primitive=Martyred Rusalka
id=460456
rarity=U
[/card]
[card]
primitive=Keening Banshee
id=460457
rarity=U
[/card]
[card]
primitive=Plagued Rusalka
id=460458
rarity=U
[/card]
[card]
primitive=Pontiff of Blight
id=460459
rarity=R
[/card]
[card]
primitive=Skeletal Vampire
id=460460
rarity=R
[/card]
[card]
primitive=Stab Wound
id=460461
rarity=U
[/card]
[card]
primitive=Ultimate Price
id=460462
rarity=U
[/card]
[card]
primitive=Angel of Despair
id=460463
rarity=R
[/card]
[card]
primitive=Deathpact Angel
id=460464
rarity=M
[/card]
[card]
primitive=Debtors' Knell
id=460465
rarity=R
[/card]
[card]
primitive=Ghost Council of Orzhova
id=460466
rarity=R
[/card]
[card]
primitive=One Thousand Lashes
id=460467
rarity=U
[/card]
[card]
primitive=Orzhov Charm
id=460468
rarity=U
[/card]
[card]
primitive=Orzhov Pontiff
id=460469
rarity=R
[/card]
[card]
primitive=Pillory of the Sleepless
id=460470
rarity=U
[/card]
[card]
primitive=Sin Collector
id=460471
rarity=U
[/card]
[card]
primitive=Treasury Thrull
id=460472
rarity=R
[/card]
[card]
primitive=Vizkopa Guildmage
id=460473
rarity=U
[/card]
[card]
primitive=Orzhov Signet
id=460474
rarity=C
[/card]
[card]
primitive=Orzhov Basilica
id=460475
rarity=C
[/card]
[card]
primitive=Plains
id=460476
rarity=L
[/card]
[card]
primitive=Swamp
id=460477
rarity=L
[/card]
[card]
primitive=Rakdos, Lord of Riots
id=460598
rarity=M
[/card]
[card]
primitive=Crypt Champion
id=460599
rarity=U
[/card]
[card]
primitive=Thrill-Kill Assassin
id=460600
rarity=U
[/card]
[card]
primitive=Cackling Flames
id=460601
rarity=C
[/card]
[card]
primitive=Demonfire
id=460602
rarity=R
[/card]
[card]
primitive=Rakdos Pit Dragon
id=460603
rarity=R
[/card]
[card]
primitive=Splatter Thug
id=460604
rarity=C
[/card]
[card]
primitive=Utvara Hellkite
id=460605
rarity=M
[/card]
[card]
primitive=Auger Spree
id=460606
rarity=C
[/card]
[card]
primitive=Avatar of Discord
id=460607
rarity=R
[/card]
[card]
primitive=Carnival Hellsteed
id=460608
rarity=R
[/card]
[card]
primitive=Dreadbore
id=460609
rarity=R
[/card]
[card]
primitive=Jagged Poppet
id=460610
rarity=U
[/card]
[card]
primitive=Lyzolda, the Blood Witch
id=460611
rarity=R
[/card]
[card]
primitive=Master of Cruelties
id=460612
rarity=M
[/card]
[card]
primitive=Rakdos Cackler
id=460613
rarity=U
[/card]
[card]
primitive=Rakdos Charm
id=460614
rarity=U
[/card]
[card]
primitive=Rakdos Guildmage
id=460615
rarity=U
[/card]
[card]
primitive=Rakdos Shred-Freak
id=460616
rarity=C
[/card]
[card]
primitive=Rakdos the Defiler
id=460617
rarity=R
[/card]
[card]
primitive=Rakdos's Return
id=460618
rarity=M
[/card]
[card]
primitive=Riot Spikes
id=460619
rarity=C
[/card]
[card]
primitive=Wrecking Ball
id=460620
rarity=C
[/card]
[card]
primitive=Rakdos Keyrune
id=460621
rarity=U
[/card]
[card]
primitive=Rakdos Signet
id=460622
rarity=U
[/card]
[card]
primitive=Rakdos Carnarium
id=460623
rarity=C
[/card]
[card]
primitive=Swamp
id=460624
rarity=L
[/card]
[card]
primitive=Mountain
id=460625
rarity=L
[/card]
[card]
primitive=Ruric Thar, the Unbowed
id=460292
rarity=R
[/card]
[card]
primitive=Skarrgan Firebird
id=460293
rarity=R
[/card]
[card]
primitive=Birds of Paradise
id=460294
rarity=R
[/card]
[card]
primitive=Protean Hulk
id=460295
rarity=R
[/card]
[card]
primitive=Skarrgan Pit-Skulk
id=460296
rarity=C
[/card]
[card]
primitive=Wasteland Viper
id=460297
rarity=U
[/card]
[card]
primitive=Wurmweaver Coil
id=460298
rarity=R
[/card]
[card]
primitive=Borborygmos
id=460299
rarity=R
[/card]
[card]
primitive=Burning-Tree Emissary
id=460300
rarity=U
[/card]
[card]
primitive=Burning-Tree Shaman
id=460301
rarity=R
[/card]
[card]
primitive=Ghor-Clan Rampager
id=460302
rarity=U
[/card]
[card]
primitive=Giant Solifuge
id=460303
rarity=R
[/card]
[card]
primitive=Gruul Charm
id=460304
rarity=U
[/card]
[card]
primitive=Pit Fight
id=460305
rarity=C
[/card]
[card]
primitive=Rubblebelt Raiders
id=460306
rarity=R
[/card]
[card]
primitive=Rubblehulk
id=460307
rarity=R
[/card]
[card]
primitive=Rumbling Slum
id=460308
rarity=R
[/card]
[card]
primitive=Savage Twister
id=460309
rarity=U
[/card]
[card]
primitive=Savageborn Hydra
id=460310
rarity=M
[/card]
[card]
primitive=Scab-Clan Mauler
id=460311
rarity=C
[/card]
[card]
primitive=Ulasht, the Hate Seed
id=460312
rarity=R
[/card]
[card]
primitive=Zhur-Taa Druid
id=460313
rarity=C
[/card]
[card]
primitive=Zhur-Taa Swine
id=460314
rarity=C
[/card]
[card]
primitive=Gruul Signet
id=460315
rarity=U
[/card]
[card]
primitive=Gruul Turf
id=460316
rarity=C
[/card]
[card]
primitive=Mountain
id=460317
rarity=L
[/card]
[card]
primitive=Forest
id=460318
rarity=L
[/card]
[card]
primitive=Zegana, Utopian Speaker
id=460766
rarity=R
[/card]
[card]
primitive=Cloudfin Raptor
id=460767
rarity=C
[/card]
[card]
primitive=Rapid Hybridization
id=460768
rarity=U
[/card]
[card]
primitive=Cytoplast Root-Kin
id=460769
rarity=R
[/card]
[card]
primitive=Experiment One
id=460770
rarity=U
[/card]
[card]
primitive=Gyre Sage
id=460771
rarity=R
[/card]
[card]
primitive=Miming Slime
id=460772
rarity=C
[/card]
[card]
primitive=Vinelasher Kudzu
id=460773
rarity=R
[/card]
[card]
primitive=Coiling Oracle
id=460774
rarity=C
[/card]
[card]
primitive=Elusive Krasis
id=460775
rarity=U
[/card]
[card]
primitive=Experiment Kraj
id=460776
rarity=R
[/card]
[card]
primitive=Fathom Mage
id=460777
rarity=R
[/card]
[card]
primitive=Momir Vig, Simic Visionary
id=460778
rarity=R
[/card]
[card]
primitive=Nimbus Swimmer
id=460779
rarity=U
[/card]
[card]
primitive=Omnibian
id=460780
rarity=R
[/card]
[card]
primitive=Plaxcaster Frogling
id=460781
rarity=U
[/card]
[card]
primitive=Progenitor Mimic
id=460782
rarity=M
[/card]
[card]
primitive=Simic Sky Swallower
id=460783
rarity=R
[/card]
[card]
primitive=Trygon Predator
id=460784
rarity=U
[/card]
[card]
primitive=Urban Evolution
id=460785
rarity=U
[/card]
[card]
primitive=Voidslime
id=460786
rarity=R
[/card]
[card]
primitive=Vorel of the Hull Clade
id=460787
rarity=R
[/card]
[card]
primitive=Zameck Guildmage
id=460788
rarity=U
[/card]
[card]
primitive=Simic Signet
id=460789
rarity=U
[/card]
[card]
primitive=Simic Growth Chamber
id=460790
rarity=U
[/card]
[card]
primitive=Island
id=460791
rarity=L
[/card]
[card]
primitive=Forest
id=460792
rarity=L
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,276 @@
[meta]
author=Wagic Team
name=Amonkhet Invocations
year=2017-04-28
total=54
[/meta]
[card]
primitive=Austere Command
id=429860
rarity=M
[/card]
[card]
primitive=Aven Mindcensor
id=429861
rarity=M
[/card]
[card]
primitive=Containment Priest
id=429862
rarity=M
[/card]
[card]
primitive=Loyal Retainers
id=429863
rarity=M
[/card]
[card]
primitive=Oketra the True
id=429864
rarity=M
[/card]
[card]
primitive=Worship
id=429865
rarity=M
[/card]
[card]
primitive=Wrath of God
id=429866
rarity=M
[/card]
[card]
primitive=Consecrated Sphinx
id=429867
rarity=M
[/card]
[card]
primitive=Counterbalance
id=429868
rarity=M
[/card]
[card]
primitive=Counterspell
id=429869
rarity=M
[/card]
[card]
primitive=Cryptic Command
id=429870
rarity=M
[/card]
[card]
primitive=Daze
id=429871
rarity=M
[/card]
[card]
primitive=Divert
id=429872
rarity=M
[/card]
[card]
primitive=Force of Will
id=429873
rarity=M
[/card]
[card]
primitive=Kefnet the Mindful
id=429874
rarity=M
[/card]
[card]
primitive=Pact of Negation
id=429875
rarity=M
[/card]
[card]
primitive=Spell Pierce
id=429876
rarity=M
[/card]
[card]
primitive=Stifle
id=429877
rarity=M
[/card]
[card]
primitive=Attrition
id=429878
rarity=M
[/card]
[card]
primitive=Bontu the Glorified
id=429879
rarity=M
[/card]
[card]
primitive=Dark Ritual
id=429880
rarity=M
[/card]
[card]
primitive=Diabolic Intent
id=429881
rarity=M
[/card]
[card]
primitive=Entomb
id=429882
rarity=M
[/card]
[card]
primitive=Mind Twist
id=429883
rarity=M
[/card]
[card]
primitive=Aggravated Assault
id=429884
rarity=M
[/card]
[card]
primitive=Chain Lightning
id=429885
rarity=M
[/card]
[card]
primitive=Hazoret the Fervent
id=429886
rarity=M
[/card]
[card]
primitive=Rhonas the Indomitable
id=429887
rarity=M
[/card]
[card]
primitive=Maelstrom Pulse
id=429888
rarity=M
[/card]
[card]
primitive=Vindicate
id=429889
rarity=M
[/card]
[card]
primitive=Armageddon
id=430666
rarity=M
[/card]
[card]
primitive=Capsize
id=430667
rarity=M
[/card]
[card]
primitive=Forbid
id=430668
rarity=M
[/card]
[card]
primitive=Omniscience
id=430669
rarity=M
[/card]
[card]
primitive=Opposition
id=430670
rarity=M
[/card]
[card]
primitive=Sunder
id=430671
rarity=M
[/card]
[card]
primitive=Threads of Disloyalty
id=430672
rarity=M
[/card]
[card]
primitive=Avatar of Woe
id=430673
rarity=M
[/card]
[card]
primitive=Damnation
id=430674
rarity=M
[/card]
[card]
primitive=Desolation Angel
id=430675
rarity=M
[/card]
[card]
primitive=Diabolic Edict
id=430676
rarity=M
[/card]
[card]
primitive=Doomsday
id=430677
rarity=M
[/card]
[card]
primitive=No Mercy
id=430678
rarity=M
[/card]
[card]
primitive=Slaughter Pact
id=430679
rarity=M
[/card]
[card]
primitive=Thoughtseize
id=430680
rarity=M
[/card]
[card]
primitive=Blood Moon
id=430681
rarity=M
[/card]
[card]
primitive=Boil
id=430682
rarity=M
[/card]
[card]
primitive=Shatterstorm
id=430683
rarity=M
[/card]
[card]
primitive=Through the Breach
id=430684
rarity=M
[/card]
[card]
primitive=Choke
id=430685
rarity=M
[/card]
[card]
primitive=The Locust God
id=430686
rarity=M
[/card]
[card]
primitive=Lord of Extinction
id=430687
rarity=M
[/card]
[card]
primitive=The Scarab God
id=430688
rarity=M
[/card]
[card]
primitive=The Scorpion God
id=430689
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,206 @@
[meta]
author=Wagic Team
name=Ultimate Box Topper
year=2018-12-07
total=40
[/meta]
[card]
primitive=Emrakul, the Aeons Torn
id=457105
rarity=M
[/card]
[card]
primitive=Karn Liberated
id=457106
rarity=M
[/card]
[card]
primitive=Kozilek, Butcher of Truth
id=457107
rarity=M
[/card]
[card]
primitive=Ulamog, the Infinite Gyre
id=457108
rarity=M
[/card]
[card]
primitive=Snapcaster Mage
id=457109
rarity=M
[/card]
[card]
primitive=Temporal Manipulation
id=457110
rarity=M
[/card]
[card]
primitive=Bitterblossom
id=457111
rarity=M
[/card]
[card]
primitive=Demonic Tutor
id=457112
rarity=M
[/card]
[card]
primitive=Goryo's Vengeance
id=457113
rarity=M
[/card]
[card]
primitive=Liliana of the Veil
id=457114
rarity=M
[/card]
[card]
primitive=Mikaeus, the Unhallowed
id=457115
rarity=M
[/card]
[card]
primitive=Reanimate
id=457116
rarity=M
[/card]
[card]
primitive=Tasigur, the Golden Fang
id=457117
rarity=M
[/card]
[card]
primitive=Balefire Dragon
id=457118
rarity=M
[/card]
[card]
primitive=Through the Breach
id=457119
rarity=M
[/card]
[card]
primitive=Eternal Witness
id=457120
rarity=M
[/card]
[card]
primitive=Life from the Loam
id=457121
rarity=M
[/card]
[card]
primitive=Noble Hierarch
id=457122
rarity=M
[/card]
[card]
primitive=Tarmogoyf
id=457123
rarity=M
[/card]
[card]
primitive=Vengevine
id=457124
rarity=M
[/card]
[card]
primitive=Gaddock Teeg
id=457125
rarity=M
[/card]
[card]
primitive=Leovold, Emissary of Trest
id=457126
rarity=M
[/card]
[card]
primitive=Lord of Extinction
id=457127
rarity=M
[/card]
[card]
primitive=Maelstrom Pulse
id=457128
rarity=M
[/card]
[card]
primitive=Sigarda, Host of Herons
id=457129
rarity=M
[/card]
[card]
primitive=Fulminator Mage
id=457130
rarity=M
[/card]
[card]
primitive=Kitchen Finks
id=457131
rarity=M
[/card]
[card]
primitive=Engineered Explosives
id=457132
rarity=M
[/card]
[card]
primitive=Mana Vault
id=457133
rarity=M
[/card]
[card]
primitive=Platinum Emperion
id=457134
rarity=M
[/card]
[card]
primitive=Ancient Tomb
id=457135
rarity=M
[/card]
[card]
primitive=Cavern of Souls
id=457136
rarity=M
[/card]
[card]
primitive=Celestial Colonnade
id=457137
rarity=M
[/card]
[card]
primitive=Creeping Tar Pit
id=457138
rarity=M
[/card]
[card]
primitive=Dark Depths
id=457139
rarity=M
[/card]
[card]
primitive=Karakas
id=457140
rarity=M
[/card]
[card]
primitive=Lavaclaw Reaches
id=457141
rarity=M
[/card]
[card]
primitive=Raging Ravine
id=457142
rarity=M
[/card]
[card]
primitive=Stirring Wildwood
id=457143
rarity=M
[/card]
[card]
primitive=Urborg, Tomb of Yawgmoth
id=457144
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
[meta]
author=Wagic Team
name=Signature Spellbook: Jace
year=2018-06-15
total=8
[/meta]
[card]
primitive=Jace Beleren
id=447129
rarity=M
[/card]
[card]
primitive=Blue Elemental Blast
id=447130
rarity=R
[/card]
[card]
primitive=Brainstorm
id=447131
rarity=R
[/card]
[card]
primitive=Counterspell
id=447132
rarity=R
[/card]
[card]
primitive=Gifts Ungiven
id=447133
rarity=R
[/card]
[card]
primitive=Mystical Tutor
id=447134
rarity=R
[/card]
[card]
primitive=Negate
id=447135
rarity=R
[/card]
[card]
primitive=Threads of Disloyalty
id=447136
rarity=R
[/card]

View File

@@ -1,412 +0,0 @@
[meta]
author=Wagic Team
name=Duel Decks: Speed vs. Cunning
block=Duel
year=2014
total=81
[/meta]
[card]
primitive=Act of Treason
id=386299
rarity=C
[/card]
[card]
primitive=Aquamorph Entity
id=386300
rarity=C
[/card]
[card]
primitive=Arc Trail
id=386301
rarity=U
[/card]
[card]
primitive=Arcanis the Omnipotent
id=386302
rarity=M
[/card]
[card]
primitive=Arrow Volley Trap
id=386303
rarity=U
[/card]
[card]
primitive=Banefire
id=386304
rarity=R
[/card]
[card]
primitive=Beetleback Chief
id=386305
rarity=U
[/card]
[card]
primitive=Bone Splinters
id=386306
rarity=C
[/card]
[card]
primitive=Coral Trickster
id=386307
rarity=C
[/card]
[card]
primitive=Dauntless Onslaught
id=386308
rarity=U
[/card]
[card]
primitive=Dregscape Zombie
id=386309
rarity=C
[/card]
[card]
primitive=Echo Tracer
id=386310
rarity=C
[/card]
[card]
primitive=Evolving Wilds
id=386311
rarity=C
[/card]
[card]
primitive=Faerie Impostor
id=386312
rarity=U
[/card]
[card]
primitive=Faerie Invaders
id=386313
rarity=C
[/card]
[card]
primitive=Fathom Seer
id=386314
rarity=C
[/card]
[card]
primitive=Fiery Fall
id=386315
rarity=C
[/card]
[card]
primitive=Flame-Kin Zealot
id=386316
rarity=U
[/card]
[card]
primitive=Fleeting Distraction
id=386317
rarity=C
[/card]
[card]
primitive=Fleshbag Marauder
id=386318
rarity=U
[/card]
[card]
primitive=Frenzied Goblin
id=386319
rarity=U
[/card]
[card]
primitive=Fury of the Horde
id=386320
rarity=R
[/card]
[card]
primitive=Ghitu Encampment
id=386321
rarity=U
[/card]
[card]
primitive=Goblin Bombardment
id=386323
rarity=U
[/card]
[card]
primitive=Goblin Deathraiders
id=386324
rarity=C
[/card]
[card]
primitive=Goblin Warchief
id=386325
rarity=U
[/card]
[card]
primitive=Hell's Thunder
id=386326
rarity=R
[/card]
[card]
primitive=Hellraiser Goblin
id=386327
rarity=U
[/card]
[card]
primitive=Hold the Line
id=386328
rarity=R
[/card]
[card]
primitive=Hussar Patrol
id=386329
rarity=C
[/card]
[card]
primitive=Impulse
id=386330
rarity=C
[/card]
[card]
primitive=Infantry Veteran
id=386331
rarity=C
[/card]
[card]
primitive=Inferno Trap
id=386332
rarity=U
[/card]
[card]
primitive=Island
id=386333
rarity=L
[/card]
[card]
primitive=Island
id=386334
rarity=L
[/card]
[card]
primitive=Island
id=386335
rarity=L
[/card]
[card]
primitive=Jeskai Elder
id=386336
rarity=U
[/card]
[card]
primitive=Kathari Bomber
id=386337
rarity=C
[/card]
[card]
primitive=Kor Hookmaster
id=386338
rarity=C
[/card]
[card]
primitive=Krenko's Command
id=386340
rarity=C
[/card]
[card]
primitive=Krenko, Mob Boss
id=386339
rarity=R
[/card]
[card]
primitive=Leonin Snarecaster
id=386341
rarity=C
[/card]
[card]
primitive=Lightning Angel
id=386342
rarity=R
[/card]
[card]
primitive=Lightning Helix
id=386343
rarity=U
[/card]
[card]
primitive=Lone Missionary
id=386344
rarity=C
[/card]
[card]
primitive=Mana Leak
id=386345
rarity=C
[/card]
[card]
primitive=Mardu Heart-Piercer
id=386346
rarity=U
[/card]
[card]
primitive=Master Decoy
id=386347
rarity=C
[/card]
[card]
primitive=Mountain
id=386348
rarity=L
[/card]
[card]
primitive=Mountain
id=386349
rarity=L
[/card]
[card]
primitive=Mountain
id=386350
rarity=L
[/card]
[card]
primitive=Mountain
id=386351
rarity=L
[/card]
[card]
primitive=Mystic Monastery
id=386352
rarity=U
[/card]
[card]
primitive=Nomad Outpost
id=386353
rarity=U
[/card]
[card]
primitive=Ogre Battledriver
id=386354
rarity=R
[/card]
[card]
primitive=Oni of Wild Places
id=386355
rarity=U
[/card]
[card]
primitive=Orcish Cannonade
id=386356
rarity=C
[/card]
[card]
primitive=Plains
id=386357
rarity=L
[/card]
[card]
primitive=Plains
id=386358
rarity=L
[/card]
[card]
primitive=Plains
id=386359
rarity=L
[/card]
[card]
primitive=Plains
id=386360
rarity=L
[/card]
[card]
primitive=Reckless Abandon
id=386361
rarity=C
[/card]
[card]
primitive=Repeal
id=386362
rarity=C
[/card]
[card]
primitive=Scourge Devil
id=386363
rarity=U
[/card]
[card]
primitive=Shambling Remains
id=386364
rarity=U
[/card]
[card]
primitive=Shock
id=386365
rarity=C
[/card]
[card]
primitive=Sparkmage Apprentice
id=386366
rarity=C
[/card]
[card]
primitive=Sphinx of Uthuun
id=386367
rarity=R
[/card]
[card]
primitive=Stave Off
id=386368
rarity=C
[/card]
[card]
primitive=Steam Augury
id=386369
rarity=R
[/card]
[card]
primitive=Stonecloaker
id=386370
rarity=U
[/card]
[card]
primitive=Swamp
id=386371
rarity=L
[/card]
[card]
primitive=Swamp
id=386372
rarity=L
[/card]
[card]
primitive=Swamp
id=386373
rarity=L
[/card]
[card]
primitive=Swift Justice
id=386374
rarity=C
[/card]
[card]
primitive=Terramorphic Expanse
id=386375
rarity=C
[/card]
[card]
primitive=Thousand Winds
id=386376
rarity=R
[/card]
[card]
primitive=Traumatic Visions
id=386377
rarity=C
[/card]
[card]
primitive=Whiplash Trap
id=386378
rarity=C
[/card]
[card]
primitive=Willbender
id=386379
rarity=U
[/card]
[card]
primitive=Zurgo Helmsmasher
id=386380
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
[meta]
author=Wagic Team
name=Unstable
year=2017-12-08
total=5
[/meta]
[card]
primitive=Plains
id=439601
rarity=M
[/card]
[card]
primitive=Island
id=439602
rarity=M
[/card]
[card]
primitive=Swamp
id=439603
rarity=M
[/card]
[card]
primitive=Mountain
id=439604
rarity=M
[/card]
[card]
primitive=Forest
id=439605
rarity=M
[/card]

View File

@@ -0,0 +1,151 @@
[meta]
author=Wagic Team
name=From the Vault: Transform
year=2017-11-24
total=16
[/meta]
[card]
primitive=Avacyn, the Purifier
id=439315
rarity=T
[/card]
[card]
primitive=Archangel Avacyn
id=439314
rarity=M
[/card]
[card]
primitive=Temple of Aclazotz
id=439317
rarity=T
[/card]
[card]
primitive=Arguel's Blood Fast
id=439316
rarity=M
[/card]
[card]
primitive=Arlinn, Embraced by the Moon
id=439319
rarity=T
[/card]
[card]
primitive=Arlinn Kord
id=439318
rarity=M
[/card]
[card]
primitive=Lord of Lineage
id=439321
rarity=T
[/card]
[card]
primitive=Bloodline Keeper
id=439320
rarity=M
[/card]
[card]
primitive=Bruna, the Fading Light
id=439322
rarity=M
[/card]
[card]
primitive=Brisela, Voice of Nightmares
id=439323
rarity=T
[/card]
[card]
primitive=Chandra, Roaring Flame
id=439325
rarity=T
[/card]
[card]
primitive=Chandra, Fire of Kaladesh
id=439324
rarity=M
[/card]
[card]
primitive=Insectile Aberration
id=439327
rarity=T
[/card]
[card]
primitive=Delver of Secrets
id=439326
rarity=M
[/card]
[card]
primitive=Withengar Unbound
id=439329
rarity=T
[/card]
[card]
primitive=Elbrus, the Binding Blade
id=439328
rarity=M
[/card]
[card]
primitive=Garruk, the Veil-Cursed
id=439331
rarity=T
[/card]
[card]
primitive=Garruk Relentless
id=439330
rarity=M
[/card]
[card]
primitive=Gisela, the Broken Blade
id=439332
rarity=M
[/card]
[card]
primitive=Ravager of the Fells
id=439334
rarity=T
[/card]
[card]
primitive=Huntmaster of the Fells
id=439333
rarity=M
[/card]
[card]
primitive=Jace, Telepath Unbound
id=439336
rarity=T
[/card]
[card]
primitive=Jace, Vryn's Prodigy
id=439335
rarity=M
[/card]
[card]
primitive=Gideon, Battle-Forged
id=439338
rarity=T
[/card]
[card]
primitive=Kytheon, Hero of Akros
id=439337
rarity=M
[/card]
[card]
primitive=Liliana, Defiant Necromancer
id=439340
rarity=T
[/card]
[card]
primitive=Liliana, Heretical Healer
id=439339
rarity=M
[/card]
[card]
primitive=Nissa, Sage Animist
id=439342
rarity=T
[/card]
[card]
primitive=Nissa, Vastwood Seer
id=439341
rarity=M
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,674 @@
grade=borderline
[card]
name=Regna, the Redeemer
abilities=flying
auto=may moveto(myhand) notatarget(krav, the unredeemed|mylibrary)
auto=@each endofturn restriction{compare(lifegain)~morethan~0}:create(warrior:creature warrior:1/1:white:)*2
text=Partner with Krav, the Unredeemed (When this creature enters the battlefield, target player may put Krav into their hand from their library, then shuffle.) -- Flying -- At the beginning of each end step, if your team gained life this turn, create two 1/1 white Warrior creature tokens.
mana={5}{W}
type=Legendary Creature
subtype=Angel
power=4
toughness=4
[/card]
[card]
name=Virtus the Veiled
abilities=deathtouch
auto=may moveto(myhand) notatarget(gorm the great|mylibrary)
auto=@combatdamaged(player) from(this):life:-halfdownopponentlifetotal opponent
text=Partner with Gorm the Great (When this creature enters the battlefield, target player may put Gorm into their hand from their library, then shuffle.) -- Deathtouch -- Whenever Virtus the Veiled deals combat damage to a player, that player loses half their life, rounded up.
mana={2}{B}
type=Legendary Creature
subtype=Azra Assassin
power=1
toughness=1
[/card]
[card]
name=Khorvath Brightflame
abilities=flying,haste
auto=may moveto(myhand) notatarget(sylvia brightspear|mylibrary)
auto=lord(knight|myBattlefield) flying
auto=lord(knight|myBattlefield) haste
text=Partner with Sylvia Brightspear (When this creature enters the battlefield, target player may put Sylvia into their hand from their library, then shuffle.) -- Flying, haste -- Knights your team controls have flying and haste.
mana={5}{R}
type=Legendary Creature
subtype=Dragon
power=3
toughness=4
[/card]
[card]
name=Sylvia Brightspear
abilities=double strike
auto=lord(dragon|myBattlefield) haste double strike
auto=may moveto(myhand) notatarget(khorvath brightflame|mylibrary)
text=Partner with Khorvath Brightflame (When this creature enters the battlefield, target player may put Khorvath into their hand from their library, then shuffle.) -- Double strike -- Dragons your team controls have double strike.
mana={2}{W}
type=Legendary Creature
subtype=Human Knight
power=2
toughness=2
[/card]
[card]
name=Toothy, Imaginary Friend
auto=may moveto(myhand) notatarget(pir, imaginative rascal|mylibrary)
auto=@drawof(player):counter(1/1)
auto=@movedTo(this|nonbattlezone) from(myBattlefield):thisforeach(counter{1/1,1}) draw:1 controller
text=Partner with Pir, Imaginative Rascal (When this creature enters the battlefield, target player may put Pir into their hand from their library, then shuffle.) -- Whenever you draw a card, put a +1/+1 counter on Toothy, Imaginary Friend. -- When Toothy leaves the battlefield, draw a card for each +1/+1 counter on it.
mana={3}{U}
type=Legendary Creature
subtype=Illusion
power=1
toughness=1
[/card]
[card]
name=Blaring Recruiter
auto=may moveto(myhand) notatarget(blaring captain|mylibrary)
auto={2}{W}:create(warrior:creature warrior:1/1:white:)
text=Partner with Blaring Captain (When this creature enters the battlefield, target player may put Blaring Captain into their hand from their library, then shuffle.) -- {2}{W}: Create a 1/1 white Warrior creature token.
mana={3}{W}
type=Creature
subtype=Elf Warrior
power=2
toughness=2
[/card]
[card]
name=Blaring Captain
auto=may moveto(myhand) notatarget(blaring recruiter|mylibrary)
auto=@combat(attacking) source(this):all(warrior[attacking]) 1/1
text=Partner with Blaring Recruiter (When this creature enters the battlefield, target player may put Blaring Recruiter into their hand from their library, then shuffle.) -- Whenever Blaring Captain attacks, attacking Warriors get +1/+1 until end of turn.
mana={3}{B}
type=Creature
subtype=Azra Warrior
power=2
toughness=2
[/card]
[card]
name=Chakram Retriever
auto=may moveto(myhand) notatarget(chakram slinger|mylibrary)
auto=@movedTo(*|mystack) restriction{myturnonly}:untap target(creature)
text=Partner with Chakram Slinger (When this creature enters the battlefield, target player may put Chakram Slinger into their hand from their library, then shuffle.) -- Whenever you cast a spell during your turn, untap target creature.
mana={4}{U}
type=Creature
subtype=Elemental Hound
power=2
toughness=4
[/card]
[card]
name=Chakram Slinger
auto=may moveto(myhand) notatarget(chakram retriever|mylibrary)
auto={R}{T}:damage:2 target(player)
text=Partner with Chakram Retriever (When this creature enters the battlefield, target player may put Chakram Retriever into their hand from their library, then shuffle.) -- {R}, {T}: Chakram Slinger deals 2 damage to target player or planeswalker.
mana={4}{R}
type=Creature
subtype=Human Warrior
power=2
toughness=4
[/card]
[card]
name=Soulblade Corrupter
abilities=deathtouch
auto=may moveto(myhand) notatarget(soulblade renewer|mylibrary)
auto=@combat(attacking) source(creature[counter{1/1.1}]|mybattlefield):deathtouch ueot
text=Partner with Soulblade Renewer (When this creature enters the battlefield, target player may put Soulblade Renewer into their hand from their library, then shuffle.) -- Deathtouch -- Whenever a creature with a +1/+1 counter on it attacks one of your opponents, that creature gains deathtouch until end of turn.
mana={4}{B}
type=Creature
subtype=Human Warrior
power=3
toughness=3
[/card]
[card]
name=Soulblade Renewer
auto=may moveto(myhand) notatarget(soulblade corrupter|mylibrary)
auto=target(<upto:2>other creature|battlefield) counter(1/1)
text=Partner with Soulblade Corrupter (When this creature enters the battlefield, target player may put Soulblade Corrupter into their hand from their library, then shuffle.) -- When Soulblade Renewer enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two other target creatures.)
mana={4}{G}
type=Creature
subtype=Elf Warrior
power=2
toughness=2
[/card]
[card]
name=Proud Mentor
auto=may moveto(myhand) notatarget(impetuous protege|mylibrary)
auto={W}{T}:tap target(creature)
text=Partner with Impetuous Protege (When this creature enters the battlefield, target player may put Impetuous Protege into their hand from their library, then shuffle.) -- {W}, {T}: Tap target creature.
mana={2}{W}
type=Creature
subtype=Human Warrior
power=1
toughness=1
[/card]
[card]
name=Ley Weaver
auto=may moveto(myhand) notatarget(lore weaver|mylibrary)
auto={T}:untap <2>target(land)
text=Partner with Lore Weaver (When this creature enters the battlefield, target player may put Lore Weaver into their hand from their library, then shuffle.) -- {T}: Untap two target lands.
mana={3}{G}
type=Creature
subtype=Human Druid
power=2
toughness=2
[/card]
[card]
name=Lore Weaver
auto=may moveto(myhand) notatarget(ley weaver|mylibrary)
auto={5}{U}{U}:draw:2 target(player)
text=Partner with Ley Weaver (When this creature enters the battlefield, target player may put Ley Weaver into their hand from their library, then shuffle.) -- {5}{U}{U}: Target player draws two cards.
mana={3}{U}
type=Creature
subtype=Human Wizard
power=2
toughness=2
[/card]
[card]
name=Arena Rector
auto=@movedTo(this|graveyard) from(battlefield):may all(trigger[to]) moveto(exile) and! moveTo(myBattlefield) target(planeswalker|myLibrary)!
text=When Arena Rector dies, you may exile it. If you do, search your library for a planeswalker card, put it onto the battlefield, then shuffle your library.
mana={3}{W}
type=Creature
subtype=Human Cleric
power=1
toughness=2
[/card]
[card]
name=Aurora Champion
auto=@combat(attacking) source(this) aslongas(other warrior|myBattlefield):tap target(creature)
text=Whenever Aurora Champion attacks, if your team controls another Warrior, tap target creature.
mana={2}{W}
type=Creature
subtype=Elf Warrior
power=3
toughness=2
[/card]
[card]
name=Brightling
auto={W}:vigilance ueot
auto={W}:lifelink ueot
auto={W}:moveTo(ownerHand)
auto={1}:1/-1 ueot
auto={1}:-1/1 ueot
text={W}: Brightling gains vigilance until end of turn. -- {W}: Brightling gains lifelink until end of turn. -- {W}: Return Brightling to its owner's hand. -- {1}: Brightling gets +1/-1 or -1/+1 until end of turn.
mana={1}{W}{W}
type=Creature
subtype=Shapeshifter
power=3
toughness=3
[/card]
[card]
name=Bring Down
target=creature[power>=4]
auto=destroy
text=Assist (Another player can pay up to {3} of this spell's cost.) -- Destroy target creature with power 4 or greater.
mana={3}{W}
type=Sorcery
[/card]
[card]
name=Dwarven Lightsmith
auto=all(creature|myBattlefield) 1/1
text=Assist (Another player can pay up to {5} of this spell's cost.) -- When Dwarven Lightsmith enters the battlefield, creatures your team controls get +1/+1 until end of turn.
mana={5}{W}
type=Creature
subtype=Dwarf Cleric
power=3
toughness=4
[/card]
[card]
name=Jubilant Mascot
auto=@each my combatbegins:may pay({3}{w}):target(<upto:2>other creature|battlefield) counter(1/1)
text=At the beginning of combat on your turn, you may pay {3}{W}. If you do, support 2. (Put a +1/+1 counter on each of up to two other target creatures.)
mana={2}{W}
type=Creature
subtype=Homunculus
power=1
toughness=1
[/card]
[card]
name=Play of the Game
auto=moveto(exile) all(*[-land])
text=Assist (Another player can pay up to {6} of this spell's cost.) -- Exile all nonland permanents.
mana={6}{W}{W}
type=Sorcery
[/card]
[card]
name=Regna's Sanction
auto=counter(1/1) all(creature|myBattlefield)
auto=ability$!name(select untapped creature) notatarget(creature[-tapped]|mybattlefield) transforms((,newability[all(other creature|myBattlefield) tap]))!$ opponent
text=For each player, choose friend or foe. Each friend puts a +1/+1 counter on each creature they control. Each foe chooses one untapped creature they control, then taps the rest.
mana={3}{W}
type=Sorcery
[/card]
[card]
name=Skystreamer
abilities=flying
auto=target(player) life:4
text=Assist (Another player can pay up to {4} of this spell's cost.) -- Flying -- When Skystreamer enters the battlefield, target player gains 4 life.
mana={4}{W}
type=Creature
subtype=Griffin
power=3
toughness=2
[/card]
[card]
name=Together Forever
auto=target(<upto:2>other creature|battlefield) counter(1/1)
auto={1}:target(creature[counter{any}]) transforms((,newability[@movedTo(this|graveyard) from(battlefield):all(trigger[to]) moveTo(ownerHand)])) ueot
text=When Together Forever enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) -- {1}: Choose target creature with a counter on it. When that creature dies this turn, return that card to its owner's hand.
mana={W}{W}
type=Enchantment
[/card]
[card]
name=Game Plan
auto=moveto(opponentlibrary) all(*|opponenthand)
auto=moveto(opponentlibrary) all(*|opponentgraveyard) && shuffle
auto=draw:7 opponent
auto=moveto(mylibrary) all(*|myhand)
auto=moveto(mylibrary) all(*|mygraveyard) && shuffle
auto=draw:7 controller
auto=moveto(exile) all(this)
text=Assist (Another player can pay up to {5} of this spell's cost.) -- Each player shuffles their hand and graveyard into their library, then draws seven cards. Exile Game Plan.
mana={5}{U}
type=Sorcery
[/card]
[card]
name=Huddle Up
auto=draw:2
auto=draw:2 target(opponent)
text=Assist (Another player can pay up to {2} of this spell's cost.) -- Two target players each draw a card.
mana={2}{U}
type=Sorcery
[/card]
[card]
name=Nimbus Champion
abilities=flying
auto=@combat(attacking) source(this):may moveto(ownerHand) target(creature) if that creature's power is less than,equal the number of warriors your team controls
text=Flying -- Whenever Nimbus Champion attacks, you may return target creature to its owner's hand if that creature's power is less than or equal to the number of Warriors your team controls.
mana={5}{U}
type=Creature
subtype=Avatar Warrior
power=4
toughness=4
[/card]
[card]
name=Out of Bounds
target=*|stack
auto=fizzle
auto=Counter target spell
text=Assist (Another player can pay up to {3} of this spell's cost.) -- Counter target spell.
mana={3}{U}
type=Instant
[/card]
[card]
name=Saltwater Stalwart
auto=@damagefoeof(player) from(this):draw:1 target(player)
text=Whenever Saltwater Stalwart deals damage to an opponent, target player draws a card.
mana={3}{U}
type=Creature
subtype=Merfolk Warrior
power=2
toughness=4
[/card]
[card]
name=Soaring Show-Off
abilities=flying
auto=draw:1
auto=draw:1 opponent
text=Flying -- When Soaring Show-Off enters the battlefield, each player draws a card.
mana={2}{U}
type=Creature
subtype=Bird Warrior
power=2
toughness=2
[/card]
[card]
name=Spellseeker
auto=may moveTo(myHand) target(*[instant;sorcery;manacost<=2]|myLibrary)
text=When Spellseeker enters the battlefield, you may search your library for an instant or sorcery card with converted mana cost 2 or less, reveal it, put it into your hand, then shuffle your library.
mana={2}{U}
type=Creature
subtype=Human Wizard
power=1
toughness=1
[/card]
[card]
name=Spellweaver Duo
auto=may target(creature[tapped]) moveto(ownerhand)
text=Assist (Another player can pay up to {6} of this spell's cost.) -- When Spellweaver Duo enters the battlefield, you may return target tapped creature to its owner's hand.
mana={6}{U}
type=Creature
subtype=Human Wizard
power=4
toughness=4
[/card]
[card]
name=Archfiend of Despair
abilities=flying,nolifegainopponent
auto=@each endofturn:life:-oplifelost opponent
text=Flying -- Your opponents can't gain life. -- At the beginning of each end step, each opponent loses life equal to the life that player lost this turn. (Damage causes loss of life.)
mana={6}{B}{B}
type=Creature
subtype=Demon
power=6
toughness=6
[/card]
[card]
name=Bloodborn Scoundrels
auto=target(opponent) life:-2
auto=life:2
text=Assist (Another player can pay up to {5} of this spell's cost.) -- When Bloodborn Scoundrels enters the battlefield, target opponent loses 2 life and you gain 2 life.
mana={5}{B}
type=Creature
subtype=Vampire Rogue
power=4
toughness=4
[/card]
[card]
name=Fan Favorite
auto={2}:1/1 ueot
text=Assist (Another player can pay up to {3} of this spell's cost.) -- {2}: Fan Favorite gets +1/+1 until end of turn. Any player may activate this ability.
mana={3}{B}
type=Creature
subtype=Human Rogue
power=2
toughness=2
[/card]
[card]
name=Gang Up
target=creature[power<=prex]
auto=destroy
text=Assist (Another player can pay up to {X} of this spell's cost. You choose the value of X.) -- Destroy target creature with power X or less.
mana={X}{B}
type=Instant
[/card]
[card]
name=Inner Demon
target=creature
auto=teach(creature) +2/+2
auto=teach(creature) flying
auto=transforms((Demon))
auto=all(creature[-Demon]) -2/-2
text=Enchant creature -- Enchanted creature gets +2/+2, has flying, and is a Demon in addition to its other types. -- When Inner Demon enters the battlefield, all non-Demon creatures get -2/-2 until end of turn.
mana={2}{B}{B}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Sickle Dancer
auto=@combat(attacking) source(this) aslongas(other warrior|myBattlefield) :1/1 ueot
text=Whenever Sickle Dancer attacks, if your team controls another Warrior, Sickle Dancer gets +1/+1 until end of turn.
mana={2}{B}
type=Creature
subtype=Human Warrior
power=3
toughness=2
[/card]
[card]
name=Thrasher Brute
auto=@movedTo(Warrior|mybattlefield) life:-1 opponent
auto=@movedTo(Warrior|mybattlefield) life:1
text=Whenever Thrasher Brute or another Warrior enters the battlefield under your team's control, target opponent loses 1 life and you gain 1 life.
mana={3}{B}
type=Creature
subtype=Orc Warrior
power=4
toughness=3
[/card]
[card]
name=Thrilling Encore
auto=moveTo(myBattlefield) all(creature[fresh]|graveyard)
text=Put onto the battlefield under your control all creature cards in all graveyards that were put there from the battlefield this turn.
mana={4}{B}
type=Instant
[/card]
[card]
name=Azra Bladeseeker
auto=may ability$!name(discard) reject notatarget(*|myhand)!$ and!(draw:1)!
text=When Azra Bladeseeker enters the battlefield, each player on your team may discard a card, then each player who discarded a card this way draws a card.
mana={2}{R}
type=Creature
subtype=Azra Warrior
power=3
toughness=2
[/card]
[card]
name=Bull-Rush Bruiser
auto=@combat(attacking) source(this) aslongas(other warrior|myBattlefield):first strike ueot
text=Whenever Bull-Rush Bruiser attacks, if your team controls another Warrior, Bull-Rush Bruiser gains first strike until end of turn.
mana={3}{R}
type=Creature
subtype=Minotaur Warrior
power=4
toughness=3
[/card]
[card]
name=Lava-Field Overlord
abilities=flying
auto=damage:4 target(creature|opponentBattlefield)
text=Assist (Another player can pay up to {7} of this spell's cost.) -- Flying -- When Lava-Field Overlord enters the battlefield, it deals 4 damage to target creature an opponent controls.
mana={7}{R}{R}
type=Creature
subtype=Dragon
power=5
toughness=4
[/card]
[card]
name=Magma Hellion
abilities=trample, haste
text=Assist (Another player can pay up to {6} of this spell's cost.) -- Trample, haste
mana={6}{R}
type=Creature
subtype=Hellion
power=5
toughness=4
[/card]
[card]
name=Najeela, the Blade-Blossom
auto=@combat(attacking) source(creature[warrior]):create(warrior:creature warrior:1/1:white:battleready)
auto={W}{U}{B}{R}{G}:untap all attacking creature they) trample, lifelink, && haste ueot after this phase, there is an additional combat phase activate this ability only during combat
text=Whenever a Warrior attacks, you may have its controller create a 1/1 white Warrior creature token that's tapped and attacking. -- {W}{U}{B}{R}{G}: Untap all attacking creatures. They gain trample, lifelink, and haste until end of turn. After this phase, there is an additional combat phase. Activate this ability only during combat.
mana={2}{R}
type=Legendary Creature
subtype=Human Warrior
power=3
toughness=2
[/card]
[card]
name=Stadium Vendors
auto=choice Add{R}{R}
auto=choice Add{W}{W}
auto=choice Add{U}{U}
auto=choice Add{B}{B}
auto=choice Add{G}{G}
text=When Stadium Vendors enters the battlefield, choose a player. That player adds two mana of any one color they choose.
mana={3}{R}
type=Creature
subtype=Goblin
power=3
toughness=3
[/card]
[card]
name=Bramble Sovereign
auto=@movedto(creature[-token]|mybattlefield):all(trigger[to]) pay[[{1}{G}]] clone
text=Whenever another nontoken creature enters the battlefield, you may pay {1}{G}. If you do, that creature's controller creates a token that's a copy of that creature.
mana={2}{G}{G}
type=Creature
subtype=Dryad
power=4
toughness=4
[/card]
[card]
name=Charging Binox
abilities=trample
text=Assist (Another player can pay up to {7} of this spell's cost.) -- Trample
mana={7}{G}
type=Creature
subtype=Beast
power=7
toughness=5
[/card]
[card]
name=The Crowd Goes Wild
auto=target(<upto:X>creature|battlefield) counter(1/1,1)
auto=all(creature[counter{1/1.1}]) trample
text=Assist (Another player can pay up to {X} of this spell's cost. You choose the value of X.) -- Support X. (Put a +1/+1 counter on each of up to X target creatures.) -- Each creature with a +1/+1 counter on it gains trample until end of turn.
mana={X}{G}
type=Sorcery
[/card]
[card]
name=Decorated Champion
auto=@movedTo(other warrior|myBattlefield):counter(1/1)
text=Whenever another Warrior enters the battlefield under your team's control, put a +1/+1 counter on Decorated Champion.
mana={1}{G}
type=Creature
subtype=Elf Warrior
power=2
toughness=2
[/card]
[card]
name=Jungle Wayfinder
auto=ability$!moveto(ownerhand) notatarget(land[basic]|mylibrary)!$ opponent
auto=ability$!moveto(ownerhand) notatarget(land[basic]|mylibrary)!$ controller
text=When Jungle Wayfinder enters the battlefield, each player may search their library for a basic land card, reveal it, put it into their hand, then shuffle their library.
mana={2}{G}
type=Creature
subtype=Elf Warrior
power=3
toughness=3
[/card]
[card]
name=Azra Oddsmaker
auto=@each my combatbegins may ability$!name(discard) reject notatarget(*|myhand)!$:target(creature) transforms((,newability[@combatdamaged(player) from(this):draw:2 controller])) ueot
text=At the beginning of combat on your turn, you may discard a card. If you do, choose a creature. Whenever that creature deals combat damage to a player this turn, you draw two cards.
mana={1}{B}{R}
type=Creature
subtype=Azra Warrior
power=3
toughness=3
[/card]
[card]
name=Rushblade Commander
auto=lord(warrior|mybattlefield) haste
text=Warriors your team controls have haste.
mana={B}{R}
type=Creature
subtype=Azra Warrior
power=2
toughness=2
[/card]
[card]
name=Vampire Charmseeker
abilities=flying
auto=target(instant,sorcery,creature|graveyard) moveTo(ownerHand)
text=Assist (Another player can pay up to {6} of this spell's cost.) -- Flying -- When Vampire Charmseeker enters the battlefield, return target instant, sorcery, or creature card from a graveyard to its owner's hand.
mana={6}{U}{B}
type=Creature
subtype=Vampire Wizard
power=3
toughness=4
[/card]
[card]
name=Victory Chimes
auto=@each upkeep:untap
auto={T}:target(player) add{c}
text=Untap Victory Chimes during each other player's untap step. -- {T}: A player of your choice adds {C}.
mana={3}
type=Artifact
[/card]
[card]
name=Bountiful Promenade
auto=tap(noevent)
auto={T}:Add{G}
auto={T}:Add{W}
text=Bountiful Promenade enters the battlefield tapped unless you have two or more opponents. -- {T}: Add {G} or {W}.
type=Land
[/card]
[card]
name=Luxury Suite
auto=tap(noevent)
auto={T}:Add{B}
auto={T}:Add{R}
text=Luxury Suite enters the battlefield tapped unless you have two or more opponents. -- {T}: Add {B} or {R}.
type=Land
[/card]
[card]
name=Morphic Pool
auto=tap(noevent)
auto={T}:Add{U}
auto={T}:Add{B}
text=Morphic Pool enters the battlefield tapped unless you have two or more opponents. -- {T}: Add {U} or {B}.
type=Land
[/card]
[card]
name=Sea of Clouds
auto=tap(noevent)
auto={T}:Add{W}
auto={T}:Add{U}
text=Sea of Clouds enters the battlefield tapped unless you have two or more opponents. -- {T}: Add {W} or {U}.
type=Land
[/card]
[card]
name=Spire Garden
auto=tap(noevent)
auto={T}:Add{R}
auto={T}:Add{G}
text=Spire Garden enters the battlefield tapped unless you have two or more opponents. -- {T}: Add {R} or {G}.
type=Land
[/card]

View File

@@ -0,0 +1,420 @@
grade=borderline
[card]
name=Arahbo, Roar of the World
auto=@each my combatbegins:target(other cat|myBattlefield) 3/3 ueot
auto=@combat(attacking) source(cat|mybattlefield):all(trigger[to]) pay[[{1}{G}{W}]] trample && dynamicability<!mytgt powerpumpboth!>
text=Eminence — At the beginning of combat on your turn, if Arahbo, Roar of the World is in the command zone or on the battlefield, another target Cat you control gets +3/+3 until end of turn. -- Whenever another Cat you control attacks, you may pay {1}{G}{W}. If you do, it gains trample and gets +X/+X until end of turn, where X is its power.
mana={3}{G}{W}
type=Legendary Creature
subtype=Cat Avatar
power=5
toughness=5
[/card]
[card]
name=Balan, Wandering Knight
auto=this(gear > 1) double strike
auto={1}{W}:all(equipment|mybattlefield) newhook
text=First strike -- Balan, Wandering Knight has double strike as long as two or more Equipment are attached to it. -- {1}{W}: Attach all Equipment you control to Balan.
mana={2}{W}{W}
type=Legendary Creature
subtype=Cat Knight
power=3
toughness=3
[/card]
[card]
name=Bloodforged Battle-Axe
auto=teach(creature) 2/0
auto=teach(creature) @combatdamaged(player) from(mytgt):clone all(this)
auto={2}:equip
text=Equipped creature gets +2/+0. -- Whenever equipped creature deals combat damage to a player, create a token that's a copy of Bloodforged Battle-Axe. -- Equip {2}
mana={1}
type=Artifact
subtype=Equipment
[/card]
[card]
name=Bloodline Necromancer
abilities=lifelink
auto=may target(creature[vampire;wizard]|mygraveyard) moveTo(mybattlefield)
text=Lifelink -- When Bloodline Necromancer enters the battlefield, you may return target Vampire or Wizard creature card from your graveyard to the battlefield.
mana={4}{B}
type=Creature
subtype=Vampire Wizard
power=3
toughness=2
[/card]
[card]
name=Bloodsworn Steward
abilities=flying
text=Flying -- Commander creatures you control get +2/+2 and have haste.
mana={2}{R}{R}
type=Creature
subtype=Vampire Knight
power=4
toughness=4
[/card]
[card]
name=Boneyard Scourge
abilities=flying
autograveyard=@movedTo(other Dragon|mygraveyard) from(myBattlefield):may pay({1}{b}) moveTo(mybattlefield)
text=Flying -- Whenever a Dragon you control dies while Boneyard Scourge is in your graveyard, you may pay {1}{B}. If you do, return Boneyard Scourge from your graveyard to the battlefield.
mana={2}{B}{B}
type=Creature
subtype=Zombie Dragon
power=4
toughness=3
[/card]
[card]
name=Crimson Honor Guard
abilities=trample
auto=@each my end:damage:4 controller
auto=@each opponent end:damage:4 opponent
text=Trample -- At the beginning of each player's end step, Crimson Honor Guard deals 4 damage to that player unless they control a commander.
mana={3}{R}{R}
type=Creature
subtype=Vampire Knight
power=4
toughness=5
[/card]
[card]
name=Curse of Bounty
target=player
auto=@combat(attacking) source(creature|myBattlefield) restriction(once):untap all(*[-land]|myBattlefield)
text=Enchant player -- Whenever enchanted player is attacked, untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control.
mana={1}{G}
type=Enchantment
subtype=Aura Curse
[/card]
[card]
name=Curse of Disturbance
target=player
auto=@combat(attacking) source(creature|myBattlefield) restriction(once):create(zombie:creature zombie:2/2:black)
text=Enchant player -- Whenever enchanted player is attacked, create a 2/2 black Zombie creature token. Each opponent attacking that player does the same.
mana={2}{B}
type=Enchantment
subtype=Aura Curse
[/card]
[card]
name=Curse of Opulence
target=player
auto=@combat(attacking) source(creature|myBattlefield) restriction(once):token(435451)
text=Enchant player -- Whenever enchanted player is attacked, create a colorless artifact token named Gold. It has "Sacrifice this artifact: Add one mana of any color." Each opponent attacking that player does the same.
mana={R}
type=Enchantment
subtype=Aura Curse
[/card]
[card]
name=Curse of Verbosity
target=player
auto=@combat(attacking) source(creature|myBattlefield) restriction(once):draw:1
text=Enchant player -- Whenever enchanted player is attacked, you draw a card. Each opponent attacking that player does the same.
mana={2}{U}
type=Enchantment
subtype=Aura Curse
[/card]
[card]
name=Curse of Vitality
target=player
auto=@combat(attacking) source(creature|myBattlefield) restriction(once):life:2
text=Enchant player -- Whenever enchanted player is attacked, you gain 2 life. Each opponent attacking that player does the same.
mana={2}{W}
type=Enchantment
subtype=Aura Curse
[/card]
[card]
name=Disrupt Decorum
auto=mustattack all(creature|opponentBattlefield) uynt
text=Goad all creatures you don't control. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.)
mana={2}{R}{R}
type=Sorcery
[/card]
[card]
name=Edgar Markov
abilities=first strike,haste
auto=@movedTo(nother Vampire|mystack):create(vampire:creature vampire:1/1:black)
auto=@combat(attacking) source(this):counter(1/1) all(vampire|myBattlefield)
text=Eminence — Whenever you cast another Vampire spell, if Edgar Markov is in the command zone or on the battlefield, create a 1/1 black Vampire creature token. -- First strike, haste -- Whenever Edgar Markov attacks, put a +1/+1 counter on each Vampire you control.
mana={3}{R}{W}{B}
type=Legendary Creature
subtype=Vampire Knight
power=4
toughness=4
[/card]
[card]
name=Fractured Identity
target=*[-land]
auto=moveto(exile)
auto=clone
text=Exile target nonland permanent. Each player other than its controller creates a token that's a copy of it.
mana={3}{W}{U}
type=Sorcery
[/card]
[card]
name=Galecaster Colossus
auto={T(wizard|myBattlefield)}:target(*[-land]|opponentBattlefield) moveTo(ownerHand)
text=Tap an untapped Wizard you control: Return target nonland permanent you don't control to its owner's hand.
mana={5}{U}{U}
type=Creature
subtype=Giant Wizard
power=5
toughness=6
[/card]
[card]
name=Hammer of Nazahn
auto=may rehook target(creature)
auto=@movedTo(equipment|mybattlefield):
auto=teach(creature) 2/0
auto=teach(creature) indestructible
auto={4}:equip
text=Whenever Hammer of Nazahn or another Equipment enters the battlefield under your control, you may attach that Equipment to target creature you control. -- Equipped creature gets +2/+0 and has indestructible. -- Equip {4}
mana={4}
type=Legendary Artifact
subtype=Equipment
[/card]
[card]
name=Hungry Lynx
abilities=deathtouch
auto=lord(cat|myBattlefield) protection from(rat)
auto=@each my endofturn:create(rat:rat creature:1/1:black:deathtouch) opponent
auto=@movedTo(rat|graveyard) from(battlefield):counter(1/1) all(cat|myBattlefield)
text=Cats you control have protection from Rats. (They can't be blocked, targeted, or dealt damage by Rats.) -- At the beginning of your end step, target opponent creates a 1/1 black Rat creature token with deathtouch. -- Whenever a Rat dies, put a +1/+1 counter on each Cat you control.
mana={1}{G}
type=Creature
subtype=Cat
power=2
toughness=2
[/card]
[card]
name=Inalla, Archmage Ritualist
auto=@movedto(other wizard[-token]|mybattlefield):all(trigger[to]) pay[[{1}]] clone with(unearth,haste)
auto={T(wizard|myBattlefield)}{T(wizard|myBattlefield)}{T(wizard|myBattlefield)}{T(wizard|myBattlefield)}{T(wizard|myBattlefield)}:target(player) life:-7
text=Eminence — Whenever another nontoken Wizard enters the battlefield under your control, if Inalla, Archmage Ritualist is in the command zone or on the battlefield, you may pay {1}. If you do, create a token that's a copy of that Wizard. The token gains haste. Exile it at the beginning of the next end step. -- Tap five untapped Wizards you control: Target player loses 7 life.
mana={2}{U}{B}{R}
type=Legendary Creature
subtype=Human Wizard
power=4
toughness=5
[/card]
[card]
name=Kess, Dissident Mage
abilities=flying
auto={0}:target(instant,sorcery|mygraveyard) tempflashback ueot myTurnOnly limit:1
text=Flying -- During each of your turns, you may cast an instant or sorcery card from your graveyard. If a card cast this way would be put into your graveyard, exile it instead.
mana={1}{U}{B}{R}
type=Legendary Creature
subtype=Human Wizard
power=3
toughness=4
[/card]
[card]
name=Kindred Boon
auto=chooseatype transforms((,newability[{1}{W}:target(creature[chosentype]|myBattlefield) counter(0/0.1.divinity)])) forever chooseend
auto=lord(creature[counter{0/0.1.divinity}]) indestructible
text=As Kindred Boon enters the battlefield, choose a creature type. -- {1}{W}: Put a divinity counter on target creature you control of the chosen type. -- Each creature you control with a divinity counter on it has indestructible.
mana={2}{W}{W}
type=Enchantment
[/card]
[card]
name=Kindred Charge
auto=chooseatype clone with(treason,haste) all(creature[chosentype]|mybattlefield) chooseend
text=Choose a creature type. For each creature you control of the chosen type, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step.
mana={4}{R}{R}
type=Sorcery
[/card]
[card]
name=Kindred Discovery
auto=chooseatype transforms((,newability[@movedTo(creature[chosentype]|mybattlefield)}:draw:1], newability[@combat(attacking) source(creature[chosentype]|mybattlefield)}:draw:1])) forever chooseend
text=As Kindred Discovery enters the battlefield, choose a creature type. -- Whenever a creature you control of the chosen type enters the battlefield or attacks, draw a card.
mana={3}{U}{U}
type=Enchantment
[/card]
[card]
name=Kindred Dominance
auto=chooseatype destroy all(creature[-chosentype]) chooseend
text=Choose a creature type. Destroy all creatures that aren't of the chosen type.
mana={5}{B}{B}
type=Sorcery
[/card]
[card]
name=Licia, Sanguine Tribune
abilities=first strike,lifelink
anyzone=this(variable{lifegain}=1) changecost(colorless:-1) forcedalive
anyzone=this(variable{lifegain}=2) changecost(colorless:-2) forcedalive
anyzone=this(variable{lifegain}=3) changecost(colorless:-3) forcedalive
anyzone=this(variable{lifegain}=4) changecost(colorless:-4) forcedalive
anyzone=this(variable{lifegain}=5) changecost(colorless:-5) forcedalive
anyzone=this(variable{lifegain}=6) changecost(colorless:-6) forcedalive
anyzone=this(variable{lifegain}=7) changecost(colorless:-7) forcedalive
anyzone=this(variable{lifegain}=8) changecost(colorless:-8) forcedalive
anyzone=this(variable{lifegain}=9) changecost(colorless:-9) forcedalive
auto={L:5}:counter(1/1,3) myTurnOnly limit:1
text=This spell costs {1} less to cast for each 1 life you gained this turn. -- First strike, lifelink -- Pay 5 life: Put three +1/+1 counters on Licia, Sanguine Tribune. Activate this ability only during your turn and only once each turn.
mana={5}{R}{W}{B}
type=Legendary Creature
subtype=Vampire Soldier
power=4
toughness=4
[/card]
[card]
name=Mathas, Fiend Seeker
abilities=menace
auto=@each my endofturn:target(creature|opponentBattlefield) (transforms((,newability[counter(0/0.1.Bounty)], newability[@movedto(this|mygraveyard):draw:1 opponent && life:2 opponent)]))
text=Menace -- At the beginning of your end step, put a bounty counter on target creature an opponent controls. For as long as that creature has a bounty counter on it, it has "When this creature dies, each opponent draws a card and gains 2 life."
mana={R}{W}{B}
type=Legendary Creature
subtype=Vampire
power=3
toughness=3
[/card]
[card]
name=Mirri, Weatherlight Duelist
abilities=first strike
auto=aslongas(this[tapped]) lord(creature[-attacking]|opponentbattlefield) cantattack
auto=aslongas(this[tapped]) lord(creature[-attacking]|opponentbattlefield) cantpwattack
auto=@combat(attacking) source(this):aslongas(creature[blocking]|opponentBattlefield) lord(creature[-blocking]|opponentbattlefield) cantblock
text=First strike -- Whenever Mirri, Weatherlight Duelist attacks, each opponent can't block with more than one creature this combat. -- As long as Mirri, Weatherlight Duelist is tapped, no more than one creature can attack you each combat.
mana={1}{G}{W}
type=Legendary Creature
subtype=Cat Warrior
power=3
toughness=2
[/card]
[card]
name=Nazahn, Revered Bladesmith
auto=choice moveTo(myHand) target(equipment[-Hammer of Nazahn]|myLibrary)
auto=choice moveTo(myBattlefield) target(Hammer of Nazahn|myLibrary)
auto=@combat(attacking) source(creature[geared]|mybattlefield):may tap target(creature|opponentBattlefield)
text=When Nazahn, Revered Bladesmith enters the battlefield, search your library for an Equipment card and reveal it. If you reveal a card named Hammer of Nazahn this way, put it onto the battlefield. Otherwise, put that card into your hand. Then shuffle your library. -- Whenever an equipped creature you control attacks, you may tap target creature defending player controls.
mana={4}{G}{W}
type=Legendary Creature
subtype=Cat Artificer
power=5
toughness=4
[/card]
[card]
name=Patron of the Vein
abilities=flying
auto=destroy target(creature|opponentBattlefield)
auto=@movedTo(creature|graveyard) from(opponentbattlefield):all(trigger[from]) moveto(exile) && counter(1/1)all(vampire|myBattlefield)
text=Flying -- When Patron of the Vein enters the battlefield, destroy target creature an opponent controls. -- Whenever a creature an opponent controls dies, exile it and put a +1/+1 counter on each Vampire you control.
mana={4}{B}{B}
type=Creature
subtype=Vampire Shaman
power=4
toughness=4
[/card]
[card]
name=Qasali Slingers
abilities=reach
auto=may destroy target(artifact,enchantment)
auto=@movedTo(cat|myBattlefield):may destroy target(artifact,enchantment)
text=Reach -- Whenever Qasali Slingers or another Cat enters the battlefield under your control, you may destroy target artifact or enchantment.
mana={4}{G}
type=Creature
subtype=Cat Warrior
power=3
toughness=5
[/card]
[card]
name=Ramos, Dragon Engine
abilities=flying
auto=@movedTo(*[white]|mystack):counter(1/1)
auto=@movedTo(*[blue]|mystack):counter(1/1)
auto=@movedTo(*[black]|mystack):counter(1/1)
auto=@movedTo(*[red]|mystack):counter(1/1)
auto=@movedTo(*[green]|mystack):counter(1/1)
auto={C(1/1,-5)}:Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G} limit:1
text=Flying -- Whenever you cast a spell, put a +1/+1 counter on Ramos, Dragon Engine for each of that spell's colors. -- Remove five +1/+1 counters from Ramos: Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G}. Activate this ability only once each turn.
mana={6}
type=Legendary Artifact Creature
subtype=Dragon
power=4
toughness=4
[/card]
[card]
name=Scalelord Reckoner
abilities=flying
auto=@targeted(dragon|mybattlefield) from(*|opponentbattlefield,opponenthand,opponentstack,opponentgraveyard,opponentexile,opponentlibrary):destroy target(*[-land]|opponentBattlefield)
text=Flying -- Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, destroy target nonland permanent that player controls.
mana={3}{W}{W}
type=Creature
subtype=Dragon
power=4
toughness=4
[/card]
[card]
name=Territorial Hellkite
abilities=flying,haste
auto=@combat(attacking) source(this):frozen
text=Flying, haste -- At the beginning of combat on your turn, choose an opponent at random that Territorial Hellkite didn't attack during your last combat. Territorial Hellkite attacks that player this combat if able. If you can't choose an opponent this way, tap Territorial Hellkite.
mana={2}{R}{R}
type=Creature
subtype=Dragon
power=6
toughness=5
[/card]
[card]
name=The Ur-Dragon
abilities=flying
auto=lord(dragon|mycastingzone) altercost(colorless, -1)
auto=@combat(attacking) source(dragon|myBattlefield) restriction(once):may moveTo(myBattlefield) target(*[-instant;-sorcery]|myHand)
auto=@combat(attacking) source(dragon|myBattlefield):draw:1
text=Eminence — As long as The Ur-Dragon is in the command zone or on the battlefield, other Dragon spells you cast cost {1} less to cast. -- Flying -- Whenever one or more Dragons you control attack, draw that many cards, then you may put a permanent card from your hand onto the battlefield.
mana={4}{W}{U}{B}{R}{G}
type=Legendary Creature
subtype=Dragon Avatar
power=10
toughness=10
[/card]
[card]
name=Traverse the Outlands
auto=moveTo(myBattlefield) and!(tap(noevent))! target(<upto:power:highest:*:mybattlefield>land[basic]|myLibrary)
text=Search your library for up to X basic land cards, where X is the greatest power among creatures you control. Put those cards onto the battlefield tapped, then shuffle your library.
mana={4}{G}
type=Sorcery
[/card]
[card]
name=Wasitora, Nekoru Queen
abilities=flying,trample
auto=@combatdamaged(player) from(this):if type(creature|opponentBattlefield)~morethan~0 then ability$!sacrifice notatarget(creature|mybattlefield)!$ opponent else create(cat dragon:creature cat dragon:3/3:black:red:green:flying)
text=Flying, trample -- Whenever Wasitora, Nekoru Queen deals combat damage to a player, that player sacrifices a creature. If the player can't, you create a 3/3 black, red, and green Cat Dragon creature token with flying.
mana={2}{B}{R}{G}
type=Legendary Creature
subtype=Cat Dragon
power=5
toughness=4
[/card]

View File

@@ -0,0 +1,331 @@
grade=borderline
[card]
name=Empyrial Storm
auto=create(Angel:creature Angel:4/4:white:flying)
text=When you cast this spell, copy it for each time you've cast your commander from the command zone this game. -- Create a 4/4 white Angel creature token with flying.
mana={4}{W}{W}
type=Sorcery
[/card]
[card]
name=Heavenly Blademaster
abilities=flying, double strike
auto=may target(<anyamount>aura|battlefield) newhook
auto=may target(<anyamount>equipment|battlefield) newhook
auto=thisforeach(aura) lord(other creature|myBattlefield) 1/1
auto=thisforeach(gear) lord(other creature|myBattlefield) 1/1
auto=lord(other creature|myBattlefield) +1/+1 for each aura and equipment attached to heavenly blademaster
text=Flying, double strike -- When Heavenly Blademaster enters the battlefield, you may attach any number of Auras and Equipment you control to it. -- Other creatures you control get +1/+1 for each Aura and Equipment attached to Heavenly Blademaster.
mana={5}{W}
type=Creature
subtype=Angel
power=3
toughness=6
[/card]
[card]
name=Loyal Unicorn
abilities=vigilance
text=Vigilance -- Lieutenant — At the beginning of combat on your turn, if you control your commander, prevent all combat damage that would be dealt to creatures you control this turn. Other creatures you control gain vigilance until end of turn.
mana={3}{W}
type=Creature
subtype=Unicorn
power=3
toughness=4
[/card]
[card]
name=Magus of the Balance
auto={4}{W}{T}{S}:auto=if type(land|mybattlefield)~morethan~type(land|opponentbattlefield) then ability$! sacrifice notatarget(<type:land:mybattlefieldminustype:land:opponentbattlefieldminusend>land|mybattlefield) !$ controller && if type(land|opponentbattlefield)~morethan~type(land|mybattlefield) then ability$! sacrifice notatarget(<type:land:mybattlefieldminustype:land:opponentbattlefieldminusend>land|mybattlefield) !$ opponent && if type(creature|mybattlefield)~morethan~type(creature|opponentbattlefield) then ability$! sacrifice notatarget(<type:creature:mybattlefieldminustype:creature:opponentbattlefieldminusend>creature|mybattlefield) !$ controller && if type(creature|opponentbattlefield)~morethan~type(creature|mybattlefield) then ability$! sacrifice notatarget(<type:creature:mybattlefieldminustype:creature:opponentbattlefieldminusend>creature|mybattlefield) !$ opponent && if type(*|myhand)~morethan~type(*|opponenthand) then ability$! reject notatarget(<type:*:myhandminustype:*:opponenthandminusend>*|myhand) !$ controller && if type(*|opponenthand)~morethan~type(*|myhand) then ability$! reject notatarget(<type:*:myhandminustype:*:opponenthandminusend>*|myhand) !$ opponent
text={4}{W}, {T}, Sacrifice Magus of the Balance: Each player chooses a number of lands they control equal to the number of lands controlled by the player who controls the fewest, then sacrifices the rest. Players discard cards and sacrifice creatures the same way.
mana={1}{W}
type=Creature
subtype=Human Wizard
power=2
toughness=2
[/card]
[card]
name=Echo Storm
target=artifact
auto=clone
text=When you cast this spell, copy it for each time you've cast your commander from the command zone this game. You may choose new targets for the copies. -- Create a token that's a copy of target artifact.
mana={3}{U}{U}
type=Sorcery
[/card]
[card]
name=Ever-Watching Threshold
auto=auto=@each blockers restriction{type(creature[attacking]|opponentbattlefield)~morethan~0} draw:1
text=Whenever an opponent attacks you and/or a planeswalker you control with one or more creatures, draw a card.
mana={2}{U}
type=Enchantment
[/card]
[card]
name=Loyal Drake
abilities=flying
text=Flying -- Lieutenant — At the beginning of combat on your turn, if you control your commander, draw a card.
mana={2}{U}
type=Creature
subtype=Drake
power=2
toughness=2
[/card]
[card]
name=Octopus Umbra
abilities=totemarmor
target=creature
auto=teach(creature) transforms((,newability[@combat(attacking) source(this):may tap target(creature)]))
auto=teach(creature) becomes(,8/8)
text=Enchant creature -- Enchanted creature has base power and toughness 8/8 and has "Whenever this creature attacks, you may tap target creature with power 8 or less." -- Totem armor (If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.)
mana={3}{U}{U}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Bloodtracker
abilities=flying
auto={B}{L:2}:counter(1/1)
auto=@movedTo(this|nonbattlezone) from(battlefield):thisforeach(counter{1/1,1}) draw:1 controller
text=Flying -- {B}, Pay 2 life: Put a +1/+1 counter on Bloodtracker. -- When Bloodtracker leaves the battlefield, draw a card for each +1/+1 counter on it.
mana={3}{B}
type=Creature
subtype=Vampire Wizard
power=2
toughness=2
[/card]
[card]
name=Loyal Subordinate
abilities=menace
text=Menace -- Lieutenant — At the beginning of combat on your turn, if you control your commander, each opponent loses 3 life.
mana={2}{B}
type=Creature
subtype=Zombie
power=3
toughness=1
[/card]
[card]
name=Night Incarnate
abilities=deathtouch
other={3}{B} name(Evoke)
auto=@movedTo(this|nonbattlezone) from(battlefield):all(creature) -3/-3 ueot
auto=alternative sacrifice
text=Deathtouch -- When Night Incarnate leaves the battlefield, all creatures get -3/-3 until end of turn. -- Evoke {3}{B} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)
mana={4}{B}
type=Creature
subtype=Elemental
power=3
toughness=4
[/card]
[card]
name=Fury Storm
target=*[instant;sorcery]|stack
auto=castcard(copied noevent)
text=When you cast this spell, copy it for each time you've cast your commander from the command zone this game. You may choose new targets for the copies. -- Copy target instant or sorcery spell. You may choose new targets for the copy.
mana={2}{R}{R}
type=Instant
[/card]
[card]
name=Loyal Apprentice
abilities=flying, haste
text=Haste -- Lieutenant — At the beginning of combat on your turn, if you control your commander, create a 1/1 colorless Thopter artifact creature token with flying. That token gains haste until end of turn.
mana={1}{R}
type=Creature
subtype=Human Artificer
power=2
toughness=1
[/card]
[card]
name=Nesting Dragon
abilities=flying
auto=@movedTo(land|myBattlefield):token(dragon egg)
text=Flying -- Landfall — Whenever a land enters the battlefield under your control, create a 0/2 red Dragon Egg creature token with defender and "When this creature dies, create a 2/2 red Dragon creature token with flying and '{R}: This creature gets +1/+0 until end of turn.'"
mana={3}{R}{R}
type=Creature
subtype=Dragon
power=5
toughness=4
[/card]
[card]
name=Varchild, Betrayer of Kjeldor
auto=@combatdamaged(player) from(this):create(Survivor:Creature Survivor:1/1:red)*thatmuch opponent
auto=lord(survivor|opponentBattlefield) cantblock
auto=lord(survivor|opponentBattlefield) cantattack
auto=@movedTo(this|nonbattlezone) from(mybattlefield):moveTo(myBattlefield) all(survivor)
text=Whenever Varchild, Betrayer of Kjeldor deals combat damage to a player, that player creates that many 1/1 red Survivor creature tokens. -- Survivors your opponents control can't block, and they can't attack you or a planeswalker you control. -- When Varchild leaves the battlefield, gain control of all Survivors.
mana={2}{R}
type=Legendary Creature
subtype=Human Knight
power=3
toughness=3
[/card]
[card]
name=Crash of Rhino Beetles
abilities=trample
auto=aslongas(land|myBattlefield)~morethan~9 10/10
text=Trample -- Crash of Rhino Beetles gets +10/+10 as long as you control ten or more lands.
mana={4}{G}
type=Creature
subtype=Insect
power=5
toughness=5
[/card]
[card]
name=Loyal Guardian
abilities=trample
text=Trample -- Lieutenant — At the beginning of combat on your turn, if you control your commander, put a +1/+1 counter on each creature you control.
mana={4}{G}
type=Creature
subtype=Rhino
power=4
toughness=4
[/card]
[card]
name=Turntimber Sower
auto=@@movedto(land|mygraveyard):create(plant:creature plant:0/1:green:)
auto={G}{S(creature|myBattlefield)}{S(creature|myBattlefield)}{S(creature|myBattlefield)}:target(land|mygraveyard) moveto(ownerhand)
text=Whenever one or more land cards are put into your graveyard from anywhere, create a 0/1 green Plant creature token. -- {G}, Sacrifice three creatures: Return target land card from your graveyard to your hand.
mana={2}{G}
type=Creature
subtype=Elf Druid
power=3
toughness=3
[/card]
[card]
name=Whiptongue Hydra
abilities=reach
auto=@movedto(creature[flying]|graveyard):counter(1/1) oneshot
auto=destroy all(creature[flying])
text=Reach -- When Whiptongue Hydra enters the battlefield, destroy all creatures with flying. Put a +1/+1 counter on Whiptongue Hydra for each creature destroyed this way.
mana={5}{G}
type=Creature
subtype=Lizard Hydra
power=4
toughness=4
[/card]
[card]
name=Arixmethes, Slumbering Isle
auto=tap(noevent)
auto=counter(0/0,5,Slumber)
auto=this(counter{0/0.1.Slumber}>=1) transforms((removetypes,newability[becomes(Legendary Land)]))
auto=this(counter{0/0.1.Slumber}<1) transforms((Legendary Creature))
auto=@movedTo(*|mystack):may counter(0/0,-1,Slumber)
auto={T}:Add{G}{U}
text=Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it. -- As long as Arixmethes has a slumber counter on it, it's a land. (It's not a creature.) -- Whenever you cast a spell, you may remove a slumber counter from Arixmethes. -- {T}: Add {G}{U}.
mana={2}{G}{U}
type=Legendary Creature
subtype=Kraken
power=12
toughness=12
[/card]
[card]
name=Kestia, the Cultivator
bestow={3}{G}{W}{U}
auto=bestow bstw
auto=bestow teach(creature) 4/4
auto=@combat(attacking) source(creature[enchanted]|myBattlefield):draw:1
auto=@combat(attacking) source(creature[enchantment]|myBattlefield):draw:1
text=Bestow {3}{G}{W}{U} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.) -- Enchanted creature gets +4/+4. -- Whenever an enchanted creature or enchantment creature you control attacks, draw a card.
mana={1}{G}{W}{U}
type=Legendary Enchantment Creature
subtype=Nymph
power=4
toughness=4
[/card]
[card]
name=Thantis, the Warweaver
abilities=vigilance, reach
auto=lord(creature) mustattack
auto=@combat(attacking) source(creature|opponentBattlefield):counter(1/1)
text=Vigilance, reach -- All creatures attack each combat if able. -- Whenever a creature attacks you or a planeswalker you control, put a +1/+1 counter on Thantis, the Warweaver.
mana={3}{B}{R}{G}
type=Legendary Creature
subtype=Spider
power=5
toughness=5
[/card]
[card]
name=Tuvasa the Sunlit
auto=foreach(enchantment|mybattlefield) 1/1
auto=@movedTo(*[enchantment]|mystack) turnlimited:draw:1
text=Tuvasa the Sunlit gets +1/+1 for each enchantment you control. -- Whenever you cast your first enchantment spell each turn, draw a card.
mana={G}{W}{U}
type=Legendary Creature
subtype=Merfolk Shaman
power=1
toughness=1
[/card]
[card]
name=Varina, Lich Queen
auto=@each my blockers restriction{type(Zombie[attacking]|myBattlefield)~morethan~0}:draw:type:zombie[attacking]:myBattlefield && transforms((,newability[target(<type:zombie[attacking]:myBattlefield>*|myhand) reject])) forever
auto=@each my blockers restriction{type(Zombie[attacking]|myBattlefield)~morethan~0}:life:type:zombie[attacking]:myBattlefield
auto={2}{E(*|mygraveyard)}{E(*|mygraveyard)}:create(black zombie:creature black zombie:2/2) and!( tap(noevent) )!
text=Whenever you attack with one or more Zombies, draw that many cards, then discard that many cards. You gain that much life. -- {2}, Exile two cards from your graveyard: Create a tapped 2/2 black Zombie creature token.
mana={1}{W}{U}{B}
type=Legendary Creature
subtype=Zombie Wizard
power=4
toughness=4
[/card]
[card]
name=Windgrace's Judgment
target=*[-land]|opponentBattlefield
auto=destroy
text=For any number of opponents, destroy target nonland permanent that player controls.
mana={3}{B}{G}
type=Instant
[/card]
[card]
name=Ancient Stone Idol
abilities=flash, trample
anyzone=foreach(creature[attacking]|battlefield) changecost(colorless:-1) forcedalive
auto=@movedTo(this|graveyard) from(battlefield):create(construct artifact:creature construct artifact:6/12:colorless:trample)
text=Flash -- This spell costs {1} less to cast for each attacking creature. -- Trample -- When Ancient Stone Idol dies, create a 6/12 colorless Construct artifact creature token with trample.
mana={10}
type=Artifact Creature
subtype=Golem
power=12
toughness=12
[/card]
[card]
name=Geode Golem
abilities=trample
text=Trample -- Whenever Geode Golem deals combat damage to a player, you may cast your commander from the command zone without paying its mana cost. (You still pay any additional costs.)
mana={5}
type=Artifact Creature
subtype=Golem
power=5
toughness=3
[/card]
[card]
name=Retrofitter Foundry
auto={3}:untap
auto={2}{T}:create(servo artifact:creature servo artifact:1/1:colorless:)
auto={1}{T}[S(Servo|myBattlefield)}:create(thopter artifact:creature thopter artifact:1/1:colorless:flying)
auto={T}[S(Thopter|myBattlefield)}:create(construct artifact:creature construct artifact:4/4:colorless:)
text={3}: Untap Retrofitter Foundry. -- {2}, {T}: Create a 1/1 colorless Servo artifact creature token. -- {1}, {T}, Sacrifice a Servo: Create a 1/1 colorless Thopter artifact creature token with flying. -- {T}, Sacrifice a Thopter: Create a 4/4 colorless Construct artifact creature token.
mana={1}
type=Artifact
[/card]

View File

@@ -0,0 +1,219 @@
grade=borderline
[card]
name=Custodi Soulcaller
auto=@combat(attacking) source(this):1/1 ueot
auto=@combat(attacking) source(this):moveto(mybattlefield) target(creature[manacost<=1]|mygraveyard)
text=Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.) -- Whenever Custodi Soulcaller attacks, return target creature card with converted mana cost X or less from your graveyard to the battlefield, where X is the number of players you attacked with a creature this combat.
mana={1}{W}{W}
type=Creature
subtype=Human Cleric
power=1
toughness=2
[/card]
[card]
name=Recruiter of the Guard
auto=may moveto(myhand) target(creature[toughness<=2]|mylibrary)
text=When Recruiter of the Guard enters the battlefield, you may search your library for a creature card with toughness 2 or less, reveal it, put it into your hand, then shuffle your library.
mana={2}{W}
type=Creature
subtype=Human Soldier
power=1
toughness=1
[/card]
[card]
name=Spectral Grasp
target=creature
auto=cantattack
auto=cantpwattack
auto=cantblock
text=Enchant creature -- Enchanted creature can't attack you or a planeswalker you control. -- Enchanted creature can't block creatures you control.
mana={1}{W}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Wings of the Guard
abilities=flying
auto=@combat(attacking) source(this):1/1 ueot
text=Flying -- Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.)
mana={1}{W}
type=Creature
subtype=Bird
power=1
toughness=1
[/card]
[card]
name=Coveted Peacock
abilities=flyin
auto=@combat(attacking) source(this):may target(creature|opponentBattlefield) mustattack uynt
text=Flying -- Whenever Coveted Peacock attacks, you may goad target creature defending player controls. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.)
mana={3}{U}{U}
type=Creature
subtype=Bird
power=3
toughness=4
[/card]
[card]
name=Jeering Homunculus
auto=may target(creature|opponentBattlefield) mustattack uynt
text=When Jeering Homunculus enters the battlefield, you may goad target creature. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.)
mana={1}{U}
type=Creature
subtype=Homunculus
power=0
toughness=4
[/card]
[card]
name=Skittering Crustacean
auto=@this(cantargetcard(*[-monstrous]) {6}{U}:becomes(monstrous) forever && counter(1/1, 4) && transforms((,newAbility[opponentshroud])) forever
text={6}{U}: Monstrosity 4. (If this creature isn't monstrous, put four +1/+1 counters on it and it becomes monstrous.) -- As long as Skittering Crustacean is monstrous, it has hexproof. (It can't be the target of spells or abilities your opponents control.)
mana={2}{U}
type=Creature
subtype=Crab
power=2
toughness=3
[/card]
[card]
name=Stunt Double
abilities=flash
auto=may copy NotATarget(creature)
text=Flash -- You may have Stunt Double enter the battlefield as a copy of any creature on the battlefield.
mana={3}{U}
type=Creature
subtype=Shapeshifter
power=0
toughness=0
[/card]
[card]
name=Sinuous Vermin
auto=@this(cantargetcard(*[-monstrous]) {3}{B}{B}:becomes(monstrous) forever && counter(1/1, 3) && transforms((,newability[menace])) forever
text={3}{B}{B}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) -- As long as Sinuous Vermin is monstrous, it has menace. (It can't be blocked except by two or more creatures.)
mana={1}{B}
type=Creature
subtype=Rat Horror
power=2
toughness=2
[/card]
[card]
name=Deputized Protester
abilities=menace
auto=@combat(attacking) source(this):1/1 ueot
text=Menace (This creature can't be blocked except by two or more creatures.) -- Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.)
mana={2}{R}
type=Creature
subtype=Human Warrior
power=2
toughness=1
[/card]
[card]
name=Grenzo's Ruffians
auto=@combat(attacking) source(this):1/1 ueot
text=Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.) -- Whenever Grenzo's Ruffians deals combat damage to an opponent, it deals that much damage to each other opponent.
mana={2}{R}{R}
type=Creature
subtype=Goblin
power=2
toughness=2
[/card]
[card]
name=Subterranean Tremors
auto=damage:X all(creature[-flying])
auto=this(X>=4) destroy all(artifact)
auto=this(X>=8) create(Lizard:Creature Lizard:8/8:red)
text=Subterranean Tremors deals X damage to each creature without flying. If X is 4 or more, destroy all artifacts. If X is 8 or more, put an 8/8 red Lizard creature token onto the battlefield.
mana={X}{R}
type=Sorcery
[/card]
[card]
name=Domesticated Hydra
abilities=trample
auto=@this(cantargetcard(*[-monstrous]) {X}{G}{G}{G}:becomes(monstrous) forever && counter(1/1, X) && transforms((,newAbility[trample])) forever
text={X}{G}{G}{G}: Monstrosity X. (If this creature isn't monstrous, put X +1/+1 counters on it and it becomes monstrous.) -- As long as Domesticated Hydra is monstrous, it has trample.
mana={2}{G}{G}
type=Creature
subtype=Hydra
power=3
toughness=3
[/card]
[card]
name=Fang of the Pack
auto=@combat(attacking) source(this):1/1 ueot
text=Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.) -- At the beginning of combat on your turn, another target creature you control gains melee until end of turn. (If a creature has multiple instances of melee, each triggers separately.)
mana={5}{G}
type=Creature
subtype=Wolf
power=5
toughness=3
[/card]
[card]
name=Menagerie Liberator
abilities=trample
auto=@combat(attacking) source(this):1/1 ueot
text=Trample -- Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.)
mana={3}{G}
type=Creature
subtype=Human Warrior
power=3
toughness=2
[/card]
[card]
name=Splitting Slime
auto=@this(cantargetcard(*[-monstrous]) {4}{G}{G}:becomes(monstrous) forever && counter(1/1, 3) && clone(this)
text={4}{G}{G}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) -- When Splitting Slime becomes monstrous, put a token onto the battlefield that's a copy of Splitting Slime. (The token has no counters and isn't monstrous.)
mana={3}{G}{G}
type=Creature
subtype=Ooze
power=3
toughness=3
[/card]
[card]
name=Adriana, Captain of the Guard
auto=@combat(attacking) source(this):1/1 ueot
auto=@combat(attacking) source(this):all(other creature[attacking]) 1/1 ueot
text=Melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat.) -- Other creatures you control have melee. (If a creature has multiple instances of melee, each triggers separately.)
mana={3}{R}{W}
type=Legendary Creature
subtype=Human Knight
power=4
toughness=4
[/card]
[card]
name=Daretti, Ingenious Iconoclast
auto=counter(0/0,3,loyalty)
auto={C(0/0,1,Loyalty)}:token(Construct,artifact creature construct,1/1,defender)
auto={C(0/0,-1,Loyalty)}{s(artifact|mybattlefield)}:destroy target(artifact,creature)
auto={C(0/0,-6,Loyalty)}:clone(NotATarget(artifact|graveyard)) && clone && clone
text=+1: Put a 1/1 colorless Construct artifact creature token with defender onto the battlefield. -- -1: You may sacrifice an artifact. If you do, destroy target artifact or creature. -- -6: Choose target artifact card in a graveyard or artifact on the battlefield. Put three tokens that are copies of it onto the battlefield.
mana={1}{B}{R}
type=Planeswalker
subtype=Daretti
[/card]
[card]
name=Kaya, Ghost Assassin
auto=counter(0/0,5,loyalty)
auto={C(0/0,0,Loyalty)}:blink target(creature,this) uynt && life:-2 controller
auto={C(0/0,-1,Loyalty)}:life:2 controller && life:-2 opponent
auto={C(0/0,-2,Loyalty)}:ability$!name(discard) reject notatarget(*|myhand)!$ opponent && draw:1
text=0: Exile Kaya, Ghost Assassin or up to one target creature. Return that card to the battlefield under its owner's control at the beginning of your next upkeep. You lose 2 life. -- -1: Each opponent loses 2 life and you gain 2 life. -- -2: Each opponent discards a card and you draw a card.
mana={2}{W}{B}
type=Planeswalker
subtype=Kaya
[/card]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -15,3 +15,26 @@
# Fabricate
#AUTO_DEFINE _FABRICATE_($c) transforms((,newability[choice counter(1/1.$c)],newability[choice create(Servo:Artifact Creature Servo:1/1)*$c])) ueot
# Dies, Evergreen
#AUTO_DEFINE _DIES_ @movedTo(this|mygraveyard) from(battlefield):
# Scry, Evergreen
#AUTO_DEFINE _SCRY_($c) scry:$c scrycore delayed dontshow donothing scrycoreend scryend
# Amass, Set WAR
#AUTO_DEFINE _AMASS_($c) if type(army|mybattlefield)~morethan~0 then counter(1/1,$c) notATarget(army|myBattlefield) else create(Zombie Army:creature Zombie Army:0/0:black) and!(counter(1/1,$c) notATarget(army|myBattlefield))!
# Ascend, Set XLN
#AUTO_DEFINE _ASCEND_ if type(*[city's_blessing]|mybattlefield)~lessthan~1 then transforms((,newability[if type(*|mybattlefield)~morethan~9 then create(city's_blessing:city's_blessing:0/0:shroud:indestructible)]))
# Effect with the City's blessing, Set XLN
#AUTO_DEFINE _CITY'S_BLESSING_ aslongas(*[city's_blessing]|mybattlefield)>0
# Treasure token, Set XLN
#AUTO_DEFINE _TREASURE_ create(Treasure:Artifact Treasure:0/0:"{T}, Sacrifice this artifact: Add one mana of any color.") and!( transforms((,newability[{T}{S}:Add{W}],newability[{T}{S}:Add{U}],newability[{T}{S}:Add{R}],newability[{T}{S}:Add{B}],newability[{T}{S}:Add{G}])) forever )!
# Proliferate, still need to target players since the old code doesn't work (*[artifact;creature;...;players]) just let you target creature and player
#AUTO_DEFINE _PROLIFERATE_ name(proliferate) notatarget(<anyamount>*) proliferate
# Mentor, still not working with enhancements, pump effects
#AUTO_DEFINE _MENTOR_ @combat(attacking) source(this):counter(1/1,1) target(other creature[attacking;power<=pminus1minusend]|myBattlefield)

View File

@@ -1,5 +1,82 @@
grade=borderline
[card]
name=Bogardan Hellkite
abilities=flash,flying
auto=ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller
text=Flash -- Flying -- When Bogardan Hellkite enters the battlefield, it deals 5 damage divided as you choose among any number of targets.
mana={6}{R}{R}
type=Creature
subtype=Dragon
power=5
toughness=5
[/card]
[card]
name=Frost Titan
#Not working for abilities on the field
auto=@targeted(this|mybattlefield) from(*|opponentbattlefield,opponenthand,opponentstack,opponentgraveyard,opponentexile,opponentlibrary):transforms((,newability[pay[[{2}]] name(pay 2 mana) donothing?fizzle])) forever target(*|stack)
auto=freeze target(*)
auto=@combat(attacking) source(this):freeze target(*)
text=Whenever Frost Titan becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}. -- Whenever Frost Titan enters the battlefield or attacks, tap target permanent. It doesn't untap during its controller's next untap step.
mana={4}{U}{U}
type=Creature
subtype=Giant
power=6
toughness=6
[/card]
[card]
name=Gaea's Touch
auto={0}:moveTo(myBattlefield) target(forest[basic]|myhand) asSorcery limit:1
auto={S}:Add{G}{G}
auto={0}:name(don't sacrifice) donothing limit:9
text={0}: You may put a basic Forest card from your hand onto the battlefield. Activate this ability only any time you could cast a sorcery and only once each turn. -- Sacrifice Gaeas Touch: Add {G}{G}.
mana={G}{G}
type=Enchantment
[/card]
[card]
name=Inferno Titan
auto={R}:1/0 ueot
auto=ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller
auto=@combat(attacking) source(this):ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller && ability$!damage:1 target(creature,player)!$ controller
text={R}: Inferno Titan gets +1/+0 until end of turn. -- Whenever Inferno Titan enters the battlefield or attacks, it deals 3 damage divided as you choose among one, two, or three targets.
mana={4}{R}{R}
type=Creature
subtype=Giant
power=6
toughness=6
[/card]
[card]
name=Jace, the Living Guildpact
auto=counter(0/0,5,loyalty)
auto={C(0/0,1,Loyalty)}:reveal:2 optionone name(put in graveyard) target(<1>*|reveal) moveto(ownergraveyard) optiononeend optiontwo name(put in library) target(<1>*|reveal) moveto(ownerlibrary) optiontwoend revealend
auto={C(0/0,-3,Loyalty)}:target(other *[-land]) moveTo(ownerhand)
auto={C(0/0,-8,Loyalty)}:moveto(opponentlibrary) all(*|opponenthand) && moveto(opponentlibrary) all(*|opponentgraveyard) && shuffle && moveto(mylibrary) all(*|myhand) && moveto(mylibrary) all(*|mygraveyard) && shuffle && draw:7
text=+1: Look at the top two cards of your library. Put one of them into your graveyard. -- -3: Return another target nonland permanent to its owner's hand. -- -8: Each player shuffles their hand and graveyard into their library. You draw seven cards.
mana={2}{U}{U}
type=Legendary Planeswalker
subtype=Jace
[/card]
[card]
name=Karn Liberated
auto=counter(0/0,6,loyalty)
auto={C(0/0,4,Loyalty)}:target(player) ability$!moveto(exile) and!( becomes(tobecast) forever )! target(*|myhand)!$ targetedplayer
auto={C(0/0,-3,Loyalty)}:moveto(exile) and!( becomes(tobecast) forever )! target(*)
auto={C(0/0,-14,Loyalty)}:name(ultimate) moveto(ownerlibrary) all(*|opponenthand) && moveto(ownerlibrary) all(*|opponentgraveyard) && moveto(ownerlibrary) all(*|opponentbattlefield) && moveto(ownerlibrary) all(*[-tobecast;aura;instant;sorcery]|opponentexile) && shuffle && draw:7 opponent && lifeset:startinglife opponent && moveto(ownerlibrary) all(*|myhand) && moveto(ownerlibrary) all(*|mygraveyard) && moveto(ownerlibrary) all(*|mybattlefield) && moveto(ownerlibrary) all(*[-tobecast;aura;instant;sorcery]|myexile) && shuffle && draw:7 && lifeset:startinglife && moveto(myBattlefield) all(tobecast|exile) && all(creature|myBattlefield) haste && removemana(*)
text=+4: Target player exiles a card from their hand. -- -3: Exile target permanent. -- -14: Restart the game, leaving in exile all non-Aura permanent cards exiled with Karn Liberated. Then put those cards onto the battlefield under your control.
mana={7}
type=Legendary Planeswalker
subtype=Karn
[/card]
[card]
name=Time Vault
abilities=doesnotuntap
auto=tap(noevent)
auto=@each opponent end sourcetap:may (turns:-1 controller) && untapthis
auto={T}:turns:+1 controller
text=Time Vault enters the battlefield tapped. -- Time Vault doesn't untap during your untap step. -- If you would begin your turn while Time Vault is tapped, you may skip that turn instead. If you do, untap Time Vault. -- {T}: Take an extra turn after this one.
mana={2}
type=Artifact
[/card]
[card]
name=Akiri, Line-Slinger
abilities=first strike,vigilance
auto=type:artifact:mybattlefield/0 nonstatic
@@ -406,7 +483,7 @@ type=Sorcery
[card]
name=Mogg Infestation
target=player
auto=all(creature|targetedpersonsbattlefield) destroy and!( if cantargetcard(creature|graveyard) then create(Goblin:Creature Goblin:1/1:red)*2 )!
auto=all(creature|targetedpersonsbattlefield) destroy and!( if cantargetcard(creature|graveyard) then create(Goblin:Creature Goblin:1/1:red)*2 targetedpersonsbattlefield)!
mana={3}{R}{R}
type=Sorcery
text=Destroy all creatures target player controls. For each creature that died this way, put two 1/1 red Goblin creature tokens onto the battlefield under that player's control.
@@ -512,8 +589,8 @@ type=Sorcery
[/card]
[card]
name=Relentless Dead
auto=@movedTo(this|graveyard) from(battlefield):transforms((,newability[{B}:moveto(myhand)])) ueot
auto=@movedTo(this|graveyard) from(battlefield):transforms((,newability[{X}:moveto(myhand) target(zombie[manacost=X]|mygraveyard)])) ueot
autograveyard=@movedTo(this|graveyard) from(battlefield):name(return relentless dead) pay({B}) moveTo(hand)
auto=@movedTo(this|graveyard) from(battlefield):choice name(rturn cost X) pay({1}) moveTo(battlefield) target(other zombie|mygraveyard)
text=Menace (This creature can't be blocked except by two or more creatures.) -- When Relentless Dead dies, you may pay {B}. If you do, return it to its owner's hand. -- When Relentless Dead dies, you may pay {X}. If you do, return another target Zombie creature card with converted mana cost X from your graveyard to the battlefield.
mana={B}{B}
abilities=menace
@@ -552,7 +629,7 @@ type=Sorcery
[/card]
[card]
name=Scent of Cinder
target=creature
target=creature,player
auto=damage:type:*[red]:myhand
text=Reveal any number of red cards in your hand. Scent of Cinder deals X damage to target creature or player, where X is the number of cards revealed this way.
mana={1}{R}
@@ -787,15 +864,6 @@ mana={2}{U}
type=Instant
[/card]
[card]
name=Villainous Wealth
#can't order stack
target=opponent
auto=moveto(exile) and!( if cantargetcard(*[-land;manacost<=castx]|*) then transforms((,newability[may activate castcard(normal)]])) ueot )! all(*[zpos<=castx]|mylibrary)
text=Target opponent exiles the top X cards of his or her library. You may cast any number of nonland cards with converted mana cost X or less from among them without paying their mana costs.
mana={X}{B}{G}{U}
type=Sorcery
[/card]
[card]
name=Watcher of the Roost
#missing reveal card
abilities=flying
@@ -810,14 +878,6 @@ power=2
toughness=1
[/card]
[card]
name=Wolfcaller's Howl
#wagic supports one opponent only
auto=@each my upkeep restriction{type(*|opponenthand)~morethan~3}:token(Wolf,Creature Wolf,2/2,green)
text=At the beginning of your upkeep, put X 2/2 green Wolf creature tokens onto the battlefield, where X is the number of your opponents with four or more cards in hand.
mana={3}{G}
type=Enchantment
[/card]
[card]
name=Wren's Run Vanquisher
otherrestriction=type(*[elf]|myhand)~lessthan~2
other={4}{G}

File diff suppressed because it is too large Load Diff

View File

@@ -1936,12 +1936,6 @@ mana={3}{R}
type=Enchantment
[/card]
[card]
name=Burning Wish
text=You may choose a sorcery card you own from outside the game, reveal that card, and put it into your hand. Exile Burning Wish.
mana={1}{R}
type=Sorcery
[/card]
[card]
name=Burning-Eye Zubera
text=When Burning-Eye Zubera dies, if 4 or more damage was dealt to it this turn, Burning-Eye Zubera deals 3 damage to target creature or player.
mana={2}{R}{R}
@@ -3340,15 +3334,6 @@ mana={4}{U}{U}
type=Instant
[/card]
[card]
name=Courser of Kruphix
text=Play with the top card of your library revealed. -- You may play the top card of your library if it's a land card. -- Whenever a land enters the battlefield under your control, you gain 1 life.
mana={1}{G}{G}
type=Enchantment Creature
subtype=Centaur
power=2
toughness=4
[/card]
[card]
name=Covenant of Minds
text=Reveal the top three cards of your library. Target opponent may choose to put those cards into your hand. If he or she doesn't, put those cards into your graveyard and draw five cards.
mana={4}{U}
@@ -3468,12 +3453,6 @@ mana={4}
type=Artifact
[/card]
[card]
name=Crown of Convergence
text=Play with the top card of your library revealed. -- As long as the top card of your library is a creature card, creatures you control that share a color with that card get +1/+1. -- {G}{W}: Put the top card of your library on the bottom of your library.
mana={2}
type=Artifact
[/card]
[card]
name=Crown of Doom
text=Whenever a creature attacks you or a planeswalker you control, it gets +2/+0 until end of turn. -- {2}: Target player other than Crown of Doom's owner gains control of it. Activate this ability only during your turn.
mana={3}
@@ -3585,12 +3564,6 @@ mana={4}{U}{U}
type=Sorcery
[/card]
[card]
name=Cunning Wish
text=You may choose an instant card you own from outside the game, reveal that card, and put it into your hand. Exile Cunning Wish.
mana={2}{U}
type=Instant
[/card]
[card]
name=Curious Homunculus
text={T}: Add {C} to your mana pool. Spend this mana only to cast an instant or sorcery spell. -- At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus.
mana={1}{U}
@@ -4008,12 +3981,6 @@ mana={R}
type=Instant
[/card]
[card]
name=Death Wish
text=You may choose a card you own from outside the game and put it into your hand. You lose half your life, rounded up. Exile Death Wish.
mana={1}{B}{B}
type=Sorcery
[/card]
[card]
name=Death-Mask Duplicant
text=Imprint — {1}: Exile target creature card from your graveyard. -- As long as a card exiled with Death-Mask Duplicant has flying, Death-Mask Duplicant has flying. The same is true for fear, first strike, double strike, haste, landwalk, protection, and trample.
mana={7}
@@ -5321,7 +5288,7 @@ mana={2}{G}{G}
type=Sorcery
[/card]
[card]
name=Evasive Action
name=
text=Domain — Counter target spell unless its controller pays {1} for each basic land type among lands you control.
mana={1}{U}
type=Instant
@@ -6325,12 +6292,6 @@ mana={1}{R}{R}{R}
type=Enchantment
[/card]
[card]
name=Future Sight
text=Play with the top card of your library revealed. -- You may play the top card of your library.
mana={2}{U}{U}{U}
type=Enchantment
[/card]
[card]
name=Gabriel Angelfire
text=At the beginning of your upkeep, choose flying, first strike, trample, or rampage 3. Gabriel Angelfire gains that ability until your next upkeep. (Whenever a creature with rampage 3 becomes blocked, it gets +3/+3 until end of turn for each creature blocking it beyond the first.)
mana={3}{G}{G}{W}{W}
@@ -6355,15 +6316,6 @@ mana={3}{G}
type=Sorcery
[/card]
[card]
name=Gaea's Herald
text=Creature spells can't be countered.
mana={1}{G}
type=Creature
subtype=Elf
power=1
toughness=1
[/card]
[card]
name=Gaea's Liege
text=As long as Gaea's Liege isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as Gaea's Liege is attacking, its power and toughness are each equal to the number of Forests defending player controls. -- {T}: Target land becomes a Forest until Gaea's Liege leaves the battlefield.
mana={3}{G}{G}{G}
@@ -6415,16 +6367,6 @@ mana={2}{R}
type=Instant
[/card]
[card]
name=Garruk's Horde
abilities=trample
text=Trample -- Play with the top card of your library revealed. -- You may cast the top card of your library if it's a creature card. (Do this only any time you could cast that creature card. You still pay the spell's costs.)
mana={5}{G}{G}
type=Creature
subtype=Beast
power=7
toughness=7
[/card]
[card]
name=Garrulous Sycophant
text=At the beginning of your end step, if you're the monarch, each opponent loses 1 life and you gain 1 life.
mana={2}{B}
@@ -6701,16 +6643,6 @@ power=5
toughness=5
[/card]
[card]
name=Gisela, the Broken Blade
abilities=flying,first strike,lifelink
text=Flying, first strike, lifelink -- At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares.
mana={2}{W}{W}
type=Legendary Creature
subtype=Angel Horror
power=4
toughness=3
[/card]
[card]
name=Give // Take
text=Put three +1/+1 counters on target creature. -- // -- Remove all +1/+1 counters from target creature you control. Draw that many cards. -- -- Fuse (You may cast one or both halves of this card from your hand.)
mana={2}{G} // {2}{U}
@@ -6828,12 +6760,6 @@ power=1
toughness=1
[/card]
[card]
name=Glittering Wish
text=You may choose a multicolored card you own from outside the game, reveal that card, and put it into your hand. Exile Glittering Wish.
mana={G}{W}
type=Sorcery
[/card]
[card]
name=Global Ruin
text=Each player chooses from the lands he or she controls a land of each basic land type, then sacrifices the rest.
mana={4}{W}
@@ -7045,15 +6971,6 @@ power=1
toughness=1
[/card]
[card]
name=Goblin Spy
text=Play with the top card of your library revealed.
mana={R}
type=Creature
subtype=Goblin Rogue
power=1
toughness=1
[/card]
[card]
name=Goblin Test Pilot
abilities=flying
text=Flying -- {T}: Goblin Test Pilot deals 2 damage to target creature or player chosen at random.
@@ -7092,12 +7009,6 @@ type=Legendary Artifact
subtype=Equipment
[/card]
[card]
name=Golden Wish
text=You may choose an artifact or enchantment card you own from outside the game, reveal that card, and put it into your hand. Exile Golden Wish.
mana={3}{W}{W}
type=Sorcery
[/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}
@@ -7624,15 +7535,6 @@ type=Artifact
subtype=Equipment
[/card]
[card]
name=Hanweir, the Writhing Township
text=Whenever Hanweir Garrison attacks, put two 1/1 red Human creature tokens onto the battlefield tapped and attacking. -- (Melds with Hanweir Battlements.)
mana={2}{R}
type=Creature
subtype=Human Soldier
power=2
toughness=3
[/card]
[card]
name=Harbinger of the Tides
text=You may cast Harbinger of the Tides as though it had flash if you pay {2} more to cast it. (You may cast it any time you could cast an instant.) -- When Harbinger of the Tides enters the battlefield, you may return target tapped creature an opponent controls to its owner's hand.
mana={U}{U}
@@ -9828,12 +9730,6 @@ mana={1}{R}{R}
type=World Enchantment
[/card]
[card]
name=Lantern of Insight
text=Each player plays with the top card of his or her library revealed. -- {T}, Sacrifice Lantern of Insight: Target player shuffles his or her library.
mana={1}
type=Artifact
[/card]
[card]
name=Laquatus's Disdain
text=Counter target spell cast from a graveyard. -- Draw a card.
mana={1}{U}
@@ -10230,12 +10126,6 @@ power=*
toughness=*
[/card]
[card]
name=Living Wish
text=You may choose a creature or land card you own from outside the game, reveal that card, and put it into your hand. Exile Living Wish.
mana={1}{G}
type=Sorcery
[/card]
[card]
name=Loafing Giant
text=Whenever Loafing Giant attacks or blocks, put the top card of your library into your graveyard. If that card is a land card, prevent all combat damage Loafing Giant would deal this turn.
mana={4}{R}
@@ -10468,15 +10358,6 @@ power=5
toughness=5
[/card]
[card]
name=Magus of the Future
text=Play with the top card of your library revealed. -- You may play the top card of your library.
mana={2}{U}{U}{U}
type=Creature
subtype=Human Wizard
power=2
toughness=3
[/card]
[card]
name=Magus of the Scroll
text={3}, {T}: Name a card. Reveal a card at random from your hand. If it's the named card, Magus of the Scroll deals 2 damage to target creature or player.
mana={R}
@@ -10854,15 +10735,6 @@ mana={4}{R}
type=Instant
[/card]
[card]
name=Melek, Izzet Paragon
text=Play with the top card of your library revealed. -- You may cast the top card of your library if it's an instant or sorcery card. -- Whenever you cast an instant or sorcery spell from your library, copy it. You may choose new targets for the copy.
mana={4}{U}{R}
type=Legendary Creature
subtype=Weird Wizard
power=2
toughness=4
[/card]
[card]
name=Meletis Charlatan
text={2}{U}, {T}: The controller of target instant or sorcery spell copies it. That player may choose new targets for the copy.
mana={2}{U}
@@ -11511,15 +11383,6 @@ power=3
toughness=3
[/card]
[card]
name=Mul Daya Channelers
text=Play with the top card of your library revealed. -- As long as the top card of your library is a creature card, Mul Daya Channelers gets +3/+3. -- As long as the top card of your library is a land card, Mul Daya Channelers has "{T}: Add two mana of any one color to your mana pool."
mana={1}{G}{G}
type=Creature
subtype=Elf Druid Shaman
power=2
toughness=2
[/card]
[card]
name=Multani's Presence
text=Whenever a spell you've cast is countered, draw a card.
mana={G}
@@ -12475,15 +12338,6 @@ power=3
toughness=1
[/card]
[card]
name=Oracle of Mul Daya
text=You may play an additional land on each of your turns. -- Play with the top card of your library revealed. -- You may play the top card of your library if it's a land card.
mana={3}{G}
type=Creature
subtype=Elf Shaman
power=2
toughness=2
[/card]
[card]
name=Oracle's Attendants
text={T}: All damage that would be dealt to target creature this turn by a source of your choice is dealt to Oracle's Attendants instead.
mana={3}{W}
@@ -18201,12 +18055,6 @@ power=3
toughness=3
[/card]
[card]
name=Temporal Aperture
text={5}, {T}: Shuffle your library, then reveal the top card. Until end of turn, for as long as that card remains on top of your library, play with the top card of your library revealed and you may play that card without paying its mana cost. (If it has X in its mana cost, X is 0.)
mana={2}
type=Artifact
[/card]
[card]
name=Temporal Extortion
text=When you cast Temporal Extortion, any player may pay half his or her life, rounded up. If a player does, counter Temporal Extortion. -- Take an extra turn after this one.
mana={B}{B}{B}{B}
@@ -19380,15 +19228,6 @@ mana={W}
type=Instant
[/card]
[card]
name=Vampire Nocturnus
text=Play with the top card of your library revealed. -- As long as the top card of your library is black, Vampire Nocturnus and other Vampire creatures you control get +2/+1 and have flying.
mana={1}{B}{B}{B}
type=Creature
subtype=Vampire
power=3
toughness=3
[/card]
[card]
name=Vandalize
text=Choose one or both — -- • Destroy target artifact. -- • Destroy target land.
mana={4}{R}

View File

@@ -44,7 +44,9 @@
<target name="update" description="Updates the AndroidManifest and Wagic_Version.h with the current version information">
<antcall target="build.maemo.changelog"/>
<antcall target="build.wagic.header"/>
<antcall target="update.android.manifest"/>
<!-- <antcall target="update.android.manifest"/> -->
<!-- ~rpw temporary removed because groovy doesnt play well with java 8, gives error
java.lang.NoClassDefFoundError: [Ljava/util/HashMap$Entry; -->
</target>
<target name="update.android.manifest" description="Updates the AndroidManifest.xml with the current version information">

View File

@@ -1406,6 +1406,28 @@ public:
}
};
class TrCardExerted: public Trigger
{
public:
TrCardExerted(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) :
Trigger(observer, id, source, once, tc)
{
}
int triggerOnEventImpl(WEvent * event)
{
WEventCardExerted * e = dynamic_cast<WEventCardExerted *> (event);
if (!e) return 0;
if (!tc->canTarget(e->card)) return 0;
return 1;
}
TrCardExerted * clone() const
{
return NEW TrCardExerted(*this);
}
};
class TrCombatTrigger: public Trigger
{
public:
@@ -5174,6 +5196,7 @@ public:
list<int> oldcolors;
list<int> oldtypes;
vector<int> dontremove;
bool removemc;
bool addNewColors;
bool remove;
bool removeCreatureSubtypes;
@@ -7290,6 +7313,57 @@ public:
return NEW AProvoke(*this);
}
};
//exert
class AExert: public InstantAbility
{
public:
MTGAbility * andAbility;
AExert(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target) :
InstantAbility(observer, _id, _source)
{
target = _target;
andAbility = NULL;
}
int resolve()
{
MTGCardInstance * card = (MTGCardInstance *) target;
if (card)
{
card->exerted = true;
WEvent * e = NEW WEventCardExerted(card);
game->receiveEvent(e);
if(andAbility)
{
MTGAbility * andAbilityClone = andAbility->clone();
andAbilityClone->target = card;
if(andAbility->oneShot)
{
andAbilityClone->resolve();
SAFE_DELETE(andAbilityClone);
}
else
{
andAbilityClone->addToGame();
}
}
}
return 1;
}
const string getMenuText()
{
return "Exert";
}
virtual ostream& toString(ostream& out) const
{
out << "AAExert ::: (";
return InstantAbility::toString(out) << ")";
}
AExert * clone() const
{
return NEW AExert(*this);
}
};
//------------------
//trigger regen
class ATriggerRegen: public InstantAbility

View File

@@ -90,6 +90,7 @@ public:
bool blinked;
bool isExtraCostTarget;
bool morphed;
bool exerted;
bool turningOver;
bool isMorphed;
bool isFlipped;

View File

@@ -15,6 +15,10 @@ typedef enum
GAME_TYPE_MOMIR,
GAME_TYPE_RANDOM1,
GAME_TYPE_RANDOM2,
GAME_TYPE_RANDOM3,
GAME_TYPE_RANDOM5,
GAME_TYPE_HORDE,
GAME_TYPE_SET_LIMITED,
GAME_TYPE_STORY,
GAME_TYPE_DEMO,
GAME_TYPE_STONEHEWER,

View File

@@ -42,6 +42,10 @@ class Rules
protected:
Player * loadPlayerMomir(GameObserver* observer, int isAI);
Player * loadPlayerRandom(GameObserver* observer, int isAI, int mode);
Player * loadPlayerRandomThree(GameObserver* observer, int isAI);
Player * loadPlayerRandomFive(GameObserver* observer, int isAI);
Player * loadPlayerHorde(GameObserver* observer, int isAI);
Player * loadRandomSetLimited(GameObserver* observer, int isAI);
Player * initPlayer(GameObserver *observer, int playerId);
MTGDeck * buildDeck(int playerId);
GameType strToGameMode(string s);

View File

@@ -205,6 +205,12 @@ struct WEventCardCycle : public WEventCardUpdate {
virtual Targetable * getTarget(int target);
};
//event when card is exerted.
struct WEventCardExerted : public WEventCardUpdate {
WEventCardExerted(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//Event when a card's "defenser" status changes
//before : attacker that card was blocking previously
//after: attacker that card is blocking now

View File

@@ -12,7 +12,7 @@ Author: Michael Nguyen
/* Wagic versions */
#define WAGIC_VERSION_MAJOR 0
#define WAGIC_VERSION_MEDIUM 20
#define WAGIC_VERSION_MEDIUM 21
#define WAGIC_VERSION_MINOR 1
#define VERSION_DOT(a, b, c) a ##.## b ##.## c

View File

@@ -46,14 +46,16 @@ int OrderedAIAction::getEfficiency(AADamager * aad)
return 0;
}
if(p == target->controller())
return 0;
if(p && target)
if(p == target->controller())
return 0;
if (dTarget && aad && (aad->getDamage() >= dTarget->toughness))
if (dTarget && aad && (aad->getDamage() == dTarget->toughness))
return 100;
if (dTarget && dTarget->toughness)
return (50 * aad->getDamage()) / dTarget->toughness;
else if (dTarget && aad && (aad->getDamage() > dTarget->toughness))
return 10 * (10 - (aad->getDamage() - dTarget->toughness)); //less eff the more dmg above toughness
else
return 10;
return 0;
}
@@ -129,8 +131,8 @@ int OrderedAIAction::getEfficiency()
{
efficiency = 95;
}
//TODO If the card is the target of a damage spell
break;
//TODO If the card is the target of a damage spell
break;
}
case MTGAbility::STANDARD_PREVENT:
{
@@ -271,7 +273,7 @@ int OrderedAIAction::getEfficiency()
}
case MTGAbility::STANDARD_PUMP:
{
efficiency = 0;
efficiency = 0;
if(!coreAbilityCardTarget)
break;
if(!target && !dynamic_cast<ALord*> (a) && (((MTGCardInstance *)a->source)->hasSubtype(Subtypes::TYPE_AURA) || ((MTGCardInstance *)a->source)->hasSubtype(Subtypes::TYPE_EQUIPMENT)))
@@ -280,6 +282,10 @@ int OrderedAIAction::getEfficiency()
coreAbilityCardTarget = a->source->target; //TODO use intermediate value?
target = a->source;
}
else //if(how to know cards like Basking Rootwalla that pump themselves)
{
target = a->source;
}
if (!target && !dynamic_cast<ALord*> (a))
break;
if(dynamic_cast<ALord*> (a) && !target)
@@ -291,9 +297,9 @@ int OrderedAIAction::getEfficiency()
int suggestion = af.abilityEfficiency(a, p, MODE_ABILITY);
//i do not set a starting eff. on this ability, this allows Ai to sometimes randomly do it as it normally does.
int currentPhase = g->getCurrentGamePhase();
if ((currentPhase == MTG_PHASE_COMBATBLOCKERS) || (currentPhase == MTG_PHASE_COMBATATTACKERS))
if ((currentPhase == MTG_PHASE_COMBATBLOCKERS) || (currentPhase == MTG_PHASE_COMBATATTACKERS))
{
if (suggestion == BAKA_EFFECT_GOOD && target->controller() == p)
if (suggestion == BAKA_EFFECT_GOOD && target->controller() == p)
{
if(coreAbilityCardTarget->defenser || coreAbilityCardTarget->blockers.size())
{
@@ -311,7 +317,7 @@ int OrderedAIAction::getEfficiency()
{
//this means im heading directly for the player, pump this creature as much as possible.
efficiency = 100;
if(coreAbilityCardTarget->power > 50)
if(coreAbilityCardTarget->power > 20) // to be realistic
efficiency -= coreAbilityCardTarget->power;//we don't need to go overboard. better to not put all your eggs in a single basket.
}
}
@@ -326,28 +332,41 @@ int OrderedAIAction::getEfficiency()
{
if(!coreAbilityCardTarget)
break;
// It used to skip most effects, with no other condition efficiency is -1
// Becomes is generally good so setting a value, but don't want to spam it
if (coreAbilityCardTarget && !coreAbilityCardTarget->isLand())
{
// Bonus if almost no cards in hand
if (p->game->hand->nb_cards <= 1)
{
efficiency = 50;
}
else efficiency = 30;
}
//nothing huge here, just ensuring that Ai makes his noncreature becomers into creatures during first main, so it can actually use them in combat.
if (coreAbilityCardTarget && !coreAbilityCardTarget->isCreature() && currentPhase == MTG_PHASE_FIRSTMAIN)
if (coreAbilityCardTarget && !coreAbilityCardTarget->isCreature() && !coreAbilityCardTarget->isTapped() && currentPhase == MTG_PHASE_FIRSTMAIN)
{
efficiency = 100;
}
efficiency = 50;
}
break;
}
case MTGAbility::MANA_PRODUCER://only way to hit this condition is nested manaabilities, ai skips manaproducers by defualt when finding an ability to use.
{
AManaProducer * manamaker = dynamic_cast<AManaProducer*>(a);
GenericActivatedAbility * GAA = dynamic_cast<GenericActivatedAbility*>(ability);
AForeach * forMana = dynamic_cast<AForeach*>(GAA->ability);
if (manamaker && forMana)
{
int outPut = forMana->checkActivation();
if (ability->getCost() && outPut > int(ability->getCost()->getConvertedCost() +1) && currentPhase == MTG_PHASE_FIRSTMAIN && ability->source->controller()->game->hand->nb_cards > 1)
efficiency = 90;//might be a bit random, but better than never using them.
}
else
efficiency = 0;
break;
AManaProducer * manamaker = dynamic_cast<AManaProducer*>(a);
GenericActivatedAbility * GAA = dynamic_cast<GenericActivatedAbility*>(ability);
if(GAA)
{
AForeach * forMana = dynamic_cast<AForeach*>(GAA->ability);
if (manamaker && forMana)
{
int outPut = forMana->checkActivation();
if (ability->getCost() && outPut > int(ability->getCost()->getConvertedCost() +1) && currentPhase == MTG_PHASE_FIRSTMAIN && ability->source->controller()->game->hand->nb_cards > 1)
efficiency = 60;//might be a bit random, but better than never using them.
}
}
else
efficiency = 0;
break;
}
case MTGAbility::STANDARDABILITYGRANT:
{
@@ -426,11 +445,12 @@ int OrderedAIAction::getEfficiency()
case MTGAbility::LIFER:
{
//use life abilities whenever possible.
//use life abilities whenever possible. Well yes, but actually no
//limits mana and in case of Zuran Orb it just sacrifices all lands
AALifer * alife = (AALifer *) a;
Targetable * _t = alife->getTarget();
efficiency = 100;
efficiency = 80;
AbilityFactory af(g);
int suggestion = af.abilityEfficiency(a, p, MODE_ABILITY);
@@ -566,6 +586,12 @@ int OrderedAIAction::getEfficiency()
{
if (z == p->game->hand)
efficiency = 10 + (owner->getRandomGenerator()->random() % 10);//random chance to bounce their own card;
}
// We don't want to return cards in play to own hand, save rare combos
else if(target->currentZone == p->game->inPlay)
{
if (z == p->game->hand || z == p->game->library)
efficiency = (owner->getRandomGenerator()->random() % 10);//random chance to bounce their own card;
}
else
{
@@ -574,7 +600,11 @@ int OrderedAIAction::getEfficiency()
}
else
{
efficiency = 50;
// We don't want to return the ability source cards that are in play to own hand, save rare combos
// cards like Blinking Spirit used to be auto lose for AI
if(z == p->game->hand || z == p->game->library)
efficiency = 1;
else efficiency = 50;
//may abilities target the source until thier nested ability is activated, so 50% chance to use this
//mover, until we can come up with something more elegent....
}
@@ -629,8 +659,8 @@ int OrderedAIAction::getEfficiency()
SAFE_DELETE(parsedAICC);
}
else
efficiency = 0;
else // this is why the AI never chooses any card at all? reveal is used to get cards so it should be at better value
efficiency = 60;
}
//At this point the "basic" efficiency is computed, we further tweak it depending on general decisions, independent of theAbility type
@@ -652,8 +682,11 @@ int OrderedAIAction::getEfficiency()
for(unsigned int i = 0; i < ec->costs.size();i++)
{
ExtraCost * tapper = dynamic_cast<TapCost*>(ec->costs[i]);
ExtraCost * sacrifice = dynamic_cast<SacrificeCost*>(ec->costs[i]);
if(tapper)
continue;
continue;
else if(sacrifice)
efficiency = efficiency / 3;
else
efficiency = efficiency / 2;
}
@@ -672,7 +705,21 @@ int OrderedAIAction::getEfficiency()
{
efficiency += 55;
}
SAFE_DELETE(transAbility);
if (ability->source)
{
if(ability->source->hasType(Subtypes::TYPE_PLANESWALKER))
efficiency += 40;
else if(ability->source->hasType(Subtypes::TYPE_LAND))
{ // probably a shockland, don't pay life if hand is empty
if (p->life<=2)
// check that's not a manland(like Celestial Colonnade)
if(efficiency < 50)
efficiency = 0;
}
}
SAFE_DELETE(transAbility);
return efficiency;
}
@@ -944,7 +991,7 @@ int OrderedAIAction::getRevealedEfficiency(MTGAbility * ability2)
//nothing huge here, just ensuring that Ai makes his noncreature becomers into creatures during first main, so it can actually use them in combat.
if (coreAbilityCardTarget && !coreAbilityCardTarget->isCreature() && currentPhase == MTG_PHASE_FIRSTMAIN)
{
eff2 = 100;
eff2 = 70;
}
break;
}
@@ -957,7 +1004,7 @@ int OrderedAIAction::getRevealedEfficiency(MTGAbility * ability2)
{
int outPut = forMana->checkActivation();
if (ability2->getCost() && outPut > int(ability2->getCost()->getConvertedCost() +1) && currentPhase == MTG_PHASE_FIRSTMAIN && ability2->source->controller()->game->hand->nb_cards > 1)
eff2 = 90;//might be a bit random, but better than never using them.
eff2 = 60;//might be a bit random, but better than never using them.
}
else
eff2 = 0;
@@ -2327,6 +2374,10 @@ int AIPlayerBaka::chooseTarget(TargetChooser * _tc, Player * forceTarget,MTGCard
cardEffect = af.abilityEfficiency(withoutGuessing,this,MODE_TARGET,tc,NULL);
delete withoutGuessing;
}
// Don't really like it but green mana producing auras targeting the player is one of the most reported bugs
if(cardEffect == BAKA_EFFECT_DONTKNOW && tc->source->hasSubtype(Subtypes::TYPE_AURA) && tc->source->hasColor(Constants::MTG_COLOR_GREEN))
cardEffect = BAKA_EFFECT_GOOD;
if (cardEffect != BAKA_EFFECT_GOOD)
{
target = this->opponent();
@@ -2447,11 +2498,10 @@ int AIPlayerBaka::getEfficiency(MTGAbility * ability)
int AIPlayerBaka::selectMenuOption()
{
ActionLayer * object = observer->mLayers->actionLayer();
int doThis = -1;
int doThis = 0; // The AI just passes on things if set to -1, getEfficiency should be improved
if (object->menuObject)
{
int checkedLast = 0;
if(object->abilitiesMenu->isMultipleChoice && object->currentActionCard)
{
MenuAbility * currentMenu = NULL;
@@ -2510,7 +2560,7 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
{
nextCardToPlay = comboCards.back();
gotPayments.clear();
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker()))
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker() || nextCardToPlay->getManaCost()->getBestow()))
gotPayments = canPayMana(nextCardToPlay,nextCardToPlay->getManaCost());
DebugTrace("ai is doing a combo:" << nextCardToPlay->getName());
comboCards.pop_back();
@@ -2524,159 +2574,175 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
card = NULL;
gotPayments = vector<MTGAbility*>();
//canplayfromgraveyard
while ((card = cd.nextmatch(game->graveyard, card))&& card->has(Constants::CANPLAYFROMGRAVEYARD))
{
if (!CanHandleCost(card->getManaCost(),card))
continue;
while ((card = cd.nextmatch(game->graveyard, card)))
{
bool hasFlashback = false;
if (card->hasType(Subtypes::TYPE_LAND))
{
if (game->playRestrictions->canPutIntoZone(card, game->inPlay) == PlayRestriction::CANT_PLAY)
continue;
}
else
{
if (game->playRestrictions->canPutIntoZone(card, game->stack) == PlayRestriction::CANT_PLAY)
continue;
}
if(card->getManaCost())
if(card->getManaCost()->getFlashback())
hasFlashback = true;
if (card->hasType(Subtypes::TYPE_LEGENDARY) && game->inPlay->findByName(card->name))
continue;
//glimmervoid alias to avoid ai stalling the game as the hint combo is stuck
//next card to play was galvanic blast but on activate combo it clashes with glimmervoid...
if ((card->alias == 48132) && (card->controller()->game->inPlay->countByType("artifact") < 1))
continue;
if( card->has(Constants::CANPLAYFROMGRAVEYARD) || card->has(Constants::TEMPFLASHBACK) || hasFlashback )
{
if (!CanHandleCost(card->getManaCost(),card))
continue;
if (card->has(Constants::TREASON) && observer->getCurrentGamePhase() != MTG_PHASE_FIRSTMAIN)
continue;
if (hasFlashback && !CanHandleCost(card->getManaCost()->getFlashback(),card))
continue;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
continue;
// Case were manacost is equal to flashback cost, if they are different the AI hangs
if (hasFlashback && (card->getManaCost() != card->getManaCost()->getFlashback()) )
continue;
if (card->hasType(Subtypes::TYPE_LAND))
{
if (game->playRestrictions->canPutIntoZone(card, game->inPlay) == PlayRestriction::CANT_PLAY)
continue;
}
else
{
if (game->playRestrictions->canPutIntoZone(card, game->stack) == PlayRestriction::CANT_PLAY)
continue;
}
if (card->hasType(Subtypes::TYPE_LEGENDARY) && game->inPlay->findByName(card->name))
continue;
//glimmervoid alias to avoid ai stalling the game as the hint combo is stuck
//next card to play was galvanic blast but on activate combo it clashes with glimmervoid...
if ((card->alias == 48132) && (card->controller()->game->inPlay->countByType("artifact") < 1))
continue;
if (card->has(Constants::TREASON) && observer->getCurrentGamePhase() != MTG_PHASE_FIRSTMAIN)
continue;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
continue;
if(hints && hints->HintSaysItsForCombo(observer,card))
{
if(hints->canWeCombo(observer,card,this))
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
nextCardToPlay = card;
gotPayments.clear();
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker()))
gotPayments = canPayMana(nextCardToPlay,nextCardToPlay->getManaCost());
return activateCombo();
}
else
{
nextCardToPlay = NULL;
continue;
}
}
int currentCost = card->getManaCost()->getConvertedCost();
int hasX = card->getManaCost()->hasX();
gotPayments.clear();
if((!pMana->canAfford(card->getManaCost()) || card->getManaCost()->getKicker()))
gotPayments = canPayMana(card,card->getManaCost());
//for preformence reason we only look for specific mana if the payment couldn't be made with pmana.
if ((currentCost > maxCost || hasX) && (gotPayments.size() || pMana->canAfford(card->getManaCost())))
{
TargetChooserFactory tcf(observer);
TargetChooser * tc = tcf.createTargetChooser(card);
int shouldPlayPercentage = 0;
if (tc)
{
int hasTarget = chooseTarget(tc,NULL,NULL,true);
if(
(tc->maxtargets > hasTarget && tc->maxtargets > 1 && !tc->targetMin && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS) ||//target=<3>creature
(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS && hasTarget < 1)//target=creatures
)
hasTarget = 0;
if (!hasTarget)//single target covered here.
{
SAFE_DELETE(tc);
continue;
}
shouldPlayPercentage = 90;
if(tc->targetMin && hasTarget < tc->maxtargets)
shouldPlayPercentage = 0;
if(tc->maxtargets > 1 && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS && hasTarget <= tc->maxtargets)
{
int maxA = hasTarget-tc->maxtargets;
shouldPlayPercentage += (10*maxA);//reduce the chances of playing multitarget if we are not above max targets.
}
if(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS)
{
shouldPlayPercentage = 40 + (10*hasTarget);
int totalCost = pMana->getConvertedCost()-currentCost;
int totalTargets = hasTarget+hasTarget;
if(hasX && totalCost <= totalTargets)// {x} spell with unlimited targeting tend to divide damage, we want atleast 1 damage per target before casting.
{
shouldPlayPercentage = 0;
}
}
SAFE_DELETE(tc);
}
else
{
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD)
{
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay)
{
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else if (card->isLand())
{
shouldPlayPercentage = 90;
}
else
{
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
shouldPlayPercentage = 1;
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
{
int xDiff = pMana->getConvertedCost() - currentCost;
if (xDiff < 0)
xDiff = 0;
shouldPlayPercentage = shouldPlayPercentage - static_cast<int> ((shouldPlayPercentage * 1.9f) / (1 + xDiff));
}
if(card->getManaCost() && card->getManaCost()->getKicker() && card->getManaCost()->getKicker()->isMulti)
{
shouldPlayPercentage = 10* size_t(gotPayments.size())/int(1+(card->getManaCost()->getConvertedCost()+card->getManaCost()->getKicker()->getConvertedCost()));
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play " << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
}
int randomChance = randomGenerator.random();
int chance = randomChance % 100;
if (chance > shouldPlayPercentage)
continue;
if(shouldPlayPercentage <= 10)
{
DebugTrace("shouldPlayPercentage was less than 10 this was a lottery roll on RNG");
}
nextCardToPlay = card;
maxCost = currentCost;
if (hasX)
maxCost = pMana->getConvertedCost();
}
if(hints && hints->HintSaysItsForCombo(observer,card))
{
if(hints->canWeCombo(observer,card,this))
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
nextCardToPlay = card;
gotPayments.clear();
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker()))
gotPayments = canPayMana(nextCardToPlay,nextCardToPlay->getManaCost());
return activateCombo();
}
else
{
nextCardToPlay = NULL;
continue;
}
}
int currentCost = card->getManaCost()->getConvertedCost();
int hasX = card->getManaCost()->hasX();
gotPayments.clear();
if((!pMana->canAfford(card->getManaCost()) || card->getManaCost()->getKicker()))
gotPayments = canPayMana(card,card->getManaCost());
//for preformence reason we only look for specific mana if the payment couldn't be made with pmana.
if ((currentCost > maxCost || hasX) && (gotPayments.size() || pMana->canAfford(card->getManaCost())))
{
TargetChooserFactory tcf(observer);
TargetChooser * tc = tcf.createTargetChooser(card);
int shouldPlayPercentage = 0;
if (tc)
{
int hasTarget = chooseTarget(tc,NULL,NULL,true);
if(
(tc->maxtargets > hasTarget && tc->maxtargets > 1 && !tc->targetMin && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS) ||//target=<3>creature
(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS && hasTarget < 1)//target=creatures
)
hasTarget = 0;
if (!hasTarget)//single target covered here.
{
SAFE_DELETE(tc);
continue;
}
shouldPlayPercentage = 90;
if(tc->targetMin && hasTarget < tc->maxtargets)
shouldPlayPercentage = 0;
if(tc->maxtargets > 1 && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS && hasTarget <= tc->maxtargets)
{
int maxA = hasTarget-tc->maxtargets;
shouldPlayPercentage += (10*maxA);//reduce the chances of playing multitarget if we are not above max targets.
}
if(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS)
{
shouldPlayPercentage = 40 + (10*hasTarget);
int totalCost = pMana->getConvertedCost()-currentCost;
int totalTargets = hasTarget+hasTarget;
if(hasX && totalCost <= totalTargets)// {x} spell with unlimited targeting tend to divide damage, we want atleast 1 damage per target before casting.
{
shouldPlayPercentage = 0;
}
}
SAFE_DELETE(tc);
}
else
{
// Refactor to not check effect of lands since it always returned BAKA_EFFECT_DONTKNOW
// If it is a land, play it
if (card->isLand())
{
shouldPlayPercentage = 90;
}
else {
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD) {
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay) {
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else {
// shouldPlay == baka_effect_bad giving it a 10 for odd ball lottery chance.
shouldPlayPercentage = 10;
}
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
{
int xDiff = pMana->getConvertedCost() - currentCost;
if (xDiff < 0)
xDiff = 0;
shouldPlayPercentage = shouldPlayPercentage - static_cast<int> ((shouldPlayPercentage * 1.9f) / (1 + xDiff));
}
if(card->getManaCost() && card->getManaCost()->getKicker() && card->getManaCost()->getKicker()->isMulti)
{
shouldPlayPercentage = 10* size_t(gotPayments.size())/int(1+(card->getManaCost()->getConvertedCost()+card->getManaCost()->getKicker()->getConvertedCost()));
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play from grave " << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
}
int randomChance = randomGenerator.random();
int chance = randomChance % 100;
if (chance > shouldPlayPercentage)
continue;
if(shouldPlayPercentage <= 10)
{
DebugTrace("shouldPlayPercentage was less than 10 this was a lottery roll on RNG");
}
nextCardToPlay = card;
maxCost = currentCost;
if (hasX)
maxCost = pMana->getConvertedCost();
}
}
}
//canplayfromexile
while ((card = cd.nextmatch(game->exile, card))&& card->has(Constants::CANPLAYFROMEXILE))
@@ -2774,27 +2840,27 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
}
else
{
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD)
// Refactor to not check effect of lands since it always returned BAKA_EFFECT_DONTKNOW
// If it is a land, play it
if (card->isLand())
{
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay)
{
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else if (card->isLand())
{
shouldPlayPercentage = 90;
}
else
{
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
shouldPlayPercentage = 1;
}
}
else {
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD) {
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay) {
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else {
// shouldPlay == baka_effect_bad giving it a 10 for odd ball lottery chance.
shouldPlayPercentage = 10;
}
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
@@ -2810,7 +2876,7 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play " << (card ? card->name : "Nothing" ) << "?" << endl
DebugTrace("Should I play from exile" << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
@@ -2859,8 +2925,9 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
if (card->has(Constants::TREASON) && observer->getCurrentGamePhase() != MTG_PHASE_FIRSTMAIN)
continue;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
continue;
//PLaneswalkers are now legendary so this is redundant
//if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
//continue;
if(hints && hints->HintSaysItsForCombo(observer,card))
{
@@ -2928,27 +2995,27 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
}
else
{
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD)
// Refactor to not check effect of lands since it always returned BAKA_EFFECT_DONTKNOW
// If it is a land, play it
if (card->isLand())
{
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay)
{
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else if (card->isLand())
{
shouldPlayPercentage = 90;
}
else
{
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
shouldPlayPercentage = 1;
}
}
else {
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD) {
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay) {
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else {
// shouldPlay == baka_effect_bad giving it a 10 for odd ball lottery chance.
shouldPlayPercentage = 10;
}
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
@@ -2964,7 +3031,7 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play " << (card ? card->name : "Nothing" ) << "?" << endl
DebugTrace("Should I play from hand" << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
@@ -3391,12 +3458,17 @@ int AIPlayerBaka::getCreaturesInfo(Player * player, int neededInfo, int untapMod
int AIPlayerBaka::chooseAttackers()
{
int myCreatures = getCreaturesInfo(this, INFO_NBCREATURES, -1, 1);
if (myCreatures < 1)
return 0;
//Attack with all creatures
//How much damage can the other player do during his next Attack ?
int opponentForce = getCreaturesInfo(opponent(), INFO_CREATURESPOWER);
int opponentCreatures = getCreaturesInfo(opponent(), INFO_NBCREATURES);
int myForce = getCreaturesInfo(this, INFO_CREATURESPOWER, -1, 1);
int myCreatures = getCreaturesInfo(this, INFO_NBCREATURES, -1, 1);
if(opponent()->life < 5)
agressivity += 31;
bool attack = ((myCreatures > opponentCreatures) || (myForce > opponentForce) || (myForce > 2 * opponent()->life));
if (agressivity > 80 && !attack && life > opponentForce)
{
@@ -3413,7 +3485,7 @@ int AIPlayerBaka::chooseAttackers()
MTGCardInstance * card = NULL;
while ((card = cd.nextmatch(game->inPlay, card)))
{
if (hints && hints->HintSaysAlwaysAttack(observer, card))
if ((hints && hints->HintSaysAlwaysAttack(observer, card)) || card->has(Constants::UNBLOCKABLE))
{
if (!card->isAttacker())
{

View File

@@ -274,8 +274,8 @@ void StackAbility::Render()
else
fmLibrary++;
}
else
mytargetQuads.push_back( ((Damageable *)(tt))->getIcon() );
//else // This was crashing the game when a permanent targeted a spell in the stack
//mytargetQuads.push_back( ((Damageable *)(tt))->getIcon() );
}
}
}
@@ -711,7 +711,8 @@ int ActionStack::addAbility(MTGAbility * ability)
if (!observer->players[0]->isAI() && ability->source->controller() == observer->players[0] && 0
== options[Options::INTERRUPTMYABILITIES].number)
{
if(observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR)
if((observer->gameType() == GAME_TYPE_MOMIR && ability->aType == MTGAbility::FORCED_TOKEN_CREATOR)||
(dynamic_cast<GenericTargetAbility *>(ability) && ability->canBeInterrupted && !observer->OpenedDisplay && !observer->players[0]->game->reveal->cards.size()))//test interrupt...
interruptDecision[0] = NOT_DECIDED;
else
interruptDecision[0] = DONT_INTERRUPT;
@@ -1040,7 +1041,7 @@ void ActionStack::Update(float dt)
if (getCurrentTutorial() && (observer->players[0]->isHuman() || observer->players[1]->isHuman() ) )
return;
if (observer->mLayers->actionLayer()->menuObject || observer->LPWeffect)
if (observer->mLayers->actionLayer()->menuObject)// || observer->LPWeffect) //test fix for hang for both legendary with action/reveal
if(observer->players[0]->isHuman() || observer->players[1]->isHuman())
return;//dont do any of this if a menuobject exist.

View File

@@ -6046,6 +6046,7 @@ ATransformer::ATransformer(GameObserver* observer, int id, MTGCardInstance * sou
}
myCurrentTurn = 1000;
//this subkeyword adds a color without removing the existing colors.
removemc = (sabilities.find("removemc") != string::npos);
addNewColors = (sabilities.find("newcolors") != string::npos);
remove = (stypes.find("removealltypes") != string::npos);
removeCreatureSubtypes = (stypes.find("removecreaturesubtypes") != string::npos);
@@ -6235,6 +6236,9 @@ for (it = types.begin(); it != types.end(); it++)
_target->addbaseT(val->getValue());
delete val;
}
//remove manacost
if(removemc)
_target->getManaCost()->resetCosts();
return MTGAbility::addToGame();
}
@@ -7729,11 +7733,14 @@ void ABlink::resolveBlink()
this->forceDestroy = 1;
return;
}
if (_target && _target->next)
_target = _target->next;
_target->blinked = true;
Blinked = _target;
if(source->isPermanent()&&!source->isInPlay(game))
{
Blinked->blinked = false;
}
if (!blinkueot && !blinkForSource)
{
returnCardIntoPlay(_target);

View File

@@ -461,12 +461,16 @@ void CardGui::Render()
}
string buff = "";
string starMark = "";
if(card->exerted)
starMark += "exerted";
if(card->isToken && !card->isACopier)
buff = "T";
if(card->isToken && card->isACopier)
buff = "CT";
if(!card->isToken && card->isACopier)
buff = "C";
buff = starMark + buff;
//if(card->has(Constants::PAYZERO))
//buff += "Z";
if(card->chooseacolor >= 1)

View File

@@ -417,10 +417,11 @@ ManaCost* CardPrimitive::getManaCost()
bool CardPrimitive::hasType(int _type)
{
for (size_t i = 0; i < types.size(); i++)
if (types[i] == _type)
return true;
return false;
if (types.size() > 400) {return false;} // Null pointer?
for (size_t i = 0; i < types.size(); i++)
if (types[i] == _type)
return true;
return false;
}
bool CardPrimitive::hasSubtype(int _subtype)

View File

@@ -367,7 +367,7 @@ int GameOptions::load()
(*this)[Options::MAX_GRADE].number = Constants::GRADE_BORDERLINE;
if (!(*this)[Options::AIDECKS_UNLOCKED].number)
(*this)[Options::AIDECKS_UNLOCKED].number = 10;
(*this)[Options::AIDECKS_UNLOCKED].number = 20;
return 1;
}

View File

@@ -1353,7 +1353,7 @@ void GameStateDeckViewer::renderOnScreenMenu()
sprintf(buffer, STATS_TITLE_FORMAT.c_str(), mStatsWrapper->currentPage, _("Mana cost per color").c_str());
font->DrawString(buffer, 10 + 20 + leftTransition, 10);
font->DrawString(_("Total colored manasymbols in cards' casting costs:"), 20 + 20 + leftTransition, 30);
font->DrawString(_("Total colored mana symbols in cards' casting costs:"), 20 + 20 + leftTransition, 30);
posY = 50;
for (int i = 1; i < Constants::NB_Colors - 1; i++)

View File

@@ -770,7 +770,10 @@ void GameStateDuel::Update(float dt)
musictrack = "ai_baka_music_momir.mp3";
else if (mParent->gameType == GAME_TYPE_RANDOM1 || mParent->gameType == GAME_TYPE_RANDOM2) musictrack
= "ai_baka_music_random.mp3";
else if (mParent->gameType == GAME_TYPE_RANDOM3 || mParent->gameType == GAME_TYPE_RANDOM5) musictrack
= "ai_baka_music_random.mp3";
else if (mParent->gameType == GAME_TYPE_HORDE || mParent->gameType == GAME_TYPE_SET_LIMITED) musictrack
= "ai_baka_music_momir.mp3";
if (!MusicExist(musictrack))
musictrack = "ai_baka_music.mp3";

View File

@@ -250,8 +250,8 @@ void GameStateOptions::Render()
"",
"Dev Team:",
"Abrasax, Almosthumane, Daddy32, DJardin, Dr.Solomat, J, Jeck,",
"kevlahnota, Leungclj, linshier, Mootpoint, Mnguyen, Psyringe,",
"Rolzad73, Salmelo, Superhiro, Wololo, Yeshua, Zethfox",
"kevlahnota, Leungclj, linshier, Mootpoint, Mnguyen, Ph34rbot,",
"Psyringe, Rolzad73, Salmelo, Superhiro, Wololo, Yeshua, Zethfox",
"",
"Music by Celestial Aeon Project, http://www.jamendo.com",
"",

View File

@@ -312,7 +312,7 @@ void GuiPlay::Render()
MTGCardInstance * ctarget = ((MTGCardInstance *)(*it)->card->isAttacking);
if(ctarget->hasType(Subtypes::TYPE_PLANESWALKER) && observer->isInPlay(ctarget) && observer->getCurrentGamePhase() < MTG_PHASE_COMBATEND)
{
JRenderer::GetInstance()->DrawLine((*it)->actX,(*it)->actY,ctarget->view->actX,ctarget->view->actY,0.5f,ARGB(128 - wave, 255, 20, 0));
JRenderer::GetInstance()->DrawLine((*it)->actX,(*it)->actY,ctarget->view->actX,ctarget->view->actY,0.5f,ARGB(128 - wave, 255, 40, 40));
}
}
}

View File

@@ -120,13 +120,13 @@ void GuiAvatar::Render()
case TOP_LEFT:
mFont->SetColor(ARGB((int)actA / 4, 0, 0, 0));
mFont->DrawString(buffer, actX + 2, actY - 2);
mFont->SetScale(1.3f);
mFont->SetScale(1.5f);
mFont->SetColor(ARGB((int)actA, lx, ly, lz));
mFont->DrawString(buffer, actX + 1, actY - 1);
mFont->SetScale(1);
break;
case BOTTOM_RIGHT:
mFont->SetScale(1.3f);
mFont->SetScale(1.4f);
mFont->SetColor(ARGB((int)actA, lx, ly, lz));
mFont->DrawString(buffer, actX, actY - 14, JGETEXT_RIGHT);
mFont->SetScale(1);
@@ -134,7 +134,7 @@ void GuiAvatar::Render()
}
//poison
char poison[10];
if (poisonCount >= 0)
if (poisonCount > 0)
{
sprintf(poison, "%i", poisonCount);
switch (corner)
@@ -151,7 +151,7 @@ void GuiAvatar::Render()
}
//energy
char energy[15];
if (energyCount >= 0)
if (energyCount > 0)
{
sprintf(energy, "%i", energyCount);
switch (corner)

View File

@@ -386,7 +386,10 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++)
{
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
if(checkCard->isCreature())
if(checkCard->isCreature() &&
((checkCard->previousZone == checkCurrent->game->battlefield)||
(checkCard->previousZone == checkCurrent->opponent()->game->battlefield))//died from battlefield
)
{
isMorbid = true;
break;
@@ -398,7 +401,26 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
if(!isMorbid)
return 0;
}
check = restriction[i].find("zerodead");
if(check != string::npos)//returns true if zero
{
bool hasDeadCreature = false;
Player * checkCurrent = card->controller();
MTGGameZone * grave = checkCurrent->game->graveyard;
for(unsigned int gy = 0;gy < grave->cardsSeenThisTurn.size();gy++)
{
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
if(checkCard->isCreature() &&
((checkCard->previousZone == checkCurrent->game->battlefield))//died from your battlefield
)
{
hasDeadCreature = true;
break;
}
}
if(hasDeadCreature)
return 0;
}
//Ensnaring Bridge
check = restriction[i].find("powermorethanopponenthand");
if (check != string::npos)//for opponent creatures
@@ -432,13 +454,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
MTGGameZone * grave = checkCurrent->game->graveyard;
int checkTypesAmount = 0;
if(grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("enchantment")) checkTypesAmount++;
if (grave->hasType("sorcery")) checkTypesAmount++;
if (grave->hasType("instant")) checkTypesAmount++;
if (grave->hasType("land")) checkTypesAmount++;
if (grave->hasType("artifact")) checkTypesAmount++;
if (grave->hasType("planeswalker")) checkTypesAmount++;
if (grave->hasType("tribal")) checkTypesAmount++;
if (checkTypesAmount < 4)
return 0;
}
@@ -450,13 +473,14 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
MTGGameZone * grave = checkCurrent->game->graveyard;
int checkTypesAmount = 0;
if(grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("creature")) checkTypesAmount++;
if (grave->hasType("enchantment")) checkTypesAmount++;
if (grave->hasType("sorcery")) checkTypesAmount++;
if (grave->hasType("instant")) checkTypesAmount++;
if (grave->hasType("land")) checkTypesAmount++;
if (grave->hasType("artifact")) checkTypesAmount++;
if (grave->hasType("planeswalker")) checkTypesAmount++;
if (grave->hasType("tribal")) checkTypesAmount++;
if (checkTypesAmount > 3)
return 0;
}
@@ -552,6 +576,20 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
return 0;
}
check = restriction[i].find("hasexerted");
if(check != string::npos)
{
if(!card->exerted)
return 0;
}
check = restriction[i].find("notexerted");
if(check != string::npos)
{
if(card->exerted)
return 0;
}
check = restriction[i].find("discardbyopponent");
if(check != string::npos)
{
@@ -1068,6 +1106,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card))
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);
//CombatTrigger
//Card card attacked and is blocked
found = s.find("combat(");
@@ -1793,7 +1835,8 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
tc->targetter = NULL;
}
else
tc->targetter->bypassTC = false;
if (tc->targetter)
tc->targetter->bypassTC = false;
sWithoutTc = splitTarget[0];
sWithoutTc.append(splitTarget[2]);
}
@@ -1893,7 +1936,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
{
if (!(spell && spell->FullfilledAlternateCost(kAlternateCostIds[i])))
{
DebugTrace("INFO parseMagicLine: Alternative Cost was not fulfilled for " << s);
DebugTrace("INFO parseMagicLine: Alternative Cost was not fulfilled for " << spell << s);
SAFE_DELETE(tc);
return NULL;
}
@@ -2926,7 +2969,20 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
((AManifest*)a)->withenchant = true;
return a;
}
//exert
found = s.find("exert");
if (found != string::npos)
{
MTGAbility * a = NEW AExert(observer, id, card, target);
a->oneShot = 1;
if(storedAndAbility.size())
{
string stored = storedAndAbility;
storedAndAbility.clear();
((AExert*)a)->andAbility = parseMagicLine(stored, id, spell, card);
}
return a;
}
//provoke
found = s.find("provoke");
if (found != string::npos)
@@ -3457,7 +3513,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
//produce additional mana when a mana is engaged
if (s.find("producecolor:") != string::npos)
{
{
return NEW AEngagedManaAbility(observer, id, card,s.substr(13));
}
@@ -4039,13 +4095,14 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
return NEW ANewAffinity(observer, id, card, tcString, manaString);
}
//proliferate
//proliferate, rule changes in War of the Spark set
found = s.find("proliferate");
if (found != string::npos)
{
MTGAbility * a = NEW AAProliferate(observer, id, card, target);
a->oneShot = 1;
a->canBeInterrupted = false;
((AAProliferate*)a)->allcounters = true;
return a;
}
//proliferate all counters
@@ -4490,6 +4547,10 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
return BAKA_EFFECT_BAD;
if (dynamic_cast<AManaProducer *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AARemoveAllCounter *> (a))
return BAKA_EFFECT_BAD;
if (dynamic_cast<AAProliferate *> (a))
return BAKA_EFFECT_GOOD;
// Equipment that gets immediately attached. Todo: check the abilities associated with Equip, to make sure they're good (for now it seems to be the majority of the cases)?
if (dynamic_cast<AEquip *> (a))
@@ -4513,12 +4574,12 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
if (AAMover * aam = dynamic_cast<AAMover *>(a))
{
MTGGameZone * z = aam->destinationZone(target);
if (tc && tc->targetsZone(p->game->library))
if (tc && tc->targetsZone(p->game->library) || tc && tc->targetsZone(p->game->graveyard) || tc && tc->targetsZone(p->game->hand))
{
if (z == p->game->hand || z == p->game->inPlay)
return BAKA_EFFECT_GOOD;
}
return BAKA_EFFECT_BAD; //TODO
return BAKA_EFFECT_BAD; //TODO
}
if (dynamic_cast<AACopier *> (a))
@@ -4543,6 +4604,35 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
return BAKA_EFFECT_GOOD;
if (dynamic_cast<ABushidoAbility *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AACascade *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AACastCard *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AAFlip *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AAImprint *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<ABestow *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AExert *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<ALoseAbilities *> (a))
return BAKA_EFFECT_BAD;
if (dynamic_cast<AModularAbility *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<APaired *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AProduceMana *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AACloner *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AAModTurn *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<ATransformer *> (a))
return BAKA_EFFECT_GOOD;
if (dynamic_cast<AADamager *> (a))
return BAKA_EFFECT_BAD;
if (PTInstant * abi = dynamic_cast<PTInstant *>(a))
return (abi->wppt->power.getValue() >= 0 && abi->wppt->toughness.getValue() >= 0) ? BAKA_EFFECT_GOOD : BAKA_EFFECT_BAD;
if (APowerToughnessModifier * abi = dynamic_cast<APowerToughnessModifier *>(a))
@@ -4573,6 +4663,8 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
badAbilities[(int)Constants::NOLIFEGAINOPPONENT] = true;
badAbilities[(int)Constants::MUSTBLOCK] = true;
badAbilities[(int)Constants::FLYERSONLY] = true;
badAbilities[(int)Constants::TREASON] = true;
badAbilities[(int)Constants::SHACKLER] = true;
if (AInstantBasicAbilityModifierUntilEOT * abi = dynamic_cast<AInstantBasicAbilityModifierUntilEOT *>(a))
{
@@ -4639,7 +4731,7 @@ int AbilityFactory::getAbilities(vector<MTGAbility *> * v, Spell * spell, MTGCar
card->exileEffects = true;
break;
}
if (dest == zones->library)
if (dest == zones->library)
{
magicText = card->magicTexts["library"];
break;
@@ -4733,7 +4825,7 @@ int AbilityFactory::getAbilities(vector<MTGAbility *> * v, Spell * spell, MTGCar
}
else
{
DebugTrace("ABILITYFACTORY ERROR: Parser returned NULL");
DebugTrace("ABILITYFACTORY ERROR: Parser returned NULL " + magicText);
}
}
return result;
@@ -4749,7 +4841,7 @@ int AbilityFactory::getAbilities(vector<MTGAbility *> * v, Spell * spell, MTGCar
* - doTap (a dirty way to know if tapping is included in the cost...
*/
int AbilityFactory::magicText(int id, Spell * spell, MTGCardInstance * card, int mode, TargetChooser * tc, MTGGameZone * dest)
{
{try{
int dryMode = 0;
if (!spell && !dest)
dryMode = 1;
@@ -4833,6 +4925,11 @@ int AbilityFactory::magicText(int id, Spell * spell, MTGCardInstance * card, int
}
return result;
}
catch(exception) {
DebugTrace("MAGIC TEST ERROR: Parser returned NULL");
}
return 0;
}
void AbilityFactory::addAbilities(int _id, Spell * spell)

View File

@@ -224,6 +224,7 @@ void MTGCardInstance::initMTGCI()
blinked = false;
isExtraCostTarget = false;
morphed = false;
exerted = false;
turningOver = false;
isMorphed = false;
MeldedFrom = "";
@@ -1352,14 +1353,16 @@ int MTGCardInstance::DangerRanking()
result += 1;
}
}
if (result > 1)
danger += 1;
// Even at 60(danger=3) the AI is hasty to play removal on a simple creature
// a vanilla 2 mana, 2/2 used to be eff = 60
if (result > 2)
danger += 1;
if (result > 4)
danger += 1;
if (result > 6)
danger += 1;
if (result > 8)
danger += 1;
if (result > 10)
danger += 1;
return danger;

View File

@@ -1219,6 +1219,11 @@ int MTGDeck::save(const string& destFileName, bool useExpandedDescriptions, cons
void MTGDeck::printDetailedDeckText(std::ofstream& file )
{
ostringstream currentCard, creatures, lands, spells, types;
ostringstream ss_creatures, ss_lands, ss_spells;
int numberOfCreatures = 0;
int numberOfSpells = 0;
int numberOfLands = 0;
map<int, int>::iterator it;
for (it = cards.begin(); it != cards.end(); it++)
{
@@ -1233,7 +1238,7 @@ void MTGDeck::printDetailedDeckText(std::ofstream& file )
string setName = setInfo->id;
string cardName = card->data->getName();
currentCard << "#" << nbCards << " x " << cardName << " (" << setName << "), ";
currentCard << "#" << nbCards << "x " << cardName << " (" << setName << "), ";
if ( !card->data->isLand() )
currentCard << card->data->getManaCost() << ", ";
@@ -1266,17 +1271,31 @@ void MTGDeck::printDetailedDeckText(std::ofstream& file )
currentCard <<endl;
setInfo = NULL;
// Add counter to know number of creatures, non-creature spells and lands present in the deck
if ( card->data->isLand() )
{
lands<< currentCard.str();
numberOfLands+=nbCards;
}
else if ( card->data->isCreature() )
{
creatures << currentCard.str();
else
numberOfCreatures+=nbCards;
}
else
{
spells << currentCard.str();
numberOfSpells+=nbCards;
}
currentCard.str("");
}
file << getCardBlockText( "Creatures", creatures.str() ) << endl;
file << getCardBlockText( "Spells", spells.str() ) << endl;
file << getCardBlockText( "Lands", lands.str() ) << endl;
ss_creatures << numberOfCreatures;
ss_spells << numberOfSpells;
ss_lands << numberOfLands;
file << getCardBlockText( "Creatures x" + ss_creatures.str(), creatures.str() ) ;
file << getCardBlockText( "Spells x" + ss_spells.str(), spells.str() ) ;
file << getCardBlockText( "Lands x" + ss_lands.str(), lands.str() ) ;
creatures.str("");
spells.str("");
lands.str("");

View File

@@ -554,6 +554,13 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
}
}
}
//remove exerted if changing controls
if((to == g->players[0]->game->battlefield && from == g->players[1]->game->battlefield)||
(to == g->players[1]->game->battlefield && from == g->players[0]->game->battlefield))
{
if(ret->exerted)
ret->exerted = false;
}
}
if(!asCopy)
{
@@ -1125,13 +1132,25 @@ void MTGInPlay::untapAll()
card->setUntapping();
if (!card->basicAbilities[(int)Constants::DOESNOTUNTAP] && !card->basicAbilities[(int)Constants::SHACKLER])
{
if (card->frozen < 1)
if(card->exerted)
{
card->attemptUntap();
card->exerted = false;
if (card->frozen >= 1)
{
card->frozen = 0;
}
}
if (card->frozen >= 1)
else
{
card->frozen = 0;
card->exerted = false;
if (card->frozen < 1)
{
card->attemptUntap();
}
if (card->frozen >= 1)
{
card->frozen = 0;
}
}
}
}

View File

@@ -505,6 +505,20 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card)
}
delete withKickerCost;
}
if (card->getManaCost()->getBestow())
{
ManaCost * withBestowCost= NEW ManaCost(card->getManaCost());
withBestowCost->add(withBestowCost->getBestow());
DebugTrace("AltCost BESTOW " << withBestowCost);
if (previousManaPool->canAfford(withBestowCost))
{
player->getManaPool()->pay(card->getManaCost()->getBestow());
payResult = ManaCost::MANA_PAID_WITH_BESTOW;
}
delete withBestowCost;
}
card->getManaCost()->doPayExtra();
ManaCost * spellCost = previousManaPool->Diff(player->getManaPool());
@@ -652,6 +666,19 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
payResult = ManaCost::MANA_PAID_WITH_KICKER;
}
delete withKickerCost;
}
// Handles bestow,also has to go in isExtraPaymentSet
if (card->getManaCost()->getBestow())
{
ManaCost * withBestowCost= NEW ManaCost(card->getManaCost());
withBestowCost->add(withBestowCost->getBestow());
if (previousManaPool->canAfford(withBestowCost))
{
player->getManaPool()->pay(card->getManaCost()->getBestow());
payResult = ManaCost::MANA_PAID_WITH_BESTOW;
}
delete withBestowCost;
}
card->getManaCost()->doPayExtra();
ManaCost * spellCost = previousManaPool->Diff(player->getManaPool());
@@ -3486,7 +3513,7 @@ PermanentAbility(observer, _id)
}
int MTGNewPlaneswalker::receiveEvent(WEvent * e)
{
{
if(game->getCurrentTargetChooser() || game->mLayers->actionLayer()->isWaitingForAnswer())
return 0;
if (WEventZoneChange* ev1 = dynamic_cast<WEventZoneChange*>(e))
@@ -3494,7 +3521,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
if (ev1->to == game->players[0]->game->inPlay || ev1->to == game->players[1]->game->inPlay)
{
MTGCardInstance * card = ev1->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3504,7 +3531,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
else if(WEventCardControllerChange* ev2 = dynamic_cast<WEventCardControllerChange*>(e))
{
MTGCardInstance * card = ev2->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3513,7 +3540,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
else if(WEventCardTransforms* ev3 = dynamic_cast<WEventCardTransforms*>(e))
{
MTGCardInstance * card = ev3->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3522,7 +3549,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
else if(WEventCardCopiedACard* ev4 = dynamic_cast<WEventCardCopiedACard*>(e))
{
MTGCardInstance * card = ev4->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3531,7 +3558,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
else if(WEventCardFaceUp* ev5 = dynamic_cast<WEventCardFaceUp*>(e))
{
MTGCardInstance * card = ev5->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3540,7 +3567,7 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
else if(WEventCardPhasesIn* ev6 = dynamic_cast<WEventCardPhasesIn*>(e))
{
MTGCardInstance * card = ev6->card;
if(card && card->hasType(Subtypes::TYPE_PLANESWALKER))
if(card && card->countDuplicateCardNames() > 1 && card->hasType(Subtypes::TYPE_LEGENDARY))
{
CheckPW(card);
return 1;
@@ -3550,23 +3577,26 @@ int MTGNewPlaneswalker::receiveEvent(WEvent * e)
}
int MTGNewPlaneswalker::CheckPW(MTGCardInstance * card)
{
if(!card)
if(!card)
return 0;
if(card->isPhased)
return 0;
if(card->countDuplicateCardTypes() < 1)
if (card->hasType(Subtypes::TYPE_LEGENDARY) && card->controller()->game->inPlay->hasCard(card))
if(card->has(Constants::NOLEGEND)||card->controller()->opponent()->inPlay()->hasAbility(Constants::NOLEGENDRULE)||card->controller()->inPlay()->hasAbility(Constants::NOLEGENDRULE))
return 0;
if(card->countDuplicateCardNames() <= 2)
return 0;
MovePW(card);
return 1;
}
void MTGNewPlaneswalker::MovePW(MTGCardInstance * card)
{
{
game->LPWeffect = true;
vector<MTGAbility*>selection;
MTGCardInstance * myClone = NEW MTGCardInstance(card, card->controller()->game);
TargetChooserFactory tfL(game);
tcP = tfL.createTargetChooser("planeswalker[share!types!]|mybattlefield",myClone);
tcP = tfL.createTargetChooser("*[share!name!]|mybattlefield",myClone);
tcP->targetter = NULL;
tcP->maxtargets = 1;
PWrule = NEW AAMover(game, game->mLayers->actionLayer()->getMaxId(), myClone, NULL,"ownergraveyard","Put in Graveyard");
@@ -3679,24 +3709,27 @@ ListMaintainerAbility(observer, _id)
int MTGPlaneWalkerRule::canBeInList(MTGCardInstance * card)
{
if(card->isPhased)
if(card->isPhased)
return 0;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->controller()->game->inPlay->hasCard(card))
if (card->hasType(Subtypes::TYPE_LEGENDARY) && card->controller()->game->inPlay->hasCard(card))
{
return 1;
if(card->has(Constants::NOLEGEND)||card->controller()->opponent()->inPlay()->hasAbility(Constants::NOLEGENDRULE)||card->controller()->inPlay()->hasAbility(Constants::NOLEGENDRULE))
return 0;
else
return 1;
}
return 0;
}
int MTGPlaneWalkerRule::added(MTGCardInstance * card)
{
map<MTGCardInstance *, bool>::iterator it;
map<MTGCardInstance *, bool>::iterator it;
int destroy = 0;
vector<MTGCardInstance*>oldCards;
for (it = cards.begin(); it != cards.end(); it++)
{
MTGCardInstance * comparison = (*it).first;
if (comparison != card && comparison->types == card->types && comparison->controller() == card->controller())
if (comparison != card && comparison->controller() == card->controller() && !(comparison->getName().compare(card->getName())))
if (!(game->getCurrentTargetChooser() || game->mLayers->actionLayer()->isWaitingForAnswer()))
{
oldCards.push_back(comparison);
@@ -3704,11 +3737,10 @@ int MTGPlaneWalkerRule::added(MTGCardInstance * card)
game->LPWeffect = true;
}
}
if (destroy)
if(destroy)
{
vector<MTGAbility*>selection;
MultiAbility * multi = NEW MultiAbility(game,game->mLayers->actionLayer()->getMaxId(), card, card, NULL);
MultiAbility * multi = NEW MultiAbility(game, game->mLayers->actionLayer()->getMaxId(), card, card, NULL);
for(unsigned int i = 0;i < oldCards.size();i++)
{
AAMover *a = NEW AAMover(game, game->mLayers->actionLayer()->getMaxId(), card, oldCards[i],"ownergraveyard","Keep New");
@@ -3722,7 +3754,7 @@ int MTGPlaneWalkerRule::added(MTGCardInstance * card)
b->oneShot = true;
MTGAbility * b1 = b;
selection.push_back(b1);
MTGAbility * menuChoice = NEW MenuAbility(game, game->mLayers->actionLayer()->getMaxId(), card, card,true,selection,card->controller(),"Planeswalker Rule");
MTGAbility * menuChoice = NEW MenuAbility(game, game->mLayers->actionLayer()->getMaxId(), card, card,true,selection,card->controller(),"Legendary Rule");
menuChoice->addToGame();
}
return 1;

View File

@@ -579,6 +579,8 @@ int ManaCost::hasAnotherCost()
if(kicker)
result = 1;
//kicker is the only one ai knows for now, later hasAnotherCost() can be used to determine other cost types.
if(Retrace || BuyBack || alternative || FlashBack || morph || suspend || Bestow)
result = 1;
return result;
}
@@ -730,7 +732,7 @@ int ManaCost::getCost(int color)
{
if (cost.size() <= (size_t)color)
{
DebugTrace("Seems ManaCost was not properly initialized");
DebugTrace("in GetCost Seems ManaCost was not properly initialized");
return 0;
}
return cost[color];

View File

@@ -168,6 +168,10 @@ void Rules::addExtraRules(GameObserver* g)
difficultyRating = 0;
else if(g->mRules->gamemode == GAME_TYPE_RANDOM1 || g->mRules->gamemode == GAME_TYPE_RANDOM2)
difficultyRating = 0;
else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5)
difficultyRating = 0;
else if(g->mRules->gamemode == GAME_TYPE_HORDE || g->mRules->gamemode == GAME_TYPE_SET_LIMITED)
difficultyRating = 0;
else if (g->mRules->gamemode == GAME_TYPE_STORY)
difficultyRating = 0;
else if (a->aType == MTGAbility::STANDARD_DRAW)
@@ -196,9 +200,11 @@ void Rules::addExtraRules(GameObserver* g)
a->resolve();
else if(g->mRules->gamemode == GAME_TYPE_RANDOM1 || g->mRules->gamemode == GAME_TYPE_RANDOM2)
a->resolve();
else if(g->mRules->gamemode == GAME_TYPE_RANDOM3 || g->mRules->gamemode == GAME_TYPE_RANDOM5)
a->resolve();
else if (g->mRules->gamemode == GAME_TYPE_STORY)
a->resolve();
else//stupid protections to keep this out of mimor and other game modes.
else//stupid protections to keep this out of momir and other game modes.
{
handsize = ((AADrawer *)a)->getNumCards();
if(difficultyRating == EASY)
@@ -305,6 +311,180 @@ Player * Rules::loadPlayerRandom(GameObserver* observer, int isAI, int mode)
return player;
}
Player * Rules::loadRandomSetLimited(GameObserver* observer, int isAI)
{
//Random sets
int setId[] = { observer->getRandomGenerator()->random() % setlist.size(), observer->getRandomGenerator()->random() % setlist.size() };
int nbSet = sizeof(setId)/sizeof(setId[0]);
int color1 = 1 + observer->getRandomGenerator()->random() % 5;
int color2 = 1 + observer->getRandomGenerator()->random() % 5;
int colors[] = { color1, color2 };
int nbcolors = 2;
string lands[] = { "", "forest", "island", "mountain", "swamp", "plains" };
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
// Try to add basic lands from that set
tempDeck->addRandomCards(8, setId, nbSet, -1, lands[color1].c_str());
tempDeck->addRandomCards(8, setId, nbSet, -1, lands[color2].c_str());
tempDeck->addRandomCards(2, setId, nbSet, -1, "land");
// If lands < 18 add from any set
int missingLands = 18 - tempDeck->totalCards();
if (missingLands > 0)
{
tempDeck->addRandomCards(missingLands/2, 0, 0, -1, lands[color1].c_str());
tempDeck->addRandomCards(missingLands/2, 0, 0, -1, lands[color2].c_str());
}
// Lone artifact and creatures.
tempDeck->addRandomCards(1, setId, nbSet, -1, "artifact");
tempDeck->addRandomCards(12, setId, nbSet, -1, "creature", colors, nbcolors);
// Want the deck to be 40 cards, take any card from the set in the colors
int missingCards = 40 - tempDeck->totalCards();
if (missingCards > 0)
tempDeck->addRandomCards(missingCards, setId, nbSet, -1, "", colors, nbcolors);
string deckFile = "random";
string deckFileSmall = "random";
Player *player = NULL;
if (!isAI) // Human Player
player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck);
else
player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck);
return player;
}
Player * Rules::loadPlayerRandomThree(GameObserver* observer, int isAI)
{
int color1 = 1 + observer->getRandomGenerator()->random() % 5;
int color2 = 1 + observer->getRandomGenerator()->random() % 5;
int color3 = 1 + observer->getRandomGenerator()->random() % 5;
int color0 = Constants::MTG_COLOR_ARTIFACT;
int colors[] = { color1, color2, color3, color0 };
int nbcolors = 4;
string lands[] = { "", "forest", "island", "mountain", "swamp", "plains", "" };
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
tempDeck->addRandomCards(1, 0, 0, -1, lands[color1].c_str());
tempDeck->addRandomCards(1, 0, 0, -1, lands[color2].c_str());
tempDeck->addRandomCards(1, 0, 0, -1, lands[color3].c_str());
tempDeck->addRandomCards(6, 0, 0, 'R', lands[color1].c_str());
tempDeck->addRandomCards(6, 0, 0, 'R', lands[color2].c_str());
tempDeck->addRandomCards(6, 0, 0, 'R', lands[color3].c_str());
tempDeck->addRandomCards(3, 0, 0, -1, "land");
tempDeck->addRandomCards(1, 0, 0, 'U', "land");
tempDeck->addRandomCards(1, 0, 0, 'R', "land");
tempDeck->addRandomCards(18, 0, 0, -1, "creature", colors, nbcolors);
tempDeck->addRandomCards(1, 0, 0, 'R', "creature", colors, nbcolors);
tempDeck->addRandomCards(1, 0, 0, 'M', "creature", colors, nbcolors);
tempDeck->addRandomCards(3, 0, 0, -1, "sorcery", colors, nbcolors);
tempDeck->addRandomCards(3, 0, 0, -1, "enchantment", colors, nbcolors);
tempDeck->addRandomCards(3, 0, 0, -1, "instant", colors, nbcolors);
tempDeck->addRandomCards(4, 0, 0, -1, "artifact", colors, nbcolors);
tempDeck->addRandomCards(1, 0, 0, -1, "planeswalker", colors, nbcolors);
string deckFile = "random";
string deckFileSmall = "random";
Player *player = NULL;
if (!isAI) // Human Player
player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck);
else
player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck);
return player;
}
Player * Rules::loadPlayerRandomFive(GameObserver* observer, int isAI)
{
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
tempDeck->addRandomCards(20, 0, 0, -1, "land");
tempDeck->addRandomCards(20, 0, 0, -1, "creature");
tempDeck->addRandomCards(20, 0, 0, -1, "");
string deckFile = "random";
string deckFileSmall = "random";
Player *player = NULL;
if (!isAI) // Human Player
player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck);
else
player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck);
return player;
}
Player * Rules::loadPlayerHorde(GameObserver* observer, int isAI)
{
int nbColors = 1;
string randomTribe = "";
int tribeColor[] = { observer->getRandomGenerator()->random() % 6 };
string lands[] = { "land", "forest", "island", "mountain", "swamp", "plains" };
const char* const multicolorTribes[] = { "Ally", "Eldrazi", "Elemental", "Golem", "Hound", "Human", "Knight",
"Myr", "Samurai", "Shaman", "Shapeshifter", "Sliver", "Soldier", "Spellshaper", "Spirit", "Warrior", "Wizard" };
const char* const whiteTribes[] = { "Angel", "Bird", "Cat", "cleric", "Griffin", "Kithkin", "Knight", "Soldier", "Spirit", "Wizard" };
const char* const blueTribes[] = { "Artificer", "Bird", "Drake", "Faerie", "Illusion", "Merfolk", "Spirit", "Vedalken", "Wizard", "Zombie" };
const char* const blackTribes[] = { "Cleric", "Demon", "Faerie", "Horror", "Pirate", "Rat", "Rogue", "Shade", "Skeleton", "Vampire", "Wizard", "Zombie" };
const char* const redTribes[] = { "Barbarian", "Berserker"," Cat", "Devil", "Dragon", "Goblin", "Minotaur", "Ogre", "Werewolf", "Wizard" };
const char* const greenTribes[] = { "Beast", "Cat", "Centaur", "Dinosaur", "Druid", "Elf", "Fungus", "Snake", "Spider", "Treefolk", "Werewolf", "Wizard" };
int multicolorTribesSize = sizeof(multicolorTribes)/sizeof(multicolorTribes[0]);
int whiteTribesSize = sizeof(whiteTribes)/sizeof(whiteTribes[0]);
int blueTribesSize = sizeof(blueTribes)/sizeof(blueTribes[0]);
int blackTribesSize = sizeof(blackTribes)/sizeof(blackTribes[0]);
int redTribesSize = sizeof(redTribes)/sizeof(redTribes[0]);
int greenTribesSize = sizeof(greenTribes)/sizeof(greenTribes[0]);
switch (tribeColor[0])
{
case Constants::MTG_COLOR_ARTIFACT :
randomTribe = multicolorTribes[observer->getRandomGenerator()->random() % multicolorTribesSize];
nbColors = 0;
break;
case Constants::MTG_COLOR_WHITE :
randomTribe = whiteTribes[observer->getRandomGenerator()->random() % whiteTribesSize];
break;
case Constants::MTG_COLOR_BLUE :
randomTribe = blueTribes[observer->getRandomGenerator()->random() % blueTribesSize];
break;
case Constants::MTG_COLOR_BLACK :
randomTribe = blackTribes[observer->getRandomGenerator()->random() % blackTribesSize];
break;
case Constants::MTG_COLOR_RED :
randomTribe = redTribes[observer->getRandomGenerator()->random() % redTribesSize];
break;
case Constants::MTG_COLOR_GREEN :
randomTribe = greenTribes[observer->getRandomGenerator()->random() % greenTribesSize];
break;
}
MTGDeck * tempDeck = NEW MTGDeck(MTGCollection());
tempDeck->addRandomCards(16, 0, 0, -1, lands[tribeColor[0]].c_str());
tempDeck->addRandomCards(4, 0, 0, 'R', lands[tribeColor[0]].c_str());
tempDeck->addRandomCards(4, 0, 0, -1, "land");
tempDeck->addRandomCards(21, 0, 0, -1, randomTribe);
tempDeck->addRandomCards(5, 0, 0, -1, "enchantment", tribeColor, nbColors);
tempDeck->addRandomCards(5, 0, 0, -1, "instant", tribeColor, nbColors);
tempDeck->addRandomCards(5, 0, 0, -1, "sorcery", tribeColor, nbColors);
string deckFile = "random";
string deckFileSmall = "random";
Player *player = NULL;
if (!isAI) // Human Player
player = NEW HumanPlayer(observer, deckFile, deckFileSmall, false, tempDeck);
else
player = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, "", tempDeck);
return player;
}
Player * Rules::initPlayer(GameObserver *g, int playerId)
{
Player * p = g->players.size() > 1?g->players[playerId]:NULL;
@@ -322,6 +502,14 @@ Player * Rules::initPlayer(GameObserver *g, int playerId)
return loadPlayerRandom(g, isAI, GAME_TYPE_RANDOM1);
case GAME_TYPE_RANDOM2:
return loadPlayerRandom(g, isAI, GAME_TYPE_RANDOM2);
case GAME_TYPE_RANDOM3:
return loadPlayerRandomThree(g, isAI);
case GAME_TYPE_RANDOM5:
return loadPlayerRandomFive(g, isAI);
case GAME_TYPE_HORDE:
return loadPlayerHorde(g, isAI);
case GAME_TYPE_SET_LIMITED:
return loadRandomSetLimited(g, isAI);
default:
return NULL;
}
@@ -627,6 +815,10 @@ GameType Rules::strToGameMode(string s)
if (s.compare("momir") == 0) return GAME_TYPE_MOMIR;
if (s.compare("random1") == 0) return GAME_TYPE_RANDOM1;
if (s.compare("random2") == 0) return GAME_TYPE_RANDOM2;
if (s.compare("random3") == 0) return GAME_TYPE_RANDOM3;
if (s.compare("random5") == 0) return GAME_TYPE_RANDOM5;
if (s.compare("horde") == 0) return GAME_TYPE_HORDE;
if (s.compare("set_limited") == 0) return GAME_TYPE_SET_LIMITED;
if (s.compare("story") == 0) return GAME_TYPE_STORY;
if (s.compare("stonehewer") == 0) return GAME_TYPE_STONEHEWER;
if (s.compare("hermit") == 0) return GAME_TYPE_HERMIT;

View File

@@ -6,6 +6,9 @@
#ifdef SDL_CONFIG
#include <SDL.h>
#endif
#ifdef QT_CONFIG
#include <QKeySequence>
#endif
using std::string;
using std::map;
@@ -27,6 +30,8 @@ const KeyRep& translateKey(LocalKeySym key)
str = XKeysymToString(key);
#elif defined (SDL_CONFIG)
str = (char*)SDL_GetKeyName(key);
#elif defined (QT_CONFIG)
str = (char*)QKeySequence(key).toString().toUtf8().constData();
#endif
if (!str)
{

View File

@@ -121,6 +121,11 @@ WEventCardUpdate(card)
{
}
WEventCardExerted::WEventCardExerted(MTGCardInstance * card) :
WEventCardUpdate(card)
{
}
WEventVampire::WEventVampire(MTGCardInstance * card,MTGCardInstance * source,MTGCardInstance * victem) :
WEventCardUpdate(card),source(source),victem(victem)
{
@@ -377,6 +382,12 @@ Targetable * WEventCardCycle::getTarget(int target)
return NULL;
}
Targetable * WEventCardExerted::getTarget(int target)
{
if (target) return card;
return NULL;
}
Targetable * WEventCardAttackedNotBlocked::getTarget(int target)
{
if (target) return card;

View File

@@ -2127,7 +2127,7 @@ void WGuiFilterItem::updateValue()
}
else if (filterType == FILTER_CMC)
{
for (int i = 0; i < 20; i++)
for (int i = 0; i < 17; i++)
{
sprintf(buf_code, "cmc:%i;", i);
sprintf(buf_name, "%i Mana", i);
@@ -2136,7 +2136,7 @@ void WGuiFilterItem::updateValue()
}
else if (filterType == FILTER_POWER)
{
for (int i = 0; i < 14; i++)
for (int i = 0; i < 17; i++)
{
sprintf(buf_code, "pow:%i;", i);
sprintf(buf_name, "%i power", i);
@@ -2145,7 +2145,7 @@ void WGuiFilterItem::updateValue()
}
else if (filterType == FILTER_TOUGH)
{
for (int i = 0; i < 14; i++)
for (int i = 0; i < 17; i++)
{
sprintf(buf_code, "tgh:%i;", i);
sprintf(buf_name, "%i toughness", i);