- Moved Commander to Constructed match setup.

- Variants menu removed
This commit is contained in:
moomarc
2014-02-20 17:04:13 +00:00
parent 8edd870602
commit 3b571cb7ec
10 changed files with 187 additions and 50 deletions

View File

@@ -21,6 +21,7 @@ import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import forge.GameCommand;
import forge.card.CardCharacteristicName;
import forge.card.CardType;
@@ -1481,7 +1482,7 @@ public class GameAction {
p1.drawCards(p1.getMaxHandSize());
}
performMulligans(first, gameType == GameType.Commander);
performMulligans(first, game.getRules().hasAppliedVariant(GameType.Commander));
if (game.isGameOver()) { break; } // conceded during "mulligan" prompt
game.setAge(GameStage.Play);

View File

@@ -71,7 +71,7 @@ public class CostAddMana extends CostPart {
Card source = sa.getHostCard();
ColorSet cid = null;
if (ai.getGame().getRules().getGameType() == GameType.Commander) {
if (ai.getGame().getRules().hasAppliedVariant(GameType.Commander)) {
cid = ai.getCommander().getRules().getColorIdentity();
}
ArrayList<Mana> manaProduced = new ArrayList<Mana>();

View File

@@ -21,6 +21,7 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import forge.card.MagicColor;
import forge.card.mana.ManaCost;
import forge.game.*;
@@ -2112,8 +2113,7 @@ public class Player extends GameEntity implements Comparable<Player> {
return this.loseConditionMet(GameLossReason.Poisoned, null);
}
if(game.getRules().getGameType() == GameType.Commander)
{
if (game.getRules().hasAppliedVariant(GameType.Commander)) {
Map<Card,Integer> cmdDmg = getCommanderDamage();
for(Card c : cmdDmg.keySet())
{

View File

@@ -130,7 +130,7 @@ public class AbilityManaPart implements java.io.Serializable {
}
ColorSet CID = null;
if (player.getGame().getRules().getGameType() == GameType.Commander) {
if (player.getGame().getRules().hasAppliedVariant(GameType.Commander)) {
CID = player.getCommander().getRules().getColorIdentity();
}
//clear lastProduced

View File

@@ -1,11 +1,17 @@
package forge.gui.deckchooser;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import forge.Singletons;
import forge.card.CardDb;
import forge.card.CardRules;
import forge.card.CardRulesPredicates;
import forge.card.ColorSet;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.deck.generation.*;
import forge.gui.toolbox.FOptionPane;
import forge.gui.toolbox.itemmanager.DeckManager;
@@ -80,7 +86,6 @@ public class DeckgenUtil {
return deck;
}
public static QuestEvent getQuestEvent(final String name) {
QuestController qCtrl = Singletons.getModel().getQuest();
for (QuestEventChallenge challenge : qCtrl.getChallenges()) {
@@ -247,4 +252,44 @@ public class DeckgenUtil {
return res;
}
/** Generate a 2-color Commander deck. */
public static Deck generateCommanderDeck(boolean forAi) {
final Deck deck;
CardDb cardDb = Singletons.getMagicDb().getCommonCards();
PaperCard commander;
ColorSet colorID;
// Get random multicolor Legendary creature
Predicate<CardRules> canPlay = forAi ? DeckGeneratorBase.AI_CAN_PLAY : DeckGeneratorBase.HUMAN_CAN_PLAY;
Iterable<PaperCard> legends = cardDb.getAllCards(Predicates.compose(Predicates.and
(CardRulesPredicates.Presets.IS_CREATURE, CardRulesPredicates.Presets.IS_LEGENDARY), PaperCard.FN_GET_RULES));
legends = Iterables.filter(legends, Predicates.compose(Predicates.and
(CardRulesPredicates.Presets.IS_MULTICOLOR, canPlay), PaperCard.FN_GET_RULES));
do {
commander = Aggregates.random(legends);
colorID = commander.getRules().getColorIdentity();
} while (colorID.countColors() != 2);
List<String> comColors = new ArrayList<String>(2);
if (colorID.hasWhite()) { comColors.add("White"); }
if (colorID.hasBlue()) { comColors.add("Blue"); }
if (colorID.hasBlack()) { comColors.add("Black"); }
if (colorID.hasRed()) { comColors.add("Red"); }
if (colorID.hasGreen()) { comColors.add("Green"); }
DeckGeneratorBase gen = null;
gen = new DeckGenerator2Color(cardDb, comColors.get(0), comColors.get(1));
gen.setSingleton(true);
gen.setUseArtifacts(Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
CardPool cards = gen == null ? null : gen.getDeck(60, forAi);
// After generating card lists, build deck.
deck = new Deck("Generated Commander deck (" + commander.getName() + ")");
deck.getMain().addAll(cards);
deck.getOrCreate(DeckSection.Commander).add(commander);
return deck;
}
}

View File

@@ -16,7 +16,6 @@ import forge.gui.home.settings.VSubmenuAvatars;
import forge.gui.home.settings.VSubmenuDownloaders;
import forge.gui.home.settings.VSubmenuPreferences;
import forge.gui.home.settings.VSubmenuReleaseNotes;
import forge.gui.home.variant.VSubmenuCommander;
import forge.gui.match.views.*;
import forge.gui.workshop.views.VCardDesigner;
import forge.gui.workshop.views.VCardScript;
@@ -53,7 +52,6 @@ public enum EDocID { /** */
HOME_GAUNTLETLOAD (VSubmenuGauntletLoad.SINGLETON_INSTANCE), /** */
HOME_GAUNTLETQUICK (VSubmenuGauntletQuick.SINGLETON_INSTANCE), /** */
HOME_GAUNTLETCONTESTS (VSubmenuGauntletContests.SINGLETON_INSTANCE), /** */
HOME_COMMANDER (VSubmenuCommander.SINGLETON_INSTANCE), /** */
HOME_PREFERENCES (VSubmenuPreferences.SINGLETON_INSTANCE), /** */
HOME_AVATARS (VSubmenuAvatars.SINGLETON_INSTANCE), /** */
HOME_UTILITIES (VSubmenuDownloaders.SINGLETON_INSTANCE), /** */

View File

@@ -11,7 +11,6 @@ public enum EMenuGroup { /** */
SANCTIONED ("Sanctioned Formats"), /** */
QUEST ("Quest Mode"), /** */
GAUNTLET ("Gauntlets"), /** */
VARIANT ("Variant"), /** */
SETTINGS ("Game Settings");
private final String strTitle;

View File

@@ -31,7 +31,6 @@ import forge.gui.home.settings.VSubmenuAvatars;
import forge.gui.home.settings.VSubmenuDownloaders;
import forge.gui.home.settings.VSubmenuPreferences;
import forge.gui.home.settings.VSubmenuReleaseNotes;
import forge.gui.home.variant.VSubmenuCommander;
import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FScrollPanel;
import forge.gui.toolbox.FSkin;
@@ -130,8 +129,6 @@ public enum VHomeUI implements IVTopLevelUI {
allSubmenus.add(VSubmenuDownloaders.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuReleaseNotes.SINGLETON_INSTANCE);
allSubmenus.add(VSubmenuCommander.SINGLETON_INSTANCE);
// For each group: init its panel
final SortedMap<EMenuGroup, JPanel> allGroupPanels = new TreeMap<EMenuGroup, JPanel>();
for (final EMenuGroup e : EMenuGroup.values()) {

View File

@@ -1,7 +1,5 @@
package forge.gui.home.sanctioned;
import com.google.common.collect.Iterables;
import forge.UiCommand;
import forge.Singletons;
import forge.deck.CardPool;
@@ -62,11 +60,32 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
@Override public void run() {
final CardCollections cColl = Singletons.getModel().getDecks();
FList<Object> deckList;
Vector<Object> listData;
Object val;
for (int i = 0; i < 8; i++) {
// Commander: reinit deck list and restore last selections (if any)
deckList = view.getCommanderDeckLists().get(i);
listData = new Vector<Object>();
listData.add("Generate");
if (cColl.getCommander().size() > 0) {
listData.add("Random");
for (Deck comDeck : cColl.getCommander()) {
listData.add(comDeck);
}
}
val = deckList.getSelectedValue();
deckList.setListData(listData);
if (null != val) {
deckList.setSelectedValue(val, true);
}
if (-1 == deckList.getSelectedIndex()) {
deckList.setSelectedIndex(0);
} // End Commander
// Archenemy: reinit deck list and restore last selections (if any)
deckList = view.getSchemeDeckLists().get(i);
Vector<Object> listData = new Vector<Object>();
listData = new Vector<Object>();
listData.add("Use deck's scheme section (random if unavailable)");
listData.add("Generate");
if (cColl.getScheme().size() > 0) {
@@ -75,7 +94,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
listData.add(schemeDeck);
}
}
Object val = deckList.getSelectedValue();
val = deckList.getSelectedValue();
deckList.setListData(listData);
if (null != val) {
deckList.setSelectedValue(val, true);
@@ -166,12 +185,6 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
/** Starts a match with the applied variants. */
private void startGame(final List<GameType> variantTypes) {
if (variantTypes.contains(GameType.Commander)) {
FOptionPane.showMessageDialog("Commander matches cannot currently be started via the "
+ "Constructed match setup screen. Please this variant then restart the match");
return;
}
if (!view.isEnoughTeams()) {
FOptionPane.showMessageDialog("There are not enough teams! Please adjust team allocations.");
return;
@@ -185,7 +198,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
} // Is it even possible anymore? I think current implementation assigns decks automatically.
boolean checkLegality = Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY);
if (checkLegality) {
if (checkLegality && !variantTypes.contains(GameType.Commander)) { //Commander deck replaces regular deck and is checked later
for (final int i : view.getParticipants()) {
String name = view.getPlayerName(i);
String errMsg = GameType.Constructed.getDecksFormat().getDeckConformanceProblem(view.getDeckChooser(i).getPlayer().getDeck());
@@ -201,20 +214,44 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
for (final int i : view.getParticipants()) {
String name = view.getPlayerName(i);
LobbyPlayer lobbyPlayer = view.isPlayerAI(i) ? lobby.getAiPlayer(name,
view.getPlayerAvatar(i)) : lobby.getGuiPlayer();
RegisteredPlayer rp = view.getDeckChooser(i).getPlayer();
view.getPlayerAvatar(i)) : lobby.getGuiPlayer();
RegisteredPlayer rp = view.getDeckChooser(i).getPlayer();
if (variantTypes.isEmpty()) {
rp.setTeamNumber(view.getTeam(i));
players.add(rp.setPlayer(lobbyPlayer));
} else {
// Initialise Variant variables
Deck deck = rp.getDeck();
if (variantTypes.isEmpty()) {
rp.setTeamNumber(view.getTeam(i));
players.add(rp.setPlayer(lobbyPlayer));
} else {
Deck deck = null;
boolean isCommanderMatch = variantTypes.contains(GameType.Commander);
if (isCommanderMatch) {
Object selected = view.getCommanderDeckLists().get(i).getSelectedValue();
if (selected instanceof String) {
String sel = (String) selected;
IStorage<Deck> comDecks = Singletons.getModel().getDecks().getCommander();
if (sel.equals("Random") && comDecks.size() > 0) {
deck = Aggregates.random(comDecks);
}
} else {
deck = (Deck) selected;
}
if (deck == null) { //Can be null if player deselects the list selection or chose Generate
deck = DeckgenUtil.generateCommanderDeck(view.isPlayerAI(i));
}
if (checkLegality) {
String errMsg = GameType.Commander.getDecksFormat().getDeckConformanceProblem(deck);
if (null != errMsg) {
FOptionPane.showErrorDialog(name + "'s deck " + errMsg, "Invalid Commander Deck");
return;
}
}
}
// Initialise variables for other variants
deck = deck == null ? rp.getDeck() : deck;
Iterable<PaperCard> schemes = null;
boolean playerIsArchenemy = view.isPlayerArchenemy(i);
Iterable<PaperCard> planes = null;
PaperCard vanguardAvatar = null;
Random randomSeed = new Random();
//Archenemy
if (variantTypes.contains(GameType.ArchenemyRumble)
@@ -292,9 +329,9 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
vanguardAvatar = deck.get(DeckSection.Avatar).get(0);
} else { //Only other string is "Random"
if (!view.isPlayerAI(i)) { //Human
vanguardAvatar = Iterables.get(view.getAllAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomHumanAvatars())));
vanguardAvatar = Aggregates.random(view.getNonRandomHumanAvatars());
} else { //AI
vanguardAvatar = Iterables.get(view.getAllAiAvatars(), randomSeed.nextInt(Iterables.size(view.getNonRandomAiAvatars())));
vanguardAvatar = Aggregates.random(view.getNonRandomAiAvatars());
}
}
} else {
@@ -307,7 +344,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
}
}
rp = RegisteredPlayer.forVariants(variantTypes, rp.getDeck(), schemes, playerIsArchenemy, planes, vanguardAvatar);
rp = RegisteredPlayer.forVariants(variantTypes, deck, schemes, playerIsArchenemy, planes, vanguardAvatar);
rp.setTeamNumber(view.getTeam(i));
players.add(rp.setPlayer(lobbyPlayer));
}

View File

@@ -15,6 +15,7 @@ import forge.gui.deckchooser.FDeckChooser;
import forge.gui.deckchooser.IDecksComboBoxListener;
import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.DeckProxy;
import forge.gui.deckeditor.controllers.CEditorCommander;
import forge.gui.deckeditor.controllers.CEditorVariant;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
@@ -103,6 +104,9 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private final List<FPanel> schemeDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
private int lastArchenemy = 0;
private final List<FList<Object>> commanderDeckLists = new ArrayList<FList<Object>>();
private final List<FPanel> commanderDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
private final List<FList<Object>> planarDeckLists = new ArrayList<FList<Object>>();
private final List<FPanel> planarDeckPanels = new ArrayList<FPanel>(MAX_PLAYERS);
@@ -126,7 +130,6 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
// Populate and add variants panel
vntVanguard.addItemListener(iListenerVariants);
vntCommander.addItemListener(iListenerVariants);
vntCommander.setEnabled(false);
vntPlanechase.addItemListener(iListenerVariants);
vntArchenemy.addItemListener(iListenerVariants);
comboArchenemy.setSelectedIndex(0);
@@ -277,6 +280,20 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
schemeDeckLists.add(schemeDeckList);
schemeDeckPanels.add(schemeDeckPanel);
// Commander deck list
FPanel commanderDeckPanel = new FPanel();
commanderDeckPanel.setBorderToggle(false);
commanderDeckPanel.setLayout(new MigLayout(sectionConstraints));
commanderDeckPanel.add(new FLabel.Builder().text("Select Commander deck:").build(), labelConstraints);
FList<Object> commanderDeckList = new FList<Object>();
commanderDeckList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
FScrollPane scrCommander = new FScrollPane(commanderDeckList, true,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
commanderDeckPanel.add(scrCommander, "grow, push");
commanderDeckLists.add(commanderDeckList);
commanderDeckPanels.add(commanderDeckPanel);
// Planar deck list
FPanel planarDeckPanel = new FPanel();
planarDeckPanel.setBorderToggle(false);
@@ -338,6 +355,9 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
populateDeckPanel(GameType.Constructed);
}
}
else if (GameType.Commander == forGameType) {
decksFrame.add(commanderDeckPanels.get(playerWithFocus), "grow, push");
}
else if (GameType.Planechase == forGameType) {
decksFrame.add(planarDeckPanels.get(playerWithFocus), "grow, push");
}
@@ -465,6 +485,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private FComboBoxWrapper<Object> aeTeamComboBox = new FComboBoxWrapper<Object>();
private final FLabel deckBtn = new FLabel.ButtonBuilder().text("Select a deck").build();
private final FLabel deckLabel = newLabel("Deck:");
private final String variantBtnConstraints = "height 30px, hidemode 3";
@@ -473,6 +494,10 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private final FLabel scmDeckEditor = new FLabel.ButtonBuilder().text("Scheme Deck Editor").build();
private final FLabel scmLabel = newLabel("Scheme deck:");
private final FLabel cmdDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a Commander deck").build();
private final FLabel cmdDeckEditor = new FLabel.ButtonBuilder().text("Commander Deck Editor").build();
private final FLabel cmdLabel = newLabel("Commander deck:");
private final FLabel pchDeckSelectorBtn = new FLabel.ButtonBuilder().text("Select a planar deck").build();
private final FLabel pchDeckEditor = new FLabel.ButtonBuilder().text("Planar Deck Editor").build();
private final FLabel pchLabel = newLabel("Planar deck:");
@@ -511,24 +536,28 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
populateTeamsComboBoxes();
teamComboBox.addActionListener(teamListener);
aeTeamComboBox.addActionListener(teamListener);
teamComboBox.addTo(this, "h 30px, pushx, growx, gaptop 5px, hidemode 3");
aeTeamComboBox.addTo(this, "h 30px, pushx, growx, gaptop 5px, hidemode 3");
teamComboBox.addTo(this, variantBtnConstraints + ", pushx, growx, gaptop 5px");
aeTeamComboBox.addTo(this, variantBtnConstraints + ", pushx, growx, gaptop 5px");
this.add(newLabel("Deck:"), variantBtnConstraints + ", cell 0 2, sx 2, ax right");
this.add(deckLabel, variantBtnConstraints + ", cell 0 2, sx 2, ax right");
this.add(deckBtn, variantBtnConstraints + ", cell 2 2, pushx, growx, wmax 100%-153px, h 30px, spanx 4, wrap");
addHandlersDeckSelector();
this.add(scmLabel, variantBtnConstraints + ", cell 0 3, sx 2, ax right");
this.add(scmDeckSelectorBtn, variantBtnConstraints + ", cell 2 3, growx, pushx");
this.add(scmDeckEditor, variantBtnConstraints + ", cell 3 3, sx 3, growx, wrap");
this.add(cmdLabel, variantBtnConstraints + ", cell 0 3, sx 2, ax right");
this.add(cmdDeckSelectorBtn, variantBtnConstraints + ", cell 2 3, growx, pushx");
this.add(cmdDeckEditor, variantBtnConstraints + ", cell 3 3, sx 3, growx, wrap");
this.add(pchLabel, variantBtnConstraints + ", cell 0 4, sx 2, ax right");
this.add(pchDeckSelectorBtn, variantBtnConstraints + ", cell 2 4, growx, pushx");
this.add(pchDeckEditor, variantBtnConstraints + ", cell 3 4, sx 3, growx, wrap");
this.add(scmLabel, variantBtnConstraints + ", cell 0 4, sx 2, ax right");
this.add(scmDeckSelectorBtn, variantBtnConstraints + ", cell 2 4, growx, pushx");
this.add(scmDeckEditor, variantBtnConstraints + ", cell 3 4, sx 3, growx, wrap");
this.add(vgdLabel, variantBtnConstraints + ", cell 0 5, sx 2, ax right");
this.add(vgdSelectorBtn, variantBtnConstraints + ", cell 2 5, sx 4, growx, wrap");
this.add(pchLabel, variantBtnConstraints + ", cell 0 5, sx 2, ax right");
this.add(pchDeckSelectorBtn, variantBtnConstraints + ", cell 2 5, growx, pushx");
this.add(pchDeckEditor, variantBtnConstraints + ", cell 3 5, sx 3, growx, wrap");
this.add(vgdLabel, variantBtnConstraints + ", cell 0 6, sx 2, ax right");
this.add(vgdSelectorBtn, variantBtnConstraints + ", cell 2 6, sx 4, growx, wrap");
addHandlersToVariantsControls();
updateVariantControlsVisibility();
@@ -613,7 +642,14 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
};
public void updateVariantControlsVisibility() {
boolean archenemyVisiblity = appliedVariants.contains(GameType.ArchenemyRumble)
// Commander deck replaces basic deck, so hide that
deckLabel.setVisible(!appliedVariants.contains(GameType.Commander));
deckBtn.setVisible(!appliedVariants.contains(GameType.Commander));
cmdDeckSelectorBtn.setVisible(appliedVariants.contains(GameType.Commander));
cmdDeckEditor.setVisible(appliedVariants.contains(GameType.Commander));
cmdLabel.setVisible(appliedVariants.contains(GameType.Commander));
boolean archenemyVisiblity = appliedVariants.contains(GameType.ArchenemyRumble)
|| (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy);
scmDeckSelectorBtn.setVisible(archenemyVisiblity);
scmDeckEditor.setVisible(archenemyVisiblity);
@@ -736,7 +772,26 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_PLANECHASE));
new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_PLANECHASE));
}
});
// Commander buttons
cmdDeckSelectorBtn.setCommand(new Runnable() {
@Override
public void run() {
currentGameMode = GameType.Commander;
cmdDeckSelectorBtn.requestFocusInWindow();
changePlayerFocus(index, currentGameMode);
}
});
cmdDeckEditor.setCommand(new UiCommand() {
@Override
public void run() {
currentGameMode = GameType.Commander;
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander());
}
});
@@ -1203,7 +1258,12 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
return planarDeckLists;
}
/** Gets the list of planar deck lists. */
/** Gets the list of commander deck lists. */
public List<FList<Object>> getCommanderDeckLists() {
return commanderDeckLists;
}
/** Gets the list of scheme deck lists. */
public List<FList<Object>> getSchemeDeckLists() {
return schemeDeckLists;
}