From 7e3b9ccc2d6d1e5111ec9425c50f97b20e1ee79a Mon Sep 17 00:00:00 2001 From: austinio7116 Date: Wed, 25 Apr 2018 12:56:41 +0100 Subject: [PATCH] Second simple attempt at planar conquest generation code and example (cherry picked from commit 234db8d) --- .../PlanarConquestGeneratorTest.java | 231 ++++++++++++------ ... Dusk - Legion Lieutenant based deck_7.dck | 32 +++ ...her - Legion Lieutenant based deck_18.dck} | 21 +- ...ose - Call to the Feast based deck_14.dck} | 26 +- ... Rose - Legion Lieutenant based deck_4.dck | 30 --- ...ion - Legion Lieutenant based deck_30.dck} | 22 +- ...tenant - Radiant Destiny based deck_5.dck} | 25 +- ...Apostle - Legions Landing based deck_5.dck | 32 +++ ...archer - Martyr of Dusk based deck_18.dck} | 20 +- ...de - Merfolk Mistbinder based deck_10.dck} | 24 +- ...Kumena, Tyrant of Orazca based deck_20.dck | 33 +++ ...razca - Silvergill Adept based deck_3.dck} | 24 +- ...binder - Deeproot Elite based deck_28.dck} | 22 +- ...Oracle - Kumenas Speaker based deck_7.dck} | 26 +- ... Warden - Kumenas Speaker based deck_7.dck | 30 +++ ...- Thunderherd Migration based deck_31.dck} | 29 +-- ...t - Drover of the Mighty based deck_16.dck | 34 +++ ... Commune with Dinosaurs based deck_24.dck} | 19 +- ...- Commune with Dinosaurs based deck_30.dck | 31 +++ ... - Ghalta, Primal Hunger based deck_2.dck} | 21 +- ...er - Skymarcher Aspirant based deck_18.dck | 33 +++ ...- Commune with Dinosaurs based deck_19.dck | 33 +++ ...eeker - Jadelight Ranger based deck_21.dck | 35 +++ .../forge/limited/CardThemedDeckBuilder.java | 7 +- 24 files changed, 595 insertions(+), 245 deletions(-) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legion Lieutenant based deck_7.dck rename forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/{Mavren Fein, Dusk Apostle - Call to the Feast based deck_15.dck => Duskborne Skymarcher - Legion Lieutenant based deck_18.dck} (57%) rename forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/{Legion Lieutenant - Skymarcher Aspirant based deck_3.dck => Elenda, the Dusk Rose - Call to the Feast based deck_14.dck} (54%) delete mode 100644 forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Legion Lieutenant based deck_4.dck rename forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/{Forerunner of the Legion - Radiant Destiny based deck_10.dck => Forerunner of the Legion - Legion Lieutenant based deck_30.dck} (60%) rename forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/{Champion of Dusk - Legions Landing based deck_9.dck => Legion Lieutenant - Radiant Destiny based deck_5.dck} (54%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Legions Landing based deck_5.dck rename forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/{Duskborne Skymarcher - Radiant Destiny based deck_2.dck => Sadistic Skymarcher - Martyr of Dusk based deck_18.dck} (62%) rename forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/{Crashing Tide - Jadelight Ranger based deck_12.dck => Crashing Tide - Merfolk Mistbinder based deck_10.dck} (56%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Jungleborn Pioneer - Kumena, Tyrant of Orazca based deck_20.dck rename forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/{Merfolk Mistbinder - Kumena, Tyrant of Orazca based deck_11.dck => Kumena, Tyrant of Orazca - Silvergill Adept based deck_3.dck} (56%) rename forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/{Swift Warden - Merfolk Mistbinder based deck_2.dck => Merfolk Mistbinder - Deeproot Elite based deck_28.dck} (59%) rename forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/{Kumena, Tyrant of Orazca - Kumenas Speaker based deck_11.dck => Seafloor Oracle - Kumenas Speaker based deck_7.dck} (52%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Kumenas Speaker based deck_7.dck rename forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/{Gishath, Suns Avatar - Commune with Dinosaurs based deck_12.dck => Gishath, Suns Avatar - Thunderherd Migration based deck_31.dck} (51%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Huatli, Warrior Poet - Drover of the Mighty based deck_16.dck rename forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/{Savage Stomp - Carnage Tyrant based deck_2.dck => Otepec Huntmaster - Commune with Dinosaurs based deck_24.dck} (64%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Regisaur Alpha - Commune with Dinosaurs based deck_30.dck rename forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/{Otepec Huntmaster - Thunderherd Migration based deck_10.dck => Savage Stomp - Ghalta, Primal Hunger based deck_2.dck} (62%) create mode 100644 forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Azor, the Lawbringer - Skymarcher Aspirant based deck_18.dck create mode 100644 forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Tetzimoc, Primal Death - Commune with Dinosaurs based deck_19.dck create mode 100644 forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Vraska, Relic Seeker - Jadelight Ranger based deck_21.dck diff --git a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneratorTest.java b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneratorTest.java index beedb679974..f9e77cfa03b 100644 --- a/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneratorTest.java +++ b/forge-gui-desktop/src/test/java/forge/planarconquestgenerate/PlanarConquestGeneratorTest.java @@ -1,9 +1,12 @@ package forge.planarconquestgenerate; import com.google.common.base.Function; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; import forge.GuiBase; import forge.GuiDesktop; import forge.LobbyPlayer; import forge.StaticData; +import forge.card.CardRulesPredicates; import forge.deck.*; import forge.deck.io.DeckStorage; import forge.game.GameFormat; @@ -26,6 +29,7 @@ import forge.util.TextUtil; import forge.view.SimulateMatch; import org.apache.commons.lang3.text.WordUtils; import org.testng.annotations.Test; +import com.google.common.collect.Lists; import java.io.File; import java.util.ArrayList; @@ -63,16 +67,21 @@ public class PlanarConquestGeneratorTest { DeckStorage storage = new DeckStorage(new File(ForgeConstants.DECK_CONSTRUCTED_DIR), ForgeConstants.DECK_BASE_DIR); GameFormat planarConquestFormat = new GameFormat("conquest",sets,null); DeckFormat deckFormat = DeckFormat.PlanarConquest; - for(PaperCard card: rankedList.subList(0,20)){ + + Iterable filtered= Iterables.filter(rankedList, Predicates.and( + Predicates.compose(CardRulesPredicates.IS_KEPT_IN_AI_DECKS, PaperCard.FN_GET_RULES), + Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard.FN_GET_RULES), + planarConquestFormat.getFilterPrinted())); + + List filteredList = Lists.newArrayList(filtered); + + for(PaperCard card: filteredList.subList(0,50)){ if(planarConquestFormat.getFilterPrinted().apply(card)) { System.out.println(card.getName()); - if(true) { - continue; - } DeckGroup deckGroup = new DeckGroup("SimulatedTournament"); List players = new ArrayList<>(); int numPlayers=0; - for( int i=0; i<16;i++){ + for( int i=0; i<32;i++){ Deck genDeck = DeckgenUtil.buildPlanarConquestDeck(card, planarConquestFormat, deckFormat); Deck d = new Deck(genDeck,genDeck.getName()+"_"+i); deckGroup.addAiDeck(d); @@ -80,73 +89,8 @@ public class PlanarConquestGeneratorTest { numPlayers++; } TournamentSwiss tourney = new TournamentSwiss(players, 2); - tourney.initializeTournament(); - String lastWinner = ""; - int curRound = 0; - System.out.println(TextUtil.concatNoSpace("Starting a tournament with ", - String.valueOf(numPlayers), " players over ", - String.valueOf(tourney.getTotalRounds()), " rounds")); - while(!tourney.isTournamentOver()) { - if (tourney.getActiveRound() != curRound) { - if (curRound != 0) { - System.out.println(TextUtil.concatNoSpace("End Round - ", String.valueOf(curRound))); - } - curRound = tourney.getActiveRound(); - System.out.println(""); - System.out.println(TextUtil.concatNoSpace("Round ", String.valueOf(curRound) ," Pairings:")); - - for(TournamentPairing pairing : tourney.getActivePairings()) { - System.out.println(pairing.outputHeader()); - } - System.out.println(""); - } - - TournamentPairing pairing = tourney.getNextPairing(); - List regPlayers = AbstractTournament.registerTournamentPlayers(pairing, deckGroup); - - StringBuilder sb = new StringBuilder(); - sb.append("Round ").append(tourney.getActiveRound()).append(" - "); - sb.append(pairing.outputHeader()); - System.out.println(sb.toString()); - - if (!pairing.isBye()) { - Match mc = new Match(rules, regPlayers, "TourneyMatch"); - - int exceptions = 0; - int iGame = 0; - while (!mc.isMatchOver()) { - // play games until the match ends - try{ - SimulateMatch.simulateSingleMatch(mc, iGame, false); - iGame++; - } catch(Exception e) { - exceptions++; - System.out.println(e.toString()); - if (exceptions > 5) { - System.out.println("Exceeded number of exceptions thrown. Abandoning match..."); - break; - } else { - System.out.println("Game threw exception. Abandoning game and continuing..."); - } - } - - } - LobbyPlayer winner = mc.getWinner().getPlayer(); - for (TournamentPlayer tp : pairing.getPairedPlayers()) { - if (winner.equals(tp.getPlayer())) { - pairing.setWinner(tp); - lastWinner = winner.getName(); - System.out.println(TextUtil.concatNoSpace("Match Winner - ", lastWinner, "!")); - System.out.println(""); - break; - } - } - } - - tourney.reportMatchCompletion(pairing); - } - tourney.outputTournamentResults(); + tourney = runTournament(tourney, rules, numPlayers, deckGroup); String deckName = tourney.getAllPlayers().get(0).getPlayer().getName(); Deck winningDeck; for(Deck deck:deckGroup.getAiDecks()){ @@ -165,4 +109,149 @@ public class PlanarConquestGeneratorTest { } } + @Test + public void generatePlanarConquestCommanderDecks() { + + GuiBase.setInterface(new GuiDesktop()); + FModel.initialize(null, new Function() { + @Override + public Void apply(ForgePreferences preferences) { + preferences.setPref(ForgePreferences.FPref.LOAD_CARD_SCRIPTS_LAZILY, false); + return null; + } + }); + GameFormat format = FModel.getFormats().getStandard(); + GameRules rules = new GameRules(GameType.Constructed); + standardMap = CardRelationMatrixGenerator.cardPools.get(format.getName()); + List cardNames = new ArrayList<>(standardMap.keySet()); + List cards = new ArrayList<>(); + for(String cardName:cardNames){ + cards.add(StaticData.instance().getCommonCards().getUniqueByName(cardName)); + } + List rankedList = CardRanker.rankCardsInDeck(cards); + List sets = new ArrayList<>(); + sets.add("XLN"); + sets.add("RIX"); + DeckStorage storage = new DeckStorage(new File(ForgeConstants.DECK_CONSTRUCTED_DIR), ForgeConstants.DECK_BASE_DIR); + GameFormat planarConquestFormat = new GameFormat("conquest",sets,null); + DeckFormat deckFormat = DeckFormat.PlanarConquest; + + Iterable filtered= Iterables.filter(rankedList, Predicates.and( + Predicates.compose(CardRulesPredicates.IS_KEPT_IN_AI_DECKS, PaperCard.FN_GET_RULES), + Predicates.compose(CardRulesPredicates.Presets.IS_CREATURE, PaperCard.FN_GET_RULES), + Predicates.compose(CardRulesPredicates.Presets.IS_LEGENDARY, PaperCard.FN_GET_RULES), + planarConquestFormat.getFilterPrinted())); + + List filteredList = Lists.newArrayList(filtered); + + int maxListSize = 50; + if (maxListSize > filteredList.size()){ + maxListSize = filteredList.size(); + } + + for(PaperCard card: filteredList.subList(0,maxListSize)){ + if(planarConquestFormat.getFilterPrinted().apply(card)) { + System.out.println(card.getName()); + DeckGroup deckGroup = new DeckGroup("SimulatedTournament"); + List players = new ArrayList<>(); + int numPlayers=0; + for( int i=0; i<2;i++){ + Deck genDeck = DeckgenUtil.buildPlanarConquestCommanderDeck(card, planarConquestFormat, deckFormat); + Deck d = new Deck(genDeck,genDeck.getName()+"_"+i); + deckGroup.addAiDeck(d); + players.add(new TournamentPlayer(GamePlayerUtil.createAiPlayer(d.getName(), 0), numPlayers)); + numPlayers++; + } + TournamentSwiss tourney = new TournamentSwiss(players, 2); + + tourney = runTournament(tourney, rules, numPlayers, deckGroup); + String deckName = tourney.getAllPlayers().get(0).getPlayer().getName(); + Deck winningDeck; + for(Deck deck:deckGroup.getAiDecks()){ + if(deck.getName().equals(deckName)){ + winningDeck=deck; + storage.save(winningDeck); + System.out.println(card.toString()); + System.out.println(winningDeck.getName()); + System.out.println(winningDeck.getAllCardsInASinglePool().toString()); + break; + } + } + + + } + } + } + + public TournamentSwiss runTournament(TournamentSwiss tourney, GameRules rules, int numPlayers, DeckGroup deckGroup){ + tourney.initializeTournament(); + + String lastWinner = ""; + int curRound = 0; + System.out.println(TextUtil.concatNoSpace("Starting a tournament with ", + String.valueOf(numPlayers), " players over ", + String.valueOf(tourney.getTotalRounds()), " rounds")); + while(!tourney.isTournamentOver()) { + if (tourney.getActiveRound() != curRound) { + if (curRound != 0) { + System.out.println(TextUtil.concatNoSpace("End Round - ", String.valueOf(curRound))); + } + curRound = tourney.getActiveRound(); + System.out.println(""); + System.out.println(TextUtil.concatNoSpace("Round ", String.valueOf(curRound) ," Pairings:")); + + for(TournamentPairing pairing : tourney.getActivePairings()) { + System.out.println(pairing.outputHeader()); + } + System.out.println(""); + } + + TournamentPairing pairing = tourney.getNextPairing(); + List regPlayers = AbstractTournament.registerTournamentPlayers(pairing, deckGroup); + + StringBuilder sb = new StringBuilder(); + sb.append("Round ").append(tourney.getActiveRound()).append(" - "); + sb.append(pairing.outputHeader()); + System.out.println(sb.toString()); + + if (!pairing.isBye()) { + Match mc = new Match(rules, regPlayers, "TourneyMatch"); + + int exceptions = 0; + int iGame = 0; + while (!mc.isMatchOver()) { + // play games until the match ends + try{ + SimulateMatch.simulateSingleMatch(mc, iGame, false); + iGame++; + } catch(Exception e) { + exceptions++; + System.out.println(e.toString()); + if (exceptions > 5) { + System.out.println("Exceeded number of exceptions thrown. Abandoning match..."); + break; + } else { + System.out.println("Game threw exception. Abandoning game and continuing..."); + } + } + + } + LobbyPlayer winner = mc.getWinner().getPlayer(); + for (TournamentPlayer tp : pairing.getPairedPlayers()) { + if (winner.equals(tp.getPlayer())) { + pairing.setWinner(tp); + lastWinner = winner.getName(); + System.out.println(TextUtil.concatNoSpace("Match Winner - ", lastWinner, "!")); + System.out.println(""); + break; + } + } + } + + tourney.reportMatchCompletion(pairing); + } + tourney.outputTournamentResults(); + return tourney; + } + } diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legion Lieutenant based deck_7.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legion Lieutenant based deck_7.dck new file mode 100644 index 00000000000..45c95a3e5a2 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legion Lieutenant based deck_7.dck @@ -0,0 +1,32 @@ +[metadata] +Name=Champion of Dusk - Legion Lieutenant based deck_7 +[Main] +1 Angrath's Ambusher|RIX +1 Call to the Feast|XLN +1 Champion of Dusk|RIX +1 Contract Killing|XLN +1 Dusk Legion Zealot|RIX +1 Duskborne Skymarcher|XLN +1 Everdawn Champion|RIX +1 Field of Ruin|XLN +1 Inspiring Cleric|XLN +1 Ixalan's Binding|XLN +1 Legion Lieutenant|RIX +1 Legion's Landing|XLN +1 Martyr of Dusk|RIX +1 Mavren Fein, Dusk Apostle|XLN +9 Plains|RIX +1 Queen's Commission|XLN +1 Radiant Destiny|RIX +1 Sanctum Seeker|XLN +1 Sanguine Glorifier|RIX +1 Shadowed Caravel|XLN +1 Skymarcher Aspirant|RIX +6 Swamp|RIX +1 Trapjaw Tyrant|RIX +1 Unclaimed Territory|XLN +1 Vampire Champion|RIX +1 Vampire Revenant|RIX +1 Wakening Sun's Avatar|XLN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Call to the Feast based deck_15.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Legion Lieutenant based deck_18.dck similarity index 57% rename from forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Call to the Feast based deck_15.dck rename to forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Legion Lieutenant based deck_18.dck index e5323503b97..4f3d3f0335d 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Call to the Feast based deck_15.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Legion Lieutenant based deck_18.dck @@ -1,32 +1,31 @@ [metadata] -Name=Mavren Fein, Dusk Apostle - Call to the Feast based deck_15 +Name=Duskborne Skymarcher - Legion Lieutenant based deck_18 [Main] -1 Bishop of Binding|RIX -1 Bishop of the Bloodstained|XLN +1 Bright Reprisal|XLN 1 Call to the Feast|XLN 1 Champion of Dusk|RIX 1 Dusk Legion Zealot|RIX 1 Duskborne Skymarcher|XLN -1 Fell Flagship|XLN -1 Field of Ruin|XLN -1 Forerunner of the Coalition|RIX -1 Forerunner of the Legion|RIX +1 Huatli's Snubhorn|XLN 1 Ixalan's Binding|XLN +1 Kinjalli's Sunwing|XLN 1 Legion Conquistador|XLN 1 Legion Lieutenant|RIX 1 Legion's Landing|XLN +1 Looming Altisaur|XLN +1 Lurking Chupacabra|XLN 1 Martyr of Dusk|RIX 1 Mavren Fein, Dusk Apostle|XLN -9 Plains|RIX +10 Plains|RIX 1 Profane Procession|RIX 1 Queen's Commission|XLN 1 Radiant Destiny|RIX 1 Sanctum Seeker|XLN -1 Settle the Wreckage|XLN +1 Skulduggery|XLN +1 Skyblade of the Legion|XLN 1 Skymarcher Aspirant|RIX 6 Swamp|RIX -1 Temple Altisaur|RIX -1 Tetzimoc, Primal Death|RIX 1 Unclaimed Territory|XLN +1 Vicious Conquistador|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Skymarcher Aspirant based deck_3.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Call to the Feast based deck_14.dck similarity index 54% rename from forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Skymarcher Aspirant based deck_3.dck rename to forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Call to the Feast based deck_14.dck index 40ec05f5879..0ffcd9c8e52 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Skymarcher Aspirant based deck_3.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Call to the Feast based deck_14.dck @@ -1,32 +1,32 @@ [metadata] -Name=Legion Lieutenant - Skymarcher Aspirant based deck_3 +Name=Elenda, the Dusk Rose - Call to the Feast based deck_14 [Main] -1 Bishop of the Bloodstained|XLN 1 Call to the Feast|XLN 1 Champion of Dusk|RIX -1 Crashing Tide|RIX -1 Curious Obsession|RIX +1 Dire Fleet Ravager|XLN +1 Dowsing Dagger|XLN 1 Dusk Legion Zealot|RIX 1 Duskborne Skymarcher|XLN 1 Elenda, the Dusk Rose|RIX -1 Forerunner of the Legion|RIX -1 Hostage Taker|XLN -2 Island|RIX +1 Field of Ruin|XLN +1 Impale|RIX 1 Ixalan's Binding|XLN -1 Kinjalli's Sunwing|XLN 1 Legion Lieutenant|RIX 1 Legion's Landing|XLN 1 Martyr of Dusk|RIX 1 Mavren Fein, Dusk Apostle|XLN -1 Pirate's Cutlass|XLN -7 Plains|RIX -1 Pride of Conquerors|RIX +8 Plains|RIX 1 Queen's Commission|XLN 1 Radiant Destiny|RIX +1 Rallying Roar|XLN +1 Sanctum Seeker|XLN +1 Skymarch Bloodletter|XLN 1 Skymarcher Aspirant|RIX +1 Slash of Talons|XLN +1 Snubhorn Sentry|RIX 7 Swamp|RIX +1 Temple Altisaur|RIX 1 Unclaimed Territory|XLN -1 Vraska's Contempt|XLN -1 Walk the Plank|XLN +1 Voracious Vampire|RIX [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Legion Lieutenant based deck_4.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Legion Lieutenant based deck_4.dck deleted file mode 100644 index 2bcf9b543c7..00000000000 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Elenda, the Dusk Rose - Legion Lieutenant based deck_4.dck +++ /dev/null @@ -1,30 +0,0 @@ -[metadata] -Name=Elenda, the Dusk Rose - Legion Lieutenant based deck_4 -[Main] -1 Bishop of the Bloodstained|XLN -1 Call to the Feast|XLN -1 Champion of Dusk|RIX -1 Dire Fleet Poisoner|RIX -1 Dusk Legion Zealot|RIX -1 Duskborne Skymarcher|XLN -1 Elenda, the Dusk Rose|RIX -1 Fathom Fleet Captain|XLN -1 Forerunner of the Coalition|RIX -1 Ixalan's Binding|XLN -1 Legion Lieutenant|RIX -1 Legion's Landing|XLN -1 Martyr of Dusk|RIX -1 Mavren Fein, Dusk Apostle|XLN -1 Pirate's Cutlass|XLN -8 Plains|RIX -1 Queen's Commission|XLN -1 Radiant Destiny|RIX -1 Sadistic Skymarcher|RIX -1 Settle the Wreckage|XLN -1 Skymarcher Aspirant|RIX -9 Swamp|RIX -1 Tetzimoc, Primal Death|RIX -1 The Immortal Sun|RIX -1 Walk the Plank|XLN -[Sideboard] - diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Radiant Destiny based deck_10.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Legion Lieutenant based deck_30.dck similarity index 60% rename from forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Radiant Destiny based deck_10.dck rename to forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Legion Lieutenant based deck_30.dck index 02464e31c04..e5561cf0e1b 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Radiant Destiny based deck_10.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Forerunner of the Legion - Legion Lieutenant based deck_30.dck @@ -1,31 +1,31 @@ [metadata] -Name=Forerunner of the Legion - Radiant Destiny based deck_10 +Name=Forerunner of the Legion - Legion Lieutenant based deck_30 [Main] -1 Bishop of Binding|RIX -1 Bishop of the Bloodstained|XLN 1 Call to the Feast|XLN 1 Champion of Dusk|RIX +1 Dinosaur Hunter|RIX 1 Dusk Legion Zealot|RIX 1 Duskborne Skymarcher|XLN 1 Elenda, the Dusk Rose|RIX -1 Fell Flagship|XLN -1 Forerunner of the Coalition|RIX 1 Forerunner of the Legion|RIX 1 Ixalan's Binding|XLN +1 Kinjalli's Caller|XLN 1 Legion Conquistador|XLN 1 Legion Lieutenant|RIX 1 Legion's Landing|XLN 1 Martyr of Dusk|RIX 1 Mavren Fein, Dusk Apostle|XLN -8 Plains|RIX +10 Plains|RIX +1 Prying Blade|XLN 1 Queen's Commission|XLN 1 Radiant Destiny|RIX -1 Sadistic Skymarcher|RIX -1 Sanctum Seeker|XLN +1 Raptor Companion|RIX +1 Revel in Riches|XLN +1 Skulduggery|XLN 1 Skymarcher Aspirant|RIX -8 Swamp|RIX -1 The Immortal Sun|RIX -1 Twilight Prophet|RIX +1 Sleek Schooner|XLN +1 Steadfast Armasaur|XLN +6 Swamp|RIX 1 Unclaimed Territory|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legions Landing based deck_9.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Radiant Destiny based deck_5.dck similarity index 54% rename from forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legions Landing based deck_9.dck rename to forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Radiant Destiny based deck_5.dck index 3fd2f35dfcb..5122f04826c 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Champion of Dusk - Legions Landing based deck_9.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Legion Lieutenant - Radiant Destiny based deck_5.dck @@ -1,32 +1,31 @@ [metadata] -Name=Champion of Dusk - Legion's Landing based deck_9 +Name=Legion Lieutenant - Radiant Destiny based deck_5 [Main] -1 Bishop of Binding|RIX -1 Bishop of the Bloodstained|XLN +1 Awakened Amalgam|RIX +1 Boneyard Parley|XLN 1 Call to the Feast|XLN +1 Captain's Hook|RIX 1 Champion of Dusk|RIX +1 Desperate Castaways|XLN 1 Dusk Legion Zealot|RIX -1 Fathom Fleet Captain|XLN -1 Fell Flagship|XLN -1 Field of Ruin|XLN +1 Duskborne Skymarcher|XLN +1 Emissary of Sunrise|XLN 1 Forerunner of the Legion|RIX 1 Ixalan's Binding|XLN +1 Kitesail Freebooter|XLN 1 Legion Lieutenant|RIX 1 Legion's Landing|XLN 1 Martyr of Dusk|RIX 1 Mavren Fein, Dusk Apostle|XLN -7 Plains|RIX +8 Plains|RIX 1 Queen's Commission|XLN 1 Radiant Destiny|RIX -1 Sadistic Skymarcher|RIX -1 Sanctum Seeker|XLN -1 Settle the Wreckage|XLN 1 Skymarcher Aspirant|RIX +1 Sun Sentinel|RIX 8 Swamp|RIX -1 The Immortal Sun|RIX 1 Twilight Prophet|RIX 1 Unclaimed Territory|XLN -1 Walk the Plank|XLN -1 Wanted Scoundrels|XLN +1 Vanquisher's Banner|XLN +1 Voracious Vampire|RIX [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Legions Landing based deck_5.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Legions Landing based deck_5.dck new file mode 100644 index 00000000000..26d2b55d5e3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Mavren Fein, Dusk Apostle - Legions Landing based deck_5.dck @@ -0,0 +1,32 @@ +[metadata] +Name=Mavren Fein, Dusk Apostle - Legion's Landing based deck_5 +[Main] +1 Baffling End|RIX +1 Bishop of the Bloodstained|XLN +1 Call to the Feast|XLN +1 Desperate Castaways|XLN +1 Dire Fleet Interloper|XLN +1 Dusk Legion Zealot|RIX +1 Duskborne Skymarcher|XLN +1 Glacial Fortress|XLN +1 Hostage Taker|XLN +2 Island|RIX +1 Ixalan's Binding|XLN +1 Jace, Cunning Castaway|XLN +1 Legion Conquistador|XLN +1 Legion Lieutenant|RIX +1 Legion's Landing|XLN +1 Looming Altisaur|XLN +1 Martyr of Dusk|RIX +1 Mavren Fein, Dusk Apostle|XLN +10 Plains|RIX +1 Radiant Destiny|RIX +1 Sadistic Skymarcher|RIX +1 Skymarcher Aspirant|RIX +1 Sunrise Seeker|XLN +4 Swamp|RIX +1 Vanquisher's Banner|XLN +1 Wakening Sun's Avatar|XLN +1 Zetalpa, Primal Dawn|RIX +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Radiant Destiny based deck_2.dck b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Sadistic Skymarcher - Martyr of Dusk based deck_18.dck similarity index 62% rename from forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Radiant Destiny based deck_2.dck rename to forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Sadistic Skymarcher - Martyr of Dusk based deck_18.dck index a3af57d4e8a..b0469cbb08e 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Duskborne Skymarcher - Radiant Destiny based deck_2.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Adanto, the First Fort/Sadistic Skymarcher - Martyr of Dusk based deck_18.dck @@ -1,31 +1,31 @@ [metadata] -Name=Duskborne Skymarcher - Radiant Destiny based deck_2 +Name=Sadistic Skymarcher - Martyr of Dusk based deck_18 [Main] -1 Bishop of Binding|RIX -1 Bishop of the Bloodstained|XLN 1 Call to the Feast|XLN 1 Champion of Dusk|RIX 1 Dusk Legion Zealot|RIX 1 Duskborne Skymarcher|XLN -1 Elenda, the Dusk Rose|RIX -1 Forerunner of the Legion|RIX 1 Ixalan's Binding|XLN +1 Kitesail Freebooter|XLN 1 Legion Conquistador|XLN 1 Legion Lieutenant|RIX 1 Legion's Landing|XLN +1 Looming Altisaur|XLN 1 Martyr of Dusk|RIX 1 Mavren Fein, Dusk Apostle|XLN -1 Pirate's Cutlass|XLN -8 Plains|RIX +1 Paladin of Atonement|RIX +1 Paladin of the Bloodstained|XLN +9 Plains|RIX 1 Queen's Commission|XLN 1 Radiant Destiny|RIX 1 Sadistic Skymarcher|RIX 1 Sanctum Seeker|XLN 1 Skymarcher Aspirant|RIX -8 Swamp|RIX -1 Temple Altisaur|RIX -1 Tetzimoc, Primal Death|RIX +1 Spreading Rot|XLN +7 Swamp|RIX 1 Unclaimed Territory|XLN +1 Vanquish the Weak|XLN 1 Vicious Conquistador|XLN +1 Zetalpa, Primal Dawn|RIX [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Jadelight Ranger based deck_12.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Merfolk Mistbinder based deck_10.dck similarity index 56% rename from forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Jadelight Ranger based deck_12.dck rename to forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Merfolk Mistbinder based deck_10.dck index 95b28d1783f..378fdc663f0 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Jadelight Ranger based deck_12.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Crashing Tide - Merfolk Mistbinder based deck_10.dck @@ -1,15 +1,13 @@ [metadata] -Name=Crashing Tide - Jadelight Ranger based deck_12 +Name=Crashing Tide - Merfolk Mistbinder based deck_10 [Main] -1 Carnage Tyrant|XLN -1 Champion of Dusk|RIX +1 Admiral's Order|RIX +1 Aggressive Urge|RIX 1 Crashing Tide|RIX 1 Deeproot Elite|RIX -1 Drover of the Mighty|XLN -1 Fell Flagship|XLN +1 Deeproot Waters|XLN 7 Forest|RIX -1 Hostage Taker|XLN -5 Island|RIX +9 Island|RIX 1 Jade Bearer|RIX 1 Jadelight Ranger|RIX 1 Jungleborn Pioneer|RIX @@ -17,17 +15,17 @@ Name=Crashing Tide - Jadelight Ranger based deck_12 1 Kumena, Tyrant of Orazca|RIX 1 Merfolk Branchwalker|XLN 1 Merfolk Mistbinder|RIX +1 Mist-Cloaked Herald|RIX +1 One With the Wind|XLN +1 Prosperous Pirates|XLN +1 Ripjaw Raptor|XLN +1 Seafloor Oracle|RIX 1 Shapers of Nature|XLN 1 Silvergill Adept|RIX +1 Siren Lookout|XLN 1 Spell Pierce|XLN -3 Swamp|RIX -1 Swift Warden|RIX 1 Tempest Caller|XLN -1 Tendershoot Dryad|RIX -1 The Immortal Sun|RIX 1 Unclaimed Territory|XLN -1 Vraska's Contempt|XLN -1 Wanted Scoundrels|XLN 1 Watertrap Weaver|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Jungleborn Pioneer - Kumena, Tyrant of Orazca based deck_20.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Jungleborn Pioneer - Kumena, Tyrant of Orazca based deck_20.dck new file mode 100644 index 00000000000..7c993f25393 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Jungleborn Pioneer - Kumena, Tyrant of Orazca based deck_20.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Jungleborn Pioneer - Kumena, Tyrant of Orazca based deck_20 +[Main] +1 Castaway's Despair|XLN +1 Chart a Course|XLN +1 Deeproot Elite|RIX +1 Deeproot Waters|XLN +1 Dusk Legion Dreadnought|XLN +6 Forest|RIX +8 Island|RIX +1 Jade Bearer|RIX +1 Jadelight Ranger|RIX +1 Jungleborn Pioneer|RIX +1 Kumena's Speaker|XLN +1 Kumena, Tyrant of Orazca|RIX +1 Lookout's Dispersal|XLN +1 Merfolk Branchwalker|XLN +1 Merfolk Mistbinder|RIX +1 Mist-Cloaked Herald|RIX +1 Plains|RIX +1 Priest of the Wakening Sun|XLN +1 Seafloor Oracle|RIX +1 Silvergill Adept|RIX +1 Snapping Sailback|XLN +1 Snubhorn Sentry|RIX +1 Spell Pierce|XLN +1 Spike-Tailed Ceratops|XLN +1 Sunpetal Grove|XLN +1 Tempest Caller|XLN +1 Unclaimed Territory|XLN +1 Vanquisher's Banner|XLN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Kumena, Tyrant of Orazca based deck_11.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Silvergill Adept based deck_3.dck similarity index 56% rename from forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Kumena, Tyrant of Orazca based deck_11.dck rename to forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Silvergill Adept based deck_3.dck index f24dde1d9ef..5a79c12258d 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Kumena, Tyrant of Orazca based deck_11.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Silvergill Adept based deck_3.dck @@ -1,31 +1,31 @@ [metadata] -Name=Merfolk Mistbinder - Kumena, Tyrant of Orazca based deck_11 +Name=Kumena, Tyrant of Orazca - Silvergill Adept based deck_3 [Main] -1 Aquatic Incursion|RIX -1 Carnage Tyrant|XLN -1 Crested Herdcaller|RIX +1 Atzocan Archer|XLN 1 Deeproot Elite|RIX 1 Deeproot Waters|XLN -9 Forest|RIX -7 Island|RIX +7 Forest|RIX +9 Island|RIX +1 Jace's Sentinel|XLN 1 Jade Bearer|RIX +1 Jungle Delver|XLN 1 Jungleborn Pioneer|RIX 1 Kumena's Speaker|XLN 1 Kumena, Tyrant of Orazca|RIX 1 Merfolk Branchwalker|XLN 1 Merfolk Mistbinder|RIX 1 Mist-Cloaked Herald|RIX -1 Pirate's Cutlass|XLN -1 Ripjaw Raptor|XLN +1 Overflowing Insight|XLN +1 Ravenous Daggertooth|XLN 1 River's Rebuke|XLN -1 Savage Stomp|XLN +1 Run Aground|XLN 1 Seafloor Oracle|RIX 1 Shapers of Nature|XLN 1 Silvergill Adept|RIX +1 Siren Lookout|XLN 1 Spell Pierce|XLN -1 The Immortal Sun|RIX -1 Thrashing Brontodon|RIX +1 Spike-Tailed Ceratops|XLN +1 Tendershoot Dryad|RIX 1 Unclaimed Territory|XLN -1 Vanquisher's Banner|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Merfolk Mistbinder based deck_2.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Deeproot Elite based deck_28.dck similarity index 59% rename from forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Merfolk Mistbinder based deck_2.dck rename to forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Deeproot Elite based deck_28.dck index db57577306b..b8d4b157d9b 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Merfolk Mistbinder based deck_2.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Merfolk Mistbinder - Deeproot Elite based deck_28.dck @@ -1,31 +1,31 @@ [metadata] -Name=Swift Warden - Merfolk Mistbinder based deck_2 +Name=Merfolk Mistbinder - Deeproot Elite based deck_28 [Main] -1 Cherished Hatchling|RIX +1 Arcane Adaptation|XLN +1 Deadeye Quartermaster|XLN 1 Deeproot Elite|RIX 1 Deeproot Waters|XLN -1 Fell Flagship|XLN -9 Forest|RIX -7 Island|RIX +6 Forest|RIX +1 Grasping Current|XLN +10 Island|RIX +1 Jace, Ingenious Mind-Mage|XLN 1 Jade Bearer|RIX -1 Jadelight Ranger|RIX 1 Jungleborn Pioneer|RIX -1 Kopala, Warden of Waves|XLN 1 Kumena's Speaker|XLN 1 Kumena, Tyrant of Orazca|RIX 1 Merfolk Branchwalker|XLN 1 Merfolk Mistbinder|RIX 1 Mist-Cloaked Herald|RIX -1 Nezahal, Primal Tide|RIX 1 Ripjaw Raptor|XLN 1 Seafloor Oracle|RIX 1 Silvergill Adept|RIX 1 Spell Pierce|XLN -1 Swift Warden|RIX +1 Storm Fleet Spy|XLN +1 Strider Harness|RIX 1 Tendershoot Dryad|RIX -1 The Immortal Sun|RIX +1 Timestream Navigator|RIX 1 Unclaimed Territory|XLN -1 Vanquisher's Banner|XLN 1 Warkite Marauder|RIX +1 Wind Strider|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Kumenas Speaker based deck_11.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Seafloor Oracle - Kumenas Speaker based deck_7.dck similarity index 52% rename from forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Kumenas Speaker based deck_11.dck rename to forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Seafloor Oracle - Kumenas Speaker based deck_7.dck index 801f7417d4f..d5fd79aa296 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Kumena, Tyrant of Orazca - Kumenas Speaker based deck_11.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Seafloor Oracle - Kumenas Speaker based deck_7.dck @@ -1,31 +1,31 @@ [metadata] -Name=Kumena, Tyrant of Orazca - Kumena's Speaker based deck_11 +Name=Seafloor Oracle - Kumena's Speaker based deck_7 [Main] -1 Air Elemental|XLN -1 Aquatic Incursion|RIX -1 Carnage Tyrant|XLN -1 Commune with Dinosaurs|XLN -1 Crashing Tide|RIX +1 Deadeye Quartermaster|XLN 1 Deeproot Elite|RIX 1 Deeproot Waters|XLN -8 Forest|RIX -8 Island|RIX +1 Drover of the Mighty|XLN +1 Fleet Swallower|XLN +1 Flood of Recollection|RIX +7 Forest|RIX +1 Grasping Current|XLN +9 Island|RIX 1 Jade Bearer|RIX +1 Jadecraft Artisan|RIX +1 Jadelight Ranger|RIX 1 Jungleborn Pioneer|RIX 1 Kumena's Speaker|XLN 1 Kumena, Tyrant of Orazca|RIX 1 Merfolk Branchwalker|XLN 1 Merfolk Mistbinder|RIX 1 Mist-Cloaked Herald|RIX -1 Nezahal, Primal Tide|RIX -1 Ripjaw Raptor|XLN 1 River's Rebuke|XLN -1 Savage Stomp|XLN 1 Seafloor Oracle|RIX 1 Silvergill Adept|RIX -1 Snapping Sailback|XLN +1 Siren Lookout|XLN 1 Spell Pierce|XLN -1 Swift Warden|RIX +1 Tendershoot Dryad|RIX +1 Thundering Spineback|XLN 1 Unclaimed Territory|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Kumenas Speaker based deck_7.dck b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Kumenas Speaker based deck_7.dck new file mode 100644 index 00000000000..741cf5b4318 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Azcanta, the Sunken Ruin/Swift Warden - Kumenas Speaker based deck_7.dck @@ -0,0 +1,30 @@ +[metadata] +Name=Swift Warden - Kumena's Speaker based deck_7 +[Main] +1 Deeproot Elite|RIX +1 Deeproot Waters|XLN +1 Depths of Desire|XLN +9 Forest|RIX +1 Golden Guardian|RIX +1 Grasping Current|XLN +1 Hardy Veteran|RIX +8 Island|RIX +1 Jade Bearer|RIX +1 Jadelight Ranger|RIX +1 Jungleborn Pioneer|RIX +1 Kopala, Warden of Waves|XLN +1 Kumena's Speaker|XLN +1 Kumena, Tyrant of Orazca|RIX +1 Merfolk Branchwalker|XLN +1 Merfolk Mistbinder|RIX +1 Mist-Cloaked Herald|RIX +1 Seafloor Oracle|RIX +1 Shadowed Caravel|XLN +1 Silvergill Adept|RIX +1 Soul of the Rapids|RIX +1 Spell Pierce|XLN +1 Swift Warden|RIX +1 Verdant Sun's Avatar|XLN +1 Wildgrowth Walker|XLN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Commune with Dinosaurs based deck_12.dck b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Thunderherd Migration based deck_31.dck similarity index 51% rename from forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Commune with Dinosaurs based deck_12.dck rename to forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Thunderherd Migration based deck_31.dck index 402031551e4..81705c81320 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Commune with Dinosaurs based deck_12.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Gishath, Suns Avatar - Thunderherd Migration based deck_31.dck @@ -1,33 +1,34 @@ [metadata] -Name=Gishath, Sun's Avatar - Commune with Dinosaurs based deck_12 +Name=Gishath, Sun's Avatar - Thunderherd Migration based deck_31 [Main] -1 Atzocan Seer|RIX -1 Bishop of Binding|RIX -1 Captivating Crew|XLN +1 Blight Keeper|XLN 1 Carnage Tyrant|XLN 1 Commune with Dinosaurs|XLN -1 Deathgorge Scavenger|XLN 1 Drover of the Mighty|XLN -8 Forest|RIX -1 Ghalta, Primal Hunger|RIX +7 Forest|RIX 1 Gishath, Sun's Avatar|XLN +1 Gruesome Fate|RIX +1 Hierophant's Chalice|XLN 1 Ixalan's Binding|XLN -1 Mavren Fein, Dusk Apostle|XLN -1 Merfolk Branchwalker|XLN -3 Mountain|RIX -1 Otepec Huntmaster|XLN +2 Mountain|RIX +1 Paladin of Atonement|RIX 4 Plains|RIX +1 Ranging Raptors|XLN +1 Raptor Companion|RIX 1 Regisaur Alpha|XLN 1 Rekindling Phoenix|RIX 1 Ripjaw Raptor|XLN 1 Rootbound Crag|XLN 1 Settle the Wreckage|XLN 1 Sunpetal Grove|XLN -1 Swift Warden|RIX -1 Temple Altisaur|RIX +2 Swamp|RIX 1 Thrashing Brontodon|RIX 1 Thunderherd Migration|RIX -1 Tilonalli's Knight|XLN +1 Thundering Spineback|XLN +1 Vampire's Zeal|XLN +1 Voracious Vampire|RIX +1 Vraska's Contempt|XLN +1 Wayward Swordtooth|RIX 1 Zacama, Primal Calamity|RIX [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Huatli, Warrior Poet - Drover of the Mighty based deck_16.dck b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Huatli, Warrior Poet - Drover of the Mighty based deck_16.dck new file mode 100644 index 00000000000..f7ba128ffa2 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Huatli, Warrior Poet - Drover of the Mighty based deck_16.dck @@ -0,0 +1,34 @@ +[metadata] +Name=Huatli, Warrior Poet - Drover of the Mighty based deck_16 +[Main] +1 Atzocan Archer|XLN +1 Baffling End|RIX +1 Carnage Tyrant|XLN +1 Charging Monstrosaur|XLN +1 Commune with Dinosaurs|XLN +1 Crushing Canopy|XLN +1 Daring Buccaneer|RIX +1 Deathgorge Scavenger|XLN +1 Drover of the Mighty|XLN +1 Fathom Fleet Firebrand|XLN +7 Forest|RIX +1 Ghalta, Primal Hunger|RIX +1 Huatli, Warrior Poet|XLN +1 Kinjalli's Sunwing|XLN +4 Mountain|RIX +1 Otepec Huntmaster|XLN +3 Plains|RIX +1 Prying Blade|XLN +1 Ranging Raptors|XLN +1 Reckless Rage|RIX +1 Regisaur Alpha|XLN +1 Rekindling Phoenix|RIX +1 Ripjaw Raptor|XLN +1 Rootbound Crag|XLN +1 Sun Sentinel|RIX +1 Sunpetal Grove|XLN +1 Thunderherd Migration|RIX +1 Unclaimed Territory|XLN +1 Zetalpa, Primal Dawn|RIX +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Carnage Tyrant based deck_2.dck b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Commune with Dinosaurs based deck_24.dck similarity index 64% rename from forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Carnage Tyrant based deck_2.dck rename to forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Commune with Dinosaurs based deck_24.dck index 51a5f68bf29..01627d81be9 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Carnage Tyrant based deck_2.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Commune with Dinosaurs based deck_24.dck @@ -1,33 +1,32 @@ [metadata] -Name=Savage Stomp - Carnage Tyrant based deck_2 +Name=Otepec Huntmaster - Commune with Dinosaurs based deck_24 [Main] -1 Angrath, the Flame-Chained|RIX -1 Captivating Crew|XLN 1 Carnage Tyrant|XLN 1 Commune with Dinosaurs|XLN 1 Deathgorge Scavenger|XLN -1 Dire Fleet Daredevil|RIX -1 Dire Fleet Neckbreaker|RIX -1 Dire Fleet Poisoner|RIX +1 Deeproot Champion|XLN 1 Drover of the Mighty|XLN 1 Fell Flagship|XLN -1 Forerunner of the Coalition|RIX -8 Forest|RIX +11 Forest|RIX 1 Ghalta, Primal Hunger|RIX +1 Gleaming Barrier|RIX 1 Jadelight Ranger|RIX +1 Lightning Strike|XLN 1 Merfolk Branchwalker|XLN 4 Mountain|RIX 1 Otepec Huntmaster|XLN 1 Ranging Raptors|XLN +1 Ravenous Daggertooth|XLN +1 Reckless Rage|RIX 1 Regisaur Alpha|XLN 1 Rekindling Phoenix|RIX 1 Ripjaw Raptor|XLN 1 Rootbound Crag|XLN 1 Savage Stomp|XLN -3 Swamp|RIX +1 Shadowed Caravel|XLN 1 Thrashing Brontodon|RIX 1 Thunderherd Migration|RIX +1 Trove of Temptation|XLN 1 Unclaimed Territory|XLN -1 Vraska's Contempt|XLN [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Regisaur Alpha - Commune with Dinosaurs based deck_30.dck b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Regisaur Alpha - Commune with Dinosaurs based deck_30.dck new file mode 100644 index 00000000000..08cb159404c --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Regisaur Alpha - Commune with Dinosaurs based deck_30.dck @@ -0,0 +1,31 @@ +[metadata] +Name=Regisaur Alpha - Commune with Dinosaurs based deck_30 +[Main] +1 Carnage Tyrant|XLN +1 Cobbled Wings|XLN +1 Commune with Dinosaurs|XLN +1 Deathgorge Scavenger|XLN +1 Drover of the Mighty|XLN +1 Fanatical Firebrand|RIX +1 Fiery Cannonade|XLN +10 Forest|RIX +1 Ghalta, Primal Hunger|RIX +1 Hierophant's Chalice|XLN +1 Ixalli's Diviner|XLN +1 Merfolk Branchwalker|XLN +6 Mountain|RIX +1 Needletooth Raptor|RIX +1 Otepec Huntmaster|XLN +1 Overgrown Armasaur|RIX +1 Regisaur Alpha|XLN +1 Rekindling Phoenix|RIX +1 Ripjaw Raptor|XLN +1 Rootbound Crag|XLN +1 Sleek Schooner|XLN +1 Storm Fleet Pyromancer|XLN +1 Strider Harness|RIX +1 Swashbuckling|XLN +1 Thrashing Brontodon|RIX +1 Thunderherd Migration|RIX +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Thunderherd Migration based deck_10.dck b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Ghalta, Primal Hunger based deck_2.dck similarity index 62% rename from forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Thunderherd Migration based deck_10.dck rename to forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Ghalta, Primal Hunger based deck_2.dck index cfab4cd408e..64e52755d85 100644 --- a/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Otepec Huntmaster - Thunderherd Migration based deck_10.dck +++ b/forge-gui/res/conquest/planes/Ixalan/Itlimoc, Cradle of the Sun/Savage Stomp - Ghalta, Primal Hunger based deck_2.dck @@ -1,33 +1,32 @@ [metadata] -Name=Otepec Huntmaster - Thunderherd Migration based deck_10 +Name=Savage Stomp - Ghalta, Primal Hunger based deck_2 [Main] 1 Carnage Tyrant|XLN -1 Charging Monstrosaur|XLN +1 Cobbled Wings|XLN 1 Commune with Dinosaurs|XLN 1 Deathgorge Scavenger|XLN -1 Dire Fleet Captain|XLN 1 Drover of the Mighty|XLN -7 Forest|RIX +11 Forest|RIX 1 Ghalta, Primal Hunger|RIX -1 Lightning Strike|XLN +1 Jadelight Ranger|RIX +1 Merfolk Branchwalker|XLN 4 Mountain|RIX +1 Needletooth Raptor|RIX 1 Otepec Huntmaster|XLN -1 Pirate's Cutlass|XLN 1 Ranging Raptors|XLN 1 Reckless Rage|RIX 1 Regisaur Alpha|XLN 1 Rekindling Phoenix|RIX 1 Ripjaw Raptor|XLN 1 Rootbound Crag|XLN -1 Sanctum Seeker|XLN 1 Savage Stomp|XLN -4 Swamp|RIX +1 Sleek Schooner|XLN +1 Storm Fleet Arsonist|XLN 1 Thrashing Brontodon|RIX 1 Thunderherd Migration|RIX +1 Tishana's Wayfinder|XLN +1 Traveler's Amulet|RIX 1 Unclaimed Territory|XLN -1 Vraska's Contempt|XLN -1 Vraska, Relic Seeker|XLN -1 Walk the Plank|XLN 1 Wayward Swordtooth|RIX [Sideboard] diff --git a/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Azor, the Lawbringer - Skymarcher Aspirant based deck_18.dck b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Azor, the Lawbringer - Skymarcher Aspirant based deck_18.dck new file mode 100644 index 00000000000..ed5016cae97 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Azor, the Lawbringer - Skymarcher Aspirant based deck_18.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Azor, the Lawbringer - Skymarcher Aspirant based deck_18 +[Main] +1 Aquatic Incursion|RIX +1 Azor, the Lawbringer|RIX +1 Curious Obsession|RIX +1 Deadeye Tormentor|XLN +1 Desperate Castaways|XLN +1 Dusk Legion Dreadnought|XLN +1 Duskborne Skymarcher|XLN +1 Glacial Fortress|XLN +4 Island|RIX +1 Legion Conquistador|XLN +1 Legion Lieutenant|RIX +1 Legion's Landing|XLN +1 Martyr of Dusk|RIX +1 Mavren Fein, Dusk Apostle|XLN +1 Paladin of Atonement|RIX +1 Pirate's Cutlass|XLN +9 Plains|RIX +1 Pride of Conquerors|RIX +1 Profane Procession|RIX +1 Radiant Destiny|RIX +1 Search for Azcanta|XLN +1 Settle the Wreckage|XLN +1 Shore Keeper|XLN +1 Skyblade of the Legion|XLN +1 Skymarcher Aspirant|RIX +1 Spell Swindle|XLN +2 Swamp|RIX +1 Unclaimed Territory|XLN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Tetzimoc, Primal Death - Commune with Dinosaurs based deck_19.dck b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Tetzimoc, Primal Death - Commune with Dinosaurs based deck_19.dck new file mode 100644 index 00000000000..8672b56f433 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Tetzimoc, Primal Death - Commune with Dinosaurs based deck_19.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Tetzimoc, Primal Death - Commune with Dinosaurs based deck_19 +[Main] +1 Azor's Gateway|RIX +1 Carnage Tyrant|XLN +1 Commune with Dinosaurs|XLN +1 Deathgorge Scavenger|XLN +1 Dragonskull Summit|XLN +1 Drover of the Mighty|XLN +8 Forest|RIX +1 Ghalta, Primal Hunger|RIX +1 Giltgrove Stalker|RIX +1 Jungleborn Pioneer|RIX +1 Merfolk Branchwalker|XLN +3 Mountain|RIX +1 Nest Robber|XLN +1 New Horizons|XLN +1 Reaver Ambush|RIX +1 Regisaur Alpha|XLN +1 Rekindling Phoenix|RIX +1 Ripjaw Raptor|XLN +1 Rootbound Crag|XLN +1 Storm Fleet Pyromancer|XLN +4 Swamp|RIX +1 Tetzimoc, Primal Death|RIX +1 Thrashing Brontodon|RIX +1 Thunderherd Migration|RIX +1 Treasure Map|XLN +1 Vraska's Contempt|XLN +1 Walk the Plank|XLN +1 Wayward Swordtooth|RIX +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Vraska, Relic Seeker - Jadelight Ranger based deck_21.dck b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Vraska, Relic Seeker - Jadelight Ranger based deck_21.dck new file mode 100644 index 00000000000..ac6b94bdb2e --- /dev/null +++ b/forge-gui/res/conquest/planes/Ixalan/Vault of Catlacan/Vraska, Relic Seeker - Jadelight Ranger based deck_21.dck @@ -0,0 +1,35 @@ +[metadata] +Name=Vraska, Relic Seeker - Jadelight Ranger based deck_21 +[Main] +1 Awakened Amalgam|RIX +1 Blight Keeper|XLN +1 Crested Herdcaller|RIX +1 Dead Man's Chest|RIX +1 Deadeye Brawler|RIX +1 Deathgorge Scavenger|XLN +1 Depths of Desire|XLN +1 Dire Fleet Neckbreaker|RIX +1 Drowned Catacomb|XLN +1 Field of Ruin|XLN +6 Forest|RIX +1 Giltgrove Stalker|RIX +1 Goblin Trailblazer|RIX +1 Growing Rites of Itlimoc|XLN +1 Island|RIX +1 Jadelight Ranger|RIX +1 Knight of the Stampede|RIX +1 Mark of the Vampire|XLN +1 Merfolk Branchwalker|XLN +2 Mountain|RIX +1 Old-Growth Dryads|XLN +1 Recover|RIX +1 Rekindling Phoenix|RIX +1 Rootbound Crag|XLN +1 Rummaging Goblin|XLN +1 Snapping Sailback|XLN +5 Swamp|RIX +1 Vraska's Contempt|XLN +1 Vraska's Scorn|RIX +1 Vraska, Relic Seeker|XLN +[Sideboard] + diff --git a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java index 71e7ceb427a..5598e27f71a 100644 --- a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java @@ -571,7 +571,8 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { if (secondKeyCard != null) { possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(secondKeyCard.getName())); } - Iterator iRandomPool = CardRanker.rankCardsInDeck(possibleList.subList(0, targetSize <= possibleList.size() ? targetSize : possibleList.size())).iterator(); + //Iterator iRandomPool = CardRanker.rankCardsInDeck(possibleList.subList(0, targetSize <= possibleList.size() ? targetSize : possibleList.size())).iterator(); + Iterator iRandomPool = possibleList.iterator(); while (deckList.size() < targetSize) { if (logToConsole) { System.out.println("WARNING: Fixing deck size, currently " + deckList.size() + " cards."); @@ -805,7 +806,9 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(secondKeyCard.getName())); } Collections.shuffle(possibleList); - addManaCurveCards(CardRanker.rankCardsInDeck(possibleList.subList(0, targetSize*3 <= possibleList.size() ? targetSize*3 : possibleList.size())), + //addManaCurveCards(CardRanker.rankCardsInDeck(possibleList.subList(0, targetSize*3 <= possibleList.size() ? targetSize*3 : possibleList.size())), + //num, "Random Card"); + addManaCurveCards(possibleList, num, "Random Card"); }