mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +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/shandalar/duels/Witch[!!-~]3.dck -text
|
||||||
res/quest/world/worlds.txt -text
|
res/quest/world/worlds.txt -text
|
||||||
res/sealed/ArabianExtended.sealed -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/sealed/juzamjedi.sealed -text
|
||||||
res/skins/dark_ascension/bg_match.jpg -text
|
res/skins/dark_ascension/bg_match.jpg -text
|
||||||
res/skins/dark_ascension/bg_splash.png -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
|
Avacyn Restored, 3/6/AVR, AVR
|
||||||
Magic 2013, 3/6/M13, M13
|
Magic 2013, 3/6/M13, M13
|
||||||
Return to Ravnica, 3/6/RTR, RTR GTC DGM
|
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
|
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(Cube(GtcGuildBoros)Boros Guild;Cube(GtcGuildDimir)Dimir Guild;Cube(GtcGuildGruul)Gruul Guild;Cube(GtcGuildOrzhov)Orzhov Guild;Cube(GtcGuildSimic)Simic 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 Sealed, -/6/RTR, DGM DGM DGM ?<GuildPack> <RandomRelatedGuildPack2>?
|
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
|
#Prerelease boosters
|
||||||
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")
|
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 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 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 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 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")
|
||||||
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")
|
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 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")
|
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")
|
#Boosters for DGM event
|
||||||
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 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")
|
||||||
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")
|
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")
|
||||||
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")
|
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 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")
|
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")
|
||||||
#Same boosters without a promo (used for DGM maze race)
|
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 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 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")
|
||||||
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")
|
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")
|
||||||
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")
|
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 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 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")
|
||||||
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")
|
|
||||||
|
|||||||
@@ -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
|
CHK: 5 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||||
CHR: 1 covers, 9 Common, 3 UncommonRare
|
CHR: 1 covers, 9 Common, 3 UncommonRare
|
||||||
CSP: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
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
|
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
|
DRK: 1 covers, 6 Common, 2 UncommonRare
|
||||||
DST: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
DST: 3 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||||
EVE: 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
|
HML: 1 covers, 6 Common, 2 UncommonRare
|
||||||
ICE: 5 covers, 11 Common, 3 Uncommon, 1 Rare
|
ICE: 5 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||||
INV: 3 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
|
JUD: 1 covers, 11 Common, 3 Uncommon, 1 Rare
|
||||||
LEA: 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
|
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;
|
package forge.card;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
@@ -48,6 +51,7 @@ import forge.util.TextUtil;
|
|||||||
*/
|
*/
|
||||||
public class BoosterGenerator {
|
public class BoosterGenerator {
|
||||||
|
|
||||||
|
private static final String LAND = "Land";
|
||||||
public static final String ANY = "Any";
|
public static final String ANY = "Any";
|
||||||
public static final String COMMON = "Common";
|
public static final String COMMON = "Common";
|
||||||
public static final String UNCOMMON = "Uncommon";
|
public static final String UNCOMMON = "Uncommon";
|
||||||
@@ -73,7 +77,8 @@ public class BoosterGenerator {
|
|||||||
int numCards = slot.getRight().intValue();
|
int numCards = slot.getRight().intValue();
|
||||||
|
|
||||||
String[] sType = TextUtil.splitWithParenthesis(slotType, ' ', '(', ')');
|
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);
|
PrintSheet ps = getPrintSheet(sheetKey);
|
||||||
result.addAll(ps.random(numCards, true));
|
result.addAll(ps.random(numCards, true));
|
||||||
@@ -85,40 +90,46 @@ public class BoosterGenerator {
|
|||||||
public static final PrintSheet makeSheet(String sheetKey, Iterable<CardPrinted> src) {
|
public static final PrintSheet makeSheet(String sheetKey, Iterable<CardPrinted> src) {
|
||||||
PrintSheet ps = new PrintSheet(sheetKey);
|
PrintSheet ps = new PrintSheet(sheetKey);
|
||||||
String[] sKey = TextUtil.splitWithParenthesis(sheetKey, ' ', '(', ')', 2);
|
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());
|
Predicate<CardPrinted> setPred = (Predicate<CardPrinted>) (sKey.length > 1 ? IPaperCard.Predicates.printedInSets(sKey[1].split(" ")) : Predicates.alwaysTrue());
|
||||||
|
|
||||||
// Pre-defined sheets:
|
List<String> operators = new LinkedList<String>(Arrays.asList(TextUtil.splitWithParenthesis(sKey[0], ':', '(', ')')));
|
||||||
if (mainCode.startsWith("promo(")) { // get exactly the named cards, nevermind any restrictions
|
Predicate<CardPrinted> extraPred = buildExtraPredicate(operators);
|
||||||
String list = StringUtils.strip(mainCode.substring(5), "() ");
|
|
||||||
String[] cardNames = TextUtil.splitWithParenthesis(list, ',', '"', '"');
|
|
||||||
for(String cardName: cardNames) {
|
|
||||||
ps.add(CardDb.instance().getCard(cardName));
|
|
||||||
}
|
|
||||||
|
|
||||||
} 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);
|
Predicate<CardPrinted> predicate = Predicates.and(setPred, extraPred);
|
||||||
ps.addAll(Iterables.filter(src, predicate));
|
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
|
} 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);
|
Predicate<CardPrinted> predicateRares = Predicates.and(setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
||||||
ps.addAll(Iterables.filter(src, predicateRares));
|
ps.addAll(Iterables.filter(src, predicateRares));
|
||||||
|
|
||||||
Predicate<CardPrinted> predicateUncommon = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_UNCOMMON, extraPred);
|
Predicate<CardPrinted> predicateUncommon = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_UNCOMMON, extraPred);
|
||||||
ps.addAll(Iterables.filter(src, predicateUncommon), 3);
|
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);
|
Predicate<CardPrinted> predicateMythic = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_MYTHIC_RARE, extraPred);
|
||||||
ps.addAll(Iterables.filter(src, predicateMythic));
|
ps.addAll(Iterables.filter(src, predicateMythic));
|
||||||
|
|
||||||
Predicate<CardPrinted> predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
Predicate<CardPrinted> predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred);
|
||||||
ps.addAll(Iterables.filter(src, predicateRare), 2);
|
ps.addAll(Iterables.filter(src, predicateRare), 2);
|
||||||
|
} else
|
||||||
} else if ( mainCode.equalsIgnoreCase(RARE) ) {
|
throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + mainCode);
|
||||||
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);
|
|
||||||
}
|
|
||||||
return ps;
|
return ps;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this method.
|
* This method also modifies passed parameter
|
||||||
* @param operators
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
private static Predicate<CardPrinted> buildExtraPredicate(String[] operators) {
|
private static Predicate<CardPrinted> buildExtraPredicate(List<String> operators) {
|
||||||
if ( operators.length <= 1)
|
|
||||||
return Predicates.alwaysTrue();
|
|
||||||
|
|
||||||
List<Predicate<CardPrinted>> conditions = new ArrayList<Predicate<CardPrinted>>();
|
List<Predicate<CardPrinted>> conditions = new ArrayList<Predicate<CardPrinted>>();
|
||||||
for(int i = 1; i < operators.length; i++) {
|
|
||||||
String operator = operators[i];
|
Iterator<String> itOp = operators.iterator();
|
||||||
if(StringUtils.isEmpty(operator))
|
while(itOp.hasNext()) {
|
||||||
|
String operator = itOp.next();
|
||||||
|
if(StringUtils.isEmpty(operator)) {
|
||||||
|
itOp.remove();
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(operator.endsWith("s"))
|
||||||
|
operator = operator.substring(0, operator.length()-1);
|
||||||
|
|
||||||
boolean invert = operator.charAt(0) == '!';
|
boolean invert = operator.charAt(0) == '!';
|
||||||
if( invert ) operator = operator.substring(1);
|
if( invert ) operator = operator.substring(1);
|
||||||
|
|
||||||
Predicate<CardPrinted> toAdd = null;
|
Predicate<CardPrinted> toAdd = null;
|
||||||
if( operator.equals("dfc") ) {
|
if( operator.equalsIgnoreCase("dfc") ) { toAdd = Predicates.compose(CardRulesPredicates.splitType(CardSplitType.Transform), CardPrinted.FN_GET_RULES);
|
||||||
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.equals("land") ) {
|
} else if ( operator.equalsIgnoreCase(BASIC_LAND)) { toAdd = IPaperCard.Predicates.Presets.IS_BASIC_LAND;
|
||||||
toAdd = Predicates.compose(CardRulesPredicates.Presets.IS_LAND, CardPrinted.FN_GET_RULES);
|
} 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(") ) {
|
} else if ( operator.startsWith("name(") ) {
|
||||||
operator = StringUtils.strip(operator.substring(4), "() ");
|
operator = StringUtils.strip(operator.substring(4), "() ");
|
||||||
String[] cardNames = TextUtil.splitWithParenthesis(operator, ',', '"', '"');
|
String[] cardNames = TextUtil.splitWithParenthesis(operator, ',', '"', '"');
|
||||||
@@ -185,12 +183,16 @@ public class BoosterGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(toAdd == null)
|
if(toAdd == null)
|
||||||
throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + operator);
|
continue;
|
||||||
|
else
|
||||||
|
itOp.remove();
|
||||||
|
|
||||||
if( invert )
|
if( invert )
|
||||||
toAdd = Predicates.not(toAdd);
|
toAdd = Predicates.not(toAdd);
|
||||||
conditions.add(toAdd);
|
conditions.add(toAdd);
|
||||||
}
|
}
|
||||||
|
if( conditions.isEmpty() )
|
||||||
|
return Predicates.alwaysTrue();
|
||||||
return Predicates.and(conditions);
|
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.ImmutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.util.TextUtil;
|
import forge.util.TextUtil;
|
||||||
@@ -22,11 +21,9 @@ public class BoosterTemplate extends SealedProductTemplate {
|
|||||||
|
|
||||||
private final int foilRate = 68;
|
private final int foilRate = 68;
|
||||||
private final int artIndices;
|
private final int artIndices;
|
||||||
private final String edition;
|
|
||||||
|
private BoosterTemplate(String edition, int artIndices0, Iterable<Pair<String, Integer>> itrSlots) {
|
||||||
private BoosterTemplate(String edition0, int artIndices0, Iterable<Pair<String, Integer>> itrSlots) {
|
super(edition, itrSlots);
|
||||||
super(itrSlots);
|
|
||||||
this.edition = edition0;
|
|
||||||
artIndices = artIndices0;
|
artIndices = artIndices0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,8 +35,6 @@ public class BoosterTemplate extends SealedProductTemplate {
|
|||||||
return artIndices;
|
return artIndices;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String getEdition() { return edition; }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
@@ -63,17 +58,9 @@ public class BoosterTemplate extends SealedProductTemplate {
|
|||||||
return s.toString();
|
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 static final class Reader extends StorageReaderFile<BoosterTemplate> {
|
||||||
public Reader(String pathname) {
|
public Reader(String pathname) {
|
||||||
super(pathname, BoosterTemplate.FN_GET_CODE);
|
super(pathname, BoosterTemplate.FN_GET_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -284,12 +284,10 @@ public final class CardBlock implements Comparable<CardBlock> {
|
|||||||
return metaSets.keySet();
|
return metaSets.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public MetaSet getMetaSet(String key) {
|
public MetaSet getMetaSet(String key) {
|
||||||
return metaSets.get(key);
|
return metaSets.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tries to create a booster for the selected meta-set code.
|
* 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.ImmutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
|
|
||||||
import forge.util.TextUtil;
|
import forge.util.TextUtil;
|
||||||
import forge.util.storage.StorageReaderFile;
|
import forge.util.storage.StorageReaderFile;
|
||||||
|
|
||||||
@@ -17,29 +15,19 @@ import forge.util.storage.StorageReaderFile;
|
|||||||
*/
|
*/
|
||||||
public class FatPackTemplate extends SealedProductTemplate {
|
public class FatPackTemplate extends SealedProductTemplate {
|
||||||
private final int cntBoosters;
|
private final int cntBoosters;
|
||||||
private final String edition;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getEdition() { return edition; }
|
|
||||||
public int getCntBoosters() { return cntBoosters; }
|
public int getCntBoosters() { return cntBoosters; }
|
||||||
|
|
||||||
public static final Function<? super FatPackTemplate, String> FN_GET_CODE = new Function<FatPackTemplate, String>() {
|
private FatPackTemplate(String edition, int boosters, Iterable<Pair<String, Integer>> itrSlots)
|
||||||
@Override
|
|
||||||
public String apply(FatPackTemplate arg1) {
|
|
||||||
return arg1.edition;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private FatPackTemplate(String edition0, int boosters, Iterable<Pair<String, Integer>> itrSlots)
|
|
||||||
{
|
{
|
||||||
super(itrSlots);
|
super(edition, itrSlots);
|
||||||
edition = edition0;
|
|
||||||
cntBoosters = boosters;
|
cntBoosters = boosters;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Reader extends StorageReaderFile<FatPackTemplate> {
|
public static final class Reader extends StorageReaderFile<FatPackTemplate> {
|
||||||
public Reader(String pathname) {
|
public Reader(String pathname) {
|
||||||
super(pathname, FatPackTemplate.FN_GET_CODE);
|
super(pathname, FatPackTemplate.FN_GET_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -91,13 +91,30 @@ import forge.util.FileUtil;
|
|||||||
public class MetaSet {
|
public class MetaSet {
|
||||||
|
|
||||||
private enum MetaSetType {
|
private enum MetaSetType {
|
||||||
Full,
|
Full("F", "All cards"),
|
||||||
Cube,
|
Cube("C", "Cube"),
|
||||||
JoinedSet,
|
JoinedSet("J", "Joined set"),
|
||||||
Choose,
|
Choose("Select", "Choose from list"),
|
||||||
Random,
|
Combo("All", "Combined booster"),
|
||||||
Booster,
|
Random("Any", "Randomly selected"),
|
||||||
Pack
|
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;
|
private final MetaSetType type;
|
||||||
@@ -118,21 +135,10 @@ public class MetaSet {
|
|||||||
int idxLastPar = creationString.lastIndexOf(')');
|
int idxLastPar = creationString.lastIndexOf(')');
|
||||||
|
|
||||||
draftable = canDraft;
|
draftable = canDraft;
|
||||||
type = MetaSetType.valueOf(creationString.substring(0, idxFirstPar).trim());
|
type = MetaSetType.smartValueOf(creationString.substring(0, idxFirstPar).trim());
|
||||||
data = creationString.substring(idxFirstPar + 1, idxLastPar);
|
data = creationString.substring(idxFirstPar + 1, idxLastPar);
|
||||||
String description = creationString.substring(idxLastPar + 1);
|
String description = creationString.substring(idxLastPar + 1);
|
||||||
|
code = description + "\u00A0(" + type.descriptiveName + ")"; // u00A0 (nbsp) will not be equal to simple space
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,6 +166,9 @@ public class MetaSet {
|
|||||||
case Booster:
|
case Booster:
|
||||||
return new UnOpenedProduct(Singletons.getModel().getBoosters().get(data));
|
return new UnOpenedProduct(Singletons.getModel().getBoosters().get(data));
|
||||||
|
|
||||||
|
case SpecialBooster:
|
||||||
|
return new UnOpenedProduct(Singletons.getModel().getSpecialBoosters().get(data));
|
||||||
|
|
||||||
case Pack:
|
case Pack:
|
||||||
return new UnOpenedProduct(Singletons.getModel().getTournamentPacks().get(data));
|
return new UnOpenedProduct(Singletons.getModel().getTournamentPacks().get(data));
|
||||||
|
|
||||||
@@ -167,11 +176,9 @@ public class MetaSet {
|
|||||||
Predicate<CardPrinted> predicate = IPaperCard.Predicates.printedInSets(data.split(" "));
|
Predicate<CardPrinted> predicate = IPaperCard.Predicates.printedInSets(data.split(" "));
|
||||||
return new UnOpenedProduct(BoosterTemplate.genericBooster, predicate);
|
return new UnOpenedProduct(BoosterTemplate.genericBooster, predicate);
|
||||||
|
|
||||||
case Choose:
|
case Choose: return UnOpenedMeta.choose(data);
|
||||||
return new UnOpenedMeta(data, true);
|
case Random: return UnOpenedMeta.random(data);
|
||||||
|
case Combo: return UnOpenedMeta.selectAll(data);
|
||||||
case Random:
|
|
||||||
return new UnOpenedMeta(data, false);
|
|
||||||
|
|
||||||
case Cube:
|
case Cube:
|
||||||
final File dFolder = new File("res/sealed/");
|
final File dFolder = new File("res/sealed/");
|
||||||
@@ -193,6 +200,11 @@ public class MetaSet {
|
|||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDraftable() {
|
public boolean isDraftable() {
|
||||||
return draftable;
|
return draftable;
|
||||||
|
|||||||
@@ -18,28 +18,40 @@
|
|||||||
|
|
||||||
package forge.card;
|
package forge.card;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.util.TextUtil;
|
||||||
|
import forge.util.storage.StorageReaderFile;
|
||||||
|
|
||||||
public class SealedProductTemplate {
|
public class SealedProductTemplate {
|
||||||
|
|
||||||
protected final List<Pair<String, Integer>> slots;
|
protected final List<Pair<String, Integer>> slots;
|
||||||
|
protected final String name;
|
||||||
|
|
||||||
|
|
||||||
public final List<Pair<String, Integer>> getSlots() {
|
public final List<Pair<String, Integer>> getSlots() {
|
||||||
return slots;
|
return slots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEdition() {
|
public final String getEdition() {
|
||||||
return null;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SealedProductTemplate(Iterable<Pair<String, Integer>> itrSlots)
|
public SealedProductTemplate(Iterable<Pair<String, Integer>> itrSlots)
|
||||||
|
{
|
||||||
|
this(null, itrSlots);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SealedProductTemplate(String name0, Iterable<Pair<String, Integer>> itrSlots)
|
||||||
{
|
{
|
||||||
slots = Lists.newArrayList(itrSlots);
|
slots = Lists.newArrayList(itrSlots);
|
||||||
|
name = name0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumberOfCardsExpected() {
|
public int getNumberOfCardsExpected() {
|
||||||
@@ -49,4 +61,32 @@ public class SealedProductTemplate {
|
|||||||
}
|
}
|
||||||
return sum;
|
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.gui.GuiChoose;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
import forge.util.TextUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This type extends UnOpenedProduct to support booster choice or random boosters
|
* This type extends UnOpenedProduct to support booster choice or random boosters
|
||||||
@@ -33,8 +34,14 @@ import forge.util.MyRandom;
|
|||||||
|
|
||||||
public class UnOpenedMeta implements IUnOpenedProduct {
|
public class UnOpenedMeta implements IUnOpenedProduct {
|
||||||
|
|
||||||
|
private enum JoinOperation {
|
||||||
|
RandomOne,
|
||||||
|
ChooseOne,
|
||||||
|
SelectAll,
|
||||||
|
}
|
||||||
|
|
||||||
private final ArrayList<MetaSet> metaSets;
|
private final ArrayList<MetaSet> metaSets;
|
||||||
private final boolean canChoose;
|
private final JoinOperation operation;
|
||||||
private final Random generator = MyRandom.getRandom();
|
private final Random generator = MyRandom.getRandom();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,12 +51,11 @@ public class UnOpenedMeta implements IUnOpenedProduct {
|
|||||||
* @param choose
|
* @param choose
|
||||||
* sets the random/choice status.
|
* 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>();
|
metaSets = new ArrayList<MetaSet>();
|
||||||
canChoose = choose;
|
operation = op;
|
||||||
|
|
||||||
|
for(String m : TextUtil.splitWithParenthesis(creationString, ';', '(', ')')) {
|
||||||
for(String m : creationString.split(";")) {
|
|
||||||
metaSets.add(new MetaSet(m, true));
|
metaSets.add(new MetaSet(m, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,41 +78,42 @@ public class UnOpenedMeta implements IUnOpenedProduct {
|
|||||||
* known partialities for the AI.
|
* known partialities for the AI.
|
||||||
* @return List, list of cards.
|
* @return List, list of cards.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public List<CardPrinted> open(final boolean isHuman) {
|
public List<CardPrinted> open(final boolean isHuman) {
|
||||||
|
|
||||||
if (metaSets.size() < 1) {
|
if (metaSets.isEmpty()) {
|
||||||
throw new RuntimeException("Empty UnOpenedMetaset, cannot generate booster.");
|
throw new RuntimeException("Empty UnOpenedMetaset, cannot generate booster.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canChoose) {
|
switch(operation) {
|
||||||
if (isHuman) {
|
case ChooseOne:
|
||||||
final List<String> choices = new ArrayList<String>();
|
if (isHuman) {
|
||||||
|
final MetaSet ms = GuiChoose.one("Choose booster:", metaSets);
|
||||||
for (MetaSet meta : metaSets) {
|
return ms.getBooster().get();
|
||||||
choices.add(meta.getCode());
|
|
||||||
}
|
}
|
||||||
final Object o = GuiChoose.one("Choose booster:", choices);
|
|
||||||
|
case RandomOne: // AI should fall though here from the case above
|
||||||
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 {
|
|
||||||
int selected = generator.nextInt(metaSets.size());
|
int selected = generator.nextInt(metaSets.size());
|
||||||
final IUnOpenedProduct newBooster = metaSets.get(selected).getBooster();
|
final IUnOpenedProduct newBooster = metaSets.get(selected).getBooster();
|
||||||
return newBooster.get();
|
return newBooster.get();
|
||||||
}
|
|
||||||
}
|
case SelectAll:
|
||||||
else {
|
List<CardPrinted> allCards = new ArrayList<CardPrinted>();
|
||||||
int selected = generator.nextInt(metaSets.size());
|
for (MetaSet ms : metaSets) {
|
||||||
final IUnOpenedProduct newBooster = metaSets.get(selected).getBooster();
|
allCards.addAll(ms.getBooster().get());
|
||||||
return newBooster.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;
|
return;
|
||||||
|
|
||||||
for (String pz : TextUtil.split(p, ',')) {
|
for (String pz : TextUtil.split(p, ',')) {
|
||||||
String pp = pz.trim();
|
String[] pps = TextUtil.splitWithParenthesis(pz.trim(), ' ' , '(', ')');
|
||||||
int idxSp = pp.indexOf(' ');
|
String setCode = pps[pps.length - 1];
|
||||||
String setCode = idxSp > 0 ? pp.substring(idxSp+1) : pp;
|
int nBoosters = pps.length > 1 ? Integer.parseInt(pps[0]) : 1;
|
||||||
int nBoosters = idxSp > 0 ? Integer.parseInt(pp.substring(0, idxSp)) : 1;
|
|
||||||
while(nBoosters-- > 0)
|
while(nBoosters-- > 0)
|
||||||
this.product.add(block.getBooster(setCode));
|
this.product.add(block.getBooster(setCode));
|
||||||
}
|
}
|
||||||
@@ -218,17 +217,25 @@ public class SealedCardPoolGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (nPacks == 5) {
|
else if (nPacks == 5) {
|
||||||
if (sets.length >= 2) {
|
if (sets.length == 1 || !sets[0].equals(sets[1]) ) {
|
||||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[0], sets[0], sets[0], sets[0], sets[0]));
|
setCombos.add(String.format("5 %s", sets[0]));
|
||||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[1], sets[1], sets[0], sets[0], 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]));
|
if (sets.length >= 2 && !sets[0].equals(sets[1])) {
|
||||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[2], sets[1], sets[0], sets[0], sets[0]));
|
setCombos.add(String.format("3 %s, 2 %s", sets[0], sets[1]));
|
||||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[2], sets[1], sets[1], sets[0], sets[0]));
|
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) {
|
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) {
|
if (sets.length >= 5) {
|
||||||
setCombos.add(String.format("%s, %s, %s, %s, %s", sets[4], sets[3], sets[2], sets[1], sets[0]));
|
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();
|
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.EditionCollection;
|
||||||
import forge.card.FatPackTemplate;
|
import forge.card.FatPackTemplate;
|
||||||
import forge.card.FormatCollection;
|
import forge.card.FormatCollection;
|
||||||
|
import forge.card.SealedProductTemplate;
|
||||||
import forge.card.cardfactory.CardStorageReader;
|
import forge.card.cardfactory.CardStorageReader;
|
||||||
import forge.deck.CardCollections;
|
import forge.deck.CardCollections;
|
||||||
import forge.error.BugReporter;
|
import forge.error.BugReporter;
|
||||||
@@ -85,6 +86,7 @@ public enum FModel {
|
|||||||
private final EditionCollection editions;
|
private final EditionCollection editions;
|
||||||
private final FormatCollection formats;
|
private final FormatCollection formats;
|
||||||
private final IStorageView<BoosterTemplate> boosters;
|
private final IStorageView<BoosterTemplate> boosters;
|
||||||
|
private final IStorageView<SealedProductTemplate> specialBoosters;
|
||||||
private final IStorageView<BoosterTemplate> tournaments;
|
private final IStorageView<BoosterTemplate> tournaments;
|
||||||
private final IStorageView<FatPackTemplate> fatPacks;
|
private final IStorageView<FatPackTemplate> fatPacks;
|
||||||
private final IStorageView<CardBlock> blocks;
|
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.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.formats = new FormatCollection("res/blockdata/formats.txt");
|
||||||
this.boosters = new StorageView<BoosterTemplate>(new BoosterTemplate.Reader("res/blockdata/boosters.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.tournaments = new StorageView<BoosterTemplate>(new BoosterTemplate.Reader("res/blockdata/starters.txt"));
|
||||||
this.fatPacks = new StorageView<FatPackTemplate>(new FatPackTemplate.Reader("res/blockdata/fatpacks.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));
|
this.blocks = new StorageView<CardBlock>(new CardBlock.Reader("res/blockdata/blocks.txt", editions));
|
||||||
@@ -377,6 +380,10 @@ public enum FModel {
|
|||||||
return boosters;
|
return boosters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final IStorageView<SealedProductTemplate> getSpecialBoosters() {
|
||||||
|
return specialBoosters;
|
||||||
|
}
|
||||||
|
|
||||||
public IStorageView<PrintSheet> getPrintSheets() {
|
public IStorageView<PrintSheet> getPrintSheets() {
|
||||||
return printSheets;
|
return printSheets;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class StorageView<T> implements IStorageView<T> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean contains(String name) {
|
public boolean contains(String name) {
|
||||||
return this.map.containsKey(name);
|
return name == null ? false : this.map.containsKey(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user