mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Dragon's maze Race - sealed event packs generation
Converted all guild boosters to PrintSheet+booster-special
This commit is contained in:
10
.gitattributes
vendored
10
.gitattributes
vendored
@@ -13596,16 +13596,6 @@ res/quest/world/shandalar/duels/Witch[!!-~]2.dck -text
|
||||
res/quest/world/shandalar/duels/Witch[!!-~]3.dck -text
|
||||
res/quest/world/worlds.txt -text
|
||||
res/sealed/ArabianExtended.sealed -text
|
||||
res/sealed/GtcGuildBoros.sealed -text
|
||||
res/sealed/GtcGuildDimir.sealed -text
|
||||
res/sealed/GtcGuildGruul.sealed -text
|
||||
res/sealed/GtcGuildOrzhov.sealed -text
|
||||
res/sealed/GtcGuildSimic.sealed -text
|
||||
res/sealed/RtRGuildAzorius.sealed -text
|
||||
res/sealed/RtRGuildGolgari.sealed -text
|
||||
res/sealed/RtRGuildIzzet.sealed -text
|
||||
res/sealed/RtRGuildRakdos.sealed -text
|
||||
res/sealed/RtRGuildSelesnya.sealed -text
|
||||
res/sealed/juzamjedi.sealed -text
|
||||
res/skins/dark_ascension/bg_match.jpg -text
|
||||
res/skins/dark_ascension/bg_splash.png -text
|
||||
|
||||
@@ -45,6 +45,6 @@ Innistrad, 3/6/ISD, ISD DKA
|
||||
Avacyn Restored, 3/6/AVR, AVR
|
||||
Magic 2013, 3/6/M13, M13
|
||||
Return to Ravnica, 3/6/RTR, RTR GTC DGM
|
||||
Return to Ravnica Guild Sealed, -/6/RTR, RTR RTR RTR Meta-Choose(Cube(RtRGuildAzorius)Azorius Guild;Cube(RtRGuildIzzet)Izzet Guild;Cube(RtRGuildRakdos)Rakdos Guild;Cube(RtRGuildGolgari)Golgari Guild;Cube(RtRGuildSelesnya)Selesnya Guild)GUILD
|
||||
Gatecrash Guild Sealed, -/6/RTR, GTC GTC GTC Meta-Choose(Cube(GtcGuildBoros)Boros Guild;Cube(GtcGuildDimir)Dimir Guild;Cube(GtcGuildGruul)Gruul Guild;Cube(GtcGuildOrzhov)Orzhov Guild;Cube(GtcGuildSimic)Simic Guild)GUILD
|
||||
#Dragon's Maze Race Sealed, -/6/RTR, DGM DGM DGM ?<GuildPack> <RandomRelatedGuildPack2>?
|
||||
Return to Ravnica Guild Sealed, -/6/RTR, RTR RTR RTR Meta-Choose(S(RTR Prerelease Azorius Guild)Azorius guild;S(RTR Prerelease Selesnya Guild)Selesnya guild;S(RTR Prerelease Izzet Guild)Izzet guild;S(RTR Prerelease Rakdos Guild)Rakdos guild;S(RTR Prerelease Golgari Guild)Golgari guild)Guild
|
||||
Gatecrash Guild Sealed, -/6/RTR, GTC GTC GTC Meta-Choose(S(GTC Prerelease Orzhov Guild)Orzhov guild;S(GTC Prerelease Boros Guild)Boros guild;S(GTC Prerelease Dimir Guild)Dimir guild;S(GTC Prerelease Simic Guild)Simic guild;S(GTC Prerelease Gruul Guild)Gruul guild)Guild
|
||||
Dragon's Maze Race, -/5/RTR, DGM DGM DGM Meta-Choose(All(S(RTR Azorius Guild);Random(S(GTC Orzhov Guild);S(GTC Boros Guild);S(GTC Simic Guild);S(GTC Dimir Guild)))Azorius guild and a secret ally;All(S(RTR Selesnya Guild);Random(S(GTC Gruul Guild);S(GTC Orzhov Guild);S(GTC Boros Guild);S(GTC Simic Guild)))Selesnya guild and a secret ally;All(S(RTR Izzet Guild);Random(S(GTC Gruul Guild);S(GTC Dimir Guild);S(GTC Simic Guild);S(GTC Boros Guild)))Izzet guild and a secret ally;All(S(RTR Rakdos Guild);Random(S(GTC Orzhov Guild);S(GTC Dimir Guild);S(GTC Gruul Guild);S(GTC Boros Guild)))Rakdos guild and a secret ally;All(S(RTR Golgari Guild);Random(S(GTC Orzhov Guild);S(GTC Dimir Guild);S(GTC Simic Guild);S(GTC Gruul Guild)))Golgari guild and a secret ally;All(S(GTC Orzhov Guild);Random(S(RTR Azorius Guild);S(RTR Golgari Guild);S(RTR Selesnya Guild);S(RTR Rakdos Guild)))Orzhov guild and a secret ally;All(S(GTC Boros Guild);Random(S(RTR Azorius Guild);S(RTR Rakdos Guild);S(RTR Selesnya Guild);S(RTR Izzet Guild)))Boros guild and a secret ally;All(S(GTC Dimir Guild);Random(S(RTR Azorius Guild);S(RTR Izzet Guild);S(RTR Rakdos Guild);S(RTR Golgari Guild)))Dimir guild and a secret ally;All(S(GTC Simic Guild);Random(S(RTR Azorius Guild);S(RTR Golgari Guild);S(RTR Izzet Guild);S(RTR Selesnya Guild)))Simic guild and a secret ally;All(S(GTC Gruul Guild);Random(S(RTR Golgari Guild);S(RTR Izzet Guild);S(RTR Rakdos Guild);S(RTR Selesnya Guild)))Gruul guild and a secret ally)Guild
|
||||
@@ -1,24 +1,23 @@
|
||||
#Boosters for prerelease events of RTR
|
||||
GTC Prerelease Boros Guild: 10 Common:printsheet("GTC Boros Guild"), 3 Uncommon:printsheet("GTC Boros Guild"), 1 RareMythic:printsheet("GTC Boros Guild"), 2 promo("Boros Guildgate|GTC","Foundry Champion|GTC")
|
||||
GTC Prerelease Dimir Guild: 10 Common:printsheet("GTC Dimir Guild"), 3 Uncommon:printsheet("GTC Dimir Guild"), 1 RareMythic:printsheet("GTC Dimir Guild"), 2 promo("Dimir Guildgate|GTC","Consuming Aberration|GTC")
|
||||
GTC Prerelease Gruul Guild: 10 Common:printsheet("GTC Gruul Guild"), 3 Uncommon:printsheet("GTC Gruul Guild"), 1 RareMythic:printsheet("GTC Gruul Guild"), 2 promo("Gruul Guildgate|GTC","Rubblehulk|GTC")
|
||||
GTC Prerelease Orzhov Guild: 10 Common:printsheet("GTC Orzhov Guild"), 3 Uncommon:printsheet("GTC Orzhov Guild"), 1 RareMythic:printsheet("GTC Orzhov Guild"), 2 promo("Orzhov Guildgate|GTC","Treasury Thrull|GTC")
|
||||
GTC Prerelease Simic Guild: 10 Common:printsheet("GTC Simic Guild"), 3 Uncommon:printsheet("GTC Simic Guild"), 1 RareMythic:printsheet("GTC Simic Guild"), 2 promo("Simic Guildgate|GTC","Fathom Mage|GTC")
|
||||
#Prerelease boosters
|
||||
RTR Prerelease Azorius Guild: 10 Common:fromSheet("RTR Azorius Guild"), 3 Uncommon:fromSheet("RTR Azorius Guild"), 1 RareMythic:fromSheet("RTR Azorius Guild"), 2 promo("Azorius GuildGate|RTR","Archon of the Triumvirate|RTR")
|
||||
GTC Prerelease Orzhov Guild: 10 Common:fromSheet("GTC Orzhov Guild"), 3 Uncommon:fromSheet("GTC Orzhov Guild"), 1 RareMythic:fromSheet("GTC Orzhov Guild"), 2 promo("Orzhov GuildGate|GTC","Treasury Thrull|GTC")
|
||||
GTC Prerelease Boros Guild: 10 Common:fromSheet("GTC Boros Guild"), 3 Uncommon:fromSheet("GTC Boros Guild"), 1 RareMythic:fromSheet("GTC Boros Guild"), 2 promo("Boros GuildGate|GTC","Foundry Champion|GTC")
|
||||
RTR Prerelease Selesnya Guild: 10 Common:fromSheet("RTR Selesnya Guild"), 3 Uncommon:fromSheet("RTR Selesnya Guild"), 1 RareMythic:fromSheet("RTR Selesnya Guild"), 2 promo("Selesnya GuildGate|RTR","Grove of the Guardian|RTR")
|
||||
GTC Prerelease Dimir Guild: 10 Common:fromSheet("GTC Dimir Guild"), 3 Uncommon:fromSheet("GTC Dimir Guild"), 1 RareMythic:fromSheet("GTC Dimir Guild"), 2 promo("Dimir GuildGate|GTC","Consuming Aberration|GTC")
|
||||
RTR Prerelease Izzet Guild: 10 Common:fromSheet("RTR Izzet Guild"), 3 Uncommon:fromSheet("RTR Izzet Guild"), 1 RareMythic:fromSheet("RTR Izzet Guild"), 2 promo("Izzet GuildGate|RTR","Hypersonic Dragon|RTR")
|
||||
GTC Prerelease Simic Guild: 10 Common:fromSheet("GTC Simic Guild"), 3 Uncommon:fromSheet("GTC Simic Guild"), 1 RareMythic:fromSheet("GTC Simic Guild"), 2 promo("Simic GuildGate|GTC","Fathom Mage|GTC")
|
||||
RTR Prerelease Rakdos Guild: 10 Common:fromSheet("RTR Rakdos Guild"), 3 Uncommon:fromSheet("RTR Rakdos Guild"), 1 RareMythic:fromSheet("RTR Rakdos Guild"), 2 promo("Rakdos GuildGate|RTR","Carnival Hellsteed|RTR")
|
||||
RTR Prerelease Golgari Guild: 10 Common:fromSheet("RTR Golgari Guild"), 3 Uncommon:fromSheet("RTR Golgari Guild"), 1 RareMythic:fromSheet("RTR Golgari Guild"), 2 promo("Golgari GuildGate|RTR","Corpsejack Menace|RTR")
|
||||
GTC Prerelease Gruul Guild: 10 Common:fromSheet("GTC Gruul Guild"), 3 Uncommon:fromSheet("GTC Gruul Guild"), 1 RareMythic:fromSheet("GTC Gruul Guild"), 2 promo("Gruul GuildGate|GTC","Rubblehulk|GTC")
|
||||
|
||||
RTR Prerelease Azorius Guild: 10 Common:printsheet("RTR Azorius Guild"), 3 Uncommon:printsheet("RTR Azorius Guild"), 1 RareMythic:printsheet("RTR Azorius Guild"), 2 promo("Azorius Guildgate|RTR","Archon of the Triumvirate|RTR")
|
||||
RTR Prerelease Golgari Guild: 10 Common:printsheet("RTR Golgari Guild"), 3 Uncommon:printsheet("RTR Golgari Guild"), 1 RareMythic:printsheet("RTR Golgari Guild"), 2 promo("Golgari Guildgate|RTR","Corpsejack Menace|RTR")
|
||||
RTR Prerelease Izzet Guild: 10 Common:printsheet("RTR Izzet Guild"), 3 Uncommon:printsheet("RTR Izzet Guild"), 1 RareMythic:printsheet("RTR Izzet Guild"), 2 promo("Izzet Guildgate|RTR","Hypersonic Dragon|RTR")
|
||||
RTR Prerelease Rakdos Guild: 10 Common:printsheet("RTR Rakdos Guild"), 3 Uncommon:printsheet("RTR Rakdos Guild"), 1 RareMythic:printsheet("RTR Rakdos Guild"), 2 promo("Rakdos Guildgate|RTR","Carnival Hellsteed|RTR")
|
||||
RTR Prerelease Selesnya Guild: 10 Common:printsheet("RTR Selesnya Guild"), 3 Uncommon:printsheet("RTR Selesnya Guild"), 1 RareMythic:printsheet("RTR Selesnya Guild"), 2 promo("Selesnya Guildgate|RTR","Grove of the Guardian|RTR")
|
||||
|
||||
#Same boosters without a promo (used for DGM maze race)
|
||||
GTC Boros Guild: 10 Common:printsheet("GTC Boros Guild"), 3 Uncommon:printsheet("GTC Boros Guild"), 1 RareMythic:printsheet("GTC Boros Guild"), 1 promo("Boros Guildgate|GTC")
|
||||
GTC Dimir Guild: 10 Common:printsheet("GTC Dimir Guild"), 3 Uncommon:printsheet("GTC Dimir Guild"), 1 RareMythic:printsheet("GTC Dimir Guild"), 1 promo("Dimir Guildgate|GTC")
|
||||
GTC Gruul Guild: 10 Common:printsheet("GTC Gruul Guild"), 3 Uncommon:printsheet("GTC Gruul Guild"), 1 RareMythic:printsheet("GTC Gruul Guild"), 1 promo("Gruul Guildgate|GTC")
|
||||
GTC Orzhov Guild: 10 Common:printsheet("GTC Orzhov Guild"), 3 Uncommon:printsheet("GTC Orzhov Guild"), 1 RareMythic:printsheet("GTC Orzhov Guild"), 1 promo("Orzhov Guildgate|GTC")
|
||||
GTC Simic Guild: 10 Common:printsheet("GTC Simic Guild"), 3 Uncommon:printsheet("GTC Simic Guild"), 1 RareMythic:printsheet("GTC Simic Guild"), 1 promo("Simic Guildgate|GTC")
|
||||
RTR Azorius Guild: 10 Common:printsheet("RTR Azorius Guild"), 3 Uncommon:printsheet("RTR Azorius Guild"), 1 RareMythic:printsheet("RTR Azorius Guild"), 1 promo("Azorius Guildgate|RTR")
|
||||
RTR Golgari Guild: 10 Common:printsheet("RTR Golgari Guild"), 3 Uncommon:printsheet("RTR Golgari Guild"), 1 RareMythic:printsheet("RTR Golgari Guild"), 1 promo("Golgari Guildgate|RTR")
|
||||
RTR Izzet Guild: 10 Common:printsheet("RTR Izzet Guild"), 3 Uncommon:printsheet("RTR Izzet Guild"), 1 RareMythic:printsheet("RTR Izzet Guild"), 1 promo("Izzet Guildgate|RTR")
|
||||
RTR Rakdos Guild: 10 Common:printsheet("RTR Rakdos Guild"), 3 Uncommon:printsheet("RTR Rakdos Guild"), 1 RareMythic:printsheet("RTR Rakdos Guild"), 1 promo("Rakdos Guildgate|RTR")
|
||||
RTR Selesnya Guild: 10 Common:printsheet("RTR Selesnya Guild"), 3 Uncommon:printsheet("RTR Selesnya Guild"), 1 RareMythic:printsheet("RTR Selesnya Guild"), 1 promo("Selesnya Guildgate|RTR")
|
||||
#Boosters for DGM event
|
||||
RTR Azorius Guild: 10 Common:fromSheet("RTR Azorius Guild"), 3 Uncommon:fromSheet("RTR Azorius Guild"), 1 RareMythic:fromSheet("RTR Azorius Guild"), 1 promo("Azorius GuildGate|RTR")
|
||||
GTC Orzhov Guild: 10 Common:fromSheet("GTC Orzhov Guild"), 3 Uncommon:fromSheet("GTC Orzhov Guild"), 1 RareMythic:fromSheet("GTC Orzhov Guild"), 1 promo("Orzhov GuildGate|GTC")
|
||||
GTC Boros Guild: 10 Common:fromSheet("GTC Boros Guild"), 3 Uncommon:fromSheet("GTC Boros Guild"), 1 RareMythic:fromSheet("GTC Boros Guild"), 1 promo("Boros GuildGate|GTC")
|
||||
RTR Selesnya Guild: 10 Common:fromSheet("RTR Selesnya Guild"), 3 Uncommon:fromSheet("RTR Selesnya Guild"), 1 RareMythic:fromSheet("RTR Selesnya Guild"), 1 promo("Selesnya GuildGate|RTR")
|
||||
GTC Dimir Guild: 10 Common:fromSheet("GTC Dimir Guild"), 3 Uncommon:fromSheet("GTC Dimir Guild"), 1 RareMythic:fromSheet("GTC Dimir Guild"), 1 promo("Dimir GuildGate|GTC")
|
||||
RTR Izzet Guild: 10 Common:fromSheet("RTR Izzet Guild"), 3 Uncommon:fromSheet("RTR Izzet Guild"), 1 RareMythic:fromSheet("RTR Izzet Guild"), 1 promo("Izzet GuildGate|RTR")
|
||||
GTC Simic Guild: 10 Common:fromSheet("GTC Simic Guild"), 3 Uncommon:fromSheet("GTC Simic Guild"), 1 RareMythic:fromSheet("GTC Simic Guild"), 1 promo("Simic GuildGate|GTC")
|
||||
RTR Rakdos Guild: 10 Common:fromSheet("RTR Rakdos Guild"), 3 Uncommon:fromSheet("RTR Rakdos Guild"), 1 RareMythic:fromSheet("RTR Rakdos Guild"), 1 promo("Rakdos GuildGate|RTR")
|
||||
RTR Golgari Guild: 10 Common:fromSheet("RTR Golgari Guild"), 3 Uncommon:fromSheet("RTR Golgari Guild"), 1 RareMythic:fromSheet("RTR Golgari Guild"), 1 promo("Golgari GuildGate|RTR")
|
||||
GTC Gruul Guild: 10 Common:fromSheet("GTC Gruul Guild"), 3 Uncommon:fromSheet("GTC Gruul Guild"), 1 RareMythic:fromSheet("GTC Gruul Guild"), 1 promo("Gruul GuildGate|GTC")
|
||||
|
||||
@@ -20,9 +20,9 @@ CFX: 3 covers, 10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand ALA
|
||||
CHK: 5 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
CHR: 1 covers, 9 Common, 3 UncommonRare
|
||||
CSP: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
DGM: 3 covers, 10 Common:!land, 3 Uncommon, 1 RareMythic:!land, 1 Custom("Dragon's Maze Lands")
|
||||
DGM: 3 covers, 10 Common:!land, 3 Uncommon, 1 RareMythic:!land, 1 fromSheet("DGM Lands")
|
||||
DIS: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
DKA: 3 covers, 9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 Any:dfc, 1 BasicLand ISD
|
||||
DKA: 3 covers, 9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand ISD
|
||||
DRK: 1 covers, 6 Common, 2 UncommonRare
|
||||
DST: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
EVE: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
@@ -34,7 +34,7 @@ GTC: 5 covers, 10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand RTR
|
||||
HML: 1 covers, 6 Common, 2 UncommonRare
|
||||
ICE: 5 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
INV: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
ISD: 5 covers, 9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 Any:dfc, 1 BasicLand
|
||||
ISD: 5 covers, 9 Common:!dfc, 3 Uncommon:!dfc, 1 RareMythic:!dfc, 1 dfc, 1 BasicLand
|
||||
JUD: 1 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
LEA: 1 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
LEB: 1 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
[metadata]
|
||||
Name=GtcGuildBoros
|
||||
[Main]
|
||||
1 Act of Treason|GTC
|
||||
1 Aerial Maneuver|GTC
|
||||
1 Angelic Edict|GTC
|
||||
1 Arrows of Justice|GTC
|
||||
1 Assault Griffin|GTC
|
||||
1 Assemble the Legion|GTC
|
||||
1 Aurelia, the Warleader|GTC
|
||||
1 Bomber Corps|GTC
|
||||
1 Boros Charm|GTC
|
||||
1 Boros Elite|GTC
|
||||
1 Boros Keyrune|GTC
|
||||
1 Boros Reckoner|GTC
|
||||
1 Cinder Elemental|GTC
|
||||
1 Court Street Denizen|GTC
|
||||
1 Crackling Perimeter|GTC
|
||||
1 Daring Skyjek|GTC
|
||||
1 Debtor's Pulpit|GTC
|
||||
1 Ember Beast|GTC
|
||||
1 Firefist Striker|GTC
|
||||
1 Firemane Avenger|GTC
|
||||
1 Fortress Cyclops|GTC
|
||||
1 Foundry Street Denizen|GTC
|
||||
1 Frontline Medic|GTC
|
||||
1 Furious Resistance|GTC
|
||||
1 Guardian of the Gateless|GTC
|
||||
1 Guildscorn Ward|GTC
|
||||
1 Hellraiser Goblin|GTC
|
||||
1 Homing Lightning|GTC
|
||||
1 Knight Watch|GTC
|
||||
1 Legion Loyalist|GTC
|
||||
1 Madcap Skills|GTC
|
||||
1 Mark for Death|GTC
|
||||
1 Martial Glory|GTC
|
||||
1 Massive Raid|GTC
|
||||
1 Molten Primordial|GTC
|
||||
1 Mugging|GTC
|
||||
1 Murder Investigation|GTC
|
||||
1 Nav Squad Commandos|GTC
|
||||
1 Ordruun Veteran|GTC
|
||||
1 Righteous Charge|GTC
|
||||
1 Ripscale Predator|GTC
|
||||
1 Shattering Blow|GTC
|
||||
1 Shielded Passage|GTC
|
||||
1 Skullcrack|GTC
|
||||
1 Skyknight Legionnaire|GTC
|
||||
1 Smite|GTC
|
||||
1 Spark Trooper|GTC
|
||||
1 Structural Collapse|GTC
|
||||
1 Sunhome Guildmage|GTC
|
||||
1 Tin Street Market|GTC
|
||||
1 Towering Thunderfist|GTC
|
||||
1 Truefire Paladin|GTC
|
||||
1 Urbis Protector|GTC
|
||||
1 Warmind Infantry|GTC
|
||||
1 Wojek Halberdiers|GTC
|
||||
1 Zarichi Tiger|GTC
|
||||
@@ -1,59 +0,0 @@
|
||||
[metadata]
|
||||
Name=GtcGuildDimir
|
||||
[Main]
|
||||
1 AEtherize|GTC
|
||||
1 Agoraphobia|GTC
|
||||
1 Balustrade Spy|GTC
|
||||
1 Call of the Nightwing|GTC
|
||||
1 Coerced Confession|GTC
|
||||
1 Contaminated Ground|GTC
|
||||
1 Corpse Blockade|GTC
|
||||
1 Death's Approach|GTC
|
||||
1 Deathcult Rogue|GTC
|
||||
1 Dimir Charm|GTC
|
||||
1 Dimir Keyrune|GTC
|
||||
1 Dinrova Horror|GTC
|
||||
1 Duskmantle Guildmage|GTC
|
||||
1 Dying Wish|GTC
|
||||
1 Gateway Shade|GTC
|
||||
1 Gridlock|GTC
|
||||
1 Grisly Spectacle|GTC
|
||||
1 Gutter Skulk|GTC
|
||||
1 Hands of Binding|GTC
|
||||
1 Horror of the Dim|GTC
|
||||
1 Illness in the Ranks|GTC
|
||||
1 Incursion Specialist|GTC
|
||||
1 Keymaster Rogue|GTC
|
||||
1 Killing Glare|GTC
|
||||
1 Last Thoughts|GTC
|
||||
1 Lazav, Dimir Mastermind|GTC
|
||||
1 Leyline Phantom|GTC
|
||||
1 Mental Vapors|GTC
|
||||
1 Metropolis Sprite|GTC
|
||||
1 Midnight Recovery|GTC
|
||||
1 Mind Grind|GTC
|
||||
1 Mindeye Drake|GTC
|
||||
1 Mortus Strider|GTC
|
||||
1 Nightveil Specter|GTC
|
||||
1 Paranoid Delusions|GTC
|
||||
1 Psychic Strike|GTC
|
||||
1 Rapid Hybridization|GTC
|
||||
1 Sage's Row Denizen|GTC
|
||||
1 Sapphire Drake|GTC
|
||||
1 Scatter Arc|GTC
|
||||
1 Sepulchral Primordial|GTC
|
||||
1 Shadow Alley Denizen|GTC
|
||||
1 Shadow Slice|GTC
|
||||
1 Skygames|GTC
|
||||
1 Slate Street Ruffian|GTC
|
||||
1 Smog Elemental|GTC
|
||||
1 Soul Ransom|GTC
|
||||
1 Spell Rupture|GTC
|
||||
1 Stolen Identity|GTC
|
||||
1 Totally Lost|GTC
|
||||
1 Undercity Informer|GTC
|
||||
1 Undercity Plague|GTC
|
||||
1 Voidwalk|GTC
|
||||
1 Way of the Thief|GTC
|
||||
1 Whispering Madness|GTC
|
||||
1 Wight of Precinct Six|GTC
|
||||
@@ -1,60 +0,0 @@
|
||||
[metadata]
|
||||
Name=GtcGuildGruul
|
||||
[Main]
|
||||
1 Act of Treason|GTC
|
||||
1 Alpha Authority|GTC
|
||||
1 Borborygmos Enraged|GTC
|
||||
1 Burning-Tree Emissary|GTC
|
||||
1 Burst of Strength|GTC
|
||||
1 Cinder Elemental|GTC
|
||||
1 Clan Defiance|GTC
|
||||
1 Crackling Perimeter|GTC
|
||||
1 Crowned Ceratok|GTC
|
||||
1 Disciple of the Old Ways|GTC
|
||||
1 Ember Beast|GTC
|
||||
1 Forced Adaptation|GTC
|
||||
1 Foundry Street Denizen|GTC
|
||||
1 Frenzied Tilling|GTC
|
||||
1 Furious Resistance|GTC
|
||||
1 Ghor-Clan Rampager|GTC
|
||||
1 Greenside Watcher|GTC
|
||||
1 Ground Assault|GTC
|
||||
1 Gruul Charm|GTC
|
||||
1 Gruul Keyrune|GTC
|
||||
1 Gruul Ragebeast|GTC
|
||||
1 Hellraiser Goblin|GTC
|
||||
1 Hindervines|GTC
|
||||
1 Homing Lightning|GTC
|
||||
1 Ivy Lane Denizen|GTC
|
||||
1 Madcap Skills|GTC
|
||||
1 Mark for Death|GTC
|
||||
1 Massive Raid|GTC
|
||||
1 Miming Slime|GTC
|
||||
1 Mugging|GTC
|
||||
1 Naturalize|GTC
|
||||
1 Pit Fight|GTC
|
||||
1 Primal Visitation|GTC
|
||||
1 Ripscale Predator|GTC
|
||||
1 Rubblebelt Raiders|GTC
|
||||
1 Ruination Wurm|GTC
|
||||
1 Rust Scarab|GTC
|
||||
1 Scab-Clan Charger|GTC
|
||||
1 Scorchwalker|GTC
|
||||
1 Serene Remembrance|GTC
|
||||
1 Signal the Clans|GTC
|
||||
1 Skarrg Goliath|GTC
|
||||
1 Skarrg Guildmage|GTC
|
||||
1 Skinbrand Goblin|GTC
|
||||
1 Skullcrack|GTC
|
||||
1 Slaughterhorn|GTC
|
||||
1 Spire Tracer|GTC
|
||||
1 Structural Collapse|GTC
|
||||
1 Sylvan Primordial|GTC
|
||||
1 Tin Street Market|GTC
|
||||
1 Tower Defense|GTC
|
||||
1 Verdant Haven|GTC
|
||||
1 Viashino Shanktail|GTC
|
||||
1 Wasteland Viper|GTC
|
||||
1 Wildwood Rebirth|GTC
|
||||
1 Wrecking Ogre|GTC
|
||||
1 Zhur-Taa Swine|GTC
|
||||
@@ -1,58 +0,0 @@
|
||||
[metadata]
|
||||
Name=GtcGuildOrzhov
|
||||
[Main]
|
||||
1 Aerial Maneuver|GTC
|
||||
1 Alms Beast|GTC
|
||||
1 Angelic Edict|GTC
|
||||
1 Assault Griffin|GTC
|
||||
1 Balustrade Spy|GTC
|
||||
1 Basilica Guards|GTC
|
||||
1 Basilica Screecher|GTC
|
||||
1 Beckon Apparition|GTC
|
||||
1 Blind Obedience|GTC
|
||||
1 Cartel Aristocrat|GTC
|
||||
1 Contaminated Ground|GTC
|
||||
1 Corpse Blockade|GTC
|
||||
1 Court Street Denizen|GTC
|
||||
1 Crypt Ghast|GTC
|
||||
1 Death's Approach|GTC
|
||||
1 Debtor's Pulpit|GTC
|
||||
1 Dutiful Thrull|GTC
|
||||
1 Dying Wish|GTC
|
||||
1 Executioner's Swing|GTC
|
||||
1 Gateway Shade|GTC
|
||||
1 Gift of Orzhova|GTC
|
||||
1 Grisly Spectacle|GTC
|
||||
1 Guardian of the Gateless|GTC
|
||||
1 Guildscorn Ward|GTC
|
||||
1 Gutter Skulk|GTC
|
||||
1 High Priest of Penance|GTC
|
||||
1 Illness in the Ranks|GTC
|
||||
1 Immortal Servitude|GTC
|
||||
1 Killing Glare|GTC
|
||||
1 Kingpin's Pet|GTC
|
||||
1 Knight of Obligation|GTC
|
||||
1 Knight Watch|GTC
|
||||
1 Luminate Primordial|GTC
|
||||
1 Merciless Eviction|GTC
|
||||
1 Murder Investigation|GTC
|
||||
1 Obzedat, Ghost Council|GTC
|
||||
1 One Thousand Lashes|GTC
|
||||
1 Orzhov Charm|GTC
|
||||
1 Orzhov Keyrune|GTC
|
||||
1 Purge the Profane|GTC
|
||||
1 Righteous Charge|GTC
|
||||
1 Shadow Alley Denizen|GTC
|
||||
1 Shielded Passage|GTC
|
||||
1 Slate Street Ruffian|GTC
|
||||
1 Smite|GTC
|
||||
1 Smog Elemental|GTC
|
||||
1 Syndic of Tithes|GTC
|
||||
1 Syndicate Enforcer|GTC
|
||||
1 Thrull Parasite|GTC
|
||||
1 Undercity Informer|GTC
|
||||
1 Urbis Protector|GTC
|
||||
1 Vizkopa Confessor|GTC
|
||||
1 Vizkopa Guildmage|GTC
|
||||
1 Wight of Precinct Six|GTC
|
||||
1 Zarichi Tiger|GTC
|
||||
@@ -1,60 +0,0 @@
|
||||
[metadata]
|
||||
Name=GtcGuildSimic
|
||||
[Main]
|
||||
1 Adaptive Snapjaw|GTC
|
||||
1 AEtherize|GTC
|
||||
1 Agoraphobia|GTC
|
||||
1 Alpha Authority|GTC
|
||||
1 Biomass Mutation|GTC
|
||||
1 Bioshift|GTC
|
||||
1 Biovisionary|GTC
|
||||
1 Burst of Strength|GTC
|
||||
1 Clinging Anemones|GTC
|
||||
1 Cloudfin Raptor|GTC
|
||||
1 Crocanura|GTC
|
||||
1 Crowned Ceratok|GTC
|
||||
1 Diluvian Primordial|GTC
|
||||
1 Drakewing Krasis|GTC
|
||||
1 Elusive Krasis|GTC
|
||||
1 Experiment One|GTC
|
||||
1 Forced Adaptation|GTC
|
||||
1 Frilled Oculus|GTC
|
||||
1 Greenside Watcher|GTC
|
||||
1 Gridlock|GTC
|
||||
1 Gyre Sage|GTC
|
||||
1 Hindervines|GTC
|
||||
1 Hydroform|GTC
|
||||
1 Incursion Specialist|GTC
|
||||
1 Ivy Lane Denizen|GTC
|
||||
1 Keymaster Rogue|GTC
|
||||
1 Leyline Phantom|GTC
|
||||
1 Merfolk of the Depths|GTC
|
||||
1 Metropolis Sprite|GTC
|
||||
1 Miming Slime|GTC
|
||||
1 Mindeye Drake|GTC
|
||||
1 Mystic Genesis|GTC
|
||||
1 Naturalize|GTC
|
||||
1 Nimbus Swimmer|GTC
|
||||
1 Prime Speaker Zegana|GTC
|
||||
1 Rapid Hybridization|GTC
|
||||
1 Rust Scarab|GTC
|
||||
1 Sage's Row Denizen|GTC
|
||||
1 Sapphire Drake|GTC
|
||||
1 Scatter Arc|GTC
|
||||
1 Serene Remembrance|GTC
|
||||
1 Shambleshark|GTC
|
||||
1 Simic Charm|GTC
|
||||
1 Simic Fluxmage|GTC
|
||||
1 Simic Keyrune|GTC
|
||||
1 Simic Manipulator|GTC
|
||||
1 Skygames|GTC
|
||||
1 Spell Rupture|GTC
|
||||
1 Spire Tracer|GTC
|
||||
1 Totally Lost|GTC
|
||||
1 Tower Defense|GTC
|
||||
1 Unexpected Results|GTC
|
||||
1 Urban Evolution|GTC
|
||||
1 Verdant Haven|GTC
|
||||
1 Way of the Thief|GTC
|
||||
1 Wildwood Rebirth|GTC
|
||||
1 Zameck Guildmage|GTC
|
||||
@@ -1,71 +0,0 @@
|
||||
[metadata]
|
||||
Name=RtRGuildAzorius
|
||||
[main]
|
||||
1 Aquus Steed|RTR
|
||||
1 Armory Guard|RTR
|
||||
1 Arrest|RTR
|
||||
1 Avenging Arrow|RTR
|
||||
1 Azor's Elocutors|RTR
|
||||
1 Azorius Arrester|RTR
|
||||
1 Azorius Charm|RTR
|
||||
1 Azorius Justiciar|RTR
|
||||
1 Azorius Keyrune|RTR
|
||||
1 Bazaar Krovod|RTR
|
||||
1 Cancel|RTR
|
||||
1 Chronic Flooding|RTR
|
||||
1 Civic Saber|RTR
|
||||
1 Codex Shredder|RTR
|
||||
1 Concordia Pegasus|RTR
|
||||
1 Conjured Currency|RTR
|
||||
1 Crosstown Courier|RTR
|
||||
1 Detention Sphere|RTR
|
||||
1 Dispel|RTR
|
||||
1 Doorkeeper|RTR
|
||||
1 Dramatic Rescue|RTR
|
||||
1 Ethereal Armor|RTR
|
||||
1 Faerie Impostor|RTR
|
||||
1 Fall of the Gavel|RTR
|
||||
1 Fencing Ace|RTR
|
||||
1 Hallowed Fountain|RTR
|
||||
1 Hover Barrier|RTR
|
||||
1 Hussar Patrol|RTR
|
||||
1 Inaction Injunction|RTR
|
||||
1 Inspiration|RTR
|
||||
1 Isperia's Skywatch|RTR
|
||||
1 Isperia, Supreme Judge|RTR
|
||||
1 Judge's Familiar|RTR
|
||||
1 Keening Apparition|RTR
|
||||
1 Knightly Valor|RTR
|
||||
1 Lyev Skyknight|RTR
|
||||
1 Martial Law|RTR
|
||||
1 New Prahv Guildmage|RTR
|
||||
1 Palisade Giant|RTR
|
||||
1 Paralyzing Grasp|RTR
|
||||
1 Phantom General|RTR
|
||||
1 Precinct Captain|RTR
|
||||
1 Psychic Spiral|RTR
|
||||
1 Rest in Peace|RTR
|
||||
1 Righteous Authority|RTR
|
||||
1 Runewing|RTR
|
||||
1 Search the City|RTR
|
||||
1 Search Warrant|RTR
|
||||
1 Security Blockade|RTR
|
||||
1 Seller of Songbirds|RTR
|
||||
1 Skyline Predator|RTR
|
||||
1 Skymark Roc|RTR
|
||||
1 Soul Tithe|RTR
|
||||
1 Soulsworn Spirit|RTR
|
||||
1 Sphere of Safety|RTR
|
||||
1 Sphinx of the Chimes|RTR
|
||||
1 Stealer of Secrets|RTR
|
||||
1 Street Sweeper|RTR
|
||||
1 Sunspire Griffin|RTR
|
||||
1 Supreme Verdict|RTR
|
||||
1 Swift Justice|RTR
|
||||
1 Syncopate|RTR
|
||||
1 Tablet of the Guilds|RTR
|
||||
1 Tower Drake|RTR
|
||||
1 Trained Caracal|RTR
|
||||
1 Vassal Soul|RTR
|
||||
1 Voidwielder|RTR
|
||||
[sideboard]
|
||||
@@ -1,73 +0,0 @@
|
||||
[metadata]
|
||||
Name=RtRGuildGolgari
|
||||
[main]
|
||||
1 Abrupt Decay|RTR
|
||||
1 Aerial Predation|RTR
|
||||
1 Archweaver|RTR
|
||||
1 Assassin's Strike|RTR
|
||||
1 Axebane Guardian|RTR
|
||||
1 Axebane Stag|RTR
|
||||
1 Brushstrider|RTR
|
||||
1 Catacomb Slug|RTR
|
||||
1 Centaur's Herald|RTR
|
||||
1 Chorus of Might|RTR
|
||||
1 Civic Saber|RTR
|
||||
1 Codex Shredder|RTR
|
||||
1 Cremate|RTR
|
||||
1 Daggerdrome Imp|RTR
|
||||
1 Dark Revenant|RTR
|
||||
1 Deadbridge Goliath|RTR
|
||||
1 Death's Presence|RTR
|
||||
1 Deathrite Shaman|RTR
|
||||
1 Desecration Demon|RTR
|
||||
1 Destroy the Evidence|RTR
|
||||
1 Drainpipe Vermin|RTR
|
||||
1 Dreg Mangler|RTR
|
||||
1 Drudge Beetle|RTR
|
||||
1 Gatecreeper Vine|RTR
|
||||
1 Giant Growth|RTR
|
||||
1 Gobbling Ooze|RTR
|
||||
1 Golgari Charm|RTR
|
||||
1 Golgari Decoy|RTR
|
||||
1 Golgari Keyrune|RTR
|
||||
1 Golgari Longlegs|RTR
|
||||
1 Grave Betrayal|RTR
|
||||
1 Grisly Salvage|RTR
|
||||
1 Jarad's Orders|RTR
|
||||
1 Jarad, Golgari Lich Lord|RTR
|
||||
1 Korozda Guildmage|RTR
|
||||
1 Korozda Monitor|RTR
|
||||
1 Launch Party|RTR
|
||||
1 Lotleth Troll|RTR
|
||||
1 Mana Bloom|RTR
|
||||
1 Mind Rot|RTR
|
||||
1 Oak Street Innkeeper|RTR
|
||||
1 Ogre Jailbreaker|RTR
|
||||
1 Overgrown Tomb|RTR
|
||||
1 Pack Rat|RTR
|
||||
1 Perilous Shadow|RTR
|
||||
1 Rites of Reaping|RTR
|
||||
1 Rubbleback Rhino|RTR
|
||||
1 Savage Surge|RTR
|
||||
1 Seek the Horizon|RTR
|
||||
1 Sewer Shambler|RTR
|
||||
1 Shrieking Affliction|RTR
|
||||
1 Slime Molding|RTR
|
||||
1 Slitherhead|RTR
|
||||
1 Sluiceway Scorpion|RTR
|
||||
1 Slum Reaper|RTR
|
||||
1 Stab Wound|RTR
|
||||
1 Stonefare Crocodile|RTR
|
||||
1 Street Sweeper|RTR
|
||||
1 Tablet of the Guilds|RTR
|
||||
1 Tavern Swindler|RTR
|
||||
1 Terrus Wurm|RTR
|
||||
1 Towering Indrik|RTR
|
||||
1 Treasured Find|RTR
|
||||
1 Trestle Troll|RTR
|
||||
1 Ultimate Price|RTR
|
||||
1 Underworld Connections|RTR
|
||||
1 Urban Burgeoning|RTR
|
||||
1 Wild Beastmaster|RTR
|
||||
1 Zanikev Locust|RTR
|
||||
[sideboard]
|
||||
@@ -1,71 +0,0 @@
|
||||
[metadata]
|
||||
Name=RtRGuildIzzet
|
||||
[main]
|
||||
1 Annihilating Fire|RTR
|
||||
1 Aquus Steed|RTR
|
||||
1 Ash Zealot|RTR
|
||||
1 Batterhorn|RTR
|
||||
1 Bellows Lizard|RTR
|
||||
1 Blistercoil Weird|RTR
|
||||
1 Blustersquall|RTR
|
||||
1 Cancel|RTR
|
||||
1 Chemister's Trick|RTR
|
||||
1 Chronic Flooding|RTR
|
||||
1 Civic Saber|RTR
|
||||
1 Cobblebrute|RTR
|
||||
1 Codex Shredder|RTR
|
||||
1 Conjured Currency|RTR
|
||||
1 Counterflux|RTR
|
||||
1 Crosstown Courier|RTR
|
||||
1 Cyclonic Rift|RTR
|
||||
1 Dispel|RTR
|
||||
1 Doorkeeper|RTR
|
||||
1 Downsize|RTR
|
||||
1 Dynacharge|RTR
|
||||
1 Electrickery|RTR
|
||||
1 Essence Backlash|RTR
|
||||
1 Explosive Impact|RTR
|
||||
1 Faerie Impostor|RTR
|
||||
1 Firemind's Foresight|RTR
|
||||
1 Frostburn Weird|RTR
|
||||
1 Goblin Electromancer|RTR
|
||||
1 Goblin Rally|RTR
|
||||
1 Guild Feud|RTR
|
||||
1 Guttersnipe|RTR
|
||||
1 Hover Barrier|RTR
|
||||
1 Inspiration|RTR
|
||||
1 Izzet Charm|RTR
|
||||
1 Izzet Keyrune|RTR
|
||||
1 Izzet Staticaster|RTR
|
||||
1 Lobber Crew|RTR
|
||||
1 Mercurial Chemister|RTR
|
||||
1 Minotaur Aggressor|RTR
|
||||
1 Mizzium Mortars|RTR
|
||||
1 Mizzium Skin|RTR
|
||||
1 Niv-Mizzet, Dracogenius|RTR
|
||||
1 Nivix Guildmage|RTR
|
||||
1 Nivmagus Elemental|RTR
|
||||
1 Paralyzing Grasp|RTR
|
||||
1 Psychic Spiral|RTR
|
||||
1 Pursuit of Flight|RTR
|
||||
1 Pyroconvergence|RTR
|
||||
1 Racecourse Fury|RTR
|
||||
1 Runewing|RTR
|
||||
1 Search the City|RTR
|
||||
1 Skyline Predator|RTR
|
||||
1 Sphinx of the Chimes|RTR
|
||||
1 Stealer of Secrets|RTR
|
||||
1 Steam Vents|RTR
|
||||
1 Street Spasm|RTR
|
||||
1 Street Sweeper|RTR
|
||||
1 Survey the Wreckage|RTR
|
||||
1 Syncopate|RTR
|
||||
1 Tablet of the Guilds|RTR
|
||||
1 Teleportal|RTR
|
||||
1 Tenement Crasher|RTR
|
||||
1 Thoughtflare|RTR
|
||||
1 Traitorous Instinct|RTR
|
||||
1 Vandalblast|RTR
|
||||
1 Viashino Racketeer|RTR
|
||||
1 Voidwielder|RTR
|
||||
[sideboard]
|
||||
@@ -1,70 +0,0 @@
|
||||
[metadata]
|
||||
Name=RtRGuildRakdos
|
||||
[main]
|
||||
1 Annihilating Fire|RTR
|
||||
1 Ash Zealot|RTR
|
||||
1 Assassin's Strike|RTR
|
||||
1 Auger Spree|RTR
|
||||
1 Batterhorn|RTR
|
||||
1 Bellows Lizard|RTR
|
||||
1 Blood Crypt|RTR
|
||||
1 Bloodfray Giant|RTR
|
||||
1 Catacomb Slug|RTR
|
||||
1 Chaos Imps|RTR
|
||||
1 Civic Saber|RTR
|
||||
1 Cobblebrute|RTR
|
||||
1 Codex Shredder|RTR
|
||||
1 Cremate|RTR
|
||||
1 Cryptborn Horror|RTR
|
||||
1 Daggerdrome Imp|RTR
|
||||
1 Dark Revenant|RTR
|
||||
1 Dead Reveler|RTR
|
||||
1 Desecration Demon|RTR
|
||||
1 Destroy the Evidence|RTR
|
||||
1 Deviant Glee|RTR
|
||||
1 Drainpipe Vermin|RTR
|
||||
1 Dreadbore|RTR
|
||||
1 Explosive Impact|RTR
|
||||
1 Goblin Rally|RTR
|
||||
1 Gore-House Chainwalker|RTR
|
||||
1 Grave Betrayal|RTR
|
||||
1 Grim Roustabout|RTR
|
||||
1 Guild Feud|RTR
|
||||
1 Guttersnipe|RTR
|
||||
1 Havoc Festival|RTR
|
||||
1 Hellhole Flailer|RTR
|
||||
1 Launch Party|RTR
|
||||
1 Lobber Crew|RTR
|
||||
1 Mind Rot|RTR
|
||||
1 Minotaur Aggressor|RTR
|
||||
1 Ogre Jailbreaker|RTR
|
||||
1 Pack Rat|RTR
|
||||
1 Perilous Shadow|RTR
|
||||
1 Pyroconvergence|RTR
|
||||
1 Racecourse Fury|RTR
|
||||
1 Rakdos Cackler|RTR
|
||||
1 Rakdos Charm|RTR
|
||||
1 Rakdos Keyrune|RTR
|
||||
1 Rakdos Ragemutt|RTR
|
||||
1 Rakdos Ringleader|RTR
|
||||
1 Rakdos Shred-Freak|RTR
|
||||
1 Rakdos, Lord of Riots|RTR
|
||||
1 Rix Maadi Guildmage|RTR
|
||||
1 Shrieking Affliction|RTR
|
||||
1 Skull Rend|RTR
|
||||
1 Slaughter Games|RTR
|
||||
1 Slum Reaper|RTR
|
||||
1 Spawn of Rix Maadi|RTR
|
||||
1 Splatter Thug|RTR
|
||||
1 Stab Wound|RTR
|
||||
1 Street Sweeper|RTR
|
||||
1 Survey the Wreckage|RTR
|
||||
1 Tablet of the Guilds|RTR
|
||||
1 Tavern Swindler|RTR
|
||||
1 Tenement Crasher|RTR
|
||||
1 Thrill-Kill Assassin|RTR
|
||||
1 Traitorous Instinct|RTR
|
||||
1 Ultimate Price|RTR
|
||||
1 Underworld Connections|RTR
|
||||
1 Viashino Racketeer|RTR
|
||||
[sideboard]
|
||||
@@ -1,71 +0,0 @@
|
||||
[metadata]
|
||||
Name=RtRGuildSelesnya
|
||||
[main]
|
||||
1 Aerial Predation|RTR
|
||||
1 Archweaver|RTR
|
||||
1 Armory Guard|RTR
|
||||
1 Arrest|RTR
|
||||
1 Avenging Arrow|RTR
|
||||
1 Axebane Guardian|RTR
|
||||
1 Axebane Stag|RTR
|
||||
1 Bazaar Krovod|RTR
|
||||
1 Brushstrider|RTR
|
||||
1 Call of the Conclave|RTR
|
||||
1 Centaur Healer|RTR
|
||||
1 Centaur's Herald|RTR
|
||||
1 Chorus of Might|RTR
|
||||
1 Civic Saber|RTR
|
||||
1 Codex Shredder|RTR
|
||||
1 Collective Blessing|RTR
|
||||
1 Common Bond|RTR
|
||||
1 Concordia Pegasus|RTR
|
||||
1 Coursers' Accord|RTR
|
||||
1 Death's Presence|RTR
|
||||
1 Druid's Deliverance|RTR
|
||||
1 Dryad Militant|RTR
|
||||
1 Ethereal Armor|RTR
|
||||
1 Eyes in the Skies|RTR
|
||||
1 Fencing Ace|RTR
|
||||
1 Gatecreeper Vine|RTR
|
||||
1 Giant Growth|RTR
|
||||
1 Gobbling Ooze|RTR
|
||||
1 Growing Ranks|RTR
|
||||
1 Heroes' Reunion|RTR
|
||||
1 Horncaller's Chant|RTR
|
||||
1 Keening Apparition|RTR
|
||||
1 Knightly Valor|RTR
|
||||
1 Loxodon Smiter|RTR
|
||||
1 Mana Bloom|RTR
|
||||
1 Oak Street Innkeeper|RTR
|
||||
1 Palisade Giant|RTR
|
||||
1 Phantom General|RTR
|
||||
1 Precinct Captain|RTR
|
||||
1 Rest in Peace|RTR
|
||||
1 Risen Sanctuary|RTR
|
||||
1 Rootborn Defenses|RTR
|
||||
1 Rubbleback Rhino|RTR
|
||||
1 Savage Surge|RTR
|
||||
1 Security Blockade|RTR
|
||||
1 Seek the Horizon|RTR
|
||||
1 Selesnya Charm|RTR
|
||||
1 Selesnya Keyrune|RTR
|
||||
1 Selesnya Sentry|RTR
|
||||
1 Seller of Songbirds|RTR
|
||||
1 Slime Molding|RTR
|
||||
1 Soul Tithe|RTR
|
||||
1 Sphere of Safety|RTR
|
||||
1 Street Sweeper|RTR
|
||||
1 Sundering Growth|RTR
|
||||
1 Sunspire Griffin|RTR
|
||||
1 Swift Justice|RTR
|
||||
1 Tablet of the Guilds|RTR
|
||||
1 Temple Garden|RTR
|
||||
1 Towering Indrik|RTR
|
||||
1 Trained Caracal|RTR
|
||||
1 Trostani's Judgment|RTR
|
||||
1 Trostani, Selesnya's Voice|RTR
|
||||
1 Urban Burgeoning|RTR
|
||||
1 Vitu-Ghazi Guildmage|RTR
|
||||
1 Wayfaring Temple|RTR
|
||||
1 Wild Beastmaster|RTR
|
||||
[sideboard]
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:GtcGuildBoros
|
||||
DeckFile:GtcGuildBoros
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Boros Guildgate|GTC","Foundry Champion|GTC")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:GtcGuildDimir
|
||||
DeckFile:GtcGuildDimir
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Dimir Guildgate|GTC","Consuming Aberration|GTC")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:GtcGuildGruul
|
||||
DeckFile:GtcGuildGruul
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Gruul Guildgate|GTC","Rubblehulk|GTC")
|
||||
NumPacks:1
|
||||
@@ -1,6 +0,0 @@
|
||||
Name:GtcGuildOrzhov
|
||||
DeckFile:GtcGuildOrzhov
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Orzhov Guildgate|GTC","Treasury Thrull|GTC")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:GtcGuildSimic
|
||||
DeckFile:GtcGuildSimic
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Simic Guildgate|GTC","Fathom Mage|GTC")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:RtRGuildAzorius
|
||||
DeckFile:RtRGuildAzorius
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Azorius Guildgate|RTR","Archon of the Triumvirate|RTR")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:RtRGuildGolgari
|
||||
DeckFile:RtRGuildGolgari
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Golgari Guildgate|RTR","Corpsejack Menace|RTR")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:RtRGuildIzzet
|
||||
DeckFile:RtRGuildIzzet
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Izzet Guildgate|RTR","Hypersonic Dragon|RTR")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:RtRGuildRakdos
|
||||
DeckFile:RtRGuildRakdos
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Rakdos Guildgate|RTR","Corpsejack Menace|RTR")
|
||||
NumPacks:1
|
||||
@@ -1,7 +0,0 @@
|
||||
Name:RtRGuildSelesnya
|
||||
DeckFile:RtRGuildSelesnya
|
||||
IgnoreRarity:False
|
||||
LandSetCode:M13
|
||||
|
||||
Booster:10 Common, 3 Uncommon, 1 RareMythic, 2 promo("Selesnya Guildgate|RTR","Grove of the Guardian|RTR")
|
||||
NumPacks:1
|
||||
@@ -18,6 +18,9 @@
|
||||
package forge.card;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
@@ -48,6 +51,7 @@ import forge.util.TextUtil;
|
||||
*/
|
||||
public class BoosterGenerator {
|
||||
|
||||
private static final String LAND = "Land";
|
||||
public static final String ANY = "Any";
|
||||
public static final String COMMON = "Common";
|
||||
public static final String UNCOMMON = "Uncommon";
|
||||
@@ -73,7 +77,8 @@ public class BoosterGenerator {
|
||||
int numCards = slot.getRight().intValue();
|
||||
|
||||
String[] sType = TextUtil.splitWithParenthesis(slotType, ' ', '(', ')');
|
||||
String sheetKey = sType.length == 1 && booster.getEdition() != null ? slotType.trim() + " " + booster.getEdition() : slotType.trim();
|
||||
String setCode = sType.length == 1 && booster.getEdition() != null ? booster.getEdition() : null;
|
||||
String sheetKey = Singletons.getModel().getEditions().contains(setCode) ? slotType.trim() + " " + setCode: slotType.trim();
|
||||
|
||||
PrintSheet ps = getPrintSheet(sheetKey);
|
||||
result.addAll(ps.random(numCards, true));
|
||||
@@ -85,40 +90,46 @@ public class BoosterGenerator {
|
||||
public static final PrintSheet makeSheet(String sheetKey, Iterable<CardPrinted> src) {
|
||||
PrintSheet ps = new PrintSheet(sheetKey);
|
||||
String[] sKey = TextUtil.splitWithParenthesis(sheetKey, ' ', '(', ')', 2);
|
||||
|
||||
String[] operators = TextUtil.splitWithParenthesis(sKey[0], ':', '(', ')');
|
||||
Predicate<CardPrinted> extraPred = buildExtraPredicate(operators);
|
||||
String mainCode = operators[0].trim();
|
||||
if(mainCode.endsWith("s"))
|
||||
mainCode = mainCode.substring(0, mainCode.length()-1);
|
||||
|
||||
Predicate<CardPrinted> setPred = (Predicate<CardPrinted>) (sKey.length > 1 ? IPaperCard.Predicates.printedInSets(sKey[1].split(" ")) : Predicates.alwaysTrue());
|
||||
|
||||
// Pre-defined sheets:
|
||||
if (mainCode.startsWith("promo(")) { // get exactly the named cards, nevermind any restrictions
|
||||
String list = StringUtils.strip(mainCode.substring(5), "() ");
|
||||
String[] cardNames = TextUtil.splitWithParenthesis(list, ',', '"', '"');
|
||||
for(String cardName: cardNames) {
|
||||
ps.add(CardDb.instance().getCard(cardName));
|
||||
}
|
||||
List<String> operators = new LinkedList<String>(Arrays.asList(TextUtil.splitWithParenthesis(sKey[0], ':', '(', ')')));
|
||||
Predicate<CardPrinted> extraPred = buildExtraPredicate(operators);
|
||||
|
||||
} else if( mainCode.equalsIgnoreCase(ANY) ) { // no restriction on rarity
|
||||
// source replacement operators - if one is applied setPredicate will be ignored
|
||||
Iterator<String> itMod = operators.iterator();
|
||||
while(itMod.hasNext()) {
|
||||
String mainCode = itMod.next();
|
||||
if ( mainCode.regionMatches(true, 0, "fromSheet", 0, 9)) { // custom print sheet
|
||||
String sheetName = StringUtils.strip(mainCode.substring(9), "()\" ");
|
||||
src = Singletons.getModel().getPrintSheets().get(sheetName).toFlatList();
|
||||
setPred = Predicates.alwaysTrue();
|
||||
|
||||
} else if (mainCode.startsWith("promo")) { // get exactly the named cards, that's a tiny inlined print sheet
|
||||
String list = StringUtils.strip(mainCode.substring(5), "() ");
|
||||
String[] cardNames = TextUtil.splitWithParenthesis(list, ',', '"', '"');
|
||||
List<CardPrinted> srcList = new ArrayList<CardPrinted>();
|
||||
for(String cardName: cardNames)
|
||||
srcList.add(CardDb.instance().getCard(cardName));
|
||||
src = srcList;
|
||||
setPred = Predicates.alwaysTrue();
|
||||
|
||||
} else
|
||||
continue;
|
||||
|
||||
itMod.remove();
|
||||
}
|
||||
|
||||
// only special operators should remain by now - the ones that could not be turned into one predicate
|
||||
String mainCode = operators.isEmpty() ? null : operators.get(0).trim();
|
||||
|
||||
if( null == mainCode || mainCode.equalsIgnoreCase(ANY) ) { // no restriction on rarity
|
||||
Predicate<CardPrinted> predicate = Predicates.and(setPred, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicate));
|
||||
|
||||
} else if( mainCode.equalsIgnoreCase(COMMON) ) {
|
||||
Predicate<CardPrinted> predicate = Predicates.and(setPred, IPaperCard.Predicates.Presets.IS_COMMON, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicate));
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(UNCOMMON) ) {
|
||||
Predicate<CardPrinted> predicate = Predicates.and(setPred, IPaperCard.Predicates.Presets.IS_UNCOMMON, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicate));
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(UNCOMMON_RARE) ) { // for sets like ARN, where U1 cards are considered rare and U3 are uncommon
|
||||
|
||||
Predicate<CardPrinted> predicateRares = Predicates.and(setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateRares));
|
||||
|
||||
|
||||
Predicate<CardPrinted> predicateUncommon = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_UNCOMMON, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateUncommon), 3);
|
||||
|
||||
@@ -128,56 +139,43 @@ public class BoosterGenerator {
|
||||
|
||||
Predicate<CardPrinted> predicateMythic = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_MYTHIC_RARE, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateMythic));
|
||||
|
||||
|
||||
Predicate<CardPrinted> predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateRare), 2);
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(RARE) ) {
|
||||
Predicate<CardPrinted> predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateRare));
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(MYTHIC) ) {
|
||||
Predicate<CardPrinted> predicateMythic = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_MYTHIC_RARE, extraPred);
|
||||
ps.addAll(Iterables.filter(src, predicateMythic));
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(BASIC_LAND) ) {
|
||||
Predicate<CardPrinted> predicateLand = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_BASIC_LAND, extraPred );
|
||||
ps.addAll(Iterables.filter(src, predicateLand));
|
||||
|
||||
} else if ( mainCode.equalsIgnoreCase(TIME_SHIFTED) ) {
|
||||
Predicate<CardPrinted> predicate = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_SPECIAL, extraPred );
|
||||
ps.addAll(Iterables.filter(src, predicate));
|
||||
|
||||
} else if ( mainCode.startsWith("Custom(") || mainCode.startsWith("custom(") ) {
|
||||
String sheetName = StringUtils.strip(mainCode.substring(6), "()\" ");
|
||||
return Singletons.getModel().getPrintSheets().get(sheetName);
|
||||
}
|
||||
} else
|
||||
throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + mainCode);
|
||||
return ps;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param operators
|
||||
* @return
|
||||
* This method also modifies passed parameter
|
||||
*/
|
||||
private static Predicate<CardPrinted> buildExtraPredicate(String[] operators) {
|
||||
if ( operators.length <= 1)
|
||||
return Predicates.alwaysTrue();
|
||||
|
||||
private static Predicate<CardPrinted> buildExtraPredicate(List<String> operators) {
|
||||
List<Predicate<CardPrinted>> conditions = new ArrayList<Predicate<CardPrinted>>();
|
||||
for(int i = 1; i < operators.length; i++) {
|
||||
String operator = operators[i];
|
||||
if(StringUtils.isEmpty(operator))
|
||||
|
||||
Iterator<String> itOp = operators.iterator();
|
||||
while(itOp.hasNext()) {
|
||||
String operator = itOp.next();
|
||||
if(StringUtils.isEmpty(operator)) {
|
||||
itOp.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
if(operator.endsWith("s"))
|
||||
operator = operator.substring(0, operator.length()-1);
|
||||
|
||||
boolean invert = operator.charAt(0) == '!';
|
||||
if( invert ) operator = operator.substring(1);
|
||||
|
||||
Predicate<CardPrinted> toAdd = null;
|
||||
if( operator.equals("dfc") ) {
|
||||
toAdd = Predicates.compose(CardRulesPredicates.splitType(CardSplitType.Transform), CardPrinted.FN_GET_RULES);
|
||||
} else if( operator.equals("land") ) {
|
||||
toAdd = Predicates.compose(CardRulesPredicates.Presets.IS_LAND, CardPrinted.FN_GET_RULES);
|
||||
if( operator.equalsIgnoreCase("dfc") ) { toAdd = Predicates.compose(CardRulesPredicates.splitType(CardSplitType.Transform), CardPrinted.FN_GET_RULES);
|
||||
} else if ( operator.equalsIgnoreCase(LAND) ) { toAdd = Predicates.compose(CardRulesPredicates.Presets.IS_LAND, CardPrinted.FN_GET_RULES);
|
||||
} else if ( operator.equalsIgnoreCase(BASIC_LAND)) { toAdd = IPaperCard.Predicates.Presets.IS_BASIC_LAND;
|
||||
} else if ( operator.equalsIgnoreCase(TIME_SHIFTED)) { toAdd = IPaperCard.Predicates.Presets.IS_SPECIAL;
|
||||
} else if ( operator.equalsIgnoreCase(MYTHIC)) { toAdd = IPaperCard.Predicates.Presets.IS_MYTHIC_RARE;
|
||||
} else if ( operator.equalsIgnoreCase(RARE)) { toAdd = IPaperCard.Predicates.Presets.IS_RARE;
|
||||
} else if ( operator.equalsIgnoreCase(UNCOMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_UNCOMMON;
|
||||
} else if ( operator.equalsIgnoreCase(COMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_COMMON;
|
||||
} else if ( operator.startsWith("name(") ) {
|
||||
operator = StringUtils.strip(operator.substring(4), "() ");
|
||||
String[] cardNames = TextUtil.splitWithParenthesis(operator, ',', '"', '"');
|
||||
@@ -185,12 +183,16 @@ public class BoosterGenerator {
|
||||
}
|
||||
|
||||
if(toAdd == null)
|
||||
throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + operator);
|
||||
continue;
|
||||
else
|
||||
itOp.remove();
|
||||
|
||||
if( invert )
|
||||
toAdd = Predicates.not(toAdd);
|
||||
conditions.add(toAdd);
|
||||
}
|
||||
if( conditions.isEmpty() )
|
||||
return Predicates.alwaysTrue();
|
||||
return Predicates.and(conditions);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import java.util.List;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
@@ -22,11 +21,9 @@ public class BoosterTemplate extends SealedProductTemplate {
|
||||
|
||||
private final int foilRate = 68;
|
||||
private final int artIndices;
|
||||
private final String edition;
|
||||
|
||||
private BoosterTemplate(String edition0, int artIndices0, Iterable<Pair<String, Integer>> itrSlots) {
|
||||
super(itrSlots);
|
||||
this.edition = edition0;
|
||||
|
||||
private BoosterTemplate(String edition, int artIndices0, Iterable<Pair<String, Integer>> itrSlots) {
|
||||
super(edition, itrSlots);
|
||||
artIndices = artIndices0;
|
||||
}
|
||||
|
||||
@@ -38,8 +35,6 @@ public class BoosterTemplate extends SealedProductTemplate {
|
||||
return artIndices;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getEdition() { return edition; }
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
@@ -63,17 +58,9 @@ public class BoosterTemplate extends SealedProductTemplate {
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
public static final Function<? super BoosterTemplate, String> FN_GET_CODE = new Function<BoosterTemplate, String>() {
|
||||
@Override
|
||||
public String apply(BoosterTemplate arg1) {
|
||||
return arg1.edition;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public static final class Reader extends StorageReaderFile<BoosterTemplate> {
|
||||
public Reader(String pathname) {
|
||||
super(pathname, BoosterTemplate.FN_GET_CODE);
|
||||
super(pathname, BoosterTemplate.FN_GET_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -284,12 +284,10 @@ public final class CardBlock implements Comparable<CardBlock> {
|
||||
return metaSets.keySet();
|
||||
}
|
||||
|
||||
|
||||
public MetaSet getMetaSet(String key) {
|
||||
return metaSets.get(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tries to create a booster for the selected meta-set code.
|
||||
*
|
||||
|
||||
@@ -6,8 +6,6 @@ import java.util.List;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.storage.StorageReaderFile;
|
||||
|
||||
@@ -17,29 +15,19 @@ import forge.util.storage.StorageReaderFile;
|
||||
*/
|
||||
public class FatPackTemplate extends SealedProductTemplate {
|
||||
private final int cntBoosters;
|
||||
private final String edition;
|
||||
|
||||
@Override
|
||||
public String getEdition() { return edition; }
|
||||
|
||||
public int getCntBoosters() { return cntBoosters; }
|
||||
|
||||
public static final Function<? super FatPackTemplate, String> FN_GET_CODE = new Function<FatPackTemplate, String>() {
|
||||
@Override
|
||||
public String apply(FatPackTemplate arg1) {
|
||||
return arg1.edition;
|
||||
}
|
||||
};
|
||||
|
||||
private FatPackTemplate(String edition0, int boosters, Iterable<Pair<String, Integer>> itrSlots)
|
||||
private FatPackTemplate(String edition, int boosters, Iterable<Pair<String, Integer>> itrSlots)
|
||||
{
|
||||
super(itrSlots);
|
||||
edition = edition0;
|
||||
super(edition, itrSlots);
|
||||
cntBoosters = boosters;
|
||||
}
|
||||
|
||||
public static final class Reader extends StorageReaderFile<FatPackTemplate> {
|
||||
public Reader(String pathname) {
|
||||
super(pathname, FatPackTemplate.FN_GET_CODE);
|
||||
super(pathname, FatPackTemplate.FN_GET_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -91,13 +91,30 @@ import forge.util.FileUtil;
|
||||
public class MetaSet {
|
||||
|
||||
private enum MetaSetType {
|
||||
Full,
|
||||
Cube,
|
||||
JoinedSet,
|
||||
Choose,
|
||||
Random,
|
||||
Booster,
|
||||
Pack
|
||||
Full("F", "All cards"),
|
||||
Cube("C", "Cube"),
|
||||
JoinedSet("J", "Joined set"),
|
||||
Choose("Select", "Choose from list"),
|
||||
Combo("All", "Combined booster"),
|
||||
Random("Any", "Randomly selected"),
|
||||
Booster("B", "Booster"),
|
||||
SpecialBooster("S", "Special Booster"),
|
||||
Pack("T", "Tournament/Starter");
|
||||
|
||||
private final String shortHand;
|
||||
public final String descriptiveName;
|
||||
private MetaSetType(String shortname, String descName) {
|
||||
shortHand = shortname;
|
||||
descriptiveName = descName;
|
||||
}
|
||||
|
||||
public static MetaSetType smartValueOf(String trim) {
|
||||
for(MetaSetType mt : MetaSetType.values()) {
|
||||
if( mt.name().equalsIgnoreCase(trim) || mt.shortHand.equalsIgnoreCase(trim))
|
||||
return mt;
|
||||
}
|
||||
throw new IllegalArgumentException(trim + " not recognized as Meta Set");
|
||||
}
|
||||
}
|
||||
|
||||
private final MetaSetType type;
|
||||
@@ -118,21 +135,10 @@ public class MetaSet {
|
||||
int idxLastPar = creationString.lastIndexOf(')');
|
||||
|
||||
draftable = canDraft;
|
||||
type = MetaSetType.valueOf(creationString.substring(0, idxFirstPar).trim());
|
||||
type = MetaSetType.smartValueOf(creationString.substring(0, idxFirstPar).trim());
|
||||
data = creationString.substring(idxFirstPar + 1, idxLastPar);
|
||||
String description = creationString.substring(idxLastPar + 1);
|
||||
|
||||
switch (type) {
|
||||
case Cube: code = "*C:" + description; break;
|
||||
case Full: code = "*FULL"; break;
|
||||
case JoinedSet: code = "*B:" + description; break;
|
||||
case Choose: code = "*!:" + description; break;
|
||||
case Random: code = "*?:" + description; break;
|
||||
case Booster: code = "*" + description; break;
|
||||
case Pack: code = "*" + description + "(S)"; break;
|
||||
|
||||
default: throw new RuntimeException("Invalid MetaSet type: " + type);
|
||||
}
|
||||
code = description + "\u00A0(" + type.descriptiveName + ")"; // u00A0 (nbsp) will not be equal to simple space
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -160,6 +166,9 @@ public class MetaSet {
|
||||
case Booster:
|
||||
return new UnOpenedProduct(Singletons.getModel().getBoosters().get(data));
|
||||
|
||||
case SpecialBooster:
|
||||
return new UnOpenedProduct(Singletons.getModel().getSpecialBoosters().get(data));
|
||||
|
||||
case Pack:
|
||||
return new UnOpenedProduct(Singletons.getModel().getTournamentPacks().get(data));
|
||||
|
||||
@@ -167,11 +176,9 @@ public class MetaSet {
|
||||
Predicate<CardPrinted> predicate = IPaperCard.Predicates.printedInSets(data.split(" "));
|
||||
return new UnOpenedProduct(BoosterTemplate.genericBooster, predicate);
|
||||
|
||||
case Choose:
|
||||
return new UnOpenedMeta(data, true);
|
||||
|
||||
case Random:
|
||||
return new UnOpenedMeta(data, false);
|
||||
case Choose: return UnOpenedMeta.choose(data);
|
||||
case Random: return UnOpenedMeta.random(data);
|
||||
case Combo: return UnOpenedMeta.selectAll(data);
|
||||
|
||||
case Cube:
|
||||
final File dFolder = new File("res/sealed/");
|
||||
@@ -193,6 +200,11 @@ public class MetaSet {
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public boolean isDraftable() {
|
||||
return draftable;
|
||||
|
||||
@@ -18,28 +18,40 @@
|
||||
|
||||
package forge.card;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.storage.StorageReaderFile;
|
||||
|
||||
public class SealedProductTemplate {
|
||||
|
||||
protected final List<Pair<String, Integer>> slots;
|
||||
protected final String name;
|
||||
|
||||
|
||||
public final List<Pair<String, Integer>> getSlots() {
|
||||
return slots;
|
||||
}
|
||||
|
||||
public String getEdition() {
|
||||
return null;
|
||||
public final String getEdition() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public SealedProductTemplate(Iterable<Pair<String, Integer>> itrSlots)
|
||||
{
|
||||
this(null, itrSlots);
|
||||
}
|
||||
|
||||
public SealedProductTemplate(String name0, Iterable<Pair<String, Integer>> itrSlots)
|
||||
{
|
||||
slots = Lists.newArrayList(itrSlots);
|
||||
name = name0;
|
||||
}
|
||||
|
||||
public int getNumberOfCardsExpected() {
|
||||
@@ -49,4 +61,32 @@ public class SealedProductTemplate {
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
protected static final Function<? super SealedProductTemplate, String> FN_GET_NAME = new Function<SealedProductTemplate, String>() {
|
||||
@Override
|
||||
public String apply(SealedProductTemplate arg1) {
|
||||
return arg1.name;
|
||||
}
|
||||
};
|
||||
|
||||
public static final class Reader extends StorageReaderFile<SealedProductTemplate> {
|
||||
public Reader(String pathname) {
|
||||
super(pathname, SealedProductTemplate.FN_GET_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SealedProductTemplate read(String line, int i) {
|
||||
String[] headAndData = TextUtil.split(line, ':', 2);
|
||||
final String edition = headAndData[0];
|
||||
final String[] data = TextUtil.splitWithParenthesis(headAndData[1], ',', '(', ')');
|
||||
|
||||
List<Pair<String, Integer>> slots = new ArrayList<Pair<String,Integer>>();
|
||||
for(String slotDesc : data) {
|
||||
String[] kv = TextUtil.splitWithParenthesis(slotDesc, ' ', '(', ')', 2);
|
||||
slots.add(ImmutablePair.of(kv[1], Integer.parseInt(kv[0])));
|
||||
}
|
||||
|
||||
return new SealedProductTemplate(edition, slots);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.Random;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
/**
|
||||
* This type extends UnOpenedProduct to support booster choice or random boosters
|
||||
@@ -33,8 +34,14 @@ import forge.util.MyRandom;
|
||||
|
||||
public class UnOpenedMeta implements IUnOpenedProduct {
|
||||
|
||||
private enum JoinOperation {
|
||||
RandomOne,
|
||||
ChooseOne,
|
||||
SelectAll,
|
||||
}
|
||||
|
||||
private final ArrayList<MetaSet> metaSets;
|
||||
private final boolean canChoose;
|
||||
private final JoinOperation operation;
|
||||
private final Random generator = MyRandom.getRandom();
|
||||
|
||||
/**
|
||||
@@ -44,12 +51,11 @@ public class UnOpenedMeta implements IUnOpenedProduct {
|
||||
* @param choose
|
||||
* sets the random/choice status.
|
||||
*/
|
||||
public UnOpenedMeta(final String creationString, final boolean choose) {
|
||||
private UnOpenedMeta(final String creationString, final JoinOperation op) {
|
||||
metaSets = new ArrayList<MetaSet>();
|
||||
canChoose = choose;
|
||||
operation = op;
|
||||
|
||||
|
||||
for(String m : creationString.split(";")) {
|
||||
for(String m : TextUtil.splitWithParenthesis(creationString, ';', '(', ')')) {
|
||||
metaSets.add(new MetaSet(m, true));
|
||||
}
|
||||
}
|
||||
@@ -72,41 +78,42 @@ public class UnOpenedMeta implements IUnOpenedProduct {
|
||||
* known partialities for the AI.
|
||||
* @return List, list of cards.
|
||||
*/
|
||||
|
||||
public List<CardPrinted> open(final boolean isHuman) {
|
||||
|
||||
if (metaSets.size() < 1) {
|
||||
if (metaSets.isEmpty()) {
|
||||
throw new RuntimeException("Empty UnOpenedMetaset, cannot generate booster.");
|
||||
}
|
||||
|
||||
if (canChoose) {
|
||||
if (isHuman) {
|
||||
final List<String> choices = new ArrayList<String>();
|
||||
|
||||
for (MetaSet meta : metaSets) {
|
||||
choices.add(meta.getCode());
|
||||
switch(operation) {
|
||||
case ChooseOne:
|
||||
if (isHuman) {
|
||||
final MetaSet ms = GuiChoose.one("Choose booster:", metaSets);
|
||||
return ms.getBooster().get();
|
||||
}
|
||||
final Object o = GuiChoose.one("Choose booster:", choices);
|
||||
|
||||
for (int i = 0; i < metaSets.size(); i++) {
|
||||
if (o.toString().equals(metaSets.get(i).getCode())) {
|
||||
final IUnOpenedProduct newBooster = metaSets.get(i).getBooster();
|
||||
return newBooster.get();
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException("Could not find MetaSet " + o.toString());
|
||||
}
|
||||
else {
|
||||
|
||||
case RandomOne: // AI should fall though here from the case above
|
||||
int selected = generator.nextInt(metaSets.size());
|
||||
final IUnOpenedProduct newBooster = metaSets.get(selected).getBooster();
|
||||
return newBooster.get();
|
||||
}
|
||||
}
|
||||
else {
|
||||
int selected = generator.nextInt(metaSets.size());
|
||||
final IUnOpenedProduct newBooster = metaSets.get(selected).getBooster();
|
||||
return newBooster.get();
|
||||
|
||||
case SelectAll:
|
||||
List<CardPrinted> allCards = new ArrayList<CardPrinted>();
|
||||
for (MetaSet ms : metaSets) {
|
||||
allCards.addAll(ms.getBooster().get());
|
||||
}
|
||||
return allCards;
|
||||
}
|
||||
throw new IllegalStateException("Got wrong operation type in unopenedMeta - execution should never reach this point");
|
||||
}
|
||||
|
||||
public static UnOpenedMeta choose(String desc) {
|
||||
return new UnOpenedMeta(desc, JoinOperation.ChooseOne);
|
||||
}
|
||||
public static UnOpenedMeta random(String desc) {
|
||||
return new UnOpenedMeta(desc, JoinOperation.RandomOne);
|
||||
}
|
||||
public static UnOpenedMeta selectAll(String desc) {
|
||||
return new UnOpenedMeta(desc, JoinOperation.SelectAll);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -108,10 +108,9 @@ public class SealedCardPoolGenerator {
|
||||
return;
|
||||
|
||||
for (String pz : TextUtil.split(p, ',')) {
|
||||
String pp = pz.trim();
|
||||
int idxSp = pp.indexOf(' ');
|
||||
String setCode = idxSp > 0 ? pp.substring(idxSp+1) : pp;
|
||||
int nBoosters = idxSp > 0 ? Integer.parseInt(pp.substring(0, idxSp)) : 1;
|
||||
String[] pps = TextUtil.splitWithParenthesis(pz.trim(), ' ' , '(', ')');
|
||||
String setCode = pps[pps.length - 1];
|
||||
int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1;
|
||||
while(nBoosters-- > 0)
|
||||
this.product.add(block.getBooster(setCode));
|
||||
}
|
||||
@@ -218,17 +217,25 @@ public class SealedCardPoolGenerator {
|
||||
}
|
||||
}
|
||||
else if (nPacks == 5) {
|
||||
if (sets.length >= 2) {
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[0], sets[0], sets[0], sets[0], sets[0]));
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[1], sets[1], sets[0], sets[0], sets[0]));
|
||||
if (sets.length == 1 || !sets[0].equals(sets[1]) ) {
|
||||
setCombos.add(String.format("5 %s", sets[0]));
|
||||
}
|
||||
if (sets.length >= 3) {
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[2], sets[2], sets[0], sets[0], sets[0]));
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[2], sets[1], sets[0], sets[0], sets[0]));
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[2], sets[1], sets[1], sets[0], sets[0]));
|
||||
|
||||
if (sets.length >= 2 && !sets[0].equals(sets[1])) {
|
||||
setCombos.add(String.format("3 %s, 2 %s", sets[0], sets[1]));
|
||||
setCombos.add(String.format("2 %s, 3 %s", sets[0], sets[1]));
|
||||
}
|
||||
if (sets.length >= 3 && !sets[0].equals(sets[2])) {
|
||||
setCombos.add(String.format("3 %s, 2 %s", sets[0], sets[2]));
|
||||
setCombos.add(String.format("3 %s, %s, %s", sets[0], sets[1], sets[2]));
|
||||
setCombos.add(String.format("2 %s, 2 %s, %s", sets[0], sets[1], sets[2]));
|
||||
}
|
||||
if (sets.length >= 4) {
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[3], sets[2], sets[1], sets[0], sets[0]));
|
||||
if( sets[1].equals(sets[2]) && sets[1].equals(sets[0])) {
|
||||
setCombos.add(String.format("%s, 4 %s", sets[3], sets[0])); // for guild sealed
|
||||
} else {
|
||||
setCombos.add(String.format("%s, %s, %s, 2 %s", sets[3], sets[2], sets[1], sets[0]));
|
||||
}
|
||||
}
|
||||
if (sets.length >= 5) {
|
||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[4], sets[3], sets[2], sets[1], sets[0]));
|
||||
|
||||
@@ -121,5 +121,9 @@ public class PrintSheet {
|
||||
return cardsWithWeights.isEmpty();
|
||||
}
|
||||
|
||||
public Iterable<CardPrinted> toFlatList() {
|
||||
return cardsWithWeights.toFlatList();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import forge.card.CardRulesReader;
|
||||
import forge.card.EditionCollection;
|
||||
import forge.card.FatPackTemplate;
|
||||
import forge.card.FormatCollection;
|
||||
import forge.card.SealedProductTemplate;
|
||||
import forge.card.cardfactory.CardStorageReader;
|
||||
import forge.deck.CardCollections;
|
||||
import forge.error.BugReporter;
|
||||
@@ -85,6 +86,7 @@ public enum FModel {
|
||||
private final EditionCollection editions;
|
||||
private final FormatCollection formats;
|
||||
private final IStorageView<BoosterTemplate> boosters;
|
||||
private final IStorageView<SealedProductTemplate> specialBoosters;
|
||||
private final IStorageView<BoosterTemplate> tournaments;
|
||||
private final IStorageView<FatPackTemplate> fatPacks;
|
||||
private final IStorageView<CardBlock> blocks;
|
||||
@@ -147,6 +149,7 @@ public enum FModel {
|
||||
this.editions = CardRulesReader.editions; // CardRules ctor cannot refer to FModel, since it is not yet build by that moment
|
||||
this.formats = new FormatCollection("res/blockdata/formats.txt");
|
||||
this.boosters = new StorageView<BoosterTemplate>(new BoosterTemplate.Reader("res/blockdata/boosters.txt"));
|
||||
this.specialBoosters = new StorageView<SealedProductTemplate>(new SealedProductTemplate.Reader("res/blockdata/boosters-special.txt"));
|
||||
this.tournaments = new StorageView<BoosterTemplate>(new BoosterTemplate.Reader("res/blockdata/starters.txt"));
|
||||
this.fatPacks = new StorageView<FatPackTemplate>(new FatPackTemplate.Reader("res/blockdata/fatpacks.txt"));
|
||||
this.blocks = new StorageView<CardBlock>(new CardBlock.Reader("res/blockdata/blocks.txt", editions));
|
||||
@@ -377,6 +380,10 @@ public enum FModel {
|
||||
return boosters;
|
||||
}
|
||||
|
||||
public final IStorageView<SealedProductTemplate> getSpecialBoosters() {
|
||||
return specialBoosters;
|
||||
}
|
||||
|
||||
public IStorageView<PrintSheet> getPrintSheets() {
|
||||
return printSheets;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public class StorageView<T> implements IStorageView<T> {
|
||||
*/
|
||||
@Override
|
||||
public boolean contains(String name) {
|
||||
return this.map.containsKey(name);
|
||||
return name == null ? false : this.map.containsKey(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user