From 4612dbbc59e70ea0216717fd6789463810c20a3e Mon Sep 17 00:00:00 2001 From: austinio7116 Date: Fri, 15 Jun 2018 21:51:26 +0100 Subject: [PATCH] Updated deck generation to include Legacy and Vintage - fixed a few bugs that lead to incorrect land counts and random cards being added. Fixed Snow land issue so Skred red should be more playable. --- .../java/forge/deckchooser/FDeckChooser.java | 10 +++ .../main/java/forge/screens/home/VLobby.java | 2 + .../home/gauntlet/CSubmenuGauntletQuick.java | 2 + .../home/gauntlet/VSubmenuGauntletQuick.java | 8 ++ .../src/forge/deck/FDeckChooser.java | 34 +++++++- .../screens/constructed/LobbyScreen.java | 2 + .../screens/gauntlet/NewGauntletScreen.java | 2 + .../forge/deck/CardArchetypeLDAGenerator.java | 2 + .../src/main/java/forge/deck/DeckType.java | 4 + .../src/main/java/forge/deck/DeckgenUtil.java | 15 +++- .../java/forge/deck/RandomDeckGenerator.java | 8 +- .../java/forge/gauntlet/GauntletUtil.java | 14 ++- .../forge/limited/CardThemedDeckBuilder.java | 85 ++++++++++++++----- .../java/forge/tournament/TournamentUtil.java | 6 ++ 14 files changed, 166 insertions(+), 28 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java index bba6b83c7e7..c6366e97052 100644 --- a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java +++ b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckChooser.java @@ -377,6 +377,16 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { updateMatrix(FModel.getFormats().getModern()); } break; + case LEGACY_CARDGEN_DECK: + if(FModel.isdeckGenMatrixLoaded()) { + updateMatrix(FModel.getFormats().get("Legacy")); + } + break; + case VINTAGE_CARDGEN_DECK: + if(FModel.isdeckGenMatrixLoaded()) { + updateMatrix(FModel.getFormats().get("Vintage")); + } + break; case RANDOM_COMMANDER_DECK: updateRandomCommander(); break; diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java index 296c6bac159..2c0ebc5daf6 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/VLobby.java @@ -250,6 +250,8 @@ public class VLobby implements ILobbyView { switch (selectedDeckType){ case STANDARD_CARDGEN_DECK: case MODERN_CARDGEN_DECK: + case LEGACY_CARDGEN_DECK: + case VINTAGE_CARDGEN_DECK: case COLOR_DECK: case STANDARD_COLOR_DECK: case MODERN_COLOR_DECK: diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java index 0503550b591..01d5ff3856e 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java @@ -73,6 +73,8 @@ public enum CSubmenuGauntletQuick implements ICDoc { if (view.getBoxStandardColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.STANDARD_COLOR_DECK); } if (view.getBoxStandardGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.STANDARD_CARDGEN_DECK); } if (view.getBoxModernGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.MODERN_CARDGEN_DECK); } + if (view.getBoxLegacyGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.LEGACY_CARDGEN_DECK); } + if (view.getBoxVintageGenDecks().isSelected()) { allowedDeckTypes.add(DeckType.VINTAGE_CARDGEN_DECK); } if (view.getBoxModernColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.MODERN_COLOR_DECK); } if (view.getBoxThemeDecks().isSelected()) { allowedDeckTypes.add(DeckType.THEME_DECK); } if (view.getBoxUserDecks().isSelected()) { allowedDeckTypes.add(DeckType.CUSTOM_DECK); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java index 8c14d6d7acd..f6674c97c4c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/VSubmenuGauntletQuick.java @@ -56,6 +56,8 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { private final JCheckBox boxStandardColorDecks = new FCheckBox(DeckType.STANDARD_COLOR_DECK.toString()); private final JCheckBox boxStandardCardgenDecks = new FCheckBox(DeckType.STANDARD_CARDGEN_DECK.toString()); private final JCheckBox boxModernCardgenDecks = new FCheckBox(DeckType.MODERN_CARDGEN_DECK.toString()); + private final JCheckBox boxLegacyCardgenDecks = new FCheckBox(DeckType.LEGACY_CARDGEN_DECK.toString()); + private final JCheckBox boxVintageCardgenDecks = new FCheckBox(DeckType.VINTAGE_CARDGEN_DECK.toString()); private final JCheckBox boxModernColorDecks = new FCheckBox(DeckType.MODERN_COLOR_DECK.toString()); private final JCheckBox boxThemeDecks = new FCheckBox(DeckType.THEME_DECK.toString()); @@ -214,6 +216,12 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { public JCheckBox getBoxModernGenDecks() { return boxModernCardgenDecks; } + public JCheckBox getBoxLegacyGenDecks() { + return boxLegacyCardgenDecks; + } + public JCheckBox getBoxVintageGenDecks() { + return boxVintageCardgenDecks; + } /** @return {@link javax.swing.JCheckBox} */ public JCheckBox getBoxThemeDecks() { diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 3b1f48a7369..74b0729000d 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -147,7 +147,8 @@ public class FDeckChooser extends FScreen { @Override public void handleEvent(FEvent e) { if (selectedDeckType != DeckType.STANDARD_COLOR_DECK && selectedDeckType != DeckType.STANDARD_CARDGEN_DECK - && selectedDeckType != DeckType.MODERN_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK && + && selectedDeckType != DeckType.MODERN_CARDGEN_DECK && selectedDeckType != DeckType.LEGACY_CARDGEN_DECK + && selectedDeckType != DeckType.VINTAGE_CARDGEN_DECK && selectedDeckType != DeckType.MODERN_COLOR_DECK && selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK && selectedDeckType != DeckType.RANDOM_COMMANDER_DECK && selectedDeckType != DeckType.RANDOM_CARDGEN_COMMANDER_DECK) { FDeckViewer.show(getDeck()); @@ -172,6 +173,12 @@ public class FDeckChooser extends FScreen { else if (selectedDeckType == DeckType.MODERN_CARDGEN_DECK){ DeckgenUtil.randomSelect(lstDecks); } + else if (selectedDeckType == DeckType.LEGACY_CARDGEN_DECK){ + DeckgenUtil.randomSelect(lstDecks); + } + else if (selectedDeckType == DeckType.VINTAGE_CARDGEN_DECK){ + DeckgenUtil.randomSelect(lstDecks); + } else { DeckgenUtil.randomSelect(lstDecks); } @@ -280,6 +287,8 @@ public class FDeckChooser extends FScreen { case RANDOM_CARDGEN_COMMANDER_DECK: case RANDOM_COMMANDER_DECK: case MODERN_CARDGEN_DECK: + case LEGACY_CARDGEN_DECK: + case VINTAGE_CARDGEN_DECK: case MODERN_COLOR_DECK: case THEME_DECK: case RANDOM_DECK: @@ -459,6 +468,8 @@ public class FDeckChooser extends FScreen { if(FModel.isdeckGenMatrixLoaded()) { cmbDeckTypes.addItem(DeckType.STANDARD_CARDGEN_DECK); cmbDeckTypes.addItem(DeckType.MODERN_CARDGEN_DECK); + cmbDeckTypes.addItem(DeckType.LEGACY_CARDGEN_DECK); + cmbDeckTypes.addItem(DeckType.VINTAGE_CARDGEN_DECK); } cmbDeckTypes.addItem(DeckType.MODERN_COLOR_DECK); cmbDeckTypes.addItem(DeckType.THEME_DECK); @@ -666,6 +677,23 @@ public class FDeckChooser extends FScreen { } config = ItemManagerConfig.STRING_ONLY; break; + case LEGACY_CARDGEN_DECK: + maxSelections = 1; + pool= new ArrayList<>(); + if(FModel.isdeckGenMatrixLoaded()) { + pool = ArchetypeDeckGenerator.getMatrixDecks(FModel.getFormats().get("Legacy"), isAi); + } + config = ItemManagerConfig.STRING_ONLY; + break; + case VINTAGE_CARDGEN_DECK: + maxSelections = 1; + pool= new ArrayList<>(); + if(FModel.isdeckGenMatrixLoaded()) { + pool = ArchetypeDeckGenerator.getMatrixDecks(FModel.getFormats().get("Vintage"), isAi); + } + config = ItemManagerConfig.STRING_ONLY; + break; + case MODERN_COLOR_DECK: maxSelections = 3; pool = ColorDeckGenerator.getColorDecks(lstDecks, FModel.getFormats().getModern().getFilterPrinted(), isAi); @@ -1013,12 +1041,16 @@ public class FDeckChooser extends FScreen { DeckType.STANDARD_CARDGEN_DECK, DeckType.MODERN_COLOR_DECK, DeckType.MODERN_CARDGEN_DECK, + DeckType.LEGACY_CARDGEN_DECK, + DeckType.VINTAGE_CARDGEN_DECK, DeckType.THEME_DECK, DeckType.NET_DECK ); if (!FModel.isdeckGenMatrixLoaded()) { deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK); deckTypes.remove(DeckType.MODERN_CARDGEN_DECK); + deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK); + deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK); } ListChooser chooser = new ListChooser( diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index b43313c8f98..b659f340e07 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -432,6 +432,8 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { switch (selectedDeckType){ case STANDARD_CARDGEN_DECK: case MODERN_CARDGEN_DECK: + case LEGACY_CARDGEN_DECK: + case VINTAGE_CARDGEN_DECK: case COLOR_DECK: case STANDARD_COLOR_DECK: case MODERN_COLOR_DECK: diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java index ec53b6184ca..5bc8e293ca5 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java @@ -91,6 +91,8 @@ public class NewGauntletScreen extends LaunchScreen { DeckType.STANDARD_CARDGEN_DECK, DeckType.MODERN_COLOR_DECK, DeckType.MODERN_CARDGEN_DECK, + DeckType.LEGACY_CARDGEN_DECK, + DeckType.VINTAGE_CARDGEN_DECK, DeckType.THEME_DECK }), null, new Callback>() { @Override diff --git a/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java b/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java index 2c98efa511b..31172dae50c 100644 --- a/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CardArchetypeLDAGenerator.java @@ -23,6 +23,8 @@ public final class CardArchetypeLDAGenerator { List formatStrings = new ArrayList<>(); formatStrings.add(FModel.getFormats().getStandard().getName()); formatStrings.add(FModel.getFormats().getModern().getName()); + formatStrings.add("Legacy"); + formatStrings.add("Vintage"); for (String formatString : formatStrings){ if(!initializeFormat(formatString)){ diff --git a/forge-gui/src/main/java/forge/deck/DeckType.java b/forge-gui/src/main/java/forge/deck/DeckType.java index 7c9f67d1be0..1d8f6995276 100644 --- a/forge-gui/src/main/java/forge/deck/DeckType.java +++ b/forge-gui/src/main/java/forge/deck/DeckType.java @@ -19,6 +19,8 @@ public enum DeckType { COLOR_DECK ("Random Color Decks"), STANDARD_CARDGEN_DECK ("Random Standard Archetype Decks"), MODERN_CARDGEN_DECK ("Random Modern Archetype Decks"), + LEGACY_CARDGEN_DECK ("Random Legacy Archetype Decks"), + VINTAGE_CARDGEN_DECK ("Random Vintage Archetype Decks"), STANDARD_COLOR_DECK ("Random Standard Color Decks"), MODERN_COLOR_DECK ("Random Modern Color Decks"), THEME_DECK ("Random Theme Decks"), @@ -38,6 +40,8 @@ public enum DeckType { DeckType.COLOR_DECK, DeckType.STANDARD_CARDGEN_DECK, DeckType.MODERN_CARDGEN_DECK, + DeckType.LEGACY_CARDGEN_DECK, + DeckType.VINTAGE_CARDGEN_DECK, DeckType.STANDARD_COLOR_DECK, DeckType.MODERN_COLOR_DECK, DeckType.THEME_DECK, diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index 361e67673f0..128f5213d37 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -233,17 +233,22 @@ public class DeckgenUtil { PaperCard card = null; for(Pair pair : preSelectedCardNames){ card = StaticData.instance().getCommonCards().getUniqueByName(pair.getLeft()); - if(!card.getRules().getType().isLand()){ + if(card != null &&!card.getRules().getType().isLand()){ break; } } List selectedCards = new ArrayList<>(); + int cardCount=0; for(Pair pair:preSelectedCardNames){ String name = pair.getLeft(); PaperCard cardToAdd = StaticData.instance().getCommonCards().getUniqueByName(name); //for(int i=0; i<1;++i) { - if(!cardToAdd.getName().equals(card.getName())) { + if(cardToAdd != null && !cardToAdd.getName().equals(card.getName())) { selectedCards.add(cardToAdd); + cardCount++; + } + if(cardCount>120){// no need to have more than this + break; } //} } @@ -276,7 +281,13 @@ public class DeckgenUtil { for(int j=0;j restrictedCardsAdded = new ArrayList<>(); for (PaperCard c:selectedCards){ + if (format.getRestrictedCards().contains(c.getName())&&!restrictedCardsAdded.contains(c)){ + playsetList.add(c); + restrictedCardsAdded.add(c.getName()); + continue; + } for(int j=0;j<4;++j) { if(MyRandom.getRandom().nextInt(100)<90) { playsetList.add(c); diff --git a/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java index 986e3e41779..5b377c50d53 100644 --- a/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java +++ b/forge-gui/src/main/java/forge/deck/RandomDeckGenerator.java @@ -101,9 +101,13 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable(); count = Aggregates.randomInt(1, 3); diff --git a/forge-gui/src/main/java/forge/gauntlet/GauntletUtil.java b/forge-gui/src/main/java/forge/gauntlet/GauntletUtil.java index 0b4a7bc8c9d..46d73a1552d 100644 --- a/forge-gui/src/main/java/forge/gauntlet/GauntletUtil.java +++ b/forge-gui/src/main/java/forge/gauntlet/GauntletUtil.java @@ -34,11 +34,17 @@ public class GauntletUtil { deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getStandard().getFilterPrinted(),true); break; case STANDARD_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true); + break; case MODERN_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),true); + break; + case LEGACY_CARDGEN_DECK: + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Legacy"),true); + break; + case VINTAGE_CARDGEN_DECK: + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Vintage"),true); + break; case MODERN_COLOR_DECK: deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getModern().getFilterPrinted(),true); break; diff --git a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java index 7cf70f62dab..69beb21aa3c 100644 --- a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java @@ -57,11 +57,11 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // Views for aiPlayable protected Iterable onColorCreaturesAndSpells; - protected Iterable keyCards; protected static final boolean logToConsole = false; protected static final boolean logColorsToConsole = false; + protected Iterable keyCards; protected Map targetCMCs; @@ -192,7 +192,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // 3. Add creatures, trying to follow mana curve numSpellsNeeded = numSpellsNeeded - deckList.size(); //subtract keycard count - addManaCurveCards(onColorCreaturesAndSpells, numSpellsNeeded , "Creatures and Spells"); + addManaCurveCards(onColorCreaturesAndSpells, numSpellsNeeded, "Creatures and Spells"); if (logToConsole) { System.out.println("Post Creatures and Spells : " + deckList.size()); } @@ -205,20 +205,20 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // 5. If there are still on-color cards, and the average cmc is low, add // extras. - double avCMC=getAverageCMC(deckList); - int maxCMC=getMaxCMC(deckList); + double avCMC = getAverageCMC(deckList); + int maxCMC = getMaxCMC(deckList); if (avCMC < 4) { addLowCMCCard(); - if(targetSize>60){ + if (targetSize > 60) { addLowCMCCard(); } } - if (avCMC < 3 && maxCMC<6) { + if (avCMC < 3 && maxCMC < 6) { addLowCMCCard(); } - if (avCMC < 2.5 && maxCMC<5) { + if (avCMC < 2.5 && maxCMC < 5) { addLowCMCCard(); - if(targetSize>60){ + if (targetSize > 60) { addLowCMCCard(); } } @@ -237,8 +237,15 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // 7. If there are still less than 22 non-land cards add off-color // cards. This should be avoided. int stillNeeds = numSpellsNeeded - deckList.size(); - if(stillNeeds>0) + if (stillNeeds > 0) + addCards(onColorCreaturesAndSpells, stillNeeds); + stillNeeds = numSpellsNeeded - deckList.size(); + if (stillNeeds > 0) + extendPlaysets(stillNeeds); + stillNeeds = numSpellsNeeded - deckList.size(); + if (stillNeeds > 0) addRandomCards(stillNeeds); + if (logToConsole) { System.out.println("Post Randoms : " + deckList.size()); } @@ -307,6 +314,31 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { } + protected void extendPlaysets(int numSpellsNeeded){ + Map currentCounts = new HashMap<>(); + List cardsToAdd = new ArrayList<>(); + int i=0; + for(PaperCard card: deckList){ + if(currentCounts.containsKey(card)){ + currentCounts.put(card, currentCounts.get(card) + 1); + }else{ + currentCounts.put(card, 1); + } + } + for(PaperCard card: currentCounts.keySet()){ + if(currentCounts.get(card)==2 || currentCounts.get(card)==3){ + cardsToAdd.add(card); + ++i; + if(i >= numSpellsNeeded ){ + break; + } + } + } + deckList.addAll(cardsToAdd); + aiPlayables.removeAll(cardsToAdd); + rankedColorList.removeAll(cardsToAdd); + } + protected void generateTargetCMCs(){ targetCMCs = new HashMap<>(); targetCMCs.put(1,Math.round((MyRandom.getRandom().nextInt(12)+4)*targetSize/60));//10 @@ -543,6 +575,16 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { return; } + int stillNeeds = targetSize - deckList.size(); + if (stillNeeds > 0) + addCards(onColorCreaturesAndSpells, stillNeeds); + stillNeeds = targetSize - deckList.size(); + if (stillNeeds > 0) + extendPlaysets(stillNeeds); + stillNeeds = targetSize - deckList.size(); + if (stillNeeds == 0) + return; + Predicate possibleFromFullPool = new Predicate() { final Set deckListNames = getDeckListNames(); @Override @@ -603,7 +645,6 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { private void addLands(final int[] clrCnts) { // basic lands that are available in the deck final Iterable basicLands = Iterables.filter(aiPlayables, Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard.FN_GET_RULES)); - final Set snowLands = new HashSet(); // total of all ClrCnts int totalColor = 0; @@ -617,8 +658,12 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { // add one of each land required first so that any rounding errors do not remove the only land of a colour for (int i = 0; i < 5; i++) { if (clrCnts[i] > 0) { - deckList.add(getBasicLand(i)); - landsNeeded--; + float p = (float) clrCnts[i] / (float) totalColor; + int nLand = Math.round(landsNeeded * p); // desired truncation to int + if(nLand >0) { + deckList.add(getBasicLand(i)); + landsNeeded--; + } } } @@ -634,16 +679,21 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { System.out.printf("Basics[%s]: %d/%d = %f%% = %d cards%n", MagicColor.Constant.BASIC_LANDS.get(i), clrCnts[i], totalColor, 100*p, nLand); } + PaperCard snowLand = null; // if appropriate snow-covered lands are available, add them for (final PaperCard cp : basicLands) { if (cp.getName().equals(MagicColor.Constant.SNOW_LANDS.get(i))) { - snowLands.add(cp); - nLand--; + snowLand = cp; + break; } } for (int j = 0; j < nLand; j++) { - deckList.add(getBasicLand(i)); + if(snowLand!=null){ + deckList.add(snowLand); + }else { + deckList.add(getBasicLand(i)); + } } } } @@ -656,9 +706,6 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { deckList.remove(deckList.size() - 1); } - deckList.addAll(snowLands); - aiPlayables.removeAll(snowLands); - rankedColorList.removeAll(snowLands); } /** @@ -849,7 +896,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { if(card.getRules().getMainPart().getType().isLand()){ continue; } - if (num +1 > 0) { + if (num > 0) { cardsToAdd.add(card); if (logToConsole) { System.out.println("Extra needed[" + num + "]:" + card.getName() + " (" + card.getRules().getManaCost() + ")"); diff --git a/forge-gui/src/main/java/forge/tournament/TournamentUtil.java b/forge-gui/src/main/java/forge/tournament/TournamentUtil.java index f3d737d7528..5176fb8856b 100644 --- a/forge-gui/src/main/java/forge/tournament/TournamentUtil.java +++ b/forge-gui/src/main/java/forge/tournament/TournamentUtil.java @@ -39,6 +39,12 @@ public class TournamentUtil { case MODERN_CARDGEN_DECK: deck = DeckgenUtil.buildCardGenDeck(FModel.getFormats().getModern(),true); break; + case LEGACY_CARDGEN_DECK: + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Legacy"),true); + break; + case VINTAGE_CARDGEN_DECK: + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Vintage"),true); + break; case MODERN_COLOR_DECK: deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getModern().getFilterPrinted(),true); break;